"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[311],{6723:(e,t,o)=>{o.d(t,{Z:()=>y});var r=o(3366),n=o(7462),i=o(7294),a=o(9766),s=o(4780),l=o(8543),d=o(948),u=o(1657),c=o(1588),p=o(4867),m=o(5827);function f(e){return(0,p.Z)("MuiFilledInput",e)}const h=(0,n.Z)({},m.Z,(0,c.Z)("MuiFilledInput",["root","underline","input"]));var v=o(5893);const b=["disableUnderline","components","componentsProps","fullWidth","hiddenLabel","inputComponent","multiline","slotProps","slots","type"],g=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiFilledInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.Gx)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{var o;const r="light"===e.palette.mode,i=r?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)",a=r?"rgba(0, 0, 0, 0.06)":"rgba(255, 255, 255, 0.09)",s=r?"rgba(0, 0, 0, 0.09)":"rgba(255, 255, 255, 0.13)",l=r?"rgba(0, 0, 0, 0.12)":"rgba(255, 255, 255, 0.12)";return(0,n.Z)({position:"relative",backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a,borderTopLeftRadius:(e.vars||e).shape.borderRadius,borderTopRightRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),"&:hover":{backgroundColor:e.vars?e.vars.palette.FilledInput.hoverBg:s,"@media (hover: none)":{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a}},[`&.${h.focused}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.bg:a},[`&.${h.disabled}`]:{backgroundColor:e.vars?e.vars.palette.FilledInput.disabledBg:l}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${null==(o=(e.vars||e).palette[t.color||"primary"])?void 0:o.main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.error}`]:{"&:before, &:after":{borderBottomColor:(e.vars||e).palette.error.main}},"&:before":{borderBottom:`1px solid ${e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`:i}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${h.disabled}, .${h.error}):before`]:{borderBottom:`1px solid ${(e.vars||e).palette.text.primary}`},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}},t.startAdornment&&{paddingLeft:12},t.endAdornment&&{paddingRight:12},t.multiline&&(0,n.Z)({padding:"25px 12px 8px"},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9}))})),Z=(0,d.ZP)(l.rA,{name:"MuiFilledInput",slot:"Input",overridesResolver:l._o})((({theme:e,ownerState:t})=>(0,n.Z)({paddingTop:25,paddingRight:12,paddingBottom:8,paddingLeft:12},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderTopLeftRadius:"inherit",borderTopRightRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{paddingTop:21,paddingBottom:4},t.hiddenLabel&&{paddingTop:16,paddingBottom:17},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0},t.hiddenLabel&&"small"===t.size&&{paddingTop:8,paddingBottom:9},t.multiline&&{paddingTop:0,paddingBottom:0,paddingLeft:0,paddingRight:0}))),x=i.forwardRef((function(e,t){var o,i,d,c;const p=(0,u.Z)({props:e,name:"MuiFilledInput"}),{components:m={},componentsProps:h,fullWidth:x=!1,inputComponent:y="input",multiline:w=!1,slotProps:S,slots:k={},type:C="text"}=p,P=(0,r.Z)(p,b),$=(0,n.Z)({},p,{fullWidth:x,inputComponent:y,multiline:w,type:C}),R=(e=>{const{classes:t,disableUnderline:o}=e,r={root:["root",!o&&"underline"],input:["input"]},i=(0,s.Z)(r,f,t);return(0,n.Z)({},t,i)})(p),M={root:{ownerState:$},input:{ownerState:$}},F=(null!=S?S:h)?(0,a.Z)(M,null!=S?S:h):M,I=null!=(o=null!=(i=k.root)?i:m.Root)?o:g,E=null!=(d=null!=(c=k.input)?c:m.Input)?d:Z;return(0,v.jsx)(l.ZP,(0,n.Z)({slots:{root:I,input:E},componentsProps:F,fullWidth:x,inputComponent:y,multiline:w,ref:t,type:C},P,{classes:R}))}));x.muiName="Input";const y=x},6446:(e,t,o)=>{o.d(t,{Z:()=>x});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1657),d=o(948),u=o(5108),c=o(8216),p=o(6798),m=o(7167),f=o(1588),h=o(4867);function v(e){return(0,h.Z)("MuiFormControl",e)}(0,f.Z)("MuiFormControl",["root","marginNone","marginNormal","marginDense","fullWidth","disabled"]);var b=o(5893);const g=["children","className","color","component","disabled","error","focused","fullWidth","hiddenLabel","margin","required","size","variant"],Z=(0,d.ZP)("div",{name:"MuiFormControl",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,n.Z)({},t.root,t[`margin${(0,c.Z)(e.margin)}`],e.fullWidth&&t.fullWidth)})((({ownerState:e})=>(0,n.Z)({display:"inline-flex",flexDirection:"column",position:"relative",minWidth:0,padding:0,margin:0,border:0,verticalAlign:"top"},"normal"===e.margin&&{marginTop:16,marginBottom:8},"dense"===e.margin&&{marginTop:8,marginBottom:4},e.fullWidth&&{width:"100%"}))),x=i.forwardRef((function(e,t){const o=(0,l.Z)({props:e,name:"MuiFormControl"}),{children:d,className:f,color:h="primary",component:x="div",disabled:y=!1,error:w=!1,focused:S,fullWidth:k=!1,hiddenLabel:C=!1,margin:P="none",required:$=!1,size:R="medium",variant:M="outlined"}=o,F=(0,r.Z)(o,g),I=(0,n.Z)({},o,{color:h,component:x,disabled:y,error:w,fullWidth:k,hiddenLabel:C,margin:P,required:$,size:R,variant:M}),E=(e=>{const{classes:t,margin:o,fullWidth:r}=e,n={root:["root","none"!==o&&`margin${(0,c.Z)(o)}`,r&&"fullWidth"]};return(0,s.Z)(n,v,t)})(I),[N,O]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{if(!(0,p.Z)(t,["Input","Select"]))return;const o=(0,p.Z)(t,["Select"])?t.props.input:t;o&&(0,u.B7)(o.props)&&(e=!0)})),e})),[z,L]=i.useState((()=>{let e=!1;return d&&i.Children.forEach(d,(t=>{(0,p.Z)(t,["Input","Select"])&&((0,u.vd)(t.props,!0)||(0,u.vd)(t.props.inputProps,!0))&&(e=!0)})),e})),[T,B]=i.useState(!1);y&&T&&B(!1);const W=void 0===S||y?T:S;let A;const j=i.useMemo((()=>({adornedStart:N,setAdornedStart:O,color:h,disabled:y,error:w,filled:z,focused:W,fullWidth:k,hiddenLabel:C,size:R,onBlur:()=>{B(!1)},onEmpty:()=>{L(!1)},onFilled:()=>{L(!0)},onFocus:()=>{B(!0)},registerEffect:A,required:$,variant:M})),[N,h,y,w,z,W,k,C,A,$,R,M]);return(0,b.jsx)(m.Z.Provider,{value:j,children:(0,b.jsx)(Z,(0,n.Z)({as:x,ownerState:I,className:(0,a.Z)(E.root,f),ref:t},F,{children:d}))})}))},7167:(e,t,o)=>{o.d(t,{Z:()=>r});const r=o(7294).createContext(void 0)},5704:(e,t,o)=>{function r({props:e,states:t,muiFormControl:o}){return t.reduce(((t,r)=>(t[r]=e[r],o&&void 0===e[r]&&(t[r]=o[r]),t)),{})}o.d(t,{Z:()=>r})},4423:(e,t,o)=>{o.d(t,{Z:()=>i});var r=o(7294),n=o(7167);function i(){return r.useContext(n.Z)}},3460:(e,t,o)=>{o.d(t,{Z:()=>y});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(5704),d=o(4423),u=o(948),c=o(8216),p=o(1588),m=o(4867);function f(e){return(0,m.Z)("MuiFormHelperText",e)}const h=(0,p.Z)("MuiFormHelperText",["root","error","disabled","sizeSmall","sizeMedium","contained","focused","filled","required"]);var v,b=o(1657),g=o(5893);const Z=["children","className","component","disabled","error","filled","focused","margin","required","variant"],x=(0,u.ZP)("p",{name:"MuiFormHelperText",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.size&&t[`size${(0,c.Z)(o.size)}`],o.contained&&t.contained,o.filled&&t.filled]}})((({theme:e,ownerState:t})=>(0,n.Z)({color:(e.vars||e).palette.text.secondary},e.typography.caption,{textAlign:"left",marginTop:3,marginRight:0,marginBottom:0,marginLeft:0,[`&.${h.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${h.error}`]:{color:(e.vars||e).palette.error.main}},"small"===t.size&&{marginTop:4},t.contained&&{marginLeft:14,marginRight:14}))),y=i.forwardRef((function(e,t){const o=(0,b.Z)({props:e,name:"MuiFormHelperText"}),{children:i,className:u,component:p="p"}=o,m=(0,r.Z)(o,Z),h=(0,d.Z)(),y=(0,l.Z)({props:o,muiFormControl:h,states:["variant","size","disabled","error","filled","focused","required"]}),w=(0,n.Z)({},o,{component:p,contained:"filled"===y.variant||"outlined"===y.variant,variant:y.variant,size:y.size,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.required}),S=(e=>{const{classes:t,contained:o,size:r,disabled:n,error:i,filled:a,focused:l,required:d}=e,u={root:["root",n&&"disabled",i&&"error",r&&`size${(0,c.Z)(r)}`,o&&"contained",l&&"focused",a&&"filled",d&&"required"]};return(0,s.Z)(u,f,t)})(w);return(0,g.jsx)(x,(0,n.Z)({as:p,ownerState:w,className:(0,a.Z)(S.root,u),ref:t},m,{children:" "===i?v||(v=(0,g.jsx)("span",{className:"notranslate",children:"​"})):i}))}))},6294:(e,t,o)=>{o.d(t,{Z:()=>l});var r=o(7462),n=(o(7294),o(5723)),i=o(247),a=o(606),s=o(5893);const l=function(e){return(0,s.jsx)(n.Z,(0,r.Z)({},e,{defaultTheme:i.Z,themeId:a.Z}))}},5725:(e,t,o)=>{o.d(t,{ZP:()=>C});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(5408),l=o(9707),d=o(4780),u=o(948),c=o(1657),p=o(2734);const m=i.createContext();var f=o(1588),h=o(4867);function v(e){return(0,h.Z)("MuiGrid",e)}const b=["auto",!0,1,2,3,4,5,6,7,8,9,10,11,12],g=(0,f.Z)("MuiGrid",["root","container","item","zeroMinWidth",...[0,1,2,3,4,5,6,7,8,9,10].map((e=>`spacing-xs-${e}`)),...["column-reverse","column","row-reverse","row"].map((e=>`direction-xs-${e}`)),...["nowrap","wrap-reverse","wrap"].map((e=>`wrap-xs-${e}`)),...b.map((e=>`grid-xs-${e}`)),...b.map((e=>`grid-sm-${e}`)),...b.map((e=>`grid-md-${e}`)),...b.map((e=>`grid-lg-${e}`)),...b.map((e=>`grid-xl-${e}`))]);var Z=o(5893);const x=["className","columns","columnSpacing","component","container","direction","item","rowSpacing","spacing","wrap","zeroMinWidth"];function y(e){const t=parseFloat(e);return`${t}${String(e).replace(String(t),"")||"px"}`}function w({breakpoints:e,values:t}){let o="";Object.keys(t).forEach((e=>{""===o&&0!==t[e]&&(o=e)}));const r=Object.keys(e).sort(((t,o)=>e[t]-e[o]));return r.slice(0,r.indexOf(o))}const S=(0,u.ZP)("div",{name:"MuiGrid",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e,{container:r,direction:n,item:i,spacing:a,wrap:s,zeroMinWidth:l,breakpoints:d}=o;let u=[];r&&(u=function(e,t,o={}){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[o[`spacing-xs-${String(e)}`]];const r=[];return t.forEach((t=>{const n=e[t];Number(n)>0&&r.push(o[`spacing-${t}-${String(n)}`])})),r}(a,d,t));const c=[];return d.forEach((e=>{const r=o[e];r&&c.push(t[`grid-${e}-${String(r)}`])})),[t.root,r&&t.container,i&&t.item,l&&t.zeroMinWidth,...u,"row"!==n&&t[`direction-xs-${String(n)}`],"wrap"!==s&&t[`wrap-xs-${String(s)}`],...c]}})((({ownerState:e})=>(0,n.Z)({boxSizing:"border-box"},e.container&&{display:"flex",flexWrap:"wrap",width:"100%"},e.item&&{margin:0},e.zeroMinWidth&&{minWidth:0},"wrap"!==e.wrap&&{flexWrap:e.wrap})),(function({theme:e,ownerState:t}){const o=(0,s.P$)({values:t.direction,breakpoints:e.breakpoints.values});return(0,s.k9)({theme:e},o,(e=>{const t={flexDirection:e};return 0===e.indexOf("column")&&(t[`& > .${g.item}`]={maxWidth:"none"}),t}))}),(function({theme:e,ownerState:t}){const{container:o,rowSpacing:r}=t;let n={};if(o&&0!==r){const t=(0,s.P$)({values:r,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),n=(0,s.k9)({theme:e},t,((t,r)=>{var n;const i=e.spacing(t);return"0px"!==i?{marginTop:`-${y(i)}`,[`& > .${g.item}`]:{paddingTop:y(i)}}:null!=(n=o)&&n.includes(r)?{}:{marginTop:0,[`& > .${g.item}`]:{paddingTop:0}}}))}return n}),(function({theme:e,ownerState:t}){const{container:o,columnSpacing:r}=t;let n={};if(o&&0!==r){const t=(0,s.P$)({values:r,breakpoints:e.breakpoints.values});let o;"object"==typeof t&&(o=w({breakpoints:e.breakpoints.values,values:t})),n=(0,s.k9)({theme:e},t,((t,r)=>{var n;const i=e.spacing(t);return"0px"!==i?{width:`calc(100% + ${y(i)})`,marginLeft:`-${y(i)}`,[`& > .${g.item}`]:{paddingLeft:y(i)}}:null!=(n=o)&&n.includes(r)?{}:{width:"100%",marginLeft:0,[`& > .${g.item}`]:{paddingLeft:0}}}))}return n}),(function({theme:e,ownerState:t}){let o;return e.breakpoints.keys.reduce(((r,i)=>{let a={};if(t[i]&&(o=t[i]),!o)return r;if(!0===o)a={flexBasis:0,flexGrow:1,maxWidth:"100%"};else if("auto"===o)a={flexBasis:"auto",flexGrow:0,flexShrink:0,maxWidth:"none",width:"auto"};else{const l=(0,s.P$)({values:t.columns,breakpoints:e.breakpoints.values}),d="object"==typeof l?l[i]:l;if(null==d)return r;const u=Math.round(o/d*1e8)/1e6+"%";let c={};if(t.container&&t.item&&0!==t.columnSpacing){const o=e.spacing(t.columnSpacing);if("0px"!==o){const e=`calc(${u} + ${y(o)})`;c={flexBasis:e,maxWidth:e}}}a=(0,n.Z)({flexBasis:u,flexGrow:0,maxWidth:u},c)}return 0===e.breakpoints.values[i]?Object.assign(r,a):r[e.breakpoints.up(i)]=a,r}),{})})),k=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiGrid"}),{breakpoints:s}=(0,p.Z)(),u=(0,l.Z)(o),{className:f,columns:h,columnSpacing:b,component:g="div",container:y=!1,direction:w="row",item:k=!1,rowSpacing:C,spacing:P=0,wrap:$="wrap",zeroMinWidth:R=!1}=u,M=(0,r.Z)(u,x),F=C||P,I=b||P,E=i.useContext(m),N=y?h||12:E,O={},z=(0,n.Z)({},M);s.keys.forEach((e=>{null!=M[e]&&(O[e]=M[e],delete z[e])}));const L=(0,n.Z)({},u,{columns:N,container:y,direction:w,item:k,rowSpacing:F,columnSpacing:I,wrap:$,zeroMinWidth:R,spacing:P},O,{breakpoints:s.keys}),T=(e=>{const{classes:t,container:o,direction:r,item:n,spacing:i,wrap:a,zeroMinWidth:s,breakpoints:l}=e;let u=[];o&&(u=function(e,t){if(!e||e<=0)return[];if("string"==typeof e&&!Number.isNaN(Number(e))||"number"==typeof e)return[`spacing-xs-${String(e)}`];const o=[];return t.forEach((t=>{const r=e[t];if(Number(r)>0){const e=`spacing-${t}-${String(r)}`;o.push(e)}})),o}(i,l));const c=[];l.forEach((t=>{const o=e[t];o&&c.push(`grid-${t}-${String(o)}`)}));const p={root:["root",o&&"container",n&&"item",s&&"zeroMinWidth",...u,"row"!==r&&`direction-xs-${String(r)}`,"wrap"!==a&&`wrap-xs-${String(a)}`,...c]};return(0,d.Z)(p,v,t)})(L);return(0,Z.jsx)(m.Provider,{value:N,children:(0,Z.jsx)(S,(0,n.Z)({ownerState:L,className:(0,a.Z)(T.root,f),as:g,ref:t},z))})})),C=k},3981:(e,t,o)=>{o.d(t,{Z:()=>y});var r=o(3366),n=o(7462),i=o(7294),a=o(4780),s=o(9766),l=o(8543),d=o(948),u=o(1657),c=o(1588),p=o(4867),m=o(5827);function f(e){return(0,p.Z)("MuiInput",e)}const h=(0,n.Z)({},m.Z,(0,c.Z)("MuiInput",["root","underline","input"]));var v=o(5893);const b=["disableUnderline","components","componentsProps","fullWidth","inputComponent","multiline","slotProps","slots","type"],g=(0,d.ZP)(l.Ej,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiInput",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[...(0,l.Gx)(e,t),!o.disableUnderline&&t.underline]}})((({theme:e,ownerState:t})=>{let o="light"===e.palette.mode?"rgba(0, 0, 0, 0.42)":"rgba(255, 255, 255, 0.7)";return e.vars&&(o=`rgba(${e.vars.palette.common.onBackgroundChannel} / ${e.vars.opacity.inputUnderline})`),(0,n.Z)({position:"relative"},t.formControl&&{"label + &":{marginTop:16}},!t.disableUnderline&&{"&:after":{borderBottom:`2px solid ${(e.vars||e).palette[t.color].main}`,left:0,bottom:0,content:'""',position:"absolute",right:0,transform:"scaleX(0)",transition:e.transitions.create("transform",{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut}),pointerEvents:"none"},[`&.${h.focused}:after`]:{transform:"scaleX(1) translateX(0)"},[`&.${h.error}`]:{"&:before, &:after":{borderBottomColor:(e.vars||e).palette.error.main}},"&:before":{borderBottom:`1px solid ${o}`,left:0,bottom:0,content:'"\\00a0"',position:"absolute",right:0,transition:e.transitions.create("border-bottom-color",{duration:e.transitions.duration.shorter}),pointerEvents:"none"},[`&:hover:not(.${h.disabled}, .${h.error}):before`]:{borderBottom:`2px solid ${(e.vars||e).palette.text.primary}`,"@media (hover: none)":{borderBottom:`1px solid ${o}`}},[`&.${h.disabled}:before`]:{borderBottomStyle:"dotted"}})})),Z=(0,d.ZP)(l.rA,{name:"MuiInput",slot:"Input",overridesResolver:l._o})({}),x=i.forwardRef((function(e,t){var o,i,d,c;const p=(0,u.Z)({props:e,name:"MuiInput"}),{disableUnderline:m,components:h={},componentsProps:x,fullWidth:y=!1,inputComponent:w="input",multiline:S=!1,slotProps:k,slots:C={},type:P="text"}=p,$=(0,r.Z)(p,b),R=(e=>{const{classes:t,disableUnderline:o}=e,r={root:["root",!o&&"underline"],input:["input"]},i=(0,a.Z)(r,f,t);return(0,n.Z)({},t,i)})(p),M={root:{ownerState:{disableUnderline:m}}},F=(null!=k?k:x)?(0,s.Z)(null!=k?k:x,M):M,I=null!=(o=null!=(i=C.root)?i:h.Root)?o:g,E=null!=(d=null!=(c=C.input)?c:h.Input)?d:Z;return(0,v.jsx)(l.ZP,(0,n.Z)({slots:{root:I,input:E},slotProps:F,fullWidth:y,inputComponent:w,multiline:S,ref:t,type:P},$,{classes:R}))}));x.muiName="Input";const y=x},8543:(e,t,o)=>{o.d(t,{Ej:()=>P,Gx:()=>k,ZP:()=>M,_o:()=>C,rA:()=>$});var r=o(3366),n=o(7462),i=o(1387),a=o(7294),s=o(512),l=o(4780),d=o(7598),u=o(8442),c=o(5704),p=o(7167),m=o(4423),f=o(948),h=o(1657),v=o(8216),b=o(1705),g=o(8974),Z=o(6294),x=o(5108),y=o(5827),w=o(5893);const S=["aria-describedby","autoComplete","autoFocus","className","color","components","componentsProps","defaultValue","disabled","disableInjectingGlobalStyles","endAdornment","error","fullWidth","id","inputComponent","inputProps","inputRef","margin","maxRows","minRows","multiline","name","onBlur","onChange","onClick","onFocus","onKeyDown","onKeyUp","placeholder","readOnly","renderSuffix","rows","size","slotProps","slots","startAdornment","type","value"],k=(e,t)=>{const{ownerState:o}=e;return[t.root,o.formControl&&t.formControl,o.startAdornment&&t.adornedStart,o.endAdornment&&t.adornedEnd,o.error&&t.error,"small"===o.size&&t.sizeSmall,o.multiline&&t.multiline,o.color&&t[`color${(0,v.Z)(o.color)}`],o.fullWidth&&t.fullWidth,o.hiddenLabel&&t.hiddenLabel]},C=(e,t)=>{const{ownerState:o}=e;return[t.input,"small"===o.size&&t.inputSizeSmall,o.multiline&&t.inputMultiline,"search"===o.type&&t.inputTypeSearch,o.startAdornment&&t.inputAdornedStart,o.endAdornment&&t.inputAdornedEnd,o.hiddenLabel&&t.inputHiddenLabel]},P=(0,f.ZP)("div",{name:"MuiInputBase",slot:"Root",overridesResolver:k})((({theme:e,ownerState:t})=>(0,n.Z)({},e.typography.body1,{color:(e.vars||e).palette.text.primary,lineHeight:"1.4375em",boxSizing:"border-box",position:"relative",cursor:"text",display:"inline-flex",alignItems:"center",[`&.${y.Z.disabled}`]:{color:(e.vars||e).palette.text.disabled,cursor:"default"}},t.multiline&&(0,n.Z)({padding:"4px 0 5px"},"small"===t.size&&{paddingTop:1}),t.fullWidth&&{width:"100%"}))),$=(0,f.ZP)("input",{name:"MuiInputBase",slot:"Input",overridesResolver:C})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode,r=(0,n.Z)({color:"currentColor"},e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5},{transition:e.transitions.create("opacity",{duration:e.transitions.duration.shorter})}),i={opacity:"0 !important"},a=e.vars?{opacity:e.vars.opacity.inputPlaceholder}:{opacity:o?.42:.5};return(0,n.Z)({font:"inherit",letterSpacing:"inherit",color:"currentColor",padding:"4px 0 5px",border:0,boxSizing:"content-box",background:"none",height:"1.4375em",margin:0,WebkitTapHighlightColor:"transparent",display:"block",minWidth:0,width:"100%",animationName:"mui-auto-fill-cancel",animationDuration:"10ms","&::-webkit-input-placeholder":r,"&::-moz-placeholder":r,"&:-ms-input-placeholder":r,"&::-ms-input-placeholder":r,"&:focus":{outline:0},"&:invalid":{boxShadow:"none"},"&::-webkit-search-decoration":{WebkitAppearance:"none"},[`label[data-shrink=false] + .${y.Z.formControl} &`]:{"&::-webkit-input-placeholder":i,"&::-moz-placeholder":i,"&:-ms-input-placeholder":i,"&::-ms-input-placeholder":i,"&:focus::-webkit-input-placeholder":a,"&:focus::-moz-placeholder":a,"&:focus:-ms-input-placeholder":a,"&:focus::-ms-input-placeholder":a},[`&.${y.Z.disabled}`]:{opacity:1,WebkitTextFillColor:(e.vars||e).palette.text.disabled},"&:-webkit-autofill":{animationDuration:"5000s",animationName:"mui-auto-fill"}},"small"===t.size&&{paddingTop:1},t.multiline&&{height:"auto",resize:"none",padding:0,paddingTop:0},"search"===t.type&&{MozAppearance:"textfield"})})),R=(0,w.jsx)(Z.Z,{styles:{"@keyframes mui-auto-fill":{from:{display:"block"}},"@keyframes mui-auto-fill-cancel":{from:{display:"block"}}}}),M=a.forwardRef((function(e,t){var o;const f=(0,h.Z)({props:e,name:"MuiInputBase"}),{"aria-describedby":Z,autoComplete:k,autoFocus:C,className:M,components:F={},componentsProps:I={},defaultValue:E,disabled:N,disableInjectingGlobalStyles:O,endAdornment:z,fullWidth:L=!1,id:T,inputComponent:B="input",inputProps:W={},inputRef:A,maxRows:j,minRows:q,multiline:D=!1,name:H,onBlur:G,onChange:V,onClick:K,onFocus:U,onKeyDown:X,onKeyUp:_,placeholder:J,readOnly:Y,renderSuffix:Q,rows:ee,slotProps:te={},slots:oe={},startAdornment:re,type:ne="text",value:ie}=f,ae=(0,r.Z)(f,S),se=null!=W.value?W.value:ie,{current:le}=a.useRef(null!=se),de=a.useRef(),ue=a.useCallback((e=>{}),[]),ce=(0,b.Z)(de,A,W.ref,ue),[pe,me]=a.useState(!1),fe=(0,m.Z)(),he=(0,c.Z)({props:f,muiFormControl:fe,states:["color","disabled","error","hiddenLabel","size","required","filled"]});he.focused=fe?fe.focused:pe,a.useEffect((()=>{!fe&&N&&pe&&(me(!1),G&&G())}),[fe,N,pe,G]);const ve=fe&&fe.onFilled,be=fe&&fe.onEmpty,ge=a.useCallback((e=>{(0,x.vd)(e)?ve&&ve():be&&be()}),[ve,be]);(0,g.Z)((()=>{le&&ge({value:se})}),[se,ge,le]),a.useEffect((()=>{ge(de.current)}),[]);let Ze=B,xe=W;D&&"input"===Ze&&(xe=ee?(0,n.Z)({type:void 0,minRows:ee,maxRows:ee},xe):(0,n.Z)({type:void 0,maxRows:j,minRows:q},xe),Ze=d.u),a.useEffect((()=>{fe&&fe.setAdornedStart(Boolean(re))}),[fe,re]);const ye=(0,n.Z)({},f,{color:he.color||"primary",disabled:he.disabled,endAdornment:z,error:he.error,focused:he.focused,formControl:fe,fullWidth:L,hiddenLabel:he.hiddenLabel,multiline:D,size:he.size,startAdornment:re,type:ne}),we=(e=>{const{classes:t,color:o,disabled:r,error:n,endAdornment:i,focused:a,formControl:s,fullWidth:d,hiddenLabel:u,multiline:c,readOnly:p,size:m,startAdornment:f,type:h}=e,b={root:["root",`color${(0,v.Z)(o)}`,r&&"disabled",n&&"error",d&&"fullWidth",a&&"focused",s&&"formControl",m&&"medium"!==m&&`size${(0,v.Z)(m)}`,c&&"multiline",f&&"adornedStart",i&&"adornedEnd",u&&"hiddenLabel",p&&"readOnly"],input:["input",r&&"disabled","search"===h&&"inputTypeSearch",c&&"inputMultiline","small"===m&&"inputSizeSmall",u&&"inputHiddenLabel",f&&"inputAdornedStart",i&&"inputAdornedEnd",p&&"readOnly"]};return(0,l.Z)(b,y.u,t)})(ye),Se=oe.root||F.Root||P,ke=te.root||I.root||{},Ce=oe.input||F.Input||$;return xe=(0,n.Z)({},xe,null!=(o=te.input)?o:I.input),(0,w.jsxs)(a.Fragment,{children:[!O&&R,(0,w.jsxs)(Se,(0,n.Z)({},ke,!(0,u.X)(Se)&&{ownerState:(0,n.Z)({},ye,ke.ownerState)},{ref:t,onClick:e=>{de.current&&e.currentTarget===e.target&&de.current.focus(),K&&K(e)}},ae,{className:(0,s.Z)(we.root,ke.className,M,Y&&"MuiInputBase-readOnly"),children:[re,(0,w.jsx)(p.Z.Provider,{value:null,children:(0,w.jsx)(Ce,(0,n.Z)({ownerState:ye,"aria-invalid":he.error,"aria-describedby":Z,autoComplete:k,autoFocus:C,defaultValue:E,disabled:he.disabled,id:T,onAnimationStart:e=>{ge("mui-auto-fill-cancel"===e.animationName?de.current:{value:"x"})},name:H,placeholder:J,readOnly:Y,required:he.required,rows:ee,value:se,onKeyDown:X,onKeyUp:_,type:ne},xe,!(0,u.X)(Ce)&&{as:Ze,ownerState:(0,n.Z)({},ye,xe.ownerState)},{ref:ce,className:(0,s.Z)(we.input,xe.className,Y&&"MuiInputBase-readOnly"),onBlur:e=>{G&&G(e),W.onBlur&&W.onBlur(e),fe&&fe.onBlur?fe.onBlur(e):me(!1)},onChange:(e,...t)=>{if(!le){const t=e.target||de.current;if(null==t)throw new Error((0,i.Z)(1));ge({value:t.value})}W.onChange&&W.onChange(e,...t),V&&V(e,...t)},onFocus:e=>{he.disabled?e.stopPropagation():(U&&U(e),W.onFocus&&W.onFocus(e),fe&&fe.onFocus?fe.onFocus(e):me(!0))}}))}),z,Q?Q((0,n.Z)({},he,{startAdornment:re})):null]}))]})}))},5827:(e,t,o)=>{o.d(t,{Z:()=>a,u:()=>i});var r=o(1588),n=o(4867);function i(e){return(0,n.Z)("MuiInputBase",e)}const a=(0,r.Z)("MuiInputBase",["root","formControl","focused","disabled","adornedStart","adornedEnd","error","sizeSmall","multiline","colorSecondary","fullWidth","hiddenLabel","readOnly","input","inputSizeSmall","inputMultiline","inputTypeSearch","inputAdornedStart","inputAdornedEnd","inputHiddenLabel"])},5108:(e,t,o)=>{function r(e){return null!=e&&!(Array.isArray(e)&&0===e.length)}function n(e,t=!1){return e&&(r(e.value)&&""!==e.value||t&&r(e.defaultValue)&&""!==e.defaultValue)}function i(e){return e.startAdornment}o.d(t,{B7:()=>i,vd:()=>n})},7666:(e,t,o)=>{o.d(t,{Z:()=>C});var r=o(3366),n=o(7462),i=o(7294),a=o(4780),s=o(512),l=o(5704),d=o(4423),u=o(8216),c=o(1657),p=o(948),m=o(1588),f=o(4867);function h(e){return(0,f.Z)("MuiFormLabel",e)}const v=(0,m.Z)("MuiFormLabel",["root","colorSecondary","focused","disabled","error","filled","required","asterisk"]);var b=o(5893);const g=["children","className","color","component","disabled","error","filled","focused","required"],Z=(0,p.ZP)("label",{name:"MuiFormLabel",slot:"Root",overridesResolver:({ownerState:e},t)=>(0,n.Z)({},t.root,"secondary"===e.color&&t.colorSecondary,e.filled&&t.filled)})((({theme:e,ownerState:t})=>(0,n.Z)({color:(e.vars||e).palette.text.secondary},e.typography.body1,{lineHeight:"1.4375em",padding:0,position:"relative",[`&.${v.focused}`]:{color:(e.vars||e).palette[t.color].main},[`&.${v.disabled}`]:{color:(e.vars||e).palette.text.disabled},[`&.${v.error}`]:{color:(e.vars||e).palette.error.main}}))),x=(0,p.ZP)("span",{name:"MuiFormLabel",slot:"Asterisk",overridesResolver:(e,t)=>t.asterisk})((({theme:e})=>({[`&.${v.error}`]:{color:(e.vars||e).palette.error.main}}))),y=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiFormLabel"}),{children:i,className:p,component:m="label"}=o,f=(0,r.Z)(o,g),v=(0,d.Z)(),y=(0,l.Z)({props:o,muiFormControl:v,states:["color","required","focused","disabled","error","filled"]}),w=(0,n.Z)({},o,{color:y.color||"primary",component:m,disabled:y.disabled,error:y.error,filled:y.filled,focused:y.focused,required:y.required}),S=(e=>{const{classes:t,color:o,focused:r,disabled:n,error:i,filled:s,required:l}=e,d={root:["root",`color${(0,u.Z)(o)}`,n&&"disabled",i&&"error",s&&"filled",r&&"focused",l&&"required"],asterisk:["asterisk",i&&"error"]};return(0,a.Z)(d,h,t)})(w);return(0,b.jsxs)(Z,(0,n.Z)({as:m,ownerState:w,className:(0,s.Z)(S.root,p),ref:t},f,{children:[i,y.required&&(0,b.jsxs)(x,{ownerState:w,"aria-hidden":!0,className:S.asterisk,children:[" ","*"]})]}))}));function w(e){return(0,f.Z)("MuiInputLabel",e)}(0,m.Z)("MuiInputLabel",["root","focused","disabled","error","required","asterisk","formControl","sizeSmall","shrink","animated","standard","filled","outlined"]);const S=["disableAnimation","margin","shrink","variant","className"],k=(0,p.ZP)(y,{shouldForwardProp:e=>(0,p.FO)(e)||"classes"===e,name:"MuiInputLabel",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[{[`& .${v.asterisk}`]:t.asterisk},t.root,o.formControl&&t.formControl,"small"===o.size&&t.sizeSmall,o.shrink&&t.shrink,!o.disableAnimation&&t.animated,o.focused&&t.focused,t[o.variant]]}})((({theme:e,ownerState:t})=>(0,n.Z)({display:"block",transformOrigin:"top left",whiteSpace:"nowrap",overflow:"hidden",textOverflow:"ellipsis",maxWidth:"100%"},t.formControl&&{position:"absolute",left:0,top:0,transform:"translate(0, 20px) scale(1)"},"small"===t.size&&{transform:"translate(0, 17px) scale(1)"},t.shrink&&{transform:"translate(0, -1.5px) scale(0.75)",transformOrigin:"top left",maxWidth:"133%"},!t.disableAnimation&&{transition:e.transitions.create(["color","transform","max-width"],{duration:e.transitions.duration.shorter,easing:e.transitions.easing.easeOut})},"filled"===t.variant&&(0,n.Z)({zIndex:1,pointerEvents:"none",transform:"translate(12px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(12px, 13px) scale(1)"},t.shrink&&(0,n.Z)({userSelect:"none",pointerEvents:"auto",transform:"translate(12px, 7px) scale(0.75)",maxWidth:"calc(133% - 24px)"},"small"===t.size&&{transform:"translate(12px, 4px) scale(0.75)"})),"outlined"===t.variant&&(0,n.Z)({zIndex:1,pointerEvents:"none",transform:"translate(14px, 16px) scale(1)",maxWidth:"calc(100% - 24px)"},"small"===t.size&&{transform:"translate(14px, 9px) scale(1)"},t.shrink&&{userSelect:"none",pointerEvents:"auto",maxWidth:"calc(133% - 32px)",transform:"translate(14px, -9px) scale(0.75)"}),"standard"===t.variant&&{"&:not(label) + div":{marginTop:16}}))),C=i.forwardRef((function(e,t){const o=(0,c.Z)({name:"MuiInputLabel",props:e}),{disableAnimation:i=!1,shrink:p,className:m}=o,f=(0,r.Z)(o,S),h=(0,d.Z)();let v=p;void 0===v&&h&&(v=h.filled||h.focused||h.adornedStart);const g=(0,l.Z)({props:o,muiFormControl:h,states:["size","variant","required","focused"]}),Z=(0,n.Z)({},o,{disableAnimation:i,formControl:h,shrink:v,size:g.size,variant:g.variant,required:g.required,focused:g.focused}),x=(e=>{const{classes:t,formControl:o,size:r,shrink:i,disableAnimation:s,variant:l,required:d}=e,c={root:["root",o&&"formControl",!s&&"animated",i&&"shrink",r&&"normal"!==r&&`size${(0,u.Z)(r)}`,l],asterisk:[d&&"asterisk"]},p=(0,a.Z)(c,w,t);return(0,n.Z)({},t,p)})(Z);return(0,b.jsx)(k,(0,n.Z)({"data-shrink":v,ownerState:Z,ref:t,className:(0,s.Z)(x.root,m)},f,{classes:x}))}))},1079:(e,t,o)=>{o.d(t,{Z:()=>C});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(8216),d=o(948),u=o(1657),c=o(9674),p=o(1705),m=o(2658),f=o(1588),h=o(4867);function v(e){return(0,h.Z)("MuiLink",e)}const b=(0,f.Z)("MuiLink",["root","underlineNone","underlineHover","underlineAlways","button","focusVisible"]);var g=o(4844),Z=o(1796);const x={primary:"primary.main",textPrimary:"text.primary",secondary:"secondary.main",textSecondary:"text.secondary",error:"error.main"},y=({theme:e,ownerState:t})=>{const o=(e=>x[e]||e)(t.color),r=(0,g.DW)(e,`palette.${o}`,!1)||t.color,n=(0,g.DW)(e,`palette.${o}Channel`);return"vars"in e&&n?`rgba(${n} / 0.4)`:(0,Z.Fq)(r,.4)};var w=o(5893);const S=["className","color","component","onBlur","onFocus","TypographyClasses","underline","variant","sx"],k=(0,d.ZP)(m.Z,{name:"MuiLink",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`underline${(0,l.Z)(o.underline)}`],"button"===o.component&&t.button]}})((({theme:e,ownerState:t})=>(0,n.Z)({},"none"===t.underline&&{textDecoration:"none"},"hover"===t.underline&&{textDecoration:"none","&:hover":{textDecoration:"underline"}},"always"===t.underline&&(0,n.Z)({textDecoration:"underline"},"inherit"!==t.color&&{textDecorationColor:y({theme:e,ownerState:t})},{"&:hover":{textDecorationColor:"inherit"}}),"button"===t.component&&{position:"relative",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none","&::-moz-focus-inner":{borderStyle:"none"},[`&.${b.focusVisible}`]:{outline:"auto"}}))),C=i.forwardRef((function(e,t){const o=(0,u.Z)({props:e,name:"MuiLink"}),{className:d,color:m="primary",component:f="a",onBlur:h,onFocus:b,TypographyClasses:g,underline:Z="always",variant:y="inherit",sx:C}=o,P=(0,r.Z)(o,S),{isFocusVisibleRef:$,onBlur:R,onFocus:M,ref:F}=(0,c.Z)(),[I,E]=i.useState(!1),N=(0,p.Z)(t,F),O=(0,n.Z)({},o,{color:m,component:f,focusVisible:I,underline:Z,variant:y}),z=(e=>{const{classes:t,component:o,focusVisible:r,underline:n}=e,i={root:["root",`underline${(0,l.Z)(n)}`,"button"===o&&"button",r&&"focusVisible"]};return(0,s.Z)(i,v,t)})(O);return(0,w.jsx)(k,(0,n.Z)({color:m,className:(0,a.Z)(z.root,d),classes:g,component:f,onBlur:e=>{R(e),!1===$.current&&E(!1),h&&h(e)},onFocus:e=>{M(e),!0===$.current&&E(!0),b&&b(e)},ref:N,ownerState:O,variant:y,sx:[...Object.keys(x).includes(m)?[]:[{color:m}],...Array.isArray(C)?C:[C]]},P))}))},2440:(e,t,o)=>{o.d(t,{Z:()=>b});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(948),d=o(1657),u=o(9773),c=o(1588),p=o(4867);function m(e){return(0,p.Z)("MuiList",e)}(0,c.Z)("MuiList",["root","padding","dense","subheader"]);var f=o(5893);const h=["children","className","component","dense","disablePadding","subheader"],v=(0,l.ZP)("ul",{name:"MuiList",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.disablePadding&&t.padding,o.dense&&t.dense,o.subheader&&t.subheader]}})((({ownerState:e})=>(0,n.Z)({listStyle:"none",margin:0,padding:0,position:"relative"},!e.disablePadding&&{paddingTop:8,paddingBottom:8},e.subheader&&{paddingTop:0}))),b=i.forwardRef((function(e,t){const o=(0,d.Z)({props:e,name:"MuiList"}),{children:l,className:c,component:p="ul",dense:b=!1,disablePadding:g=!1,subheader:Z}=o,x=(0,r.Z)(o,h),y=i.useMemo((()=>({dense:b})),[b]),w=(0,n.Z)({},o,{component:p,dense:b,disablePadding:g}),S=(e=>{const{classes:t,disablePadding:o,dense:r,subheader:n}=e,i={root:["root",!o&&"padding",r&&"dense",n&&"subheader"]};return(0,s.Z)(i,m,t)})(w);return(0,f.jsx)(u.Z.Provider,{value:y,children:(0,f.jsxs)(v,(0,n.Z)({as:p,className:(0,a.Z)(S.root,c),ref:t,ownerState:w},x,{children:[Z,l]}))})}))},9773:(e,t,o)=>{o.d(t,{Z:()=>r});const r=o(7294).createContext({})},5834:(e,t,o)=>{o.d(t,{Z:()=>w});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1796),d=o(948),u=o(1657),c=o(539),p=o(8974),m=o(1705),f=o(9773),h=o(1588),v=o(4867);function b(e){return(0,v.Z)("MuiListItemButton",e)}const g=(0,h.Z)("MuiListItemButton",["root","focusVisible","dense","alignItemsFlexStart","disabled","divider","gutters","selected"]);var Z=o(5893);const x=["alignItems","autoFocus","component","children","dense","disableGutters","divider","focusVisibleClassName","selected","className"],y=(0,d.ZP)(c.Z,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiListItemButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.dense&&t.dense,"flex-start"===o.alignItems&&t.alignItemsFlexStart,o.divider&&t.divider,!o.disableGutters&&t.gutters]}})((({theme:e,ownerState:t})=>(0,n.Z)({display:"flex",flexGrow:1,justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minWidth:0,boxSizing:"border-box",textAlign:"left",paddingTop:8,paddingBottom:8,transition:e.transitions.create("background-color",{duration:e.transitions.duration.shortest}),"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${g.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${g.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${g.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${g.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${g.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity}},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},"flex-start"===t.alignItems&&{alignItems:"flex-start"},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.dense&&{paddingTop:4,paddingBottom:4}))),w=i.forwardRef((function(e,t){const o=(0,u.Z)({props:e,name:"MuiListItemButton"}),{alignItems:l="center",autoFocus:d=!1,component:c="div",children:h,dense:v=!1,disableGutters:g=!1,divider:w=!1,focusVisibleClassName:S,selected:k=!1,className:C}=o,P=(0,r.Z)(o,x),$=i.useContext(f.Z),R=i.useMemo((()=>({dense:v||$.dense||!1,alignItems:l,disableGutters:g})),[l,$.dense,v,g]),M=i.useRef(null);(0,p.Z)((()=>{d&&M.current&&M.current.focus()}),[d]);const F=(0,n.Z)({},o,{alignItems:l,dense:R.dense,disableGutters:g,divider:w,selected:k}),I=(e=>{const{alignItems:t,classes:o,dense:r,disabled:i,disableGutters:a,divider:l,selected:d}=e,u={root:["root",r&&"dense",!a&&"gutters",l&&"divider",i&&"disabled","flex-start"===t&&"alignItemsFlexStart",d&&"selected"]},c=(0,s.Z)(u,b,o);return(0,n.Z)({},o,c)})(F),E=(0,m.Z)(M,t);return(0,Z.jsx)(f.Z.Provider,{value:R,children:(0,Z.jsx)(y,(0,n.Z)({ref:E,href:P.href||P.to,component:(P.href||P.to)&&"div"===c?"button":c,focusVisibleClassName:(0,a.Z)(I.focusVisible,S),ownerState:F,className:(0,a.Z)(I.root,C)},P,{classes:I,children:h}))})}))},401:(e,t,o)=>{o.d(t,{Z:()=>pe});var r=o(7462),n=o(3366),i=o(7294),a=(o(9864),o(512)),s=o(4780),l=o(4391),d=o(8038),u=o(2440),c=o(256),p=o(1705),m=o(8974),f=o(5893);const h=["actions","autoFocus","autoFocusItem","children","className","disabledItemsFocusable","disableListWrap","onKeyDown","variant"];function v(e,t,o){return e===t?e.firstChild:t&&t.nextElementSibling?t.nextElementSibling:o?null:e.firstChild}function b(e,t,o){return e===t?o?e.firstChild:e.lastChild:t&&t.previousElementSibling?t.previousElementSibling:o?null:e.lastChild}function g(e,t){if(void 0===t)return!0;let o=e.innerText;return void 0===o&&(o=e.textContent),o=o.trim().toLowerCase(),0!==o.length&&(t.repeating?o[0]===t.keys[0]:0===o.indexOf(t.keys.join("")))}function Z(e,t,o,r,n,i){let a=!1,s=n(e,t,!!t&&o);for(;s;){if(s===e.firstChild){if(a)return!1;a=!0}const t=!r&&(s.disabled||"true"===s.getAttribute("aria-disabled"));if(s.hasAttribute("tabindex")&&g(s,i)&&!t)return s.focus(),!0;s=n(e,s,o)}return!1}const x=i.forwardRef((function(e,t){const{actions:o,autoFocus:a=!1,autoFocusItem:s=!1,children:l,className:x,disabledItemsFocusable:y=!1,disableListWrap:w=!1,onKeyDown:S,variant:k="selectedMenu"}=e,C=(0,n.Z)(e,h),P=i.useRef(null),$=i.useRef({keys:[],repeating:!0,previousKeyMatched:!0,lastTime:null});(0,m.Z)((()=>{a&&P.current.focus()}),[a]),i.useImperativeHandle(o,(()=>({adjustStyleForScrollbar:(e,t)=>{const o=!P.current.style.width;if(e.clientHeight{i.isValidElement(e)?(e.props.disabled||("selectedMenu"===k&&e.props.selected||-1===M)&&(M=t),M===t&&(e.props.disabled||e.props.muiSkipListHighlight||e.type.muiSkipListHighlight)&&(M+=1,M>=l.length&&(M=-1))):M===t&&(M+=1,M>=l.length&&(M=-1))}));const F=i.Children.map(l,((e,t)=>{if(t===M){const t={};return s&&(t.autoFocus=!0),void 0===e.props.tabIndex&&"selectedMenu"===k&&(t.tabIndex=0),i.cloneElement(e,t)}return e}));return(0,f.jsx)(u.Z,(0,r.Z)({role:"menu",ref:R,className:x,onKeyDown:e=>{const t=P.current,o=e.key,r=(0,d.Z)(t).activeElement;if("ArrowDown"===o)e.preventDefault(),Z(t,r,w,y,v);else if("ArrowUp"===o)e.preventDefault(),Z(t,r,w,y,b);else if("Home"===o)e.preventDefault(),Z(t,null,w,y,v);else if("End"===o)e.preventDefault(),Z(t,null,w,y,b);else if(1===o.length){const n=$.current,i=o.toLowerCase(),a=performance.now();n.keys.length>0&&(a-n.lastTime>500?(n.keys=[],n.repeating=!0,n.previousKeyMatched=!0):n.repeating&&i!==n.keys[0]&&(n.repeating=!1)),n.lastTime=a,n.keys.push(i);const s=r&&!n.repeating&&g(r,n);n.previousKeyMatched&&(s||Z(t,r,!1,y,v,n))?e.preventDefault():n.previousKeyMatched=!1}S&&S(e)},tabIndex:a?0:-1},C,{children:F}))}));var y=o(8442),w=o(948),S=o(1657),k=o(7144),C=o(5340),P=o(8052),$=o(2734),R=o(577);const M=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"];function F(e){return`scale(${e}, ${e**2})`}const I={entering:{opacity:1,transform:F(1)},entered:{opacity:1,transform:"none"}},E="undefined"!=typeof navigator&&/^((?!chrome|android).)*(safari|mobile)/i.test(navigator.userAgent)&&/(os |version\/)15(.|_)4/i.test(navigator.userAgent),N=i.forwardRef((function(e,t){const{addEndListener:o,appear:a=!0,children:s,easing:l,in:d,onEnter:u,onEntered:c,onEntering:m,onExit:h,onExited:v,onExiting:b,style:g,timeout:Z="auto",TransitionComponent:x=P.ZP}=e,y=(0,n.Z)(e,M),w=i.useRef(),S=i.useRef(),k=(0,$.Z)(),C=i.useRef(null),N=(0,p.Z)(C,s.ref,t),O=e=>t=>{if(e){const o=C.current;void 0===t?e(o):e(o,t)}},z=O(m),L=O(((e,t)=>{(0,R.n)(e);const{duration:o,delay:r,easing:n}=(0,R.C)({style:g,timeout:Z,easing:l},{mode:"enter"});let i;"auto"===Z?(i=k.transitions.getAutoHeightDuration(e.clientHeight),S.current=i):i=o,e.style.transition=[k.transitions.create("opacity",{duration:i,delay:r}),k.transitions.create("transform",{duration:E?i:.666*i,delay:r,easing:n})].join(","),u&&u(e,t)})),T=O(c),B=O(b),W=O((e=>{const{duration:t,delay:o,easing:r}=(0,R.C)({style:g,timeout:Z,easing:l},{mode:"exit"});let n;"auto"===Z?(n=k.transitions.getAutoHeightDuration(e.clientHeight),S.current=n):n=t,e.style.transition=[k.transitions.create("opacity",{duration:n,delay:o}),k.transitions.create("transform",{duration:E?n:.666*n,delay:E?o:o||.333*n,easing:r})].join(","),e.style.opacity=0,e.style.transform=F(.75),h&&h(e)})),A=O(v);return i.useEffect((()=>()=>{clearTimeout(w.current)}),[]),(0,f.jsx)(x,(0,r.Z)({appear:a,in:d,nodeRef:C,onEnter:L,onEntered:T,onEntering:z,onExit:W,onExited:A,onExiting:B,addEndListener:e=>{"auto"===Z&&(w.current=setTimeout(e,S.current||0)),o&&o(C.current,e)},timeout:"auto"===Z?null:Z},y,{children:(e,t)=>i.cloneElement(s,(0,r.Z)({style:(0,r.Z)({opacity:0,transform:F(.75),visibility:"exited"!==e||d?void 0:"hidden"},I[e],g,s.props.style),ref:N},t))}))}));N.muiSupportAuto=!0;const O=N;var z=o(6556),L=o(3470),T=o(8385),B=o(4567),W=o(1588),A=o(4867);function j(e){return(0,A.Z)("MuiModal",e)}(0,W.Z)("MuiModal",["root","hidden","backdrop"]);const q=["BackdropComponent","BackdropProps","classes","className","closeAfterTransition","children","container","component","components","componentsProps","disableAutoFocus","disableEnforceFocus","disableEscapeKeyDown","disablePortal","disableRestoreFocus","disableScrollLock","hideBackdrop","keepMounted","onBackdropClick","onClose","onTransitionEnter","onTransitionExited","open","slotProps","slots","theme"],D=(0,w.ZP)("div",{name:"MuiModal",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,!o.open&&o.exited&&t.hidden]}})((({theme:e,ownerState:t})=>(0,r.Z)({position:"fixed",zIndex:(e.vars||e).zIndex.modal,right:0,bottom:0,top:0,left:0},!t.open&&t.exited&&{visibility:"hidden"}))),H=(0,w.ZP)(B.Z,{name:"MuiModal",slot:"Backdrop",overridesResolver:(e,t)=>t.backdrop})({zIndex:-1}),G=i.forwardRef((function(e,t){var o,d,u,c,p,m;const h=(0,S.Z)({name:"MuiModal",props:e}),{BackdropComponent:v=H,BackdropProps:b,className:g,closeAfterTransition:Z=!1,children:x,container:y,component:w,components:k={},componentsProps:C={},disableAutoFocus:P=!1,disableEnforceFocus:$=!1,disableEscapeKeyDown:R=!1,disablePortal:M=!1,disableRestoreFocus:F=!1,disableScrollLock:I=!1,hideBackdrop:E=!1,keepMounted:N=!1,onBackdropClick:O,open:B,slotProps:W,slots:A}=h,G=(0,n.Z)(h,q),V=(0,r.Z)({},h,{closeAfterTransition:Z,disableAutoFocus:P,disableEnforceFocus:$,disableEscapeKeyDown:R,disablePortal:M,disableRestoreFocus:F,disableScrollLock:I,hideBackdrop:E,keepMounted:N}),{getRootProps:K,getBackdropProps:U,getTransitionProps:X,portalRef:_,isTopModal:J,exited:Y,hasTransition:Q}=(0,z.d)((0,r.Z)({},V,{rootRef:t})),ee=(0,r.Z)({},V,{exited:Y}),te=(e=>{const{open:t,exited:o,classes:r}=e,n={root:["root",!t&&o&&"hidden"],backdrop:["backdrop"]};return(0,s.Z)(n,j,r)})(ee),oe={};if(void 0===x.props.tabIndex&&(oe.tabIndex="-1"),Q){const{onEnter:e,onExited:t}=X();oe.onEnter=e,oe.onExited=t}const re=null!=(o=null!=(d=null==A?void 0:A.root)?d:k.Root)?o:D,ne=null!=(u=null!=(c=null==A?void 0:A.backdrop)?c:k.Backdrop)?u:v,ie=null!=(p=null==W?void 0:W.root)?p:C.root,ae=null!=(m=null==W?void 0:W.backdrop)?m:C.backdrop,se=(0,l.y)({elementType:re,externalSlotProps:ie,externalForwardedProps:G,getSlotProps:K,additionalProps:{ref:t,as:w},ownerState:ee,className:(0,a.Z)(g,null==ie?void 0:ie.className,null==te?void 0:te.root,!ee.open&&ee.exited&&(null==te?void 0:te.hidden))}),le=(0,l.y)({elementType:ne,externalSlotProps:ae,additionalProps:b,getSlotProps:e=>U((0,r.Z)({},e,{onClick:t=>{O&&O(t),null!=e&&e.onClick&&e.onClick(t)}})),className:(0,a.Z)(null==ae?void 0:ae.className,null==b?void 0:b.className,null==te?void 0:te.backdrop),ownerState:ee});return N||B||Q&&!Y?(0,f.jsx)(T.h,{ref:_,container:y,disablePortal:M,children:(0,f.jsxs)(re,(0,r.Z)({},se,{children:[!E&&v?(0,f.jsx)(ne,(0,r.Z)({},le)):null,(0,f.jsx)(L.i,{disableEnforceFocus:$,disableAutoFocus:P,disableRestoreFocus:F,isEnabled:J,open:B,children:i.cloneElement(x,oe)})]}))}):null}));var V=o(6501);function K(e){return(0,A.Z)("MuiPopover",e)}(0,W.Z)("MuiPopover",["root","paper"]);const U=["onEntering"],X=["action","anchorEl","anchorOrigin","anchorPosition","anchorReference","children","className","container","elevation","marginThreshold","open","PaperProps","slots","slotProps","transformOrigin","TransitionComponent","transitionDuration","TransitionProps","disableScrollLock"],_=["slotProps"];function J(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.height/2:"bottom"===t&&(o=e.height),o}function Y(e,t){let o=0;return"number"==typeof t?o=t:"center"===t?o=e.width/2:"right"===t&&(o=e.width),o}function Q(e){return[e.horizontal,e.vertical].map((e=>"number"==typeof e?`${e}px`:e)).join(" ")}function ee(e){return"function"==typeof e?e():e}const te=(0,w.ZP)(G,{name:"MuiPopover",slot:"Root",overridesResolver:(e,t)=>t.root})({}),oe=(0,w.ZP)(V.Z,{name:"MuiPopover",slot:"Paper",overridesResolver:(e,t)=>t.paper})({position:"absolute",overflowY:"auto",overflowX:"hidden",minWidth:16,minHeight:16,maxWidth:"calc(100% - 32px)",maxHeight:"calc(100% - 32px)",outline:0}),re=i.forwardRef((function(e,t){var o,u,c;const m=(0,S.Z)({props:e,name:"MuiPopover"}),{action:h,anchorEl:v,anchorOrigin:b={vertical:"top",horizontal:"left"},anchorPosition:g,anchorReference:Z="anchorEl",children:x,className:w,container:P,elevation:$=8,marginThreshold:R=16,open:M,PaperProps:F={},slots:I,slotProps:E,transformOrigin:N={vertical:"top",horizontal:"left"},TransitionComponent:z=O,transitionDuration:L="auto",TransitionProps:{onEntering:T}={},disableScrollLock:B=!1}=m,W=(0,n.Z)(m.TransitionProps,U),A=(0,n.Z)(m,X),j=null!=(o=null==E?void 0:E.paper)?o:F,q=i.useRef(),D=(0,p.Z)(q,j.ref),H=(0,r.Z)({},m,{anchorOrigin:b,anchorReference:Z,elevation:$,marginThreshold:R,externalPaperSlotProps:j,transformOrigin:N,TransitionComponent:z,transitionDuration:L,TransitionProps:W}),G=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"]},K,t)})(H),V=i.useCallback((()=>{if("anchorPosition"===Z)return g;const e=ee(v),t=(e&&1===e.nodeType?e:(0,d.Z)(q.current).body).getBoundingClientRect();return{top:t.top+J(t,b.vertical),left:t.left+Y(t,b.horizontal)}}),[v,b.horizontal,b.vertical,g,Z]),re=i.useCallback((e=>({vertical:J(e,N.vertical),horizontal:Y(e,N.horizontal)})),[N.horizontal,N.vertical]),ne=i.useCallback((e=>{const t={width:e.offsetWidth,height:e.offsetHeight},o=re(t);if("none"===Z)return{top:null,left:null,transformOrigin:Q(o)};const r=V();let n=r.top-o.vertical,i=r.left-o.horizontal;const a=n+t.height,s=i+t.width,l=(0,C.Z)(ee(v)),d=l.innerHeight-R,u=l.innerWidth-R;if(null!==R&&nd){const e=a-d;n-=e,o.vertical+=e}if(null!==R&&iu){const e=s-u;i-=e,o.horizontal+=e}return{top:`${Math.round(n)}px`,left:`${Math.round(i)}px`,transformOrigin:Q(o)}}),[v,Z,V,re,R]),[ie,ae]=i.useState(M),se=i.useCallback((()=>{const e=q.current;if(!e)return;const t=ne(e);null!==t.top&&(e.style.top=t.top),null!==t.left&&(e.style.left=t.left),e.style.transformOrigin=t.transformOrigin,ae(!0)}),[ne]);i.useEffect((()=>(B&&window.addEventListener("scroll",se),()=>window.removeEventListener("scroll",se))),[v,B,se]),i.useEffect((()=>{M&&se()})),i.useImperativeHandle(h,(()=>M?{updatePosition:()=>{se()}}:null),[M,se]),i.useEffect((()=>{if(!M)return;const e=(0,k.Z)((()=>{se()})),t=(0,C.Z)(v);return t.addEventListener("resize",e),()=>{e.clear(),t.removeEventListener("resize",e)}}),[v,M,se]);let le=L;"auto"!==L||z.muiSupportAuto||(le=void 0);const de=P||(v?(0,d.Z)(ee(v)).body:void 0),ue=null!=(u=null==I?void 0:I.root)?u:te,ce=null!=(c=null==I?void 0:I.paper)?c:oe,pe=(0,l.y)({elementType:ce,externalSlotProps:(0,r.Z)({},j,{style:ie?j.style:(0,r.Z)({},j.style,{opacity:0})}),additionalProps:{elevation:$,ref:D},ownerState:H,className:(0,a.Z)(G.paper,null==j?void 0:j.className)}),me=(0,l.y)({elementType:ue,externalSlotProps:(null==E?void 0:E.root)||{},externalForwardedProps:A,additionalProps:{ref:t,slotProps:{backdrop:{invisible:!0}},container:de,open:M},ownerState:H,className:(0,a.Z)(G.root,w)}),{slotProps:fe}=me,he=(0,n.Z)(me,_);return(0,f.jsx)(ue,(0,r.Z)({},he,!(0,y.X)(ue)&&{slotProps:fe,disableScrollLock:B},{children:(0,f.jsx)(z,(0,r.Z)({appear:!0,in:M,onEntering:(e,t)=>{T&&T(e,t),se()},onExited:()=>{ae(!1)},timeout:le},W,{children:(0,f.jsx)(ce,(0,r.Z)({},pe,{children:x}))}))}))}));function ne(e){return(0,A.Z)("MuiMenu",e)}(0,W.Z)("MuiMenu",["root","paper","list"]);const ie=["onEntering"],ae=["autoFocus","children","className","disableAutoFocusItem","MenuListProps","onClose","open","PaperProps","PopoverClasses","transitionDuration","TransitionProps","variant","slots","slotProps"],se={vertical:"top",horizontal:"right"},le={vertical:"top",horizontal:"left"},de=(0,w.ZP)(re,{shouldForwardProp:e=>(0,w.FO)(e)||"classes"===e,name:"MuiMenu",slot:"Root",overridesResolver:(e,t)=>t.root})({}),ue=(0,w.ZP)(oe,{name:"MuiMenu",slot:"Paper",overridesResolver:(e,t)=>t.paper})({maxHeight:"calc(100% - 96px)",WebkitOverflowScrolling:"touch"}),ce=(0,w.ZP)(x,{name:"MuiMenu",slot:"List",overridesResolver:(e,t)=>t.list})({outline:0}),pe=i.forwardRef((function(e,t){var o,d;const u=(0,S.Z)({props:e,name:"MuiMenu"}),{autoFocus:c=!0,children:p,className:m,disableAutoFocusItem:h=!1,MenuListProps:v={},onClose:b,open:g,PaperProps:Z={},PopoverClasses:x,transitionDuration:y="auto",TransitionProps:{onEntering:w}={},variant:k="selectedMenu",slots:C={},slotProps:P={}}=u,R=(0,n.Z)(u.TransitionProps,ie),M=(0,n.Z)(u,ae),F=(0,$.Z)(),I="rtl"===F.direction,E=(0,r.Z)({},u,{autoFocus:c,disableAutoFocusItem:h,MenuListProps:v,onEntering:w,PaperProps:Z,transitionDuration:y,TransitionProps:R,variant:k}),N=(e=>{const{classes:t}=e;return(0,s.Z)({root:["root"],paper:["paper"],list:["list"]},ne,t)})(E),O=c&&!h&&g,z=i.useRef(null);let L=-1;i.Children.map(p,((e,t)=>{i.isValidElement(e)&&(e.props.disabled||("selectedMenu"===k&&e.props.selected||-1===L)&&(L=t))}));const T=null!=(o=C.paper)?o:ue,B=null!=(d=P.paper)?d:Z,W=(0,l.y)({elementType:C.root,externalSlotProps:P.root,ownerState:E,className:[N.root,m]}),A=(0,l.y)({elementType:T,externalSlotProps:B,ownerState:E,className:N.paper});return(0,f.jsx)(de,(0,r.Z)({onClose:b,anchorOrigin:{vertical:"bottom",horizontal:I?"right":"left"},transformOrigin:I?se:le,slots:{paper:T,root:C.root},slotProps:{root:W,paper:A},open:g,ref:t,transitionDuration:y,TransitionProps:(0,r.Z)({onEntering:(e,t)=>{z.current&&z.current.adjustStyleForScrollbar(e,F),w&&w(e,t)}},R),ownerState:E},M,{classes:x,children:(0,f.jsx)(ce,(0,r.Z)({onKeyDown:e=>{"Tab"===e.key&&(e.preventDefault(),b&&b(e,"tabKeyDown"))},actions:z,autoFocus:c&&(-1===L||h),autoFocusItem:O,variant:k},v,{className:(0,a.Z)(N.list,v.className),children:p}))}))}))},1753:(e,t,o)=>{o.d(t,{Z:()=>C});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1796),d=o(948),u=o(1657),c=o(9773),p=o(539),m=o(8974),f=o(1705),h=o(5097),v=o(1588);const b=(0,v.Z)("MuiListItemIcon",["root","alignItemsFlexStart"]),g=(0,v.Z)("MuiListItemText",["root","multiline","dense","inset","primary","secondary"]);var Z=o(4867);function x(e){return(0,Z.Z)("MuiMenuItem",e)}const y=(0,v.Z)("MuiMenuItem",["root","focusVisible","dense","disabled","divider","gutters","selected"]);var w=o(5893);const S=["autoFocus","component","dense","divider","disableGutters","focusVisibleClassName","role","tabIndex","className"],k=(0,d.ZP)(p.Z,{shouldForwardProp:e=>(0,d.FO)(e)||"classes"===e,name:"MuiMenuItem",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,o.dense&&t.dense,o.divider&&t.divider,!o.disableGutters&&t.gutters]}})((({theme:e,ownerState:t})=>(0,n.Z)({},e.typography.body1,{display:"flex",justifyContent:"flex-start",alignItems:"center",position:"relative",textDecoration:"none",minHeight:48,paddingTop:6,paddingBottom:6,boxSizing:"border-box",whiteSpace:"nowrap"},!t.disableGutters&&{paddingLeft:16,paddingRight:16},t.divider&&{borderBottom:`1px solid ${(e.vars||e).palette.divider}`,backgroundClip:"padding-box"},{"&:hover":{textDecoration:"none",backgroundColor:(e.vars||e).palette.action.hover,"@media (hover: none)":{backgroundColor:"transparent"}},[`&.${y.selected}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity),[`&.${y.focusVisible}`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.focusOpacity}))`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.focusOpacity)}},[`&.${y.selected}:hover`]:{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / calc(${e.vars.palette.action.selectedOpacity} + ${e.vars.palette.action.hoverOpacity}))`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity+e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:e.vars?`rgba(${e.vars.palette.primary.mainChannel} / ${e.vars.palette.action.selectedOpacity})`:(0,l.Fq)(e.palette.primary.main,e.palette.action.selectedOpacity)}},[`&.${y.focusVisible}`]:{backgroundColor:(e.vars||e).palette.action.focus},[`&.${y.disabled}`]:{opacity:(e.vars||e).palette.action.disabledOpacity},[`& + .${h.Z.root}`]:{marginTop:e.spacing(1),marginBottom:e.spacing(1)},[`& + .${h.Z.inset}`]:{marginLeft:52},[`& .${g.root}`]:{marginTop:0,marginBottom:0},[`& .${g.inset}`]:{paddingLeft:36},[`& .${b.root}`]:{minWidth:36}},!t.dense&&{[e.breakpoints.up("sm")]:{minHeight:"auto"}},t.dense&&(0,n.Z)({minHeight:32,paddingTop:4,paddingBottom:4},e.typography.body2,{[`& .${b.root} svg`]:{fontSize:"1.25rem"}})))),C=i.forwardRef((function(e,t){const o=(0,u.Z)({props:e,name:"MuiMenuItem"}),{autoFocus:l=!1,component:d="li",dense:p=!1,divider:h=!1,disableGutters:v=!1,focusVisibleClassName:b,role:g="menuitem",tabIndex:Z,className:y}=o,C=(0,r.Z)(o,S),P=i.useContext(c.Z),$=i.useMemo((()=>({dense:p||P.dense||!1,disableGutters:v})),[P.dense,p,v]),R=i.useRef(null);(0,m.Z)((()=>{l&&R.current&&R.current.focus()}),[l]);const M=(0,n.Z)({},o,{dense:$.dense,divider:h,disableGutters:v}),F=(e=>{const{disabled:t,dense:o,divider:r,disableGutters:i,selected:a,classes:l}=e,d={root:["root",o&&"dense",t&&"disabled",!i&&"gutters",r&&"divider",a&&"selected"]},u=(0,s.Z)(d,x,l);return(0,n.Z)({},l,u)})(o),I=(0,f.Z)(R,t);let E;return o.disabled||(E=void 0!==Z?Z:-1),(0,w.jsx)(c.Z.Provider,{value:$,children:(0,w.jsx)(k,(0,n.Z)({ref:I,role:g,tabIndex:E,component:d,focusVisibleClassName:(0,a.Z)(F.focusVisible,b),className:(0,a.Z)(F.root,y)},C,{ownerState:M,classes:F}))})}))},5961:(e,t,o)=>{o.d(t,{ZP:()=>x,SJ:()=>g,wU:()=>v});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(8216),d=o(1588),u=o(4867);function c(e){return(0,u.Z)("MuiNativeSelect",e)}const p=(0,d.Z)("MuiNativeSelect",["root","select","multiple","filled","outlined","standard","disabled","icon","iconOpen","iconFilled","iconOutlined","iconStandard","nativeInput","error"]);var m=o(948),f=o(5893);const h=["className","disabled","error","IconComponent","inputRef","variant"],v=({ownerState:e,theme:t})=>(0,n.Z)({MozAppearance:"none",WebkitAppearance:"none",userSelect:"none",borderRadius:0,cursor:"pointer","&:focus":(0,n.Z)({},t.vars?{backgroundColor:`rgba(${t.vars.palette.common.onBackgroundChannel} / 0.05)`}:{backgroundColor:"light"===t.palette.mode?"rgba(0, 0, 0, 0.05)":"rgba(255, 255, 255, 0.05)"},{borderRadius:0}),"&::-ms-expand":{display:"none"},[`&.${p.disabled}`]:{cursor:"default"},"&[multiple]":{height:"auto"},"&:not([multiple]) option, &:not([multiple]) optgroup":{backgroundColor:(t.vars||t).palette.background.paper},"&&&":{paddingRight:24,minWidth:16}},"filled"===e.variant&&{"&&&":{paddingRight:32}},"outlined"===e.variant&&{borderRadius:(t.vars||t).shape.borderRadius,"&:focus":{borderRadius:(t.vars||t).shape.borderRadius},"&&&":{paddingRight:32}}),b=(0,m.ZP)("select",{name:"MuiNativeSelect",slot:"Select",shouldForwardProp:m.FO,overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.select,t[o.variant],o.error&&t.error,{[`&.${p.multiple}`]:t.multiple}]}})(v),g=({ownerState:e,theme:t})=>(0,n.Z)({position:"absolute",right:0,top:"calc(50% - .5em)",pointerEvents:"none",color:(t.vars||t).palette.action.active,[`&.${p.disabled}`]:{color:(t.vars||t).palette.action.disabled}},e.open&&{transform:"rotate(180deg)"},"filled"===e.variant&&{right:7},"outlined"===e.variant&&{right:7}),Z=(0,m.ZP)("svg",{name:"MuiNativeSelect",slot:"Icon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.icon,o.variant&&t[`icon${(0,l.Z)(o.variant)}`],o.open&&t.iconOpen]}})(g),x=i.forwardRef((function(e,t){const{className:o,disabled:d,error:u,IconComponent:p,inputRef:m,variant:v="standard"}=e,g=(0,r.Z)(e,h),x=(0,n.Z)({},e,{disabled:d,variant:v,error:u}),y=(e=>{const{classes:t,variant:o,disabled:r,multiple:n,open:i,error:a}=e,d={select:["select",o,r&&"disabled",n&&"multiple",a&&"error"],icon:["icon",`icon${(0,l.Z)(o)}`,i&&"iconOpen",r&&"disabled"]};return(0,s.Z)(d,c,t)})(x);return(0,f.jsxs)(i.Fragment,{children:[(0,f.jsx)(b,(0,n.Z)({ownerState:x,className:(0,a.Z)(y.select,o),disabled:d,ref:m||t},g)),e.multiple?null:(0,f.jsx)(Z,{as:p,ownerState:x,className:y.icon})]})}))},3031:(e,t,o)=>{o.d(t,{Z:()=>$});var r,n=o(3366),i=o(7462),a=o(7294),s=o(4780),l=o(948),d=o(5893);const u=["children","classes","className","label","notched"],c=(0,l.ZP)("fieldset",{shouldForwardProp:l.FO})({textAlign:"left",position:"absolute",bottom:0,right:0,top:-5,left:0,margin:0,padding:"0 8px",pointerEvents:"none",borderRadius:"inherit",borderStyle:"solid",borderWidth:1,overflow:"hidden",minWidth:"0%"}),p=(0,l.ZP)("legend",{shouldForwardProp:l.FO})((({ownerState:e,theme:t})=>(0,i.Z)({float:"unset",width:"auto",overflow:"hidden"},!e.withLabel&&{padding:0,lineHeight:"11px",transition:t.transitions.create("width",{duration:150,easing:t.transitions.easing.easeOut})},e.withLabel&&(0,i.Z)({display:"block",padding:0,height:11,fontSize:"0.75em",visibility:"hidden",maxWidth:.01,transition:t.transitions.create("max-width",{duration:50,easing:t.transitions.easing.easeOut}),whiteSpace:"nowrap","& > span":{paddingLeft:5,paddingRight:5,display:"inline-block",opacity:0,visibility:"visible"}},e.notched&&{maxWidth:"100%",transition:t.transitions.create("max-width",{duration:100,easing:t.transitions.easing.easeOut,delay:50})}))));var m=o(4423),f=o(5704),h=o(1588),v=o(4867),b=o(5827);function g(e){return(0,v.Z)("MuiOutlinedInput",e)}const Z=(0,i.Z)({},b.Z,(0,h.Z)("MuiOutlinedInput",["root","notchedOutline","input"]));var x=o(8543),y=o(1657);const w=["components","fullWidth","inputComponent","label","multiline","notched","slots","type"],S=(0,l.ZP)(x.Ej,{shouldForwardProp:e=>(0,l.FO)(e)||"classes"===e,name:"MuiOutlinedInput",slot:"Root",overridesResolver:x.Gx})((({theme:e,ownerState:t})=>{const o="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return(0,i.Z)({position:"relative",borderRadius:(e.vars||e).shape.borderRadius,[`&:hover .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.text.primary},"@media (hover: none)":{[`&:hover .${Z.notchedOutline}`]:{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:o}},[`&.${Z.focused} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette[t.color].main,borderWidth:2},[`&.${Z.error} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.error.main},[`&.${Z.disabled} .${Z.notchedOutline}`]:{borderColor:(e.vars||e).palette.action.disabled}},t.startAdornment&&{paddingLeft:14},t.endAdornment&&{paddingRight:14},t.multiline&&(0,i.Z)({padding:"16.5px 14px"},"small"===t.size&&{padding:"8.5px 14px"}))})),k=(0,l.ZP)((function(e){const{className:t,label:o,notched:a}=e,s=(0,n.Z)(e,u),l=null!=o&&""!==o,m=(0,i.Z)({},e,{notched:a,withLabel:l});return(0,d.jsx)(c,(0,i.Z)({"aria-hidden":!0,className:t,ownerState:m},s,{children:(0,d.jsx)(p,{ownerState:m,children:l?(0,d.jsx)("span",{children:o}):r||(r=(0,d.jsx)("span",{className:"notranslate",children:"​"}))})}))}),{name:"MuiOutlinedInput",slot:"NotchedOutline",overridesResolver:(e,t)=>t.notchedOutline})((({theme:e})=>{const t="light"===e.palette.mode?"rgba(0, 0, 0, 0.23)":"rgba(255, 255, 255, 0.23)";return{borderColor:e.vars?`rgba(${e.vars.palette.common.onBackgroundChannel} / 0.23)`:t}})),C=(0,l.ZP)(x.rA,{name:"MuiOutlinedInput",slot:"Input",overridesResolver:x._o})((({theme:e,ownerState:t})=>(0,i.Z)({padding:"16.5px 14px"},!e.vars&&{"&:-webkit-autofill":{WebkitBoxShadow:"light"===e.palette.mode?null:"0 0 0 100px #266798 inset",WebkitTextFillColor:"light"===e.palette.mode?null:"#fff",caretColor:"light"===e.palette.mode?null:"#fff",borderRadius:"inherit"}},e.vars&&{"&:-webkit-autofill":{borderRadius:"inherit"},[e.getColorSchemeSelector("dark")]:{"&:-webkit-autofill":{WebkitBoxShadow:"0 0 0 100px #266798 inset",WebkitTextFillColor:"#fff",caretColor:"#fff"}}},"small"===t.size&&{padding:"8.5px 14px"},t.multiline&&{padding:0},t.startAdornment&&{paddingLeft:0},t.endAdornment&&{paddingRight:0}))),P=a.forwardRef((function(e,t){var o,r,l,u,c;const p=(0,y.Z)({props:e,name:"MuiOutlinedInput"}),{components:h={},fullWidth:v=!1,inputComponent:b="input",label:Z,multiline:P=!1,notched:$,slots:R={},type:M="text"}=p,F=(0,n.Z)(p,w),I=(e=>{const{classes:t}=e,o=(0,s.Z)({root:["root"],notchedOutline:["notchedOutline"],input:["input"]},g,t);return(0,i.Z)({},t,o)})(p),E=(0,m.Z)(),N=(0,f.Z)({props:p,muiFormControl:E,states:["color","disabled","error","focused","hiddenLabel","size","required"]}),O=(0,i.Z)({},p,{color:N.color||"primary",disabled:N.disabled,error:N.error,focused:N.focused,formControl:E,fullWidth:v,hiddenLabel:N.hiddenLabel,multiline:P,size:N.size,type:M}),z=null!=(o=null!=(r=R.root)?r:h.Root)?o:S,L=null!=(l=null!=(u=R.input)?u:h.Input)?l:C;return(0,d.jsx)(x.ZP,(0,i.Z)({slots:{root:z,input:L},renderSuffix:e=>(0,d.jsx)(k,{ownerState:O,className:I.notchedOutline,label:null!=Z&&""!==Z&&N.required?c||(c=(0,d.jsxs)(a.Fragment,{children:[Z," ","*"]})):Z,notched:void 0!==$?$:Boolean(e.startAdornment||e.filled||e.focused)}),fullWidth:v,inputComponent:b,multiline:P,ref:t,type:M},F,{classes:(0,i.Z)({},I,{notchedOutline:null})}))}));P.muiName="Input";const $=P},6501:(e,t,o)=>{o.d(t,{Z:()=>g});var r=o(3366),n=o(7462),i=o(7294),a=o(512),s=o(4780),l=o(1796),d=o(948),u=o(2029),c=o(1657),p=o(1588),m=o(4867);function f(e){return(0,m.Z)("MuiPaper",e)}(0,p.Z)("MuiPaper",["root","rounded","outlined","elevation","elevation0","elevation1","elevation2","elevation3","elevation4","elevation5","elevation6","elevation7","elevation8","elevation9","elevation10","elevation11","elevation12","elevation13","elevation14","elevation15","elevation16","elevation17","elevation18","elevation19","elevation20","elevation21","elevation22","elevation23","elevation24"]);var h=o(5893);const v=["className","component","elevation","square","variant"],b=(0,d.ZP)("div",{name:"MuiPaper",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],!o.square&&t.rounded,"elevation"===o.variant&&t[`elevation${o.elevation}`]]}})((({theme:e,ownerState:t})=>{var o;return(0,n.Z)({backgroundColor:(e.vars||e).palette.background.paper,color:(e.vars||e).palette.text.primary,transition:e.transitions.create("box-shadow")},!t.square&&{borderRadius:e.shape.borderRadius},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.divider}`},"elevation"===t.variant&&(0,n.Z)({boxShadow:(e.vars||e).shadows[t.elevation]},!e.vars&&"dark"===e.palette.mode&&{backgroundImage:`linear-gradient(${(0,l.Fq)("#fff",(0,u.Z)(t.elevation))}, ${(0,l.Fq)("#fff",(0,u.Z)(t.elevation))})`},e.vars&&{backgroundImage:null==(o=e.vars.overlays)?void 0:o[t.elevation]}))})),g=i.forwardRef((function(e,t){const o=(0,c.Z)({props:e,name:"MuiPaper"}),{className:i,component:l="div",elevation:d=1,square:u=!1,variant:p="elevation"}=o,m=(0,r.Z)(o,v),g=(0,n.Z)({},o,{component:l,elevation:d,square:u,variant:p}),Z=(e=>{const{square:t,elevation:o,variant:r,classes:n}=e,i={root:["root",r,!t&&"rounded","elevation"===r&&`elevation${o}`]};return(0,s.Z)(i,f,n)})(g);return(0,h.jsx)(b,(0,n.Z)({as:l,ownerState:g,className:(0,a.Z)(Z.root,i),ref:t},m))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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SCxFQUNKaUYsR0FBUSxPQUE4QmpGLEVBQU9SLEdBQ3pDVSxHQUFhLE9BQVMsQ0FBQyxFQUFHRixFQUFPLENBQ3JDNkcsWUFDQTJjLFlBQ0FnRyxTQUNBeGlCLFlBRUk5QixFQTdEa0JoRixLQUN4QixNQUFNLE9BQ0pzcEIsRUFBTSxVQUNOaEcsRUFBUyxRQUNUeGMsRUFBTyxRQUNQOUIsR0FDRWhGLEVBQ0U2RSxFQUFRLENBQ1pJLEtBQU0sQ0FBQyxPQUFRNkIsR0FBVXdpQixHQUFVLFVBQXVCLGNBQVp4aUIsR0FBMkIsWUFBWXdjLE1BRXZGLE9BQU8sRUFBQWxlLEVBQUEsR0FBZVAsRUFBT3VrQixFQUFzQnBrQixFQUFRLEVBbUQzQ0ssQ0FBa0JyRixHQVFsQyxPQUFvQixTQUFLcXBCLEdBQVcsT0FBUyxDQUMzQ2hoQixHQUFJMUIsRUFDSjNHLFdBQVlBLEVBQ1owRyxXQUFXLEVBQUE0QixFQUFBLEdBQUt0RCxFQUFRQyxLQUFNeUIsR0FDOUJ6QyxJQUFLQSxHQUNKYyxHQUNMLEciLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9GaWxsZWRJbnB1dC9maWxsZWRJbnB1dENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRmlsbGVkSW5wdXQvRmlsbGVkSW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1Db250cm9sL3VzZUZvcm1Db250cm9sLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1IZWxwZXJUZXh0L2Zvcm1IZWxwZXJUZXh0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Gb3JtSGVscGVyVGV4dC9Gb3JtSGVscGVyVGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0dyaWQvR3JpZENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvR3JpZC9ncmlkQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9HcmlkL0dyaWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXQvaW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0L0lucHV0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0lucHV0QmFzZS9JbnB1dEJhc2UuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL2lucHV0QmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRCYXNlL3V0aWxzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9mb3JtTGFiZWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Zvcm1MYWJlbC9Gb3JtTGFiZWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvSW5wdXRMYWJlbC9pbnB1dExhYmVsQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9JbnB1dExhYmVsL0lucHV0TGFiZWwuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTGluay9saW5rQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaW5rL2dldFRleHREZWNvcmF0aW9uLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpbmsvTGluay5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L2xpc3RDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3QvTGlzdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0L0xpc3RDb250ZXh0LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtQnV0dG9uL2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9MaXN0SXRlbUJ1dHRvbi9MaXN0SXRlbUJ1dHRvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51TGlzdC9NZW51TGlzdC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Hcm93L0dyb3cuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTW9kYWwvbW9kYWxDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01vZGFsL01vZGFsLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL1BvcG92ZXIvcG9wb3ZlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUG9wb3Zlci9Qb3BvdmVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnUvbWVudUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvTWVudS9NZW51LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtSWNvbi9saXN0SXRlbUljb25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0xpc3RJdGVtVGV4dC9saXN0SXRlbVRleHRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL01lbnVJdGVtL21lbnVJdGVtQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9NZW51SXRlbS9NZW51SXRlbS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvbmF0aXZlU2VsZWN0Q2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9OYXRpdmVTZWxlY3QvTmF0aXZlU2VsZWN0SW5wdXQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvT3V0bGluZWRJbnB1dC9Ob3RjaGVkT3V0bGluZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9PdXRsaW5lZElucHV0L291dGxpbmVkSW5wdXRDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL091dGxpbmVkSW5wdXQvT3V0bGluZWRJbnB1dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9QYXBlci9wYXBlckNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvUGFwZXIvUGFwZXIuanMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRGaWxsZWRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRmlsbGVkSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IGZpbGxlZElucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlGaWxsZWRJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgZmlsbGVkSW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaGlkZGVuTGFiZWxcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcIm11bHRpbGluZVwiLCBcInNsb3RQcm9wc1wiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHJlZlR5cGUsIGRlZXBtZXJnZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCBJbnB1dEJhc2UgZnJvbSAnLi4vSW5wdXRCYXNlJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZmlsbGVkSW5wdXRDbGFzc2VzLCB7IGdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9maWxsZWRJbnB1dENsYXNzZXMnO1xuaW1wb3J0IHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlVW5kZXJsaW5lXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCAhZGlzYWJsZVVuZGVybGluZSAmJiAndW5kZXJsaW5lJ10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0RmlsbGVkSW5wdXRVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgRmlsbGVkSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbLi4uaW5wdXRCYXNlUm9vdE92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCBzdHlsZXMpLCAhb3duZXJTdGF0ZS5kaXNhYmxlVW5kZXJsaW5lICYmIHN0eWxlcy51bmRlcmxpbmVdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3BhbGV0dGU7XG4gIGNvbnN0IGxpZ2h0ID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnO1xuICBjb25zdCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuMDYpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDkpJztcbiAgY29uc3QgaG92ZXJCYWNrZ3JvdW5kID0gbGlnaHQgPyAncmdiYSgwLCAwLCAwLCAwLjA5KScgOiAncmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEzKSc7XG4gIGNvbnN0IGRpc2FibGVkQmFja2dyb3VuZCA9IGxpZ2h0ID8gJ3JnYmEoMCwgMCwgMCwgMC4xMiknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMiknO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5GaWxsZWRJbnB1dC5iZyA6IGJhY2tncm91bmRDb2xvcixcbiAgICBib3JkZXJUb3BMZWZ0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIGJvcmRlclRvcFJpZ2h0UmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgnYmFja2dyb3VuZC1jb2xvcicsIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLFxuICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgIH0pLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmhvdmVyQmcgOiBob3ZlckJhY2tncm91bmQsXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5mb2N1c2VkfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuRmlsbGVkSW5wdXQuYmcgOiBiYWNrZ3JvdW5kQ29sb3JcbiAgICB9LFxuICAgIFtgJi4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gdGhlbWUudmFycy5wYWxldHRlLkZpbGxlZElucHV0LmRpc2FibGVkQmcgOiBkaXNhYmxlZEJhY2tncm91bmRcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KF9wYWxldHRlID0gKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvciB8fCAncHJpbWFyeSddKSA9PSBudWxsID8gdm9pZCAwIDogX3BhbGV0dGUubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG5cbiAgICBbYCYuJHtmaWxsZWRJbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjpiZWZvcmUsICY6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHt0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gJHt0aGVtZS52YXJzLm9wYWNpdHkuaW5wdXRVbmRlcmxpbmV9KWAgOiBib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG5cbiAgICBbYCY6aG92ZXI6bm90KC4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2ZpbGxlZElucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YFxuICAgIH0sXG4gICAgW2AmLiR7ZmlsbGVkSW5wdXRDbGFzc2VzLmRpc2FibGVkfTpiZWZvcmVgXToge1xuICAgICAgYm9yZGVyQm90dG9tU3R5bGU6ICdkb3R0ZWQnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnN0YXJ0QWRvcm5tZW50ICYmIHtcbiAgICBwYWRkaW5nTGVmdDogMTJcbiAgfSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdSaWdodDogMTJcbiAgfSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICAgIHBhZGRpbmc6ICcyNXB4IDEycHggOHB4J1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDIxLFxuICAgIHBhZGRpbmdCb3R0b206IDRcbiAgfSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiB7XG4gICAgcGFkZGluZ1RvcDogMTYsXG4gICAgcGFkZGluZ0JvdHRvbTogMTdcbiAgfSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmdUb3A6IDgsXG4gICAgcGFkZGluZ0JvdHRvbTogOVxuICB9KSk7XG59KTtcbmNvbnN0IEZpbGxlZElucHV0SW5wdXQgPSBzdHlsZWQoSW5wdXRCYXNlSW5wdXQsIHtcbiAgbmFtZTogJ011aUZpbGxlZElucHV0JyxcbiAgc2xvdDogJ0lucHV0JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IGlucHV0QmFzZUlucHV0T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIHBhZGRpbmdUb3A6IDI1LFxuICBwYWRkaW5nUmlnaHQ6IDEyLFxuICBwYWRkaW5nQm90dG9tOiA4LFxuICBwYWRkaW5nTGVmdDogMTJcbn0sICF0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBXZWJraXRCb3hTaGFkb3c6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnMCAwIDAgMTAwcHggIzI2Njc5OCBpbnNldCcsXG4gICAgV2Via2l0VGV4dEZpbGxDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBjYXJldENvbG9yOiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJyNmZmYnLFxuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICdpbmhlcml0JyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJ2luaGVyaXQnXG4gIH1cbn0sIHRoZW1lLnZhcnMgJiYge1xuICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgIGJvcmRlclRvcExlZnRSYWRpdXM6ICdpbmhlcml0JyxcbiAgICBib3JkZXJUb3BSaWdodFJhZGl1czogJ2luaGVyaXQnXG4gIH0sXG4gIFt0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKCdkYXJrJyldOiB7XG4gICAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICAgIFdlYmtpdEJveFNoYWRvdzogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgICAgV2Via2l0VGV4dEZpbGxDb2xvcjogJyNmZmYnLFxuICAgICAgY2FyZXRDb2xvcjogJyNmZmYnXG4gICAgfVxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiAyMSxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiB7XG4gIHBhZGRpbmdUb3A6IDE2LFxuICBwYWRkaW5nQm90dG9tOiAxN1xufSwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAwXG59LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gIHBhZGRpbmdSaWdodDogMFxufSwgb3duZXJTdGF0ZS5oaWRkZW5MYWJlbCAmJiBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA5XG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gIHBhZGRpbmdUb3A6IDAsXG4gIHBhZGRpbmdCb3R0b206IDAsXG4gIHBhZGRpbmdMZWZ0OiAwLFxuICBwYWRkaW5nUmlnaHQ6IDBcbn0pKTtcbmNvbnN0IEZpbGxlZElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gRmlsbGVkSW5wdXQoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRpbnB1dDtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRmlsbGVkSW5wdXQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHM6IGNvbXBvbmVudHNQcm9wc1Byb3AsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIC8vIGRlY2xhcmUgaGVyZSB0byBwcmV2ZW50IHNwcmVhZGluZyB0byBET01cbiAgICAgIGlucHV0Q29tcG9uZW50ID0gJ2lucHV0JyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgc2xvdFByb3BzLFxuICAgICAgc2xvdHMgPSB7fSxcbiAgICAgIHR5cGUgPSAndGV4dCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmUsXG4gICAgdHlwZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMgPSB7XG4gICAgcm9vdDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0sXG4gICAgaW5wdXQ6IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9XG4gIH07XG4gIGNvbnN0IGNvbXBvbmVudHNQcm9wcyA9IChzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApID8gZGVlcG1lcmdlKGZpbGxlZElucHV0Q29tcG9uZW50c1Byb3BzLCBzbG90UHJvcHMgIT0gbnVsbCA/IHNsb3RQcm9wcyA6IGNvbXBvbmVudHNQcm9wc1Byb3ApIDogZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHM7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogRmlsbGVkSW5wdXRSb290O1xuICBjb25zdCBJbnB1dFNsb3QgPSAoX3JlZjIgPSAoX3Nsb3RzJGlucHV0ID0gc2xvdHMuaW5wdXQpICE9IG51bGwgPyBfc2xvdHMkaW5wdXQgOiBjb21wb25lbnRzLklucHV0KSAhPSBudWxsID8gX3JlZjIgOiBGaWxsZWRJbnB1dElucHV0O1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goSW5wdXRCYXNlLCBfZXh0ZW5kcyh7XG4gICAgc2xvdHM6IHtcbiAgICAgIHJvb3Q6IFJvb3RTbG90LFxuICAgICAgaW5wdXQ6IElucHV0U2xvdFxuICAgIH0sXG4gICAgY29tcG9uZW50c1Byb3BzOiBjb21wb25lbnRzUHJvcHMsXG4gICAgZnVsbFdpZHRoOiBmdWxsV2lkdGgsXG4gICAgaW5wdXRDb21wb25lbnQ6IGlucHV0Q29tcG9uZW50LFxuICAgIG11bHRpbGluZTogbXVsdGlsaW5lLFxuICAgIHJlZjogcmVmLFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgb3RoZXIsIHtcbiAgICBjbGFzc2VzOiBjbGFzc2VzXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRmlsbGVkSW5wdXQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBpbnB1dCB3aWxsIG5vdCBoYXZlIGFuIHVuZGVybGluZS5cbiAgICovXG4gIGRpc2FibGVVbmRlcmxpbmU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRW5kIGBJbnB1dEFkb3JubWVudGAgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKi9cbiAgZW5kQWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCB0YWtlIHVwIHRoZSBmdWxsIHdpZHRoIG9mIGl0cyBjb250YWluZXIuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmdWxsV2lkdGg6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgaGlkZGVuLlxuICAgKiBUaGlzIGlzIHVzZWQgdG8gaW5jcmVhc2UgZGVuc2l0eSBmb3IgYSBgRmlsbGVkSW5wdXRgLlxuICAgKiBCZSBzdXJlIHRvIGFkZCBgYXJpYS1sYWJlbGAgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGhpZGRlbkxhYmVsOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuRmlsbGVkSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBGaWxsZWRJbnB1dDsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUNvbnRyb2wnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1Db250cm9sQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1Db250cm9sJywgWydyb290JywgJ21hcmdpbk5vbmUnLCAnbWFyZ2luTm9ybWFsJywgJ21hcmdpbkRlbnNlJywgJ2Z1bGxXaWR0aCcsICdkaXNhYmxlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1Db250cm9sQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJlcnJvclwiLCBcImZvY3VzZWRcIiwgXCJmdWxsV2lkdGhcIiwgXCJoaWRkZW5MYWJlbFwiLCBcIm1hcmdpblwiLCBcInJlcXVpcmVkXCIsIFwic2l6ZVwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgaXNGaWxsZWQsIGlzQWRvcm5lZFN0YXJ0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL3V0aWxzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGlzTXVpRWxlbWVudCBmcm9tICcuLi91dGlscy9pc011aUVsZW1lbnQnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtQ29udHJvbENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIG1hcmdpbixcbiAgICBmdWxsV2lkdGhcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIG1hcmdpbiAhPT0gJ25vbmUnICYmIGBtYXJnaW4ke2NhcGl0YWxpemUobWFyZ2luKX1gLCBmdWxsV2lkdGggJiYgJ2Z1bGxXaWR0aCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUNvbnRyb2xVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgRm9ybUNvbnRyb2xSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlGb3JtQ29udHJvbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBzdHlsZXNbYG1hcmdpbiR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLm1hcmdpbil9YF0sIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHN0eWxlcy5mdWxsV2lkdGgpO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGZsZXhEaXJlY3Rpb246ICdjb2x1bW4nLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgLy8gUmVzZXQgZmllbGRzZXQgZGVmYXVsdCBzdHlsZS5cbiAgbWluV2lkdGg6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIG1hcmdpbjogMCxcbiAgYm9yZGVyOiAwLFxuICB2ZXJ0aWNhbEFsaWduOiAndG9wJ1xufSwgb3duZXJTdGF0ZS5tYXJnaW4gPT09ICdub3JtYWwnICYmIHtcbiAgbWFyZ2luVG9wOiAxNixcbiAgbWFyZ2luQm90dG9tOiA4XG59LCBvd25lclN0YXRlLm1hcmdpbiA9PT0gJ2RlbnNlJyAmJiB7XG4gIG1hcmdpblRvcDogOCxcbiAgbWFyZ2luQm90dG9tOiA0XG59LCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiB7XG4gIHdpZHRoOiAnMTAwJSdcbn0pKTtcblxuLyoqXG4gKiBQcm92aWRlcyBjb250ZXh0IHN1Y2ggYXMgZmlsbGVkL2ZvY3VzZWQvZXJyb3IvcmVxdWlyZWQgZm9yIGZvcm0gaW5wdXRzLlxuICogUmVseWluZyBvbiB0aGUgY29udGV4dCBwcm92aWRlcyBoaWdoIGZsZXhpYmlsaXR5IGFuZCBlbnN1cmVzIHRoYXQgdGhlIHN0YXRlIGFsd2F5cyBzdGF5c1xuICogY29uc2lzdGVudCBhY3Jvc3MgdGhlIGNoaWxkcmVuIG9mIHRoZSBgRm9ybUNvbnRyb2xgLlxuICogVGhpcyBjb250ZXh0IGlzIHVzZWQgYnkgdGhlIGZvbGxvd2luZyBjb21wb25lbnRzOlxuICpcbiAqICAtIEZvcm1MYWJlbFxuICogIC0gRm9ybUhlbHBlclRleHRcbiAqICAtIElucHV0XG4gKiAgLSBJbnB1dExhYmVsXG4gKlxuICogWW91IGNhbiBmaW5kIG9uZSBjb21wb3NpdGlvbiBleGFtcGxlIGJlbG93IGFuZCBtb3JlIGdvaW5nIHRvIFt0aGUgZGVtb3NdKC9tYXRlcmlhbC11aS9yZWFjdC10ZXh0LWZpZWxkLyNjb21wb25lbnRzKS5cbiAqXG4gKiBgYGBqc3hcbiAqIDxGb3JtQ29udHJvbD5cbiAqICAgPElucHV0TGFiZWwgaHRtbEZvcj1cIm15LWlucHV0XCI+RW1haWwgYWRkcmVzczwvSW5wdXRMYWJlbD5cbiAqICAgPElucHV0IGlkPVwibXktaW5wdXRcIiBhcmlhLWRlc2NyaWJlZGJ5PVwibXktaGVscGVyLXRleHRcIiAvPlxuICogICA8Rm9ybUhlbHBlclRleHQgaWQ9XCJteS1oZWxwZXItdGV4dFwiPldlJ2xsIG5ldmVyIHNoYXJlIHlvdXIgZW1haWwuPC9Gb3JtSGVscGVyVGV4dD5cbiAqIDwvRm9ybUNvbnRyb2w+XG4gKiBgYGBcbiAqXG4gKiDimqDvuI8gT25seSBvbmUgYElucHV0QmFzZWAgY2FuIGJlIHVzZWQgd2l0aGluIGEgRm9ybUNvbnRyb2wgYmVjYXVzZSBpdCBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMuXG4gKiBGb3IgaW5zdGFuY2UsIG9ubHkgb25lIGlucHV0IGNhbiBiZSBmb2N1c2VkIGF0IHRoZSBzYW1lIHRpbWUsIHRoZSBzdGF0ZSBzaG91bGRuJ3QgYmUgc2hhcmVkLlxuICovXG5jb25zdCBGb3JtQ29udHJvbCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZvcm1Db250cm9sKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlGb3JtQ29udHJvbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29sb3IgPSAncHJpbWFyeScsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGRpc2FibGVkID0gZmFsc2UsXG4gICAgICBlcnJvciA9IGZhbHNlLFxuICAgICAgZm9jdXNlZDogdmlzdWFsbHlGb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoID0gZmFsc2UsXG4gICAgICBoaWRkZW5MYWJlbCA9IGZhbHNlLFxuICAgICAgbWFyZ2luID0gJ25vbmUnLFxuICAgICAgcmVxdWlyZWQgPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHZhcmlhbnQgPSAnb3V0bGluZWQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZXJyb3IsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsLFxuICAgIG1hcmdpbixcbiAgICByZXF1aXJlZCxcbiAgICBzaXplLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgW2Fkb3JuZWRTdGFydCwgc2V0QWRvcm5lZFN0YXJ0XSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxBZG9ybmVkU3RhcnQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGlucHV0ID0gaXNNdWlFbGVtZW50KGNoaWxkLCBbJ1NlbGVjdCddKSA/IGNoaWxkLnByb3BzLmlucHV0IDogY2hpbGQ7XG4gICAgICAgIGlmIChpbnB1dCAmJiBpc0Fkb3JuZWRTdGFydChpbnB1dC5wcm9wcykpIHtcbiAgICAgICAgICBpbml0aWFsQWRvcm5lZFN0YXJ0ID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsQWRvcm5lZFN0YXJ0O1xuICB9KTtcbiAgY29uc3QgW2ZpbGxlZCwgc2V0RmlsbGVkXSA9IFJlYWN0LnVzZVN0YXRlKCgpID0+IHtcbiAgICAvLyBXZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgY2hpbGRyZW4gYW5kIGZpbmQgdGhlIElucHV0IGluIG9yZGVyXG4gICAgLy8gdG8gZnVsbHkgc3VwcG9ydCBzZXJ2ZXItc2lkZSByZW5kZXJpbmcuXG4gICAgbGV0IGluaXRpYWxGaWxsZWQgPSBmYWxzZTtcbiAgICBpZiAoY2hpbGRyZW4pIHtcbiAgICAgIFJlYWN0LkNoaWxkcmVuLmZvckVhY2goY2hpbGRyZW4sIGNoaWxkID0+IHtcbiAgICAgICAgaWYgKCFpc011aUVsZW1lbnQoY2hpbGQsIFsnSW5wdXQnLCAnU2VsZWN0J10pKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0ZpbGxlZChjaGlsZC5wcm9wcywgdHJ1ZSkgfHwgaXNGaWxsZWQoY2hpbGQucHJvcHMuaW5wdXRQcm9wcywgdHJ1ZSkpIHtcbiAgICAgICAgICBpbml0aWFsRmlsbGVkID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBpbml0aWFsRmlsbGVkO1xuICB9KTtcbiAgY29uc3QgW2ZvY3VzZWRTdGF0ZSwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c2VkU3RhdGUpIHtcbiAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgfVxuICBjb25zdCBmb2N1c2VkID0gdmlzdWFsbHlGb2N1c2VkICE9PSB1bmRlZmluZWQgJiYgIWRpc2FibGVkID8gdmlzdWFsbHlGb2N1c2VkIDogZm9jdXNlZFN0YXRlO1xuICBsZXQgcmVnaXN0ZXJFZmZlY3Q7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgcmVnaXN0ZXJlZElucHV0ID0gUmVhY3QudXNlUmVmKGZhbHNlKTtcbiAgICByZWdpc3RlckVmZmVjdCA9ICgpID0+IHtcbiAgICAgIGlmIChyZWdpc3RlcmVkSW5wdXQuY3VycmVudCkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBUaGVyZSBhcmUgbXVsdGlwbGUgYElucHV0QmFzZWAgY29tcG9uZW50cyBpbnNpZGUgYSBGb3JtQ29udHJvbC4nLCAnVGhpcyBjcmVhdGVzIHZpc3VhbCBpbmNvbnNpc3RlbmNpZXMsIG9ubHkgdXNlIG9uZSBgSW5wdXRCYXNlYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IHRydWU7XG4gICAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgICByZWdpc3RlcmVkSW5wdXQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgfTtcbiAgICB9O1xuICB9XG4gIGNvbnN0IGNoaWxkQ29udGV4dCA9IFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBhZG9ybmVkU3RhcnQsXG4gICAgICBzZXRBZG9ybmVkU3RhcnQsXG4gICAgICBjb2xvcixcbiAgICAgIGRpc2FibGVkLFxuICAgICAgZXJyb3IsXG4gICAgICBmaWxsZWQsXG4gICAgICBmb2N1c2VkLFxuICAgICAgZnVsbFdpZHRoLFxuICAgICAgaGlkZGVuTGFiZWwsXG4gICAgICBzaXplLFxuICAgICAgb25CbHVyOiAoKSA9PiB7XG4gICAgICAgIHNldEZvY3VzZWQoZmFsc2UpO1xuICAgICAgfSxcbiAgICAgIG9uRW1wdHk6ICgpID0+IHtcbiAgICAgICAgc2V0RmlsbGVkKGZhbHNlKTtcbiAgICAgIH0sXG4gICAgICBvbkZpbGxlZDogKCkgPT4ge1xuICAgICAgICBzZXRGaWxsZWQodHJ1ZSk7XG4gICAgICB9LFxuICAgICAgb25Gb2N1czogKCkgPT4ge1xuICAgICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgICAgfSxcbiAgICAgIHJlZ2lzdGVyRWZmZWN0LFxuICAgICAgcmVxdWlyZWQsXG4gICAgICB2YXJpYW50XG4gICAgfTtcbiAgfSwgW2Fkb3JuZWRTdGFydCwgY29sb3IsIGRpc2FibGVkLCBlcnJvciwgZmlsbGVkLCBmb2N1c2VkLCBmdWxsV2lkdGgsIGhpZGRlbkxhYmVsLCByZWdpc3RlckVmZmVjdCwgcmVxdWlyZWQsIHNpemUsIHZhcmlhbnRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sQ29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEZvcm1Db250cm9sUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWZcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBGb3JtQ29udHJvbC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwsIGlucHV0IGFuZCBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzcGxheWVkIGluIGZvY3VzZWQgc3RhdGUuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBoaWRkZW4uXG4gICAqIFRoaXMgaXMgdXNlZCB0byBpbmNyZWFzZSBkZW5zaXR5IGZvciBhIGBGaWxsZWRJbnB1dGAuXG4gICAqIEJlIHN1cmUgdG8gYWRkIGBhcmlhLWxhYmVsYCB0byB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgaGlkZGVuTGFiZWw6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCBvciBgbm9ybWFsYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZyBvZiB0aGlzIGFuZCBjb250YWluZWQgY29tcG9uZW50cy5cbiAgICogQGRlZmF1bHQgJ25vbmUnXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnLCAnbm9ybWFsJ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ21lZGl1bSdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbWVkaXVtJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdvdXRsaW5lZCdcbiAgICovXG4gIHZhcmlhbnQ6IFByb3BUeXBlcy5vbmVPZihbJ2ZpbGxlZCcsICdvdXRsaW5lZCcsICdzdGFuZGFyZCddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1Db250cm9sOyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuY29uc3QgRm9ybUNvbnRyb2xDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEZvcm1Db250cm9sQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdGb3JtQ29udHJvbENvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgRm9ybUNvbnRyb2xDb250ZXh0OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1Db250cm9sU3RhdGUoe1xuICBwcm9wcyxcbiAgc3RhdGVzLFxuICBtdWlGb3JtQ29udHJvbFxufSkge1xuICByZXR1cm4gc3RhdGVzLnJlZHVjZSgoYWNjLCBzdGF0ZSkgPT4ge1xuICAgIGFjY1tzdGF0ZV0gPSBwcm9wc1tzdGF0ZV07XG4gICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICBpZiAodHlwZW9mIHByb3BzW3N0YXRlXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgYWNjW3N0YXRlXSA9IG11aUZvcm1Db250cm9sW3N0YXRlXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IEZvcm1Db250cm9sQ29udGV4dCBmcm9tICcuL0Zvcm1Db250cm9sQ29udGV4dCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VGb3JtQ29udHJvbCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRm9ybUNvbnRyb2xDb250ZXh0KTtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUhlbHBlclRleHRVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpRm9ybUhlbHBlclRleHQnLCBzbG90KTtcbn1cbmNvbnN0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1IZWxwZXJUZXh0JywgWydyb290JywgJ2Vycm9yJywgJ2Rpc2FibGVkJywgJ3NpemVTbWFsbCcsICdzaXplTWVkaXVtJywgJ2NvbnRhaW5lZCcsICdmb2N1c2VkJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwibWFyZ2luXCIsIFwicmVxdWlyZWRcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGZvcm1IZWxwZXJUZXh0Q2xhc3NlcywgeyBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9mb3JtSGVscGVyVGV4dENsYXNzZXMnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbnRhaW5lZCxcbiAgICBzaXplLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICBmb2N1c2VkLFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBzaXplICYmIGBzaXplJHtjYXBpdGFsaXplKHNpemUpfWAsIGNvbnRhaW5lZCAmJiAnY29udGFpbmVkJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZpbGxlZCAmJiAnZmlsbGVkJywgcmVxdWlyZWQgJiYgJ3JlcXVpcmVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRGb3JtSGVscGVyVGV4dFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBGb3JtSGVscGVyVGV4dFJvb3QgPSBzdHlsZWQoJ3AnLCB7XG4gIG5hbWU6ICdNdWlGb3JtSGVscGVyVGV4dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBvd25lclN0YXRlLnNpemUgJiYgc3R5bGVzW2BzaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF0sIG93bmVyU3RhdGUuY29udGFpbmVkICYmIHN0eWxlcy5jb250YWluZWQsIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWRdO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuY2FwdGlvbiwge1xuICB0ZXh0QWxpZ246ICdsZWZ0JyxcbiAgbWFyZ2luVG9wOiAzLFxuICBtYXJnaW5SaWdodDogMCxcbiAgbWFyZ2luQm90dG9tOiAwLFxuICBtYXJnaW5MZWZ0OiAwLFxuICBbYCYuJHtmb3JtSGVscGVyVGV4dENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtSGVscGVyVGV4dENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5Ub3A6IDRcbn0sIG93bmVyU3RhdGUuY29udGFpbmVkICYmIHtcbiAgbWFyZ2luTGVmdDogMTQsXG4gIG1hcmdpblJpZ2h0OiAxNFxufSkpO1xuY29uc3QgRm9ybUhlbHBlclRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtSGVscGVyVGV4dChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpRm9ybUhlbHBlclRleHQnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjaGlsZHJlbixcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdwJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWyd2YXJpYW50JywgJ3NpemUnLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnZmlsbGVkJywgJ2ZvY3VzZWQnLCAncmVxdWlyZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbXBvbmVudCxcbiAgICBjb250YWluZWQ6IGZjcy52YXJpYW50ID09PSAnZmlsbGVkJyB8fCBmY3MudmFyaWFudCA9PT0gJ291dGxpbmVkJyxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBkaXNhYmxlZDogZmNzLmRpc2FibGVkLFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZmlsbGVkOiBmY3MuZmlsbGVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkLFxuICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEZvcm1IZWxwZXJUZXh0Um9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IGNoaWxkcmVuID09PSAnICcgPyAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgIF9zcGFuIHx8IChfc3BhbiA9IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICBjbGFzc05hbWU6IFwibm90cmFuc2xhdGVcIixcbiAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgIH0pKSA6IGNoaWxkcmVuXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUhlbHBlclRleHQucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICpcbiAgICogSWYgYCcgJ2AgaXMgcHJvdmlkZWQsIHRoZSBjb21wb25lbnQgcmVzZXJ2ZXMgb25lIGxpbmUgaGVpZ2h0IGZvciBkaXNwbGF5aW5nIGEgZnV0dXJlIG1lc3NhZ2UuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgYmUgZGlzcGxheWVkIGluIGEgZGlzYWJsZWQgc3RhdGUuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIGhlbHBlciB0ZXh0IHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYW4gZXJyb3Igc3RhdGUuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIGZpbGxlZCBjbGFzc2VzIGtleS5cbiAgICovXG4gIGZpbGxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIGZvY3VzZWQgY2xhc3NlcyBrZXkuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBoZWxwZXIgdGV4dCBzaG91bGQgdXNlIHJlcXVpcmVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLlxuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEZvcm1IZWxwZXJUZXh0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgR2xvYmFsU3R5bGVzIGFzIFN5c3RlbUdsb2JhbFN0eWxlcyB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBkZWZhdWx0VGhlbWUgZnJvbSAnLi4vc3R5bGVzL2RlZmF1bHRUaGVtZSc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi4vc3R5bGVzL2lkZW50aWZpZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIEdsb2JhbFN0eWxlcyhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtR2xvYmFsU3R5bGVzLCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBkZWZhdWx0VGhlbWU6IGRlZmF1bHRUaGVtZSxcbiAgICB0aGVtZUlkOiBUSEVNRV9JRFxuICB9KSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIHN0eWxlcyB5b3Ugd2FudCB0byBhcHBseSBnbG9iYWxseS5cbiAgICovXG4gIHN0eWxlczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYm9vbF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgR2xvYmFsU3R5bGVzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEdyaWRDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQoKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIEdyaWRDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0dyaWRDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEdyaWRDb250ZXh0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRHcmlkVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlHcmlkJywgc2xvdCk7XG59XG5jb25zdCBTUEFDSU5HUyA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF07XG5jb25zdCBESVJFQ1RJT05TID0gWydjb2x1bW4tcmV2ZXJzZScsICdjb2x1bW4nLCAncm93LXJldmVyc2UnLCAncm93J107XG5jb25zdCBXUkFQUyA9IFsnbm93cmFwJywgJ3dyYXAtcmV2ZXJzZScsICd3cmFwJ107XG5jb25zdCBHUklEX1NJWkVTID0gWydhdXRvJywgdHJ1ZSwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwgOSwgMTAsIDExLCAxMl07XG5jb25zdCBncmlkQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUdyaWQnLCBbJ3Jvb3QnLCAnY29udGFpbmVyJywgJ2l0ZW0nLCAnemVyb01pbldpZHRoJyxcbi8vIHNwYWNpbmdzXG4uLi5TUEFDSU5HUy5tYXAoc3BhY2luZyA9PiBgc3BhY2luZy14cy0ke3NwYWNpbmd9YCksXG4vLyBkaXJlY3Rpb24gdmFsdWVzXG4uLi5ESVJFQ1RJT05TLm1hcChkaXJlY3Rpb24gPT4gYGRpcmVjdGlvbi14cy0ke2RpcmVjdGlvbn1gKSxcbi8vIHdyYXAgdmFsdWVzXG4uLi5XUkFQUy5tYXAod3JhcCA9PiBgd3JhcC14cy0ke3dyYXB9YCksXG4vLyBncmlkIHNpemVzIGZvciBhbGwgYnJlYWtwb2ludHNcbi4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQteHMtJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLXNtLSR7c2l6ZX1gKSwgLi4uR1JJRF9TSVpFUy5tYXAoc2l6ZSA9PiBgZ3JpZC1tZC0ke3NpemV9YCksIC4uLkdSSURfU0laRVMubWFwKHNpemUgPT4gYGdyaWQtbGctJHtzaXplfWApLCAuLi5HUklEX1NJWkVTLm1hcChzaXplID0+IGBncmlkLXhsLSR7c2l6ZX1gKV0pO1xuZXhwb3J0IGRlZmF1bHQgZ3JpZENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG4vLyBBIGdyaWQgY29tcG9uZW50IHVzaW5nIHRoZSBmb2xsb3dpbmcgbGlicyBhcyBpbnNwaXJhdGlvbi5cbi8vXG4vLyBGb3IgdGhlIGltcGxlbWVudGF0aW9uOlxuLy8gLSBodHRwczovL2dldGJvb3RzdHJhcC5jb20vZG9jcy80LjMvbGF5b3V0L2dyaWQvXG4vLyAtIGh0dHBzOi8vZ2l0aHViLmNvbS9rcmlzdG9mZXJqb3NlcGgvZmxleGJveGdyaWQvYmxvYi9tYXN0ZXIvc3JjL2Nzcy9mbGV4Ym94Z3JpZC5jc3Ncbi8vIC0gaHR0cHM6Ly9naXRodWIuY29tL3JveWxlZTA3MDQvcmVhY3QtZmxleGJveC1ncmlkXG4vLyAtIGh0dHBzOi8vbWF0ZXJpYWwuYW5ndWxhcmpzLm9yZy9sYXRlc3QvbGF5b3V0L2ludHJvZHVjdGlvblxuLy9cbi8vIEZvbGxvdyB0aGlzIGZsZXhib3ggR3VpZGUgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgbW9kZWw6XG4vLyAtIGh0dHBzOi8vY3NzLXRyaWNrcy5jb20vc25pcHBldHMvY3NzL2EtZ3VpZGUtdG8tZmxleGJveC9cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb2x1bW5zXCIsIFwiY29sdW1uU3BhY2luZ1wiLCBcImNvbXBvbmVudFwiLCBcImNvbnRhaW5lclwiLCBcImRpcmVjdGlvblwiLCBcIml0ZW1cIiwgXCJyb3dTcGFjaW5nXCIsIFwic3BhY2luZ1wiLCBcIndyYXBcIiwgXCJ6ZXJvTWluV2lkdGhcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9leHRlbmRTeFByb3AgYXMgZXh0ZW5kU3hQcm9wLCBoYW5kbGVCcmVha3BvaW50cywgdW5zdGFibGVfcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgYXMgcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgcmVxdWlyZVByb3BGYWN0b3J5IGZyb20gJy4uL3V0aWxzL3JlcXVpcmVQcm9wRmFjdG9yeSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZSc7XG5pbXBvcnQgR3JpZENvbnRleHQgZnJvbSAnLi9HcmlkQ29udGV4dCc7XG5pbXBvcnQgZ3JpZENsYXNzZXMsIHsgZ2V0R3JpZFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vZ3JpZENsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIGdldE9mZnNldCh2YWwpIHtcbiAgY29uc3QgcGFyc2UgPSBwYXJzZUZsb2F0KHZhbCk7XG4gIHJldHVybiBgJHtwYXJzZX0ke1N0cmluZyh2YWwpLnJlcGxhY2UoU3RyaW5nKHBhcnNlKSwgJycpIHx8ICdweCd9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZW5lcmF0ZUdyaWQoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBsZXQgc2l6ZTtcbiAgcmV0dXJuIHRoZW1lLmJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChnbG9iYWxTdHlsZXMsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAvLyBVc2Ugc2lkZSBlZmZlY3Qgb3ZlciBpbW11dGFiaWxpdHkgZm9yIGJldHRlciBwZXJmb3JtYW5jZS5cbiAgICBsZXQgc3R5bGVzID0ge307XG4gICAgaWYgKG93bmVyU3RhdGVbYnJlYWtwb2ludF0pIHtcbiAgICAgIHNpemUgPSBvd25lclN0YXRlW2JyZWFrcG9pbnRdO1xuICAgIH1cbiAgICBpZiAoIXNpemUpIHtcbiAgICAgIHJldHVybiBnbG9iYWxTdHlsZXM7XG4gICAgfVxuICAgIGlmIChzaXplID09PSB0cnVlKSB7XG4gICAgICAvLyBGb3IgdGhlIGF1dG8gbGF5b3V0aW5nXG4gICAgICBzdHlsZXMgPSB7XG4gICAgICAgIGZsZXhCYXNpczogMCxcbiAgICAgICAgZmxleEdyb3c6IDEsXG4gICAgICAgIG1heFdpZHRoOiAnMTAwJSdcbiAgICAgIH07XG4gICAgfSBlbHNlIGlmIChzaXplID09PSAnYXV0bycpIHtcbiAgICAgIHN0eWxlcyA9IHtcbiAgICAgICAgZmxleEJhc2lzOiAnYXV0bycsXG4gICAgICAgIGZsZXhHcm93OiAwLFxuICAgICAgICBmbGV4U2hyaW5rOiAwLFxuICAgICAgICBtYXhXaWR0aDogJ25vbmUnLFxuICAgICAgICB3aWR0aDogJ2F1dG8nXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgICAgdmFsdWVzOiBvd25lclN0YXRlLmNvbHVtbnMsXG4gICAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICAgIH0pO1xuICAgICAgY29uc3QgY29sdW1uVmFsdWUgPSB0eXBlb2YgY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXMgPT09ICdvYmplY3QnID8gY29sdW1uc0JyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gOiBjb2x1bW5zQnJlYWtwb2ludFZhbHVlcztcbiAgICAgIGlmIChjb2x1bW5WYWx1ZSA9PT0gdW5kZWZpbmVkIHx8IGNvbHVtblZhbHVlID09PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBnbG9iYWxTdHlsZXM7XG4gICAgICB9XG4gICAgICAvLyBLZWVwIDcgc2lnbmlmaWNhbnQgbnVtYmVycy5cbiAgICAgIGNvbnN0IHdpZHRoID0gYCR7TWF0aC5yb3VuZChzaXplIC8gY29sdW1uVmFsdWUgKiAxMGU3KSAvIDEwZTV9JWA7XG4gICAgICBsZXQgbW9yZSA9IHt9O1xuICAgICAgaWYgKG93bmVyU3RhdGUuY29udGFpbmVyICYmIG93bmVyU3RhdGUuaXRlbSAmJiBvd25lclN0YXRlLmNvbHVtblNwYWNpbmcgIT09IDApIHtcbiAgICAgICAgY29uc3QgdGhlbWVTcGFjaW5nID0gdGhlbWUuc3BhY2luZyhvd25lclN0YXRlLmNvbHVtblNwYWNpbmcpO1xuICAgICAgICBpZiAodGhlbWVTcGFjaW5nICE9PSAnMHB4Jykge1xuICAgICAgICAgIGNvbnN0IGZ1bGxXaWR0aCA9IGBjYWxjKCR7d2lkdGh9ICsgJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX0pYDtcbiAgICAgICAgICBtb3JlID0ge1xuICAgICAgICAgICAgZmxleEJhc2lzOiBmdWxsV2lkdGgsXG4gICAgICAgICAgICBtYXhXaWR0aDogZnVsbFdpZHRoXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBDbG9zZSB0byB0aGUgYm9vdHN0cmFwIGltcGxlbWVudGF0aW9uOlxuICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvOGZjY2FhMjQzOWU5N2VjNzJhNGI3ZGM0MmNjYzFmNjQ5NzkwYWRiMC9zY3NzL21peGlucy9fZ3JpZC5zY3NzI0w0MVxuICAgICAgc3R5bGVzID0gX2V4dGVuZHMoe1xuICAgICAgICBmbGV4QmFzaXM6IHdpZHRoLFxuICAgICAgICBmbGV4R3JvdzogMCxcbiAgICAgICAgbWF4V2lkdGg6IHdpZHRoXG4gICAgICB9LCBtb3JlKTtcbiAgICB9XG5cbiAgICAvLyBObyBuZWVkIGZvciBhIG1lZGlhIHF1ZXJ5IGZvciB0aGUgZmlyc3Qgc2l6ZS5cbiAgICBpZiAodGhlbWUuYnJlYWtwb2ludHMudmFsdWVzW2JyZWFrcG9pbnRdID09PSAwKSB7XG4gICAgICBPYmplY3QuYXNzaWduKGdsb2JhbFN0eWxlcywgc3R5bGVzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2xvYmFsU3R5bGVzW3RoZW1lLmJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpXSA9IHN0eWxlcztcbiAgICB9XG4gICAgcmV0dXJuIGdsb2JhbFN0eWxlcztcbiAgfSwge30pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlRGlyZWN0aW9uKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgY29uc3QgZGlyZWN0aW9uVmFsdWVzID0gcmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMoe1xuICAgIHZhbHVlczogb3duZXJTdGF0ZS5kaXJlY3Rpb24sXG4gICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1xuICB9KTtcbiAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICB0aGVtZVxuICB9LCBkaXJlY3Rpb25WYWx1ZXMsIHByb3BWYWx1ZSA9PiB7XG4gICAgY29uc3Qgb3V0cHV0ID0ge1xuICAgICAgZmxleERpcmVjdGlvbjogcHJvcFZhbHVlXG4gICAgfTtcbiAgICBpZiAocHJvcFZhbHVlLmluZGV4T2YoJ2NvbHVtbicpID09PSAwKSB7XG4gICAgICBvdXRwdXRbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdID0ge1xuICAgICAgICBtYXhXaWR0aDogJ25vbmUnXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9KTtcbn1cblxuLyoqXG4gKiBFeHRyYWN0cyB6ZXJvIHZhbHVlIGJyZWFrcG9pbnQga2V5cyBiZWZvcmUgYSBub24temVybyB2YWx1ZSBicmVha3BvaW50IGtleS5cbiAqIEBleGFtcGxlIHsgeHM6IDAsIHNtOiAwLCBtZDogMiwgbGc6IDAsIHhsOiAwIH0gb3IgWzAsIDAsIDIsIDAsIDBdXG4gKiBAcmV0dXJucyBbeHMsIHNtXVxuICovXG5mdW5jdGlvbiBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICBicmVha3BvaW50cyxcbiAgdmFsdWVzXG59KSB7XG4gIGxldCBub25aZXJvS2V5ID0gJyc7XG4gIE9iamVjdC5rZXlzKHZhbHVlcykuZm9yRWFjaChrZXkgPT4ge1xuICAgIGlmIChub25aZXJvS2V5ICE9PSAnJykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodmFsdWVzW2tleV0gIT09IDApIHtcbiAgICAgIG5vblplcm9LZXkgPSBrZXk7XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgc29ydGVkQnJlYWtwb2ludEtleXNCeVZhbHVlID0gT2JqZWN0LmtleXMoYnJlYWtwb2ludHMpLnNvcnQoKGEsIGIpID0+IHtcbiAgICByZXR1cm4gYnJlYWtwb2ludHNbYV0gLSBicmVha3BvaW50c1tiXTtcbiAgfSk7XG4gIHJldHVybiBzb3J0ZWRCcmVha3BvaW50S2V5c0J5VmFsdWUuc2xpY2UoMCwgc29ydGVkQnJlYWtwb2ludEtleXNCeVZhbHVlLmluZGV4T2Yobm9uWmVyb0tleSkpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlUm93R2FwKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pIHtcbiAgY29uc3Qge1xuICAgIGNvbnRhaW5lcixcbiAgICByb3dTcGFjaW5nXG4gIH0gPSBvd25lclN0YXRlO1xuICBsZXQgc3R5bGVzID0ge307XG4gIGlmIChjb250YWluZXIgJiYgcm93U3BhY2luZyAhPT0gMCkge1xuICAgIGNvbnN0IHJvd1NwYWNpbmdWYWx1ZXMgPSByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gICAgICB2YWx1ZXM6IHJvd1NwYWNpbmcsXG4gICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzXG4gICAgfSk7XG4gICAgbGV0IHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzO1xuICAgIGlmICh0eXBlb2Ygcm93U3BhY2luZ1ZhbHVlcyA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzID0gZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzKHtcbiAgICAgICAgYnJlYWtwb2ludHM6IHRoZW1lLmJyZWFrcG9pbnRzLnZhbHVlcyxcbiAgICAgICAgdmFsdWVzOiByb3dTcGFjaW5nVmFsdWVzXG4gICAgICB9KTtcbiAgICB9XG4gICAgc3R5bGVzID0gaGFuZGxlQnJlYWtwb2ludHMoe1xuICAgICAgdGhlbWVcbiAgICB9LCByb3dTcGFjaW5nVmFsdWVzLCAocHJvcFZhbHVlLCBicmVha3BvaW50KSA9PiB7XG4gICAgICB2YXIgX3plcm9WYWx1ZUJyZWFrcG9pbnRLO1xuICAgICAgY29uc3QgdGhlbWVTcGFjaW5nID0gdGhlbWUuc3BhY2luZyhwcm9wVmFsdWUpO1xuICAgICAgaWYgKHRoZW1lU3BhY2luZyAhPT0gJzBweCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBtYXJnaW5Ub3A6IGAtJHtnZXRPZmZzZXQodGhlbWVTcGFjaW5nKX1gLFxuICAgICAgICAgIFtgJiA+IC4ke2dyaWRDbGFzc2VzLml0ZW19YF06IHtcbiAgICAgICAgICAgIHBhZGRpbmdUb3A6IGdldE9mZnNldCh0aGVtZVNwYWNpbmcpXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKChfemVyb1ZhbHVlQnJlYWtwb2ludEsgPSB6ZXJvVmFsdWVCcmVha3BvaW50S2V5cykgIT0gbnVsbCAmJiBfemVyb1ZhbHVlQnJlYWtwb2ludEsuaW5jbHVkZXMoYnJlYWtwb2ludCkpIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgbWFyZ2luVG9wOiAwLFxuICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgcGFkZGluZ1RvcDogMFxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pO1xuICB9XG4gIHJldHVybiBzdHlsZXM7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVDb2x1bW5HYXAoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkge1xuICBjb25zdCB7XG4gICAgY29udGFpbmVyLFxuICAgIGNvbHVtblNwYWNpbmdcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGxldCBzdHlsZXMgPSB7fTtcbiAgaWYgKGNvbnRhaW5lciAmJiBjb2x1bW5TcGFjaW5nICE9PSAwKSB7XG4gICAgY29uc3QgY29sdW1uU3BhY2luZ1ZhbHVlcyA9IHJlc29sdmVCcmVha3BvaW50VmFsdWVzKHtcbiAgICAgIHZhbHVlczogY29sdW1uU3BhY2luZyxcbiAgICAgIGJyZWFrcG9pbnRzOiB0aGVtZS5icmVha3BvaW50cy52YWx1ZXNcbiAgICB9KTtcbiAgICBsZXQgemVyb1ZhbHVlQnJlYWtwb2ludEtleXM7XG4gICAgaWYgKHR5cGVvZiBjb2x1bW5TcGFjaW5nVmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgemVyb1ZhbHVlQnJlYWtwb2ludEtleXMgPSBleHRyYWN0WmVyb1ZhbHVlQnJlYWtwb2ludEtleXMoe1xuICAgICAgICBicmVha3BvaW50czogdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzLFxuICAgICAgICB2YWx1ZXM6IGNvbHVtblNwYWNpbmdWYWx1ZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBzdHlsZXMgPSBoYW5kbGVCcmVha3BvaW50cyh7XG4gICAgICB0aGVtZVxuICAgIH0sIGNvbHVtblNwYWNpbmdWYWx1ZXMsIChwcm9wVmFsdWUsIGJyZWFrcG9pbnQpID0+IHtcbiAgICAgIHZhciBfemVyb1ZhbHVlQnJlYWtwb2ludEsyO1xuICAgICAgY29uc3QgdGhlbWVTcGFjaW5nID0gdGhlbWUuc3BhY2luZyhwcm9wVmFsdWUpO1xuICAgICAgaWYgKHRoZW1lU3BhY2luZyAhPT0gJzBweCcpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB3aWR0aDogYGNhbGMoMTAwJSArICR7Z2V0T2Zmc2V0KHRoZW1lU3BhY2luZyl9KWAsXG4gICAgICAgICAgbWFyZ2luTGVmdDogYC0ke2dldE9mZnNldCh0aGVtZVNwYWNpbmcpfWAsXG4gICAgICAgICAgW2AmID4gLiR7Z3JpZENsYXNzZXMuaXRlbX1gXToge1xuICAgICAgICAgICAgcGFkZGluZ0xlZnQ6IGdldE9mZnNldCh0aGVtZVNwYWNpbmcpXG4gICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgfVxuICAgICAgaWYgKChfemVyb1ZhbHVlQnJlYWtwb2ludEsyID0gemVyb1ZhbHVlQnJlYWtwb2ludEtleXMpICE9IG51bGwgJiYgX3plcm9WYWx1ZUJyZWFrcG9pbnRLMi5pbmNsdWRlcyhicmVha3BvaW50KSkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICBtYXJnaW5MZWZ0OiAwLFxuICAgICAgICBbYCYgPiAuJHtncmlkQ2xhc3Nlcy5pdGVtfWBdOiB7XG4gICAgICAgICAgcGFkZGluZ0xlZnQ6IDBcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuICByZXR1cm4gc3R5bGVzO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTcGFjaW5nU3R5bGVzKHNwYWNpbmcsIGJyZWFrcG9pbnRzLCBzdHlsZXMgPSB7fSkge1xuICAvLyB1bmRlZmluZWQvbnVsbCBvciBgc3BhY2luZ2AgPD0gMFxuICBpZiAoIXNwYWNpbmcgfHwgc3BhY2luZyA8PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygc3RyaW5nL251bWJlciBgc3BhY2luZ2BcbiAgaWYgKHR5cGVvZiBzcGFjaW5nID09PSAnc3RyaW5nJyAmJiAhTnVtYmVyLmlzTmFOKE51bWJlcihzcGFjaW5nKSkgfHwgdHlwZW9mIHNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFtzdHlsZXNbYHNwYWNpbmcteHMtJHtTdHJpbmcoc3BhY2luZyl9YF1dO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygb2JqZWN0IGBzcGFjaW5nYFxuICBjb25zdCBzcGFjaW5nU3R5bGVzID0gW107XG4gIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgY29uc3QgdmFsdWUgPSBzcGFjaW5nW2JyZWFrcG9pbnRdO1xuICAgIGlmIChOdW1iZXIodmFsdWUpID4gMCkge1xuICAgICAgc3BhY2luZ1N0eWxlcy5wdXNoKHN0eWxlc1tgc3BhY2luZy0ke2JyZWFrcG9pbnR9LSR7U3RyaW5nKHZhbHVlKX1gXSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHNwYWNpbmdTdHlsZXM7XG59XG5cbi8vIERlZmF1bHQgQ1NTIHZhbHVlc1xuLy8gZmxleDogJzAgMSBhdXRvJyxcbi8vIGZsZXhEaXJlY3Rpb246ICdyb3cnLFxuLy8gYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnLFxuLy8gZmxleFdyYXA6ICdub3dyYXAnLFxuLy8ganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbmNvbnN0IEdyaWRSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlHcmlkJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHtcbiAgICAgIGNvbnRhaW5lcixcbiAgICAgIGRpcmVjdGlvbixcbiAgICAgIGl0ZW0sXG4gICAgICBzcGFjaW5nLFxuICAgICAgd3JhcCxcbiAgICAgIHplcm9NaW5XaWR0aCxcbiAgICAgIGJyZWFrcG9pbnRzXG4gICAgfSA9IG93bmVyU3RhdGU7XG4gICAgbGV0IHNwYWNpbmdTdHlsZXMgPSBbXTtcblxuICAgIC8vIGluIGNhc2Ugb2YgZ3JpZCBpdGVtXG4gICAgaWYgKGNvbnRhaW5lcikge1xuICAgICAgc3BhY2luZ1N0eWxlcyA9IHJlc29sdmVTcGFjaW5nU3R5bGVzKHNwYWNpbmcsIGJyZWFrcG9pbnRzLCBzdHlsZXMpO1xuICAgIH1cbiAgICBjb25zdCBicmVha3BvaW50c1N0eWxlcyA9IFtdO1xuICAgIGJyZWFrcG9pbnRzLmZvckVhY2goYnJlYWtwb2ludCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IG93bmVyU3RhdGVbYnJlYWtwb2ludF07XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgYnJlYWtwb2ludHNTdHlsZXMucHVzaChzdHlsZXNbYGdyaWQtJHticmVha3BvaW50fS0ke1N0cmluZyh2YWx1ZSl9YF0pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIGNvbnRhaW5lciAmJiBzdHlsZXMuY29udGFpbmVyLCBpdGVtICYmIHN0eWxlcy5pdGVtLCB6ZXJvTWluV2lkdGggJiYgc3R5bGVzLnplcm9NaW5XaWR0aCwgLi4uc3BhY2luZ1N0eWxlcywgZGlyZWN0aW9uICE9PSAncm93JyAmJiBzdHlsZXNbYGRpcmVjdGlvbi14cy0ke1N0cmluZyhkaXJlY3Rpb24pfWBdLCB3cmFwICE9PSAnd3JhcCcgJiYgc3R5bGVzW2B3cmFwLXhzLSR7U3RyaW5nKHdyYXApfWBdLCAuLi5icmVha3BvaW50c1N0eWxlc107XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCdcbn0sIG93bmVyU3RhdGUuY29udGFpbmVyICYmIHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4V3JhcDogJ3dyYXAnLFxuICB3aWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLml0ZW0gJiYge1xuICBtYXJnaW46IDAgLy8gRm9yIGluc3RhbmNlLCBpdCdzIHVzZWZ1bCB3aGVuIHVzZWQgd2l0aCBhIGBmaWd1cmVgIGVsZW1lbnQuXG59LCBvd25lclN0YXRlLnplcm9NaW5XaWR0aCAmJiB7XG4gIG1pbldpZHRoOiAwXG59LCBvd25lclN0YXRlLndyYXAgIT09ICd3cmFwJyAmJiB7XG4gIGZsZXhXcmFwOiBvd25lclN0YXRlLndyYXBcbn0pLCBnZW5lcmF0ZURpcmVjdGlvbiwgZ2VuZXJhdGVSb3dHYXAsIGdlbmVyYXRlQ29sdW1uR2FwLCBnZW5lcmF0ZUdyaWQpO1xuZXhwb3J0IGZ1bmN0aW9uIHJlc29sdmVTcGFjaW5nQ2xhc3NlcyhzcGFjaW5nLCBicmVha3BvaW50cykge1xuICAvLyB1bmRlZmluZWQvbnVsbCBvciBgc3BhY2luZ2AgPD0gMFxuICBpZiAoIXNwYWNpbmcgfHwgc3BhY2luZyA8PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIC8vIGluIGNhc2Ugb2Ygc3RyaW5nL251bWJlciBgc3BhY2luZ2BcbiAgaWYgKHR5cGVvZiBzcGFjaW5nID09PSAnc3RyaW5nJyAmJiAhTnVtYmVyLmlzTmFOKE51bWJlcihzcGFjaW5nKSkgfHwgdHlwZW9mIHNwYWNpbmcgPT09ICdudW1iZXInKSB7XG4gICAgcmV0dXJuIFtgc3BhY2luZy14cy0ke1N0cmluZyhzcGFjaW5nKX1gXTtcbiAgfVxuICAvLyBpbiBjYXNlIG9mIG9iamVjdCBgc3BhY2luZ2BcbiAgY29uc3QgY2xhc3NlcyA9IFtdO1xuICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gc3BhY2luZ1ticmVha3BvaW50XTtcbiAgICBpZiAoTnVtYmVyKHZhbHVlKSA+IDApIHtcbiAgICAgIGNvbnN0IGNsYXNzTmFtZSA9IGBzcGFjaW5nLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWA7XG4gICAgICBjbGFzc2VzLnB1c2goY2xhc3NOYW1lKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gY2xhc3Nlcztcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbnRhaW5lcixcbiAgICBkaXJlY3Rpb24sXG4gICAgaXRlbSxcbiAgICBzcGFjaW5nLFxuICAgIHdyYXAsXG4gICAgemVyb01pbldpZHRoLFxuICAgIGJyZWFrcG9pbnRzXG4gIH0gPSBvd25lclN0YXRlO1xuICBsZXQgc3BhY2luZ0NsYXNzZXMgPSBbXTtcblxuICAvLyBpbiBjYXNlIG9mIGdyaWQgaXRlbVxuICBpZiAoY29udGFpbmVyKSB7XG4gICAgc3BhY2luZ0NsYXNzZXMgPSByZXNvbHZlU3BhY2luZ0NsYXNzZXMoc3BhY2luZywgYnJlYWtwb2ludHMpO1xuICB9XG4gIGNvbnN0IGJyZWFrcG9pbnRzQ2xhc3NlcyA9IFtdO1xuICBicmVha3BvaW50cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGNvbnN0IHZhbHVlID0gb3duZXJTdGF0ZVticmVha3BvaW50XTtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGJyZWFrcG9pbnRzQ2xhc3Nlcy5wdXNoKGBncmlkLSR7YnJlYWtwb2ludH0tJHtTdHJpbmcodmFsdWUpfWApO1xuICAgIH1cbiAgfSk7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGNvbnRhaW5lciAmJiAnY29udGFpbmVyJywgaXRlbSAmJiAnaXRlbScsIHplcm9NaW5XaWR0aCAmJiAnemVyb01pbldpZHRoJywgLi4uc3BhY2luZ0NsYXNzZXMsIGRpcmVjdGlvbiAhPT0gJ3JvdycgJiYgYGRpcmVjdGlvbi14cy0ke1N0cmluZyhkaXJlY3Rpb24pfWAsIHdyYXAgIT09ICd3cmFwJyAmJiBgd3JhcC14cy0ke1N0cmluZyh3cmFwKX1gLCAuLi5icmVha3BvaW50c0NsYXNzZXNdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0R3JpZFV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgR3JpZCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEdyaWQoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpR3JpZCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICBicmVha3BvaW50c1xuICB9ID0gdXNlVGhlbWUoKTtcbiAgY29uc3QgcHJvcHMgPSBleHRlbmRTeFByb3AodGhlbWVQcm9wcyk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbHVtbnM6IGNvbHVtbnNQcm9wLFxuICAgICAgY29sdW1uU3BhY2luZzogY29sdW1uU3BhY2luZ1Byb3AsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGNvbnRhaW5lciA9IGZhbHNlLFxuICAgICAgZGlyZWN0aW9uID0gJ3JvdycsXG4gICAgICBpdGVtID0gZmFsc2UsXG4gICAgICByb3dTcGFjaW5nOiByb3dTcGFjaW5nUHJvcCxcbiAgICAgIHNwYWNpbmcgPSAwLFxuICAgICAgd3JhcCA9ICd3cmFwJyxcbiAgICAgIHplcm9NaW5XaWR0aCA9IGZhbHNlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJvd1NwYWNpbmcgPSByb3dTcGFjaW5nUHJvcCB8fCBzcGFjaW5nO1xuICBjb25zdCBjb2x1bW5TcGFjaW5nID0gY29sdW1uU3BhY2luZ1Byb3AgfHwgc3BhY2luZztcbiAgY29uc3QgY29sdW1uc0NvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KEdyaWRDb250ZXh0KTtcblxuICAvLyBjb2x1bW5zIHNldCB3aXRoIGRlZmF1bHQgYnJlYWtwb2ludCB1bml0IG9mIDEyXG4gIGNvbnN0IGNvbHVtbnMgPSBjb250YWluZXIgPyBjb2x1bW5zUHJvcCB8fCAxMiA6IGNvbHVtbnNDb250ZXh0O1xuICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IHt9O1xuICBjb25zdCBvdGhlckZpbHRlcmVkID0gX2V4dGVuZHMoe30sIG90aGVyKTtcbiAgYnJlYWtwb2ludHMua2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgIGlmIChvdGhlclticmVha3BvaW50XSAhPSBudWxsKSB7XG4gICAgICBicmVha3BvaW50c1ZhbHVlc1ticmVha3BvaW50XSA9IG90aGVyW2JyZWFrcG9pbnRdO1xuICAgICAgZGVsZXRlIG90aGVyRmlsdGVyZWRbYnJlYWtwb2ludF07XG4gICAgfVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbHVtbnMsXG4gICAgY29udGFpbmVyLFxuICAgIGRpcmVjdGlvbixcbiAgICBpdGVtLFxuICAgIHJvd1NwYWNpbmcsXG4gICAgY29sdW1uU3BhY2luZyxcbiAgICB3cmFwLFxuICAgIHplcm9NaW5XaWR0aCxcbiAgICBzcGFjaW5nXG4gIH0sIGJyZWFrcG9pbnRzVmFsdWVzLCB7XG4gICAgYnJlYWtwb2ludHM6IGJyZWFrcG9pbnRzLmtleXNcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KEdyaWRDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNvbHVtbnMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KEdyaWRSb290LCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICByZWY6IHJlZlxuICAgIH0sIG90aGVyRmlsdGVyZWQpKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3JpZC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgY29sdW1ucy5cbiAgICogQGRlZmF1bHQgMTJcbiAgICovXG4gIGNvbHVtbnM6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5udW1iZXIpLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBob3Jpem9udGFsIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IG92ZXJyaWRlcyB0aGUgdmFsdWUgb2YgdGhlIGBzcGFjaW5nYCBwcm9wLlxuICAgKi9cbiAgY29sdW1uU3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCBoYXZlIHRoZSBmbGV4ICpjb250YWluZXIqIGJlaGF2aW9yLlxuICAgKiBZb3Ugc2hvdWxkIGJlIHdyYXBwaW5nICppdGVtcyogd2l0aCBhICpjb250YWluZXIqLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LWRpcmVjdGlvbmAgc3R5bGUgcHJvcGVydHkuXG4gICAqIEl0IGlzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICdyb3cnXG4gICAqL1xuICBkaXJlY3Rpb246IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSksIFByb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZihbJ2NvbHVtbi1yZXZlcnNlJywgJ2NvbHVtbicsICdyb3ctcmV2ZXJzZScsICdyb3cnXSkpLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgd2lsbCBoYXZlIHRoZSBmbGV4ICppdGVtKiBiZWhhdmlvci5cbiAgICogWW91IHNob3VsZCBiZSB3cmFwcGluZyAqaXRlbXMqIHdpdGggYSAqY29udGFpbmVyKi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGl0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYGxnYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbGc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIHRoZSBgbWRgIGJyZWFrcG9pbnQgYW5kIHdpZGVyIHNjcmVlbnMgaWYgbm90IG92ZXJyaWRkZW4uXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBtZDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLmJvb2xdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIHZlcnRpY2FsIHNwYWNlIGJldHdlZW4gdGhlIHR5cGUgYGl0ZW1gIGNvbXBvbmVudHMuXG4gICAqIEl0IG92ZXJyaWRlcyB0aGUgdmFsdWUgb2YgdGhlIGBzcGFjaW5nYCBwcm9wLlxuICAgKi9cbiAgcm93U3BhY2luZzogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYHNtYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgc206IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBEZWZpbmVzIHRoZSBzcGFjZSBiZXR3ZWVuIHRoZSB0eXBlIGBpdGVtYCBjb21wb25lbnRzLlxuICAgKiBJdCBjYW4gb25seSBiZSB1c2VkIG9uIGEgdHlwZSBgY29udGFpbmVyYCBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IDBcbiAgICovXG4gIHNwYWNpbmc6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIERlZmluZXMgdGhlIGBmbGV4LXdyYXBgIHN0eWxlIHByb3BlcnR5LlxuICAgKiBJdCdzIGFwcGxpZWQgZm9yIGFsbCBzY3JlZW4gc2l6ZXMuXG4gICAqIEBkZWZhdWx0ICd3cmFwJ1xuICAgKi9cbiAgd3JhcDogUHJvcFR5cGVzLm9uZU9mKFsnbm93cmFwJywgJ3dyYXAtcmV2ZXJzZScsICd3cmFwJ10pLFxuICAvKipcbiAgICogSWYgYSBudW1iZXIsIGl0IHNldHMgdGhlIG51bWJlciBvZiBjb2x1bW5zIHRoZSBncmlkIGl0ZW0gdXNlcy5cbiAgICogSXQgY2FuJ3QgYmUgZ3JlYXRlciB0aGFuIHRoZSB0b3RhbCBudW1iZXIgb2YgY29sdW1ucyBvZiB0aGUgY29udGFpbmVyICgxMiBieSBkZWZhdWx0KS5cbiAgICogSWYgJ2F1dG8nLCB0aGUgZ3JpZCBpdGVtJ3Mgd2lkdGggbWF0Y2hlcyBpdHMgY29udGVudC5cbiAgICogSWYgZmFsc2UsIHRoZSBwcm9wIGlzIGlnbm9yZWQuXG4gICAqIElmIHRydWUsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBncm93cyB0byB1c2UgdGhlIHNwYWNlIGF2YWlsYWJsZSBpbiB0aGUgZ3JpZCBjb250YWluZXIuXG4gICAqIFRoZSB2YWx1ZSBpcyBhcHBsaWVkIGZvciB0aGUgYHhsYCBicmVha3BvaW50IGFuZCB3aWRlciBzY3JlZW5zIGlmIG5vdCBvdmVycmlkZGVuLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgeGw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5ib29sXSksXG4gIC8qKlxuICAgKiBJZiBhIG51bWJlciwgaXQgc2V0cyB0aGUgbnVtYmVyIG9mIGNvbHVtbnMgdGhlIGdyaWQgaXRlbSB1c2VzLlxuICAgKiBJdCBjYW4ndCBiZSBncmVhdGVyIHRoYW4gdGhlIHRvdGFsIG51bWJlciBvZiBjb2x1bW5zIG9mIHRoZSBjb250YWluZXIgKDEyIGJ5IGRlZmF1bHQpLlxuICAgKiBJZiAnYXV0bycsIHRoZSBncmlkIGl0ZW0ncyB3aWR0aCBtYXRjaGVzIGl0cyBjb250ZW50LlxuICAgKiBJZiBmYWxzZSwgdGhlIHByb3AgaXMgaWdub3JlZC5cbiAgICogSWYgdHJ1ZSwgdGhlIGdyaWQgaXRlbSdzIHdpZHRoIGdyb3dzIHRvIHVzZSB0aGUgc3BhY2UgYXZhaWxhYmxlIGluIHRoZSBncmlkIGNvbnRhaW5lci5cbiAgICogVGhlIHZhbHVlIGlzIGFwcGxpZWQgZm9yIGFsbCB0aGUgc2NyZWVuIHNpemVzIHdpdGggdGhlIGxvd2VzdCBwcmlvcml0eS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHhzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBpdCBzZXRzIGBtaW4td2lkdGg6IDBgIG9uIHRoZSBpdGVtLlxuICAgKiBSZWZlciB0byB0aGUgbGltaXRhdGlvbnMgc2VjdGlvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdXNlIGNhc2UuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICB6ZXJvTWluV2lkdGg6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgY29uc3QgcmVxdWlyZVByb3AgPSByZXF1aXJlUHJvcEZhY3RvcnkoJ0dyaWQnLCBHcmlkKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uY2F0XG4gIEdyaWRbJ3Byb3BUeXBlcycgKyAnJ10gPSBfZXh0ZW5kcyh7fSwgR3JpZC5wcm9wVHlwZXMsIHtcbiAgICBkaXJlY3Rpb246IHJlcXVpcmVQcm9wKCdjb250YWluZXInKSxcbiAgICBsZzogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICBtZDogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICBzbTogcmVxdWlyZVByb3AoJ2l0ZW0nKSxcbiAgICBzcGFjaW5nOiByZXF1aXJlUHJvcCgnY29udGFpbmVyJyksXG4gICAgd3JhcDogcmVxdWlyZVByb3AoJ2NvbnRhaW5lcicpLFxuICAgIHhzOiByZXF1aXJlUHJvcCgnaXRlbScpLFxuICAgIHplcm9NaW5XaWR0aDogcmVxdWlyZVByb3AoJ2l0ZW0nKVxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IEdyaWQ7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXQnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlJbnB1dCcsIFsncm9vdCcsICd1bmRlcmxpbmUnLCAnaW5wdXQnXSkpO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImRpc2FibGVVbmRlcmxpbmVcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZnVsbFdpZHRoXCIsIFwiaW5wdXRDb21wb25lbnRcIiwgXCJtdWx0aWxpbmVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInR5cGVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZGVlcG1lcmdlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgSW5wdXRCYXNlIGZyb20gJy4uL0lucHV0QmFzZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGlucHV0Q2xhc3NlcywgeyBnZXRJbnB1dFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRDbGFzc2VzJztcbmltcG9ydCB7IHJvb3RPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXIsIGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgYXMgaW5wdXRCYXNlSW5wdXRPdmVycmlkZXNSZXNvbHZlciwgSW5wdXRCYXNlUm9vdCwgSW5wdXRCYXNlQ29tcG9uZW50IGFzIElucHV0QmFzZUlucHV0IH0gZnJvbSAnLi4vSW5wdXRCYXNlL0lucHV0QmFzZSc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZGlzYWJsZVVuZGVybGluZVxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIWRpc2FibGVVbmRlcmxpbmUgJiYgJ3VuZGVybGluZSddLFxuICAgIGlucHV0OiBbJ2lucHV0J11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0Um9vdCA9IHN0eWxlZChJbnB1dEJhc2VSb290LCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gWy4uLmlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlcihwcm9wcywgc3R5bGVzKSwgIW93bmVyU3RhdGUuZGlzYWJsZVVuZGVybGluZSAmJiBzdHlsZXMudW5kZXJsaW5lXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGxldCBib3R0b21MaW5lQ29sb3IgPSBsaWdodCA/ICdyZ2JhKDAsIDAsIDAsIDAuNDIpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNyknO1xuICBpZiAodGhlbWUudmFycykge1xuICAgIGJvdHRvbUxpbmVDb2xvciA9IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvICR7dGhlbWUudmFycy5vcGFjaXR5LmlucHV0VW5kZXJsaW5lfSlgO1xuICB9XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgfSwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiB7XG4gICAgJ2xhYmVsICsgJic6IHtcbiAgICAgIG1hcmdpblRvcDogMTZcbiAgICB9XG4gIH0sICFvd25lclN0YXRlLmRpc2FibGVVbmRlcmxpbmUgJiYge1xuICAgICcmOmFmdGVyJzoge1xuICAgICAgYm9yZGVyQm90dG9tOiBgMnB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbn1gLFxuICAgICAgbGVmdDogMCxcbiAgICAgIGJvdHRvbTogMCxcbiAgICAgIC8vIERvaW5nIHRoZSBvdGhlciB3YXkgYXJvdW5kIGNyYXNoIG9uIElFMTEgXCInJ1wiIGh0dHBzOi8vZ2l0aHViLmNvbS9jc3NpbmpzL2pzcy9pc3N1ZXMvMjQyXG4gICAgICBjb250ZW50OiAnXCJcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNmb3JtOiAnc2NhbGVYKDApJyxcbiAgICAgIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlcixcbiAgICAgICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG5cbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZm9jdXNlZH06YWZ0ZXJgXToge1xuICAgICAgLy8gdHJhbnNsYXRlWCgwKSBpcyBhIHdvcmthcm91bmQgZm9yIFNhZmFyaSB0cmFuc2Zvcm0gc2NhbGUgYnVnXG4gICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9pc3N1ZXMvMzE3NjZcbiAgICAgIHRyYW5zZm9ybTogJ3NjYWxlWCgxKSB0cmFuc2xhdGVYKDApJ1xuICAgIH0sXG4gICAgW2AmLiR7aW5wdXRDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgICAnJjpiZWZvcmUsICY6YWZ0ZXInOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbUNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgICB9XG4gICAgfSxcbiAgICAnJjpiZWZvcmUnOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAxcHggc29saWQgJHtib3R0b21MaW5lQ29sb3J9YCxcbiAgICAgIGxlZnQ6IDAsXG4gICAgICBib3R0b206IDAsXG4gICAgICAvLyBEb2luZyB0aGUgb3RoZXIgd2F5IGFyb3VuZCBjcmFzaCBvbiBJRTExIFwiJydcIiBodHRwczovL2dpdGh1Yi5jb20vY3NzaW5qcy9qc3MvaXNzdWVzLzI0MlxuICAgICAgY29udGVudDogJ1wiXFxcXDAwYTBcIicsXG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgIHJpZ2h0OiAwLFxuICAgICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3JkZXItYm90dG9tLWNvbG9yJywge1xuICAgICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgICAgfSksXG4gICAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScgLy8gVHJhbnNwYXJlbnQgdG8gdGhlIGhvdmVyIHN0eWxlLlxuICAgIH0sXG5cbiAgICBbYCY6aG92ZXI6bm90KC4ke2lucHV0Q2xhc3Nlcy5kaXNhYmxlZH0sIC4ke2lucHV0Q2xhc3Nlcy5lcnJvcn0pOmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b206IGAycHggc29saWQgJHsodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnl9YCxcbiAgICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgICAnQG1lZGlhIChob3Zlcjogbm9uZSknOiB7XG4gICAgICAgIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAke2JvdHRvbUxpbmVDb2xvcn1gXG4gICAgICB9XG4gICAgfSxcbiAgICBbYCYuJHtpbnB1dENsYXNzZXMuZGlzYWJsZWR9OmJlZm9yZWBdOiB7XG4gICAgICBib3JkZXJCb3R0b21TdHlsZTogJ2RvdHRlZCdcbiAgICB9XG4gIH0pO1xufSk7XG5jb25zdCBJbnB1dElucHV0ID0gc3R5bGVkKElucHV0QmFzZUlucHV0LCB7XG4gIG5hbWU6ICdNdWlJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSh7fSk7XG5jb25zdCBJbnB1dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0J1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZVVuZGVybGluZSxcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGNvbXBvbmVudHNQcm9wczogY29tcG9uZW50c1Byb3BzUHJvcCxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbXVsdGlsaW5lID0gZmFsc2UsXG4gICAgICBzbG90UHJvcHMsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBvd25lclN0YXRlID0ge1xuICAgIGRpc2FibGVVbmRlcmxpbmVcbiAgfTtcbiAgY29uc3QgaW5wdXRDb21wb25lbnRzUHJvcHMgPSB7XG4gICAgcm9vdDoge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH1cbiAgfTtcbiAgY29uc3QgY29tcG9uZW50c1Byb3BzID0gKHNsb3RQcm9wcyAhPSBudWxsID8gc2xvdFByb3BzIDogY29tcG9uZW50c1Byb3BzUHJvcCkgPyBkZWVwbWVyZ2Uoc2xvdFByb3BzICE9IG51bGwgPyBzbG90UHJvcHMgOiBjb21wb25lbnRzUHJvcHNQcm9wLCBpbnB1dENvbXBvbmVudHNQcm9wcykgOiBpbnB1dENvbXBvbmVudHNQcm9wcztcbiAgY29uc3QgUm9vdFNsb3QgPSAoX3JlZiA9IChfc2xvdHMkcm9vdCA9IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IGNvbXBvbmVudHMuUm9vdCkgIT0gbnVsbCA/IF9yZWYgOiBJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IElucHV0SW5wdXQ7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dEJhc2UsIF9leHRlbmRzKHtcbiAgICBzbG90czoge1xuICAgICAgcm9vdDogUm9vdFNsb3QsXG4gICAgICBpbnB1dDogSW5wdXRTbG90XG4gICAgfSxcbiAgICBzbG90UHJvcHM6IGNvbXBvbmVudHNQcm9wcyxcbiAgICBmdWxsV2lkdGg6IGZ1bGxXaWR0aCxcbiAgICBpbnB1dENvbXBvbmVudDogaW5wdXRDb21wb25lbnQsXG4gICAgbXVsdGlsaW5lOiBtdWx0aWxpbmUsXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dC5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgaGVscHMgdXNlcnMgdG8gZmlsbCBmb3JtcyBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gbW9iaWxlIGRldmljZXMuXG4gICAqIFRoZSBuYW1lIGNhbiBiZSBjb25mdXNpbmcsIGFzIGl0J3MgbW9yZSBsaWtlIGFuIGF1dG9maWxsLlxuICAgKiBZb3UgY2FuIGxlYXJuIG1vcmUgYWJvdXQgaXQgW2ZvbGxvd2luZyB0aGUgc3BlY2lmaWNhdGlvbl0oaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybS1jb250cm9sLWluZnJhc3RydWN0dXJlLmh0bWwjYXV0b2ZpbGwpLlxuICAgKi9cbiAgYXV0b0NvbXBsZXRlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ3ByaW1hcnknYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBjb2xvcjogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydwcmltYXJ5JywgJ3NlY29uZGFyeSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIElucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMub2JqZWN0LFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vYmplY3RcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgd2lsbCBub3QgaGF2ZSBhbiB1bmRlcmxpbmUuXG4gICAqL1xuICBkaXNhYmxlVW5kZXJsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFRoZSBzaG9ydCBoaW50IGRpc3BsYXllZCBpbiB0aGUgYGlucHV0YCBiZWZvcmUgdGhlIHVzZXIgZW50ZXJzIGEgdmFsdWUuXG4gICAqL1xuICBwbGFjZWhvbGRlcjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEl0IHByZXZlbnRzIHRoZSB1c2VyIGZyb20gY2hhbmdpbmcgdGhlIHZhbHVlIG9mIHRoZSBmaWVsZFxuICAgKiAobm90IGZyb20gaW50ZXJhY3Rpbmcgd2l0aCB0aGUgZmllbGQpLlxuICAgKi9cbiAgcmVhZE9ubHk6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNQcm9wc2AgcHJvcCwgd2hpY2ggd2lsbCBiZSBkZXByZWNhdGVkIGluIHRoZSBmdXR1cmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBzbG90UHJvcHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgcm9vdDogUHJvcFR5cGVzLm9iamVjdFxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuSW5wdXQubXVpTmFtZSA9ICdJbnB1dCc7XG5leHBvcnQgZGVmYXVsdCBJbnB1dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyBmb3JtYXRNdWlFcnJvck1lc3NhZ2UgYXMgX2Zvcm1hdE11aUVycm9yTWVzc2FnZSB9IGZyb20gXCJAbXVpL3V0aWxzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhcmlhLWRlc2NyaWJlZGJ5XCIsIFwiYXV0b0NvbXBsZXRlXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGVmYXVsdFZhbHVlXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzXCIsIFwiZW5kQWRvcm5tZW50XCIsIFwiZXJyb3JcIiwgXCJmdWxsV2lkdGhcIiwgXCJpZFwiLCBcImlucHV0Q29tcG9uZW50XCIsIFwiaW5wdXRQcm9wc1wiLCBcImlucHV0UmVmXCIsIFwibWFyZ2luXCIsIFwibWF4Um93c1wiLCBcIm1pblJvd3NcIiwgXCJtdWx0aWxpbmVcIiwgXCJuYW1lXCIsIFwib25CbHVyXCIsIFwib25DaGFuZ2VcIiwgXCJvbkNsaWNrXCIsIFwib25Gb2N1c1wiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJwbGFjZWhvbGRlclwiLCBcInJlYWRPbmx5XCIsIFwicmVuZGVyU3VmZml4XCIsIFwicm93c1wiLCBcInNpemVcIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInN0YXJ0QWRvcm5tZW50XCIsIFwidHlwZVwiLCBcInZhbHVlXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgcmVmVHlwZSwgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzLCBpc0hvc3RDb21wb25lbnQsIFRleHRhcmVhQXV0b3NpemUgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgRm9ybUNvbnRyb2xDb250ZXh0IGZyb20gJy4uL0Zvcm1Db250cm9sL0Zvcm1Db250cm9sQ29udGV4dCc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IEdsb2JhbFN0eWxlcyBmcm9tICcuLi9HbG9iYWxTdHlsZXMnO1xuaW1wb3J0IHsgaXNGaWxsZWQgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCBpbnB1dEJhc2VDbGFzc2VzLCB7IGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vaW5wdXRCYXNlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuaW1wb3J0IHsganN4cyBhcyBfanN4cyB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZXhwb3J0IGNvbnN0IHJvb3RPdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRTdGFydCwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYgc3R5bGVzLmFkb3JuZWRFbmQsIG93bmVyU3RhdGUuZXJyb3IgJiYgc3R5bGVzLmVycm9yLCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLnNpemVTbWFsbCwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgc3R5bGVzLm11bHRpbGluZSwgb3duZXJTdGF0ZS5jb2xvciAmJiBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdLCBvd25lclN0YXRlLmZ1bGxXaWR0aCAmJiBzdHlsZXMuZnVsbFdpZHRoLCBvd25lclN0YXRlLmhpZGRlbkxhYmVsICYmIHN0eWxlcy5oaWRkZW5MYWJlbF07XG59O1xuZXhwb3J0IGNvbnN0IGlucHV0T3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLmlucHV0LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgc3R5bGVzLmlucHV0U2l6ZVNtYWxsLCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBzdHlsZXMuaW5wdXRNdWx0aWxpbmUsIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYgc3R5bGVzLmlucHV0VHlwZVNlYXJjaCwgb3duZXJTdGF0ZS5zdGFydEFkb3JubWVudCAmJiBzdHlsZXMuaW5wdXRBZG9ybmVkU3RhcnQsIG93bmVyU3RhdGUuZW5kQWRvcm5tZW50ICYmIHN0eWxlcy5pbnB1dEFkb3JuZWRFbmQsIG93bmVyU3RhdGUuaGlkZGVuTGFiZWwgJiYgc3R5bGVzLmlucHV0SGlkZGVuTGFiZWxdO1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGNvbG9yLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGVuZEFkb3JubWVudCxcbiAgICBmb2N1c2VkLFxuICAgIGZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbCxcbiAgICBtdWx0aWxpbmUsXG4gICAgcmVhZE9ubHksXG4gICAgc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBgY29sb3Ike2NhcGl0YWxpemUoY29sb3IpfWAsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGVycm9yICYmICdlcnJvcicsIGZ1bGxXaWR0aCAmJiAnZnVsbFdpZHRoJywgZm9jdXNlZCAmJiAnZm9jdXNlZCcsIGZvcm1Db250cm9sICYmICdmb3JtQ29udHJvbCcsIHNpemUgJiYgc2l6ZSAhPT0gJ21lZGl1bScgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgbXVsdGlsaW5lICYmICdtdWx0aWxpbmUnLCBzdGFydEFkb3JubWVudCAmJiAnYWRvcm5lZFN0YXJ0JywgZW5kQWRvcm5tZW50ICYmICdhZG9ybmVkRW5kJywgaGlkZGVuTGFiZWwgJiYgJ2hpZGRlbkxhYmVsJywgcmVhZE9ubHkgJiYgJ3JlYWRPbmx5J10sXG4gICAgaW5wdXQ6IFsnaW5wdXQnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCB0eXBlID09PSAnc2VhcmNoJyAmJiAnaW5wdXRUeXBlU2VhcmNoJywgbXVsdGlsaW5lICYmICdpbnB1dE11bHRpbGluZScsIHNpemUgPT09ICdzbWFsbCcgJiYgJ2lucHV0U2l6ZVNtYWxsJywgaGlkZGVuTGFiZWwgJiYgJ2lucHV0SGlkZGVuTGFiZWwnLCBzdGFydEFkb3JubWVudCAmJiAnaW5wdXRBZG9ybmVkU3RhcnQnLCBlbmRBZG9ybm1lbnQgJiYgJ2lucHV0QWRvcm5lZEVuZCcsIHJlYWRPbmx5ICYmICdyZWFkT25seSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRCYXNlVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5leHBvcnQgY29uc3QgSW5wdXRCYXNlUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpSW5wdXRCYXNlJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogcm9vdE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe30sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeSxcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgLy8gMjNweFxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gUHJldmVudCBwYWRkaW5nIGlzc3VlIHdpdGggZnVsbFdpZHRoLlxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgY3Vyc29yOiAndGV4dCcsXG4gIGRpc3BsYXk6ICdpbmxpbmUtZmxleCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQsXG4gICAgY3Vyc29yOiAnZGVmYXVsdCdcbiAgfVxufSwgb3duZXJTdGF0ZS5tdWx0aWxpbmUgJiYgX2V4dGVuZHMoe1xuICBwYWRkaW5nOiAnNHB4IDAgNXB4J1xufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZ1RvcDogMVxufSksIG93bmVyU3RhdGUuZnVsbFdpZHRoICYmIHtcbiAgd2lkdGg6ICcxMDAlJ1xufSkpO1xuZXhwb3J0IGNvbnN0IElucHV0QmFzZUNvbXBvbmVudCA9IHN0eWxlZCgnaW5wdXQnLCB7XG4gIG5hbWU6ICdNdWlJbnB1dEJhc2UnLFxuICBzbG90OiAnSW5wdXQnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogaW5wdXRPdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgbGlnaHQgPSB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCc7XG4gIGNvbnN0IHBsYWNlaG9sZGVyID0gX2V4dGVuZHMoe1xuICAgIGNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH0sIHtcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuZHVyYXRpb24uc2hvcnRlclxuICAgIH0pXG4gIH0pO1xuICBjb25zdCBwbGFjZWhvbGRlckhpZGRlbiA9IHtcbiAgICBvcGFjaXR5OiAnMCAhaW1wb3J0YW50J1xuICB9O1xuICBjb25zdCBwbGFjZWhvbGRlclZpc2libGUgPSB0aGVtZS52YXJzID8ge1xuICAgIG9wYWNpdHk6IHRoZW1lLnZhcnMub3BhY2l0eS5pbnB1dFBsYWNlaG9sZGVyXG4gIH0gOiB7XG4gICAgb3BhY2l0eTogbGlnaHQgPyAwLjQyIDogMC41XG4gIH07XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgZm9udDogJ2luaGVyaXQnLFxuICAgIGxldHRlclNwYWNpbmc6ICdpbmhlcml0JyxcbiAgICBjb2xvcjogJ2N1cnJlbnRDb2xvcicsXG4gICAgcGFkZGluZzogJzRweCAwIDVweCcsXG4gICAgYm9yZGVyOiAwLFxuICAgIGJveFNpemluZzogJ2NvbnRlbnQtYm94JyxcbiAgICBiYWNrZ3JvdW5kOiAnbm9uZScsXG4gICAgaGVpZ2h0OiAnMS40Mzc1ZW0nLFxuICAgIC8vIFJlc2V0IDIzcHh0aGUgbmF0aXZlIGlucHV0IGxpbmUtaGVpZ2h0XG4gICAgbWFyZ2luOiAwLFxuICAgIC8vIFJlc2V0IGZvciBTYWZhcmlcbiAgICBXZWJraXRUYXBIaWdobGlnaHRDb2xvcjogJ3RyYW5zcGFyZW50JyxcbiAgICBkaXNwbGF5OiAnYmxvY2snLFxuICAgIC8vIE1ha2UgdGhlIGZsZXggaXRlbSBzaHJpbmsgd2l0aCBGaXJlZm94XG4gICAgbWluV2lkdGg6IDAsXG4gICAgd2lkdGg6ICcxMDAlJyxcbiAgICAvLyBGaXggSUUxMSB3aWR0aCBpc3N1ZVxuICAgIGFuaW1hdGlvbk5hbWU6ICdtdWktYXV0by1maWxsLWNhbmNlbCcsXG4gICAgYW5pbWF0aW9uRHVyYXRpb246ICcxMG1zJyxcbiAgICAnJjo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXIsXG4gICAgLy8gRmlyZWZveCAxOStcbiAgICAnJjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlcixcbiAgICAvLyBJRTExXG4gICAgJyY6Oi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyLFxuICAgIC8vIEVkZ2VcbiAgICAnJjpmb2N1cyc6IHtcbiAgICAgIG91dGxpbmU6IDBcbiAgICB9LFxuICAgIC8vIFJlc2V0IEZpcmVmb3ggaW52YWxpZCByZXF1aXJlZCBpbnB1dCBzdHlsZVxuICAgICcmOmludmFsaWQnOiB7XG4gICAgICBib3hTaGFkb3c6ICdub25lJ1xuICAgIH0sXG4gICAgJyY6Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb24nOiB7XG4gICAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgd2hlbiB0eXBlPXNlYXJjaC5cbiAgICAgIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJ1xuICAgIH0sXG4gICAgLy8gU2hvdyBhbmQgaGlkZSB0aGUgcGxhY2Vob2xkZXIgbG9naWNcbiAgICBbYGxhYmVsW2RhdGEtc2hyaW5rPWZhbHNlXSArIC4ke2lucHV0QmFzZUNsYXNzZXMuZm9ybUNvbnRyb2x9ICZgXToge1xuICAgICAgJyY6Oi13ZWJraXQtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlckhpZGRlbixcbiAgICAgICcmOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBGaXJlZm94IDE5K1xuICAgICAgJyY6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBJRTExXG4gICAgICAnJjo6LW1zLWlucHV0LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJIaWRkZW4sXG4gICAgICAvLyBFZGdlXG4gICAgICAnJjpmb2N1czo6LXdlYmtpdC1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgICcmOmZvY3VzOjotbW96LXBsYWNlaG9sZGVyJzogcGxhY2Vob2xkZXJWaXNpYmxlLFxuICAgICAgLy8gRmlyZWZveCAxOStcbiAgICAgICcmOmZvY3VzOi1tcy1pbnB1dC1wbGFjZWhvbGRlcic6IHBsYWNlaG9sZGVyVmlzaWJsZSxcbiAgICAgIC8vIElFMTFcbiAgICAgICcmOmZvY3VzOjotbXMtaW5wdXQtcGxhY2Vob2xkZXInOiBwbGFjZWhvbGRlclZpc2libGUgLy8gRWRnZVxuICAgIH0sXG5cbiAgICBbYCYuJHtpbnB1dEJhc2VDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgICBvcGFjaXR5OiAxLFxuICAgICAgLy8gUmVzZXQgaU9TIG9wYWNpdHlcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQuZGlzYWJsZWQgLy8gRml4IG9wYWNpdHkgU2FmYXJpIGJ1Z1xuICAgIH0sXG5cbiAgICAnJjotd2Via2l0LWF1dG9maWxsJzoge1xuICAgICAgYW5pbWF0aW9uRHVyYXRpb246ICc1MDAwcycsXG4gICAgICBhbmltYXRpb25OYW1lOiAnbXVpLWF1dG8tZmlsbCdcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gICAgcGFkZGluZ1RvcDogMVxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gICAgaGVpZ2h0OiAnYXV0bycsXG4gICAgcmVzaXplOiAnbm9uZScsXG4gICAgcGFkZGluZzogMCxcbiAgICBwYWRkaW5nVG9wOiAwXG4gIH0sIG93bmVyU3RhdGUudHlwZSA9PT0gJ3NlYXJjaCcgJiYge1xuICAgIC8vIEltcHJvdmUgdHlwZSBzZWFyY2ggc3R5bGUuXG4gICAgTW96QXBwZWFyYW5jZTogJ3RleHRmaWVsZCdcbiAgfSk7XG59KTtcbmNvbnN0IGlucHV0R2xvYmFsU3R5bGVzID0gLyojX19QVVJFX18qL19qc3goR2xvYmFsU3R5bGVzLCB7XG4gIHN0eWxlczoge1xuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwnOiB7XG4gICAgICBmcm9tOiB7XG4gICAgICAgIGRpc3BsYXk6ICdibG9jaydcbiAgICAgIH1cbiAgICB9LFxuICAgICdAa2V5ZnJhbWVzIG11aS1hdXRvLWZpbGwtY2FuY2VsJzoge1xuICAgICAgZnJvbToge1xuICAgICAgICBkaXNwbGF5OiAnYmxvY2snXG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLyoqXG4gKiBgSW5wdXRCYXNlYCBjb250YWlucyBhcyBmZXcgc3R5bGVzIGFzIHBvc3NpYmxlLlxuICogSXQgYWltcyB0byBiZSBhIHNpbXBsZSBidWlsZGluZyBibG9jayBmb3IgY3JlYXRpbmcgYW4gaW5wdXQuXG4gKiBJdCBjb250YWlucyBhIGxvYWQgb2Ygc3R5bGUgcmVzZXQgYW5kIHNvbWUgc3RhdGUgbG9naWMuXG4gKi9cbmNvbnN0IElucHV0QmFzZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIElucHV0QmFzZShpblByb3BzLCByZWYpIHtcbiAgdmFyIF9zbG90UHJvcHMkaW5wdXQ7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUlucHV0QmFzZSdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgICdhcmlhLWRlc2NyaWJlZGJ5JzogYXJpYURlc2NyaWJlZGJ5LFxuICAgICAgYXV0b0NvbXBsZXRlLFxuICAgICAgYXV0b0ZvY3VzLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50cyA9IHt9LFxuICAgICAgY29tcG9uZW50c1Byb3BzID0ge30sXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGRpc2FibGVJbmplY3RpbmdHbG9iYWxTdHlsZXMsXG4gICAgICBlbmRBZG9ybm1lbnQsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIGlkLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgaW5wdXRQcm9wczogaW5wdXRQcm9wc1Byb3AgPSB7fSxcbiAgICAgIGlucHV0UmVmOiBpbnB1dFJlZlByb3AsXG4gICAgICBtYXhSb3dzLFxuICAgICAgbWluUm93cyxcbiAgICAgIG11bHRpbGluZSA9IGZhbHNlLFxuICAgICAgbmFtZSxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2hhbmdlLFxuICAgICAgb25DbGljayxcbiAgICAgIG9uRm9jdXMsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgcGxhY2Vob2xkZXIsXG4gICAgICByZWFkT25seSxcbiAgICAgIHJlbmRlclN1ZmZpeCxcbiAgICAgIHJvd3MsXG4gICAgICBzbG90UHJvcHMgPSB7fSxcbiAgICAgIHNsb3RzID0ge30sXG4gICAgICBzdGFydEFkb3JubWVudCxcbiAgICAgIHR5cGUgPSAndGV4dCcsXG4gICAgICB2YWx1ZTogdmFsdWVQcm9wXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHZhbHVlID0gaW5wdXRQcm9wc1Byb3AudmFsdWUgIT0gbnVsbCA/IGlucHV0UHJvcHNQcm9wLnZhbHVlIDogdmFsdWVQcm9wO1xuICBjb25zdCB7XG4gICAgY3VycmVudDogaXNDb250cm9sbGVkXG4gIH0gPSBSZWFjdC51c2VSZWYodmFsdWUgIT0gbnVsbCk7XG4gIGNvbnN0IGlucHV0UmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZUlucHV0UmVmV2FybmluZyA9IFJlYWN0LnVzZUNhbGxiYWNrKGluc3RhbmNlID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGluc3RhbmNlICYmIGluc3RhbmNlLm5vZGVOYW1lICE9PSAnSU5QVVQnICYmICFpbnN0YW5jZS5mb2N1cykge1xuICAgICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCBhIGBpbnB1dENvbXBvbmVudGAgdG8gdGhlIGlucHV0IGNvbXBvbmVudCcsICd0aGF0IGRvZXMgbm90IGNvcnJlY3RseSBoYW5kbGUgdGhlIGByZWZgIHByb3AuJywgJ01ha2Ugc3VyZSB0aGUgYHJlZmAgcHJvcCBpcyBjYWxsZWQgd2l0aCBhIEhUTUxJbnB1dEVsZW1lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVJbnB1dFJlZiA9IHVzZUZvcmtSZWYoaW5wdXRSZWYsIGlucHV0UmVmUHJvcCwgaW5wdXRQcm9wc1Byb3AucmVmLCBoYW5kbGVJbnB1dFJlZldhcm5pbmcpO1xuICBjb25zdCBbZm9jdXNlZCwgc2V0Rm9jdXNlZF0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvcnVsZXMtb2YtaG9va3NcbiAgICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgICAgaWYgKG11aUZvcm1Db250cm9sKSB7XG4gICAgICAgIHJldHVybiBtdWlGb3JtQ29udHJvbC5yZWdpc3RlckVmZmVjdCgpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9LCBbbXVpRm9ybUNvbnRyb2xdKTtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnY29sb3InLCAnZGlzYWJsZWQnLCAnZXJyb3InLCAnaGlkZGVuTGFiZWwnLCAnc2l6ZScsICdyZXF1aXJlZCcsICdmaWxsZWQnXVxuICB9KTtcbiAgZmNzLmZvY3VzZWQgPSBtdWlGb3JtQ29udHJvbCA/IG11aUZvcm1Db250cm9sLmZvY3VzZWQgOiBmb2N1c2VkO1xuXG4gIC8vIFRoZSBibHVyIHdvbid0IGZpcmUgd2hlbiB0aGUgZGlzYWJsZWQgc3RhdGUgaXMgc2V0IG9uIGEgZm9jdXNlZCBpbnB1dC5cbiAgLy8gV2UgbmVlZCB0byBib29rIGtlZXAgdGhlIGZvY3VzZWQgc3RhdGUgbWFudWFsbHkuXG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFtdWlGb3JtQ29udHJvbCAmJiBkaXNhYmxlZCAmJiBmb2N1c2VkKSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICAgIGlmIChvbkJsdXIpIHtcbiAgICAgICAgb25CbHVyKCk7XG4gICAgICB9XG4gICAgfVxuICB9LCBbbXVpRm9ybUNvbnRyb2wsIGRpc2FibGVkLCBmb2N1c2VkLCBvbkJsdXJdKTtcbiAgY29uc3Qgb25GaWxsZWQgPSBtdWlGb3JtQ29udHJvbCAmJiBtdWlGb3JtQ29udHJvbC5vbkZpbGxlZDtcbiAgY29uc3Qgb25FbXB0eSA9IG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRW1wdHk7XG4gIGNvbnN0IGNoZWNrRGlydHkgPSBSZWFjdC51c2VDYWxsYmFjayhvYmogPT4ge1xuICAgIGlmIChpc0ZpbGxlZChvYmopKSB7XG4gICAgICBpZiAob25GaWxsZWQpIHtcbiAgICAgICAgb25GaWxsZWQoKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKG9uRW1wdHkpIHtcbiAgICAgIG9uRW1wdHkoKTtcbiAgICB9XG4gIH0sIFtvbkZpbGxlZCwgb25FbXB0eV0pO1xuICB1c2VFbmhhbmNlZEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGlzQ29udHJvbGxlZCkge1xuICAgICAgY2hlY2tEaXJ0eSh7XG4gICAgICAgIHZhbHVlXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgY2hlY2tEaXJ0eSwgaXNDb250cm9sbGVkXSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gZXZlbnQgPT4ge1xuICAgIC8vIEZpeCBhIGJ1ZyB3aXRoIElFMTEgd2hlcmUgdGhlIGZvY3VzL2JsdXIgZXZlbnRzIGFyZSB0cmlnZ2VyZWRcbiAgICAvLyB3aGlsZSB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgIGlmIChmY3MuZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25Gb2N1cykge1xuICAgICAgb25Gb2N1cyhldmVudCk7XG4gICAgfVxuICAgIGlmIChpbnB1dFByb3BzUHJvcC5vbkZvY3VzKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gICAgaWYgKG11aUZvcm1Db250cm9sICYmIG11aUZvcm1Db250cm9sLm9uRm9jdXMpIHtcbiAgICAgIG11aUZvcm1Db250cm9sLm9uRm9jdXMoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKHRydWUpO1xuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlQmx1ciA9IGV2ZW50ID0+IHtcbiAgICBpZiAob25CbHVyKSB7XG4gICAgICBvbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25CbHVyKSB7XG4gICAgICBpbnB1dFByb3BzUHJvcC5vbkJsdXIoZXZlbnQpO1xuICAgIH1cbiAgICBpZiAobXVpRm9ybUNvbnRyb2wgJiYgbXVpRm9ybUNvbnRyb2wub25CbHVyKSB7XG4gICAgICBtdWlGb3JtQ29udHJvbC5vbkJsdXIoZXZlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRGb2N1c2VkKGZhbHNlKTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IChldmVudCwgLi4uYXJncykgPT4ge1xuICAgIGlmICghaXNDb250cm9sbGVkKSB7XG4gICAgICBjb25zdCBlbGVtZW50ID0gZXZlbnQudGFyZ2V0IHx8IGlucHV0UmVmLmN1cnJlbnQ7XG4gICAgICBpZiAoZWxlbWVudCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBgTVVJOiBFeHBlY3RlZCB2YWxpZCBpbnB1dCB0YXJnZXQuIERpZCB5b3UgdXNlIGEgY3VzdG9tIFxcYGlucHV0Q29tcG9uZW50XFxgIGFuZCBmb3JnZXQgdG8gZm9yd2FyZCByZWZzPyBTZWUgaHR0cHM6Ly9tdWkuY29tL3IvaW5wdXQtY29tcG9uZW50LXJlZi1pbnRlcmZhY2UgZm9yIG1vcmUgaW5mby5gIDogX2Zvcm1hdE11aUVycm9yTWVzc2FnZSgxKSk7XG4gICAgICB9XG4gICAgICBjaGVja0RpcnR5KHtcbiAgICAgICAgdmFsdWU6IGVsZW1lbnQudmFsdWVcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoaW5wdXRQcm9wc1Byb3Aub25DaGFuZ2UpIHtcbiAgICAgIGlucHV0UHJvcHNQcm9wLm9uQ2hhbmdlKGV2ZW50LCAuLi5hcmdzKTtcbiAgICB9XG5cbiAgICAvLyBQZXJmb3JtIGluIHRoZSB3aWxsVXBkYXRlXG4gICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICBvbkNoYW5nZShldmVudCwgLi4uYXJncyk7XG4gICAgfVxuICB9O1xuXG4gIC8vIENoZWNrIHRoZSBpbnB1dCBzdGF0ZSBvbiBtb3VudCwgaW4gY2FzZSBpdCB3YXMgZmlsbGVkIGJ5IHRoZSB1c2VyXG4gIC8vIG9yIGF1dG8gZmlsbGVkIGJ5IHRoZSBicm93c2VyIGJlZm9yZSB0aGUgaHlkcmF0aW9uIChmb3IgU1NSKS5cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBjaGVja0RpcnR5KGlucHV0UmVmLmN1cnJlbnQpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgfSwgW10pO1xuICBjb25zdCBoYW5kbGVDbGljayA9IGV2ZW50ID0+IHtcbiAgICBpZiAoaW5wdXRSZWYuY3VycmVudCAmJiBldmVudC5jdXJyZW50VGFyZ2V0ID09PSBldmVudC50YXJnZXQpIHtcbiAgICAgIGlucHV0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gICAgaWYgKG9uQ2xpY2spIHtcbiAgICAgIG9uQ2xpY2soZXZlbnQpO1xuICAgIH1cbiAgfTtcbiAgbGV0IElucHV0Q29tcG9uZW50ID0gaW5wdXRDb21wb25lbnQ7XG4gIGxldCBpbnB1dFByb3BzID0gaW5wdXRQcm9wc1Byb3A7XG4gIGlmIChtdWx0aWxpbmUgJiYgSW5wdXRDb21wb25lbnQgPT09ICdpbnB1dCcpIHtcbiAgICBpZiAocm93cykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKG1pblJvd3MgfHwgbWF4Um93cykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignTVVJOiBZb3UgY2FuIG5vdCB1c2UgdGhlIGBtaW5Sb3dzYCBvciBgbWF4Um93c2AgcHJvcHMgd2hlbiB0aGUgaW5wdXQgYHJvd3NgIHByb3AgaXMgc2V0LicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1pblJvd3M6IHJvd3MsXG4gICAgICAgIG1heFJvd3M6IHJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnB1dFByb3BzID0gX2V4dGVuZHMoe1xuICAgICAgICB0eXBlOiB1bmRlZmluZWQsXG4gICAgICAgIG1heFJvd3MsXG4gICAgICAgIG1pblJvd3NcbiAgICAgIH0sIGlucHV0UHJvcHMpO1xuICAgIH1cbiAgICBJbnB1dENvbXBvbmVudCA9IFRleHRhcmVhQXV0b3NpemU7XG4gIH1cbiAgY29uc3QgaGFuZGxlQXV0b0ZpbGwgPSBldmVudCA9PiB7XG4gICAgLy8gUHJvdmlkZSBhIGZha2UgdmFsdWUgYXMgQ2hyb21lIG1pZ2h0IG5vdCBsZXQgeW91IGFjY2VzcyBpdCBmb3Igc2VjdXJpdHkgcmVhc29ucy5cbiAgICBjaGVja0RpcnR5KGV2ZW50LmFuaW1hdGlvbk5hbWUgPT09ICdtdWktYXV0by1maWxsLWNhbmNlbCcgPyBpbnB1dFJlZi5jdXJyZW50IDoge1xuICAgICAgdmFsdWU6ICd4J1xuICAgIH0pO1xuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChtdWlGb3JtQ29udHJvbCkge1xuICAgICAgbXVpRm9ybUNvbnRyb2wuc2V0QWRvcm5lZFN0YXJ0KEJvb2xlYW4oc3RhcnRBZG9ybm1lbnQpKTtcbiAgICB9XG4gIH0sIFttdWlGb3JtQ29udHJvbCwgc3RhcnRBZG9ybm1lbnRdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZW5kQWRvcm5tZW50LFxuICAgIGVycm9yOiBmY3MuZXJyb3IsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIGZ1bGxXaWR0aCxcbiAgICBoaWRkZW5MYWJlbDogZmNzLmhpZGRlbkxhYmVsLFxuICAgIG11bHRpbGluZSxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICBzdGFydEFkb3JubWVudCxcbiAgICB0eXBlXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IFJvb3QgPSBzbG90cy5yb290IHx8IGNvbXBvbmVudHMuUm9vdCB8fCBJbnB1dEJhc2VSb290O1xuICBjb25zdCByb290UHJvcHMgPSBzbG90UHJvcHMucm9vdCB8fCBjb21wb25lbnRzUHJvcHMucm9vdCB8fCB7fTtcbiAgY29uc3QgSW5wdXQgPSBzbG90cy5pbnB1dCB8fCBjb21wb25lbnRzLklucHV0IHx8IElucHV0QmFzZUNvbXBvbmVudDtcbiAgaW5wdXRQcm9wcyA9IF9leHRlbmRzKHt9LCBpbnB1dFByb3BzLCAoX3Nsb3RQcm9wcyRpbnB1dCA9IHNsb3RQcm9wcy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90UHJvcHMkaW5wdXQgOiBjb21wb25lbnRzUHJvcHMuaW5wdXQpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFshZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlcyAmJiBpbnB1dEdsb2JhbFN0eWxlcywgLyojX19QVVJFX18qL19qc3hzKFJvb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdCkgJiYge1xuICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIHJvb3RQcm9wcy5vd25lclN0YXRlKVxuICAgIH0sIHtcbiAgICAgIHJlZjogcmVmLFxuICAgICAgb25DbGljazogaGFuZGxlQ2xpY2tcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgcm9vdFByb3BzLmNsYXNzTmFtZSwgY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICBjaGlsZHJlbjogW3N0YXJ0QWRvcm5tZW50LCAvKiNfX1BVUkVfXyovX2pzeChGb3JtQ29udHJvbENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgICAgdmFsdWU6IG51bGwsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dCwgX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICAgICAgXCJhcmlhLWludmFsaWRcIjogZmNzLmVycm9yLFxuICAgICAgICAgIFwiYXJpYS1kZXNjcmliZWRieVwiOiBhcmlhRGVzY3JpYmVkYnksXG4gICAgICAgICAgYXV0b0NvbXBsZXRlOiBhdXRvQ29tcGxldGUsXG4gICAgICAgICAgYXV0b0ZvY3VzOiBhdXRvRm9jdXMsXG4gICAgICAgICAgZGVmYXVsdFZhbHVlOiBkZWZhdWx0VmFsdWUsXG4gICAgICAgICAgZGlzYWJsZWQ6IGZjcy5kaXNhYmxlZCxcbiAgICAgICAgICBpZDogaWQsXG4gICAgICAgICAgb25BbmltYXRpb25TdGFydDogaGFuZGxlQXV0b0ZpbGwsXG4gICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICBwbGFjZWhvbGRlcjogcGxhY2Vob2xkZXIsXG4gICAgICAgICAgcmVhZE9ubHk6IHJlYWRPbmx5LFxuICAgICAgICAgIHJlcXVpcmVkOiBmY3MucmVxdWlyZWQsXG4gICAgICAgICAgcm93czogcm93cyxcbiAgICAgICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sXG4gICAgICAgICAgb25LZXlVcDogb25LZXlVcCxcbiAgICAgICAgICB0eXBlOiB0eXBlXG4gICAgICAgIH0sIGlucHV0UHJvcHMsICFpc0hvc3RDb21wb25lbnQoSW5wdXQpICYmIHtcbiAgICAgICAgICBhczogSW5wdXRDb21wb25lbnQsXG4gICAgICAgICAgb3duZXJTdGF0ZTogX2V4dGVuZHMoe30sIG93bmVyU3RhdGUsIGlucHV0UHJvcHMub3duZXJTdGF0ZSlcbiAgICAgICAgfSwge1xuICAgICAgICAgIHJlZjogaGFuZGxlSW5wdXRSZWYsXG4gICAgICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuaW5wdXQsIGlucHV0UHJvcHMuY2xhc3NOYW1lLCByZWFkT25seSAmJiAnTXVpSW5wdXRCYXNlLXJlYWRPbmx5JyksXG4gICAgICAgICAgb25CbHVyOiBoYW5kbGVCbHVyLFxuICAgICAgICAgIG9uQ2hhbmdlOiBoYW5kbGVDaGFuZ2UsXG4gICAgICAgICAgb25Gb2N1czogaGFuZGxlRm9jdXNcbiAgICAgICAgfSkpXG4gICAgICB9KSwgZW5kQWRvcm5tZW50LCByZW5kZXJTdWZmaXggPyByZW5kZXJTdWZmaXgoX2V4dGVuZHMoe30sIGZjcywge1xuICAgICAgICBzdGFydEFkb3JubWVudFxuICAgICAgfSkpIDogbnVsbF1cbiAgICB9KSldXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dEJhc2UucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgJ2FyaWEtZGVzY3JpYmVkYnknOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGhlbHBzIHVzZXJzIHRvIGZpbGwgZm9ybXMgZmFzdGVyLCBlc3BlY2lhbGx5IG9uIG1vYmlsZSBkZXZpY2VzLlxuICAgKiBUaGUgbmFtZSBjYW4gYmUgY29uZnVzaW5nLCBhcyBpdCdzIG1vcmUgbGlrZSBhbiBhdXRvZmlsbC5cbiAgICogWW91IGNhbiBsZWFybiBtb3JlIGFib3V0IGl0IFtmb2xsb3dpbmcgdGhlIHNwZWNpZmljYXRpb25dKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm0tY29udHJvbC1pbmZyYXN0cnVjdHVyZS5odG1sI2F1dG9maWxsKS5cbiAgICovXG4gIGF1dG9Db21wbGV0ZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGBpbnB1dGAgZWxlbWVudCBpcyBmb2N1c2VkIGR1cmluZyB0aGUgZmlyc3QgbW91bnQuXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYCdwcmltYXJ5J2ApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsncHJpbWFyeScsICdzZWNvbmRhcnknLCAnZXJyb3InLCAnaW5mbycsICdzdWNjZXNzJywgJ3dhcm5pbmcnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90c2AgcHJvcC5cbiAgICogSXQncyByZWNvbW1lbmRlZCB0byB1c2UgdGhlIGBzbG90c2AgcHJvcCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50czogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBJbnB1dDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIFJvb3Q6IFByb3BUeXBlcy5lbGVtZW50VHlwZVxuICB9KSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdFByb3BzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RQcm9wc2AgcHJvcCBpbnN0ZWFkLCBhcyBgY29tcG9uZW50c1Byb3BzYCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHNQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGRlZmF1bHQgdmFsdWUuIFVzZSB3aGVuIHRoZSBjb21wb25lbnQgaXMgbm90IGNvbnRyb2xsZWQuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIEdsb2JhbFN0eWxlcyBmb3IgdGhlIGF1dG8tZmlsbCBrZXlmcmFtZXMgd2lsbCBub3QgYmUgaW5qZWN0ZWQvcmVtb3ZlZCBvbiBtb3VudC91bm1vdW50LiBNYWtlIHN1cmUgdG8gaW5qZWN0IHRoZW0gYXQgdGhlIHRvcCBvZiB5b3VyIGFwcGxpY2F0aW9uLlxuICAgKiBUaGlzIG9wdGlvbiBpcyBpbnRlbmRlZCB0byBoZWxwIHdpdGggYm9vc3RpbmcgdGhlIGluaXRpYWwgcmVuZGVyaW5nIHBlcmZvcm1hbmNlIGlmIHlvdSBhcmUgbG9hZGluZyBhIGJpZyBhbW91bnQgb2YgSW5wdXQgY29tcG9uZW50cyBhdCBvbmNlLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUluamVjdGluZ0dsb2JhbFN0eWxlczogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbmQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBlbmRBZG9ybm1lbnQ6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIGluZGljYXRlIGFuIGVycm9yLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgaWQgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICovXG4gIGlkOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCAnaW5wdXQnXG4gICAqL1xuICBpbnB1dENvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgJ25vbmUnYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBtYXJnaW46IFByb3BUeXBlcy5vbmVPZihbJ2RlbnNlJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBNYXhpbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWF4Um93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogTWluaW11bSBudW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIG1pblJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSBbVGV4dGFyZWFBdXRvc2l6ZV0oL21hdGVyaWFsLXVpL3JlYWN0LXRleHRhcmVhLWF1dG9zaXplLykgZWxlbWVudCBpcyByZW5kZXJlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIG11bHRpbGluZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOYW1lIGF0dHJpYnV0ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgbmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGBpbnB1dGAgaXMgYmx1cnJlZC5cbiAgICpcbiAgICogTm90aWNlIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50IChldmVudCkgbWlnaHQgYmUgdW5kZWZpbmVkLlxuICAgKi9cbiAgb25CbHVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIHZhbHVlIGlzIGNoYW5nZWQuXG4gICAqXG4gICAqIEBwYXJhbSB7UmVhY3QuQ2hhbmdlRXZlbnQ8SFRNTFRleHRBcmVhRWxlbWVudCB8IEhUTUxJbnB1dEVsZW1lbnQ+fSBldmVudCBUaGUgZXZlbnQgc291cmNlIG9mIHRoZSBjYWxsYmFjay5cbiAgICogWW91IGNhbiBwdWxsIG91dCB0aGUgbmV3IHZhbHVlIGJ5IGFjY2Vzc2luZyBgZXZlbnQudGFyZ2V0LnZhbHVlYCAoc3RyaW5nKS5cbiAgICovXG4gIG9uQ2hhbmdlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBgaW5wdXRgIGRvZXNuJ3Qgc2F0aXNmeSBpdHMgY29uc3RyYWludHMuXG4gICAqL1xuICBvbkludmFsaWQ6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZW5kZXJTdWZmaXg6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBlbGVtZW50IGlzIHJlcXVpcmVkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGBmYWxzZWApIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQgRm9ybUNvbnRyb2wgY29tcG9uZW50LlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICByb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgc2l6ZTogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydtZWRpdW0nLCAnc21hbGwnXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgY29tcG9uZW50c1Byb3BzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBpbnB1dDogUHJvcFR5cGVzLm9iamVjdCxcbiAgICByb290OiBQcm9wVHlwZXMub2JqZWN0XG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYGNvbXBvbmVudHNgIHByb3AsIHdoaWNoIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBTdGFydCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIHN0YXJ0QWRvcm5tZW50OiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFR5cGUgb2YgdGhlIGBpbnB1dGAgZWxlbWVudC4gSXQgc2hvdWxkIGJlIFthIHZhbGlkIEhUTUw1IGlucHV0IHR5cGVdKGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUTUwvRWxlbWVudC9pbnB1dCNGb3JtXyUzQ2lucHV0JTNFX3R5cGVzKS5cbiAgICogQGRlZmF1bHQgJ3RleHQnXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIHZhbHVlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQsIHJlcXVpcmVkIGZvciBhIGNvbnRyb2xsZWQgY29tcG9uZW50LlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dEJhc2U7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldElucHV0QmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpSW5wdXRCYXNlJywgc2xvdCk7XG59XG5jb25zdCBpbnB1dEJhc2VDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRCYXNlJywgWydyb290JywgJ2Zvcm1Db250cm9sJywgJ2ZvY3VzZWQnLCAnZGlzYWJsZWQnLCAnYWRvcm5lZFN0YXJ0JywgJ2Fkb3JuZWRFbmQnLCAnZXJyb3InLCAnc2l6ZVNtYWxsJywgJ211bHRpbGluZScsICdjb2xvclNlY29uZGFyeScsICdmdWxsV2lkdGgnLCAnaGlkZGVuTGFiZWwnLCAncmVhZE9ubHknLCAnaW5wdXQnLCAnaW5wdXRTaXplU21hbGwnLCAnaW5wdXRNdWx0aWxpbmUnLCAnaW5wdXRUeXBlU2VhcmNoJywgJ2lucHV0QWRvcm5lZFN0YXJ0JywgJ2lucHV0QWRvcm5lZEVuZCcsICdpbnB1dEhpZGRlbkxhYmVsJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRCYXNlQ2xhc3NlczsiLCIvLyBTdXBwb3J0cyBkZXRlcm1pbmF0aW9uIG9mIGlzQ29udHJvbGxlZCgpLlxuLy8gQ29udHJvbGxlZCBpbnB1dCBhY2NlcHRzIGl0cyBjdXJyZW50IHZhbHVlIGFzIGEgcHJvcC5cbi8vXG4vLyBAc2VlIGh0dHBzOi8vZmFjZWJvb2suZ2l0aHViLmlvL3JlYWN0L2RvY3MvZm9ybXMuaHRtbCNjb250cm9sbGVkLWNvbXBvbmVudHNcbi8vIEBwYXJhbSB2YWx1ZVxuLy8gQHJldHVybnMge2Jvb2xlYW59IHRydWUgaWYgc3RyaW5nIChpbmNsdWRpbmcgJycpIG9yIG51bWJlciAoaW5jbHVkaW5nIHplcm8pXG5leHBvcnQgZnVuY3Rpb24gaGFzVmFsdWUodmFsdWUpIHtcbiAgcmV0dXJuIHZhbHVlICE9IG51bGwgJiYgIShBcnJheS5pc0FycmF5KHZhbHVlKSAmJiB2YWx1ZS5sZW5ndGggPT09IDApO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgZmllbGQgaXMgZW1wdHkgb3IgZmlsbGVkLlxuLy8gUmVzcG9uc2UgZGV0ZXJtaW5lcyBpZiBsYWJlbCBpcyBwcmVzZW50ZWQgYWJvdmUgZmllbGQgb3IgYXMgcGxhY2Vob2xkZXIuXG4vL1xuLy8gQHBhcmFtIG9ialxuLy8gQHBhcmFtIFNTUlxuLy8gQHJldHVybnMge2Jvb2xlYW59IEZhbHNlIHdoZW4gbm90IHByZXNlbnQgb3IgZW1wdHkgc3RyaW5nLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhbnkgbnVtYmVyIG9yIHN0cmluZyB3aXRoIGxlbmd0aC5cbmV4cG9ydCBmdW5jdGlvbiBpc0ZpbGxlZChvYmosIFNTUiA9IGZhbHNlKSB7XG4gIHJldHVybiBvYmogJiYgKGhhc1ZhbHVlKG9iai52YWx1ZSkgJiYgb2JqLnZhbHVlICE9PSAnJyB8fCBTU1IgJiYgaGFzVmFsdWUob2JqLmRlZmF1bHRWYWx1ZSkgJiYgb2JqLmRlZmF1bHRWYWx1ZSAhPT0gJycpO1xufVxuXG4vLyBEZXRlcm1pbmUgaWYgYW4gSW5wdXQgaXMgYWRvcm5lZCBvbiBzdGFydC5cbi8vIEl0J3MgY29ycmVzcG9uZGluZyB0byB0aGUgbGVmdCB3aXRoIExUUi5cbi8vXG4vLyBAcGFyYW0gb2JqXG4vLyBAcmV0dXJucyB7Ym9vbGVhbn0gRmFsc2Ugd2hlbiBubyBhZG9ybm1lbnRzLlxuLy8gICAgICAgICAgICAgICAgICAgIFRydWUgd2hlbiBhZG9ybmVkIGF0IHRoZSBzdGFydC5cbmV4cG9ydCBmdW5jdGlvbiBpc0Fkb3JuZWRTdGFydChvYmopIHtcbiAgcmV0dXJuIG9iai5zdGFydEFkb3JubWVudDtcbn0iLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUZvcm1MYWJlbCcsIHNsb3QpO1xufVxuY29uc3QgZm9ybUxhYmVsQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUZvcm1MYWJlbCcsIFsncm9vdCcsICdjb2xvclNlY29uZGFyeScsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCcsICdyZXF1aXJlZCcsICdhc3RlcmlzayddKTtcbmV4cG9ydCBkZWZhdWx0IGZvcm1MYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb2xvclwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJmaWxsZWRcIiwgXCJmb2N1c2VkXCIsIFwicmVxdWlyZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgZm9ybUxhYmVsQ2xhc3NlcywgeyBnZXRGb3JtTGFiZWxVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vZm9ybUxhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBjb2xvcixcbiAgICBmb2N1c2VkLFxuICAgIGRpc2FibGVkLFxuICAgIGVycm9yLFxuICAgIGZpbGxlZCxcbiAgICByZXF1aXJlZFxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBlcnJvciAmJiAnZXJyb3InLCBmaWxsZWQgJiYgJ2ZpbGxlZCcsIGZvY3VzZWQgJiYgJ2ZvY3VzZWQnLCByZXF1aXJlZCAmJiAncmVxdWlyZWQnXSxcbiAgICBhc3RlcmlzazogWydhc3RlcmlzaycsIGVycm9yICYmICdlcnJvciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Rm9ybUxhYmVsVXRpbGl0eUNsYXNzZXMsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBjb25zdCBGb3JtTGFiZWxSb290ID0gc3R5bGVkKCdsYWJlbCcsIHtcbiAgbmFtZTogJ011aUZvcm1MYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6ICh7XG4gICAgb3duZXJTdGF0ZVxuICB9LCBzdHlsZXMpID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIHN0eWxlcy5yb290LCBvd25lclN0YXRlLmNvbG9yID09PSAnc2Vjb25kYXJ5JyAmJiBzdHlsZXMuY29sb3JTZWNvbmRhcnksIG93bmVyU3RhdGUuZmlsbGVkICYmIHN0eWxlcy5maWxsZWQpO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5zZWNvbmRhcnlcbn0sIHRoZW1lLnR5cG9ncmFwaHkuYm9keTEsIHtcbiAgbGluZUhlaWdodDogJzEuNDM3NWVtJyxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZm9jdXNlZH1gXToge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG4gIH0sXG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUudGV4dC5kaXNhYmxlZFxuICB9LFxuICBbYCYuJHtmb3JtTGFiZWxDbGFzc2VzLmVycm9yfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmVycm9yLm1haW5cbiAgfVxufSkpO1xuY29uc3QgQXN0ZXJpc2tDb21wb25lbnQgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlGb3JtTGFiZWwnLFxuICBzbG90OiAnQXN0ZXJpc2snLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5hc3Rlcmlza1xufSkoKHtcbiAgdGhlbWVcbn0pID0+ICh7XG4gIFtgJi4ke2Zvcm1MYWJlbENsYXNzZXMuZXJyb3J9YF06IHtcbiAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZXJyb3IubWFpblxuICB9XG59KSk7XG5jb25zdCBGb3JtTGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBGb3JtTGFiZWwoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUZvcm1MYWJlbCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2xhYmVsJ1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdyZXF1aXJlZCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ2ZpbGxlZCddXG4gIH0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29sb3I6IGZjcy5jb2xvciB8fCAncHJpbWFyeScsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmaWxsZWQ6IGZjcy5maWxsZWQsXG4gICAgZm9jdXNlZDogZmNzLmZvY3VzZWQsXG4gICAgcmVxdWlyZWQ6IGZjcy5yZXF1aXJlZFxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEZvcm1MYWJlbFJvb3QsIF9leHRlbmRzKHtcbiAgICBhczogY29tcG9uZW50LFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICByZWY6IHJlZlxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBbY2hpbGRyZW4sIGZjcy5yZXF1aXJlZCAmJiAvKiNfX1BVUkVfXyovX2pzeHMoQXN0ZXJpc2tDb21wb25lbnQsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBcImFyaWEtaGlkZGVuXCI6IHRydWUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuYXN0ZXJpc2ssXG4gICAgICBjaGlsZHJlbjogW1wiXFx1MjAwOVwiLCAnKiddXG4gICAgfSldXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRm9ybUxhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCBiZSBkaXNwbGF5ZWQgaW4gYSBkaXNhYmxlZCBzdGF0ZS5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIGlzIGRpc3BsYXllZCBpbiBhbiBlcnJvciBzdGF0ZS5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxhYmVsIHNob3VsZCB1c2UgZmlsbGVkIGNsYXNzZXMga2V5LlxuICAgKi9cbiAgZmlsbGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGlucHV0IG9mIHRoaXMgbGFiZWwgaXMgZm9jdXNlZCAodXNlZCBieSBgRm9ybUdyb3VwYCBjb21wb25lbnRzKS5cbiAgICovXG4gIGZvY3VzZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgd2lsbCBpbmRpY2F0ZSB0aGF0IHRoZSBgaW5wdXRgIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVxdWlyZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgRm9ybUxhYmVsOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRJbnB1dExhYmVsVXRpbGl0eUNsYXNzZXMoc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUlucHV0TGFiZWwnLCBzbG90KTtcbn1cbmNvbnN0IGlucHV0TGFiZWxDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpSW5wdXRMYWJlbCcsIFsncm9vdCcsICdmb2N1c2VkJywgJ2Rpc2FibGVkJywgJ2Vycm9yJywgJ3JlcXVpcmVkJywgJ2FzdGVyaXNrJywgJ2Zvcm1Db250cm9sJywgJ3NpemVTbWFsbCcsICdzaHJpbmsnLCAnYW5pbWF0ZWQnLCAnc3RhbmRhcmQnLCAnZmlsbGVkJywgJ291dGxpbmVkJ10pO1xuZXhwb3J0IGRlZmF1bHQgaW5wdXRMYWJlbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiZGlzYWJsZUFuaW1hdGlvblwiLCBcIm1hcmdpblwiLCBcInNocmlua1wiLCBcInZhcmlhbnRcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZm9ybUNvbnRyb2xTdGF0ZSBmcm9tICcuLi9Gb3JtQ29udHJvbC9mb3JtQ29udHJvbFN0YXRlJztcbmltcG9ydCB1c2VGb3JtQ29udHJvbCBmcm9tICcuLi9Gb3JtQ29udHJvbC91c2VGb3JtQ29udHJvbCc7XG5pbXBvcnQgRm9ybUxhYmVsLCB7IGZvcm1MYWJlbENsYXNzZXMgfSBmcm9tICcuLi9Gb3JtTGFiZWwnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnLi9pbnB1dExhYmVsQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgZm9ybUNvbnRyb2wsXG4gICAgc2l6ZSxcbiAgICBzaHJpbmssXG4gICAgZGlzYWJsZUFuaW1hdGlvbixcbiAgICB2YXJpYW50LFxuICAgIHJlcXVpcmVkXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBmb3JtQ29udHJvbCAmJiAnZm9ybUNvbnRyb2wnLCAhZGlzYWJsZUFuaW1hdGlvbiAmJiAnYW5pbWF0ZWQnLCBzaHJpbmsgJiYgJ3NocmluaycsIHNpemUgJiYgc2l6ZSAhPT0gJ25vcm1hbCcgJiYgYHNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgdmFyaWFudF0sXG4gICAgYXN0ZXJpc2s6IFtyZXF1aXJlZCAmJiAnYXN0ZXJpc2snXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0SW5wdXRMYWJlbFV0aWxpdHlDbGFzc2VzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IElucHV0TGFiZWxSb290ID0gc3R5bGVkKEZvcm1MYWJlbCwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpSW5wdXRMYWJlbCcsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3tcbiAgICAgIFtgJiAuJHtmb3JtTGFiZWxDbGFzc2VzLmFzdGVyaXNrfWBdOiBzdHlsZXMuYXN0ZXJpc2tcbiAgICB9LCBzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5mb3JtQ29udHJvbCAmJiBzdHlsZXMuZm9ybUNvbnRyb2wsIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiBzdHlsZXMuc2l6ZVNtYWxsLCBvd25lclN0YXRlLnNocmluayAmJiBzdHlsZXMuc2hyaW5rLCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHN0eWxlcy5hbmltYXRlZCwgb3duZXJTdGF0ZS5mb2N1c2VkICYmIHN0eWxlcy5mb2N1c2VkLCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XV07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdibG9jaycsXG4gIHRyYW5zZm9ybU9yaWdpbjogJ3RvcCBsZWZ0JyxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgdGV4dE92ZXJmbG93OiAnZWxsaXBzaXMnLFxuICBtYXhXaWR0aDogJzEwMCUnXG59LCBvd25lclN0YXRlLmZvcm1Db250cm9sICYmIHtcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIGxlZnQ6IDAsXG4gIHRvcDogMCxcbiAgLy8gc2xpZ2h0IGFsdGVyYXRpb24gdG8gc3BlYyBzcGFjaW5nIHRvIG1hdGNoIHZpc3VhbCBzcGVjIHJlc3VsdFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMjBweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAvLyBDb21wZW5zYXRpb24gZm9yIHRoZSBgSW5wdXQuaW5wdXRTaXplU21hbGxgIHN0eWxlLlxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMCwgMTdweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgwLCAtMS41cHgpIHNjYWxlKDAuNzUpJyxcbiAgdHJhbnNmb3JtT3JpZ2luOiAndG9wIGxlZnQnLFxuICBtYXhXaWR0aDogJzEzMyUnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlQW5pbWF0aW9uICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKFsnY29sb3InLCAndHJhbnNmb3JtJywgJ21heC13aWR0aCddLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXIsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZmlsbGVkJyAmJiBfZXh0ZW5kcyh7XG4gIC8vIENocm9tZSdzIGF1dG9maWxsIGZlYXR1cmUgZ2l2ZXMgdGhlIGlucHV0IGZpZWxkIGEgeWVsbG93IGJhY2tncm91bmQuXG4gIC8vIFNpbmNlIHRoZSBpbnB1dCBmaWVsZCBpcyBiZWhpbmQgdGhlIGxhYmVsIGluIHRoZSBIVE1MIHRyZWUsXG4gIC8vIHRoZSBpbnB1dCBmaWVsZCBpcyBkcmF3biBsYXN0IGFuZCBoaWRlcyB0aGUgbGFiZWwgd2l0aCBhbiBvcGFxdWUgYmFja2dyb3VuZCBjb2xvci5cbiAgLy8gekluZGV4OiAxIHdpbGwgcmFpc2UgdGhlIGxhYmVsIGFib3ZlIG9wYXF1ZSBiYWNrZ3JvdW5kLWNvbG9ycyBvZiBpbnB1dC5cbiAgekluZGV4OiAxLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxMnB4LCAxNnB4KSBzY2FsZSgxKScsXG4gIG1heFdpZHRoOiAnY2FsYygxMDAlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgMTNweCkgc2NhbGUoMSknXG59LCBvd25lclN0YXRlLnNocmluayAmJiBfZXh0ZW5kcyh7XG4gIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgcG9pbnRlckV2ZW50czogJ2F1dG8nLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgN3B4KSBzY2FsZSgwLjc1KScsXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMjRweCknXG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTJweCwgNHB4KSBzY2FsZSgwLjc1KSdcbn0pKSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIF9leHRlbmRzKHtcbiAgLy8gc2VlIGNvbW1lbnQgYWJvdmUgb24gZmlsbGVkLnpJbmRleFxuICB6SW5kZXg6IDEsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDE0cHgsIDE2cHgpIHNjYWxlKDEpJyxcbiAgbWF4V2lkdGg6ICdjYWxjKDEwMCUgLSAyNHB4KSdcbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ3NtYWxsJyAmJiB7XG4gIHRyYW5zZm9ybTogJ3RyYW5zbGF0ZSgxNHB4LCA5cHgpIHNjYWxlKDEpJ1xufSwgb3duZXJTdGF0ZS5zaHJpbmsgJiYge1xuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHBvaW50ZXJFdmVudHM6ICdhdXRvJyxcbiAgLy8gVGhlb3JldGljYWxseSwgd2Ugc2hvdWxkIGhhdmUgKDgrNSkqMi8wLjc1ID0gMzRweFxuICAvLyBidXQgaXQgZmVlbHMgYSBiZXR0ZXIgd2hlbiBpdCBibGVlZHMgYSBiaXQgb24gdGhlIGxlZnQsIHNvIDMycHguXG4gIG1heFdpZHRoOiAnY2FsYygxMzMlIC0gMzJweCknLFxuICB0cmFuc2Zvcm06ICd0cmFuc2xhdGUoMTRweCwgLTlweCkgc2NhbGUoMC43NSknXG59KSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnc3RhbmRhcmQnICYmIHtcbiAgJyY6bm90KGxhYmVsKSArIGRpdic6IHtcbiAgICBtYXJnaW5Ub3A6IDE2XG4gIH1cbn0pKTtcbmNvbnN0IElucHV0TGFiZWwgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBJbnB1dExhYmVsKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlJbnB1dExhYmVsJyxcbiAgICBwcm9wczogaW5Qcm9wc1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgZGlzYWJsZUFuaW1hdGlvbiA9IGZhbHNlLFxuICAgICAgc2hyaW5rOiBzaHJpbmtQcm9wLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG11aUZvcm1Db250cm9sID0gdXNlRm9ybUNvbnRyb2woKTtcbiAgbGV0IHNocmluayA9IHNocmlua1Byb3A7XG4gIGlmICh0eXBlb2Ygc2hyaW5rID09PSAndW5kZWZpbmVkJyAmJiBtdWlGb3JtQ29udHJvbCkge1xuICAgIHNocmluayA9IG11aUZvcm1Db250cm9sLmZpbGxlZCB8fCBtdWlGb3JtQ29udHJvbC5mb2N1c2VkIHx8IG11aUZvcm1Db250cm9sLmFkb3JuZWRTdGFydDtcbiAgfVxuICBjb25zdCBmY3MgPSBmb3JtQ29udHJvbFN0YXRlKHtcbiAgICBwcm9wcyxcbiAgICBtdWlGb3JtQ29udHJvbCxcbiAgICBzdGF0ZXM6IFsnc2l6ZScsICd2YXJpYW50JywgJ3JlcXVpcmVkJywgJ2ZvY3VzZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVBbmltYXRpb24sXG4gICAgZm9ybUNvbnRyb2w6IG11aUZvcm1Db250cm9sLFxuICAgIHNocmluayxcbiAgICBzaXplOiBmY3Muc2l6ZSxcbiAgICB2YXJpYW50OiBmY3MudmFyaWFudCxcbiAgICByZXF1aXJlZDogZmNzLnJlcXVpcmVkLFxuICAgIGZvY3VzZWQ6IGZjcy5mb2N1c2VkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChJbnB1dExhYmVsUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiZGF0YS1zaHJpbmtcIjogc2hyaW5rLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXNcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBJbnB1dExhYmVsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbG9yIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIEl0IHN1cHBvcnRzIGJvdGggZGVmYXVsdCBhbmQgY3VzdG9tIHRoZW1lIGNvbG9ycywgd2hpY2ggY2FuIGJlIGFkZGVkIGFzIHNob3duIGluIHRoZVxuICAgKiBbcGFsZXR0ZSBjdXN0b21pemF0aW9uIGd1aWRlXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9wYWxldHRlLyNjdXN0b20tY29sb3JzKS5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2Vycm9yJywgJ2luZm8nLCAncHJpbWFyeScsICdzZWNvbmRhcnknLCAnc3VjY2VzcycsICd3YXJuaW5nJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSB0cmFuc2l0aW9uIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBbmltYXRpb246IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgY29tcG9uZW50IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGFiZWwgaXMgZGlzcGxheWVkIGluIGFuIGVycm9yIHN0YXRlLlxuICAgKi9cbiAgZXJyb3I6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYGlucHV0YCBvZiB0aGlzIGxhYmVsIGlzIGZvY3VzZWQuXG4gICAqL1xuICBmb2N1c2VkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGBkZW5zZWAsIHdpbGwgYWRqdXN0IHZlcnRpY2FsIHNwYWNpbmcuIFRoaXMgaXMgbm9ybWFsbHkgb2J0YWluZWQgdmlhIGNvbnRleHQgZnJvbVxuICAgKiBGb3JtQ29udHJvbC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnXSksXG4gIC8qKlxuICAgKiBpZiBgdHJ1ZWAsIHRoZSBsYWJlbCB3aWxsIGluZGljYXRlIHRoYXQgdGhlIGBpbnB1dGAgaXMgcmVxdWlyZWQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsYWJlbCBpcyBzaHJ1bmsuXG4gICAqL1xuICBzaHJpbms6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIHNpemUgb2YgdGhlIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgJ25vcm1hbCdcbiAgICovXG4gIHNpemU6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnbm9ybWFsJywgJ3NtYWxsJ10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBJbnB1dExhYmVsOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaW5rVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlMaW5rJywgc2xvdCk7XG59XG5jb25zdCBsaW5rQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpbmsnLCBbJ3Jvb3QnLCAndW5kZXJsaW5lTm9uZScsICd1bmRlcmxpbmVIb3ZlcicsICd1bmRlcmxpbmVBbHdheXMnLCAnYnV0dG9uJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGxpbmtDbGFzc2VzOyIsImltcG9ydCB7IGFscGhhLCBnZXRQYXRoIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuZXhwb3J0IGNvbnN0IGNvbG9yVHJhbnNmb3JtYXRpb25zID0ge1xuICBwcmltYXJ5OiAncHJpbWFyeS5tYWluJyxcbiAgdGV4dFByaW1hcnk6ICd0ZXh0LnByaW1hcnknLFxuICBzZWNvbmRhcnk6ICdzZWNvbmRhcnkubWFpbicsXG4gIHRleHRTZWNvbmRhcnk6ICd0ZXh0LnNlY29uZGFyeScsXG4gIGVycm9yOiAnZXJyb3IubWFpbidcbn07XG5jb25zdCB0cmFuc2Zvcm1EZXByZWNhdGVkQ29sb3JzID0gY29sb3IgPT4ge1xuICByZXR1cm4gY29sb3JUcmFuc2Zvcm1hdGlvbnNbY29sb3JdIHx8IGNvbG9yO1xufTtcbmNvbnN0IGdldFRleHREZWNvcmF0aW9uID0gKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgY29uc3QgdHJhbnNmb3JtZWRDb2xvciA9IHRyYW5zZm9ybURlcHJlY2F0ZWRDb2xvcnMob3duZXJTdGF0ZS5jb2xvcik7XG4gIGNvbnN0IGNvbG9yID0gZ2V0UGF0aCh0aGVtZSwgYHBhbGV0dGUuJHt0cmFuc2Zvcm1lZENvbG9yfWAsIGZhbHNlKSB8fCBvd25lclN0YXRlLmNvbG9yO1xuICBjb25zdCBjaGFubmVsQ29sb3IgPSBnZXRQYXRoKHRoZW1lLCBgcGFsZXR0ZS4ke3RyYW5zZm9ybWVkQ29sb3J9Q2hhbm5lbGApO1xuICBpZiAoJ3ZhcnMnIGluIHRoZW1lICYmIGNoYW5uZWxDb2xvcikge1xuICAgIHJldHVybiBgcmdiYSgke2NoYW5uZWxDb2xvcn0gLyAwLjQpYDtcbiAgfVxuICByZXR1cm4gYWxwaGEoY29sb3IsIDAuNCk7XG59O1xuZXhwb3J0IGRlZmF1bHQgZ2V0VGV4dERlY29yYXRpb247IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJjb21wb25lbnRcIiwgXCJvbkJsdXJcIiwgXCJvbkZvY3VzXCIsIFwiVHlwb2dyYXBoeUNsYXNzZXNcIiwgXCJ1bmRlcmxpbmVcIiwgXCJ2YXJpYW50XCIsIFwic3hcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyBlbGVtZW50VHlwZUFjY2VwdGluZ1JlZiB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IHVzZUlzRm9jdXNWaXNpYmxlIGZyb20gJy4uL3V0aWxzL3VzZUlzRm9jdXNWaXNpYmxlJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IFR5cG9ncmFwaHkgZnJvbSAnLi4vVHlwb2dyYXBoeSc7XG5pbXBvcnQgbGlua0NsYXNzZXMsIHsgZ2V0TGlua1V0aWxpdHlDbGFzcyB9IGZyb20gJy4vbGlua0NsYXNzZXMnO1xuaW1wb3J0IGdldFRleHREZWNvcmF0aW9uLCB7IGNvbG9yVHJhbnNmb3JtYXRpb25zIH0gZnJvbSAnLi9nZXRUZXh0RGVjb3JhdGlvbic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIGNsYXNzZXMsXG4gICAgY29tcG9uZW50LFxuICAgIGZvY3VzVmlzaWJsZSxcbiAgICB1bmRlcmxpbmVcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGB1bmRlcmxpbmUke2NhcGl0YWxpemUodW5kZXJsaW5lKX1gLCBjb21wb25lbnQgPT09ICdidXR0b24nICYmICdidXR0b24nLCBmb2N1c1Zpc2libGUgJiYgJ2ZvY3VzVmlzaWJsZSddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlua1V0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTGlua1Jvb3QgPSBzdHlsZWQoVHlwb2dyYXBoeSwge1xuICBuYW1lOiAnTXVpTGluaycsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbYHVuZGVybGluZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnVuZGVybGluZSl9YF0sIG93bmVyU3RhdGUuY29tcG9uZW50ID09PSAnYnV0dG9uJyAmJiBzdHlsZXMuYnV0dG9uXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IHtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnVuZGVybGluZSA9PT0gJ25vbmUnICYmIHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnXG4gIH0sIG93bmVyU3RhdGUudW5kZXJsaW5lID09PSAnaG92ZXInICYmIHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgICcmOmhvdmVyJzoge1xuICAgICAgdGV4dERlY29yYXRpb246ICd1bmRlcmxpbmUnXG4gICAgfVxuICB9LCBvd25lclN0YXRlLnVuZGVybGluZSA9PT0gJ2Fsd2F5cycgJiYgX2V4dGVuZHMoe1xuICAgIHRleHREZWNvcmF0aW9uOiAndW5kZXJsaW5lJ1xuICB9LCBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIHRleHREZWNvcmF0aW9uQ29sb3I6IGdldFRleHREZWNvcmF0aW9uKHtcbiAgICAgIHRoZW1lLFxuICAgICAgb3duZXJTdGF0ZVxuICAgIH0pXG4gIH0sIHtcbiAgICAnJjpob3Zlcic6IHtcbiAgICAgIHRleHREZWNvcmF0aW9uQ29sb3I6ICdpbmhlcml0J1xuICAgIH1cbiAgfSksIG93bmVyU3RhdGUuY29tcG9uZW50ID09PSAnYnV0dG9uJyAmJiB7XG4gICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgV2Via2l0VGFwSGlnaGxpZ2h0Q29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgIC8vIFJlc2V0IGRlZmF1bHQgdmFsdWVcbiAgICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICAgIG91dGxpbmU6IDAsXG4gICAgYm9yZGVyOiAwLFxuICAgIG1hcmdpbjogMCxcbiAgICAvLyBSZW1vdmUgdGhlIG1hcmdpbiBpbiBTYWZhcmlcbiAgICBib3JkZXJSYWRpdXM6IDAsXG4gICAgcGFkZGluZzogMCxcbiAgICAvLyBSZW1vdmUgdGhlIHBhZGRpbmcgaW4gRmlyZWZveFxuICAgIGN1cnNvcjogJ3BvaW50ZXInLFxuICAgIHVzZXJTZWxlY3Q6ICdub25lJyxcbiAgICB2ZXJ0aWNhbEFsaWduOiAnbWlkZGxlJyxcbiAgICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgLy8gUmVzZXRcbiAgICBXZWJraXRBcHBlYXJhbmNlOiAnbm9uZScsXG4gICAgLy8gUmVzZXRcbiAgICAnJjo6LW1vei1mb2N1cy1pbm5lcic6IHtcbiAgICAgIGJvcmRlclN0eWxlOiAnbm9uZScgLy8gUmVtb3ZlIEZpcmVmb3ggZG90dGVkIG91dGxpbmUuXG4gICAgfSxcblxuICAgIFtgJi4ke2xpbmtDbGFzc2VzLmZvY3VzVmlzaWJsZX1gXToge1xuICAgICAgb3V0bGluZTogJ2F1dG8nXG4gICAgfVxuICB9KTtcbn0pO1xuY29uc3QgTGluayA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIExpbmsoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpbmsnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdhJyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uRm9jdXMsXG4gICAgICBUeXBvZ3JhcGh5Q2xhc3NlcyxcbiAgICAgIHVuZGVybGluZSA9ICdhbHdheXMnLFxuICAgICAgdmFyaWFudCA9ICdpbmhlcml0JyxcbiAgICAgIHN4XG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHtcbiAgICBpc0ZvY3VzVmlzaWJsZVJlZixcbiAgICBvbkJsdXI6IGhhbmRsZUJsdXJWaXNpYmxlLFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzVmlzaWJsZSxcbiAgICByZWY6IGZvY3VzVmlzaWJsZVJlZlxuICB9ID0gdXNlSXNGb2N1c1Zpc2libGUoKTtcbiAgY29uc3QgW2ZvY3VzVmlzaWJsZSwgc2V0Rm9jdXNWaXNpYmxlXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgaGFuZGxlclJlZiA9IHVzZUZvcmtSZWYocmVmLCBmb2N1c1Zpc2libGVSZWYpO1xuICBjb25zdCBoYW5kbGVCbHVyID0gZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVGb2N1cyA9IGV2ZW50ID0+IHtcbiAgICBoYW5kbGVGb2N1c1Zpc2libGUoZXZlbnQpO1xuICAgIGlmIChpc0ZvY3VzVmlzaWJsZVJlZi5jdXJyZW50ID09PSB0cnVlKSB7XG4gICAgICBzZXRGb2N1c1Zpc2libGUodHJ1ZSk7XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH07XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZm9jdXNWaXNpYmxlLFxuICAgIHVuZGVybGluZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaW5rUm9vdCwgX2V4dGVuZHMoe1xuICAgIGNvbG9yOiBjb2xvcixcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIGNsYXNzZXM6IFR5cG9ncmFwaHlDbGFzc2VzLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkZvY3VzOiBoYW5kbGVGb2N1cyxcbiAgICByZWY6IGhhbmRsZXJSZWYsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICB2YXJpYW50OiB2YXJpYW50LFxuICAgIHN4OiBbLi4uKCFPYmplY3Qua2V5cyhjb2xvclRyYW5zZm9ybWF0aW9ucykuaW5jbHVkZXMoY29sb3IpID8gW3tcbiAgICAgIGNvbG9yXG4gICAgfV0gOiBbXSksIC4uLihBcnJheS5pc0FycmF5KHN4KSA/IHN4IDogW3N4XSldXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpbmsucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGxpbmsuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkJsdXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBgY2xhc3Nlc2AgcHJvcCBhcHBsaWVkIHRvIHRoZSBbYFR5cG9ncmFwaHlgXSgvbWF0ZXJpYWwtdWkvYXBpL3R5cG9ncmFwaHkvKSBlbGVtZW50LlxuICAgKi9cbiAgVHlwb2dyYXBoeUNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBDb250cm9scyB3aGVuIHRoZSBsaW5rIHNob3VsZCBoYXZlIGFuIHVuZGVybGluZS5cbiAgICogQGRlZmF1bHQgJ2Fsd2F5cydcbiAgICovXG4gIHVuZGVybGluZTogUHJvcFR5cGVzLm9uZU9mKFsnYWx3YXlzJywgJ2hvdmVyJywgJ25vbmUnXSksXG4gIC8qKlxuICAgKiBBcHBsaWVzIHRoZSB0aGVtZSB0eXBvZ3JhcGh5IHN0eWxlcy5cbiAgICogQGRlZmF1bHQgJ2luaGVyaXQnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2JvZHkxJywgJ2JvZHkyJywgJ2J1dHRvbicsICdjYXB0aW9uJywgJ2gxJywgJ2gyJywgJ2gzJywgJ2g0JywgJ2g1JywgJ2g2JywgJ2luaGVyaXQnLCAnb3ZlcmxpbmUnLCAnc3VidGl0bGUxJywgJ3N1YnRpdGxlMiddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGluazsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TGlzdFV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlMaXN0JywgWydyb290JywgJ3BhZGRpbmcnLCAnZGVuc2UnLCAnc3ViaGVhZGVyJ10pO1xuZXhwb3J0IGRlZmF1bHQgbGlzdENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJkZW5zZVwiLCBcImRpc2FibGVQYWRkaW5nXCIsIFwic3ViaGVhZGVyXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBMaXN0Q29udGV4dCBmcm9tICcuL0xpc3RDb250ZXh0JztcbmltcG9ydCB7IGdldExpc3RVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL2xpc3RDbGFzc2VzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3NlcyxcbiAgICBkaXNhYmxlUGFkZGluZyxcbiAgICBkZW5zZSxcbiAgICBzdWJoZWFkZXJcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsICFkaXNhYmxlUGFkZGluZyAmJiAncGFkZGluZycsIGRlbnNlICYmICdkZW5zZScsIHN1YmhlYWRlciAmJiAnc3ViaGVhZGVyJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRMaXN0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbn07XG5jb25zdCBMaXN0Um9vdCA9IHN0eWxlZCgndWwnLCB7XG4gIG5hbWU6ICdNdWlMaXN0JyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIHN0eWxlcy5wYWRkaW5nLCBvd25lclN0YXRlLmRlbnNlICYmIHN0eWxlcy5kZW5zZSwgb3duZXJTdGF0ZS5zdWJoZWFkZXIgJiYgc3R5bGVzLnN1YmhlYWRlcl07XG4gIH1cbn0pKCh7XG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgbGlzdFN0eWxlOiAnbm9uZScsXG4gIG1hcmdpbjogMCxcbiAgcGFkZGluZzogMCxcbiAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbn0sICFvd25lclN0YXRlLmRpc2FibGVQYWRkaW5nICYmIHtcbiAgcGFkZGluZ1RvcDogOCxcbiAgcGFkZGluZ0JvdHRvbTogOFxufSwgb3duZXJTdGF0ZS5zdWJoZWFkZXIgJiYge1xuICBwYWRkaW5nVG9wOiAwXG59KSk7XG5jb25zdCBMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlzdChpblByb3BzLCByZWYpIHtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpTGlzdCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ3VsJyxcbiAgICAgIGRlbnNlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUGFkZGluZyA9IGZhbHNlLFxuICAgICAgc3ViaGVhZGVyXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2VcbiAgfSksIFtkZW5zZV0pO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgY29tcG9uZW50LFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVQYWRkaW5nXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjb250ZXh0LFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeHMoTGlzdFJvb3QsIF9leHRlbmRzKHtcbiAgICAgIGFzOiBjb21wb25lbnQsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgcmVmOiByZWYsXG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIGNoaWxkcmVuOiBbc3ViaGVhZGVyLCBjaGlsZHJlbl1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IExpc3QucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSByb290IG5vZGUuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgY29tcGFjdCB2ZXJ0aWNhbCBwYWRkaW5nIGRlc2lnbmVkIGZvciBrZXlib2FyZCBhbmQgbW91c2UgaW5wdXQgaXMgdXNlZCBmb3JcbiAgICogdGhlIGxpc3QgYW5kIGxpc3QgaXRlbXMuXG4gICAqIFRoZSBwcm9wIGlzIGF2YWlsYWJsZSB0byBkZXNjZW5kYW50IGNvbXBvbmVudHMgYXMgdGhlIGBkZW5zZWAgY29udGV4dC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdmVydGljYWwgcGFkZGluZyBpcyByZW1vdmVkIGZyb20gdGhlIGxpc3QuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlUGFkZGluZzogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgc3ViaGVhZGVyLCBub3JtYWxseSBgTGlzdFN1YmhlYWRlcmAuXG4gICAqL1xuICBzdWJoZWFkZXI6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTGlzdDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBMaXN0Q29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHt9KTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIExpc3RDb250ZXh0LmRpc3BsYXlOYW1lID0gJ0xpc3RDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IExpc3RDb250ZXh0OyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbUJ1dHRvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1CdXR0b24nLCBzbG90KTtcbn1cbmNvbnN0IGxpc3RJdGVtQnV0dG9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtQnV0dG9uJywgWydyb290JywgJ2ZvY3VzVmlzaWJsZScsICdkZW5zZScsICdhbGlnbkl0ZW1zRmxleFN0YXJ0JywgJ2Rpc2FibGVkJywgJ2RpdmlkZXInLCAnZ3V0dGVycycsICdzZWxlY3RlZCddKTtcbmV4cG9ydCBkZWZhdWx0IGxpc3RJdGVtQnV0dG9uQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhbGlnbkl0ZW1zXCIsIFwiYXV0b0ZvY3VzXCIsIFwiY29tcG9uZW50XCIsIFwiY2hpbGRyZW5cIiwgXCJkZW5zZVwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwiZGl2aWRlclwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcInNlbGVjdGVkXCIsIFwiY2xhc3NOYW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHMgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lUHJvcHMnO1xuaW1wb3J0IEJ1dHRvbkJhc2UgZnJvbSAnLi4vQnV0dG9uQmFzZSc7XG5pbXBvcnQgdXNlRW5oYW5jZWRFZmZlY3QgZnJvbSAnLi4vdXRpbHMvdXNlRW5oYW5jZWRFZmZlY3QnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi4vTGlzdC9MaXN0Q29udGV4dCc7XG5pbXBvcnQgbGlzdEl0ZW1CdXR0b25DbGFzc2VzLCB7IGdldExpc3RJdGVtQnV0dG9uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9saXN0SXRlbUJ1dHRvbkNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBjb25zdCBvdmVycmlkZXNSZXNvbHZlciA9IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBvd25lclN0YXRlXG4gIH0gPSBwcm9wcztcbiAgcmV0dXJuIFtzdHlsZXMucm9vdCwgb3duZXJTdGF0ZS5kZW5zZSAmJiBzdHlsZXMuZGVuc2UsIG93bmVyU3RhdGUuYWxpZ25JdGVtcyA9PT0gJ2ZsZXgtc3RhcnQnICYmIHN0eWxlcy5hbGlnbkl0ZW1zRmxleFN0YXJ0LCBvd25lclN0YXRlLmRpdmlkZXIgJiYgc3R5bGVzLmRpdmlkZXIsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzXTtcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgYWxpZ25JdGVtcyxcbiAgICBjbGFzc2VzLFxuICAgIGRlbnNlLFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIGRpdmlkZXIsXG4gICAgc2VsZWN0ZWRcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRlbnNlICYmICdkZW5zZScsICFkaXNhYmxlR3V0dGVycyAmJiAnZ3V0dGVycycsIGRpdmlkZXIgJiYgJ2RpdmlkZXInLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCBhbGlnbkl0ZW1zID09PSAnZmxleC1zdGFydCcgJiYgJ2FsaWduSXRlbXNGbGV4U3RhcnQnLCBzZWxlY3RlZCAmJiAnc2VsZWN0ZWQnXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TGlzdEl0ZW1CdXR0b25VdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICByZXR1cm4gX2V4dGVuZHMoe30sIGNsYXNzZXMsIGNvbXBvc2VkQ2xhc3Nlcyk7XG59O1xuY29uc3QgTGlzdEl0ZW1CdXR0b25Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUxpc3RJdGVtQnV0dG9uJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlclxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2ZsZXgnLFxuICBmbGV4R3JvdzogMSxcbiAganVzdGlmeUNvbnRlbnQ6ICdmbGV4LXN0YXJ0JyxcbiAgYWxpZ25JdGVtczogJ2NlbnRlcicsXG4gIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICBtaW5XaWR0aDogMCxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBwYWRkaW5nVG9wOiA4LFxuICBwYWRkaW5nQm90dG9tOiA4LFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ2JhY2tncm91bmQtY29sb3InLCB7XG4gICAgZHVyYXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmR1cmF0aW9uLnNob3J0ZXN0XG4gIH0pLFxuICAnJjpob3Zlcic6IHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmhvdmVyLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9LFxuICBbYCYuJHtsaXN0SXRlbUJ1dHRvbkNsYXNzZXMuc2VsZWN0ZWR9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KSxcbiAgICBbYCYuJHtsaXN0SXRlbUJ1dHRvbkNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHtsaXN0SXRlbUJ1dHRvbkNsYXNzZXMuc2VsZWN0ZWR9OmhvdmVyYF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke2xpc3RJdGVtQnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5mb2N1c1xuICB9LFxuICBbYCYuJHtsaXN0SXRlbUJ1dHRvbkNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBvcGFjaXR5OiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRPcGFjaXR5XG4gIH1cbn0sIG93bmVyU3RhdGUuZGl2aWRlciAmJiB7XG4gIGJvcmRlckJvdHRvbTogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YCxcbiAgYmFja2dyb3VuZENsaXA6ICdwYWRkaW5nLWJveCdcbn0sIG93bmVyU3RhdGUuYWxpZ25JdGVtcyA9PT0gJ2ZsZXgtc3RhcnQnICYmIHtcbiAgYWxpZ25JdGVtczogJ2ZsZXgtc3RhcnQnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAxNixcbiAgcGFkZGluZ1JpZ2h0OiAxNlxufSwgb3duZXJTdGF0ZS5kZW5zZSAmJiB7XG4gIHBhZGRpbmdUb3A6IDQsXG4gIHBhZGRpbmdCb3R0b206IDRcbn0pKTtcbmNvbnN0IExpc3RJdGVtQnV0dG9uID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTGlzdEl0ZW1CdXR0b24oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUxpc3RJdGVtQnV0dG9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYWxpZ25JdGVtcyA9ICdjZW50ZXInLFxuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZGVuc2UgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgICBkaXZpZGVyID0gZmFsc2UsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICBzZWxlY3RlZCA9IGZhbHNlLFxuICAgICAgY2xhc3NOYW1lXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGNvbnRleHQgPSBSZWFjdC51c2VDb250ZXh0KExpc3RDb250ZXh0KTtcbiAgY29uc3QgY2hpbGRDb250ZXh0ID0gUmVhY3QudXNlTWVtbygoKSA9PiAoe1xuICAgIGRlbnNlOiBkZW5zZSB8fCBjb250ZXh0LmRlbnNlIHx8IGZhbHNlLFxuICAgIGFsaWduSXRlbXMsXG4gICAgZGlzYWJsZUd1dHRlcnNcbiAgfSksIFthbGlnbkl0ZW1zLCBjb250ZXh0LmRlbnNlLCBkZW5zZSwgZGlzYWJsZUd1dHRlcnNdKTtcbiAgY29uc3QgbGlzdEl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBpZiAobGlzdEl0ZW1SZWYuY3VycmVudCkge1xuICAgICAgICBsaXN0SXRlbVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBVbmFibGUgdG8gc2V0IGZvY3VzIHRvIGEgTGlzdEl0ZW1CdXR0b24gd2hvc2UgY29tcG9uZW50IGhhcyBub3QgYmVlbiByZW5kZXJlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGFsaWduSXRlbXMsXG4gICAgZGVuc2U6IGNoaWxkQ29udGV4dC5kZW5zZSxcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBkaXZpZGVyLFxuICAgIHNlbGVjdGVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobGlzdEl0ZW1SZWYsIHJlZik7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KExpc3RJdGVtQnV0dG9uUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICBocmVmOiBvdGhlci5ocmVmIHx8IG90aGVyLnRvXG4gICAgICAvLyBgQnV0dG9uQmFzZWAgcHJvY2Vzc2VzIGBocmVmYCBvciBgdG9gIGlmIGBjb21wb25lbnRgIGlzIHNldCB0byAnYnV0dG9uJ1xuICAgICAgLFxuICAgICAgY29tcG9uZW50OiAob3RoZXIuaHJlZiB8fCBvdGhlci50bykgJiYgY29tcG9uZW50ID09PSAnZGl2JyA/ICdidXR0b24nIDogY29tcG9uZW50LFxuICAgICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuZm9jdXNWaXNpYmxlLCBmb2N1c1Zpc2libGVDbGFzc05hbWUpLFxuICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSlcbiAgICB9LCBvdGhlciwge1xuICAgICAgY2xhc3NlczogY2xhc3NlcyxcbiAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgIH0pKVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTGlzdEl0ZW1CdXR0b24ucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFdhcm5pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLy8gfCBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMgfFxuICAvLyB8ICAgICBUbyB1cGRhdGUgdGhlbSBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBcInlhcm4gcHJvcHR5cGVzXCIgICAgIHxcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvKipcbiAgICogRGVmaW5lcyB0aGUgYGFsaWduLWl0ZW1zYCBzdHlsZSBwcm9wZXJ0eS5cbiAgICogQGRlZmF1bHQgJ2NlbnRlcidcbiAgICovXG4gIGFsaWduSXRlbXM6IFByb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdmbGV4LXN0YXJ0J10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGlzdCBpdGVtIGlzIGZvY3VzZWQgZHVyaW5nIHRoZSBmaXJzdCBtb3VudC5cbiAgICogRm9jdXMgd2lsbCBhbHNvIGJlIHRyaWdnZXJlZCBpZiB0aGUgdmFsdWUgY2hhbmdlcyBmcm9tIGZhbHNlIHRvIHRydWUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudCBpZiBhIGBMaXN0SXRlbVNlY29uZGFyeUFjdGlvbmAgaXMgdXNlZCBpdCBtdXN0XG4gICAqIGJlIHRoZSBsYXN0IGNoaWxkLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBMaXN0IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgaXMgcmVtb3ZlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSAxcHggbGlnaHQgYm9yZGVyIGlzIGFkZGVkIHRvIHRoZSBib3R0b20gb2YgdGhlIGxpc3QgaXRlbS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpdmlkZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBocmVmOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVXNlIHRvIGFwcGx5IHNlbGVjdGVkIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBMaXN0SXRlbUJ1dHRvbjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJhY3Rpb25zXCIsIFwiYXV0b0ZvY3VzXCIsIFwiYXV0b0ZvY3VzSXRlbVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZVwiLCBcImRpc2FibGVMaXN0V3JhcFwiLCBcIm9uS2V5RG93blwiLCBcInZhcmlhbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyBpc0ZyYWdtZW50IH0gZnJvbSAncmVhY3QtaXMnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBvd25lckRvY3VtZW50IGZyb20gJy4uL3V0aWxzL293bmVyRG9jdW1lbnQnO1xuaW1wb3J0IExpc3QgZnJvbSAnLi4vTGlzdCc7XG5pbXBvcnQgZ2V0U2Nyb2xsYmFyU2l6ZSBmcm9tICcuLi91dGlscy9nZXRTY3JvbGxiYXJTaXplJztcbmltcG9ydCB1c2VGb3JrUmVmIGZyb20gJy4uL3V0aWxzL3VzZUZvcmtSZWYnO1xuaW1wb3J0IHVzZUVuaGFuY2VkRWZmZWN0IGZyb20gJy4uL3V0aWxzL3VzZUVuaGFuY2VkRWZmZWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBuZXh0SXRlbShsaXN0LCBpdGVtLCBkaXNhYmxlTGlzdFdyYXApIHtcbiAgaWYgKGxpc3QgPT09IGl0ZW0pIHtcbiAgICByZXR1cm4gbGlzdC5maXJzdENoaWxkO1xuICB9XG4gIGlmIChpdGVtICYmIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nKSB7XG4gICAgcmV0dXJuIGl0ZW0ubmV4dEVsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5maXJzdENoaWxkO1xufVxuZnVuY3Rpb24gcHJldmlvdXNJdGVtKGxpc3QsIGl0ZW0sIGRpc2FibGVMaXN0V3JhcCkge1xuICBpZiAobGlzdCA9PT0gaXRlbSkge1xuICAgIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBsaXN0LmZpcnN0Q2hpbGQgOiBsaXN0Lmxhc3RDaGlsZDtcbiAgfVxuICBpZiAoaXRlbSAmJiBpdGVtLnByZXZpb3VzRWxlbWVudFNpYmxpbmcpIHtcbiAgICByZXR1cm4gaXRlbS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO1xuICB9XG4gIHJldHVybiBkaXNhYmxlTGlzdFdyYXAgPyBudWxsIDogbGlzdC5sYXN0Q2hpbGQ7XG59XG5mdW5jdGlvbiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKG5leHRGb2N1cywgdGV4dENyaXRlcmlhKSB7XG4gIGlmICh0ZXh0Q3JpdGVyaWEgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG4gIGxldCB0ZXh0ID0gbmV4dEZvY3VzLmlubmVyVGV4dDtcbiAgaWYgKHRleHQgPT09IHVuZGVmaW5lZCkge1xuICAgIC8vIGpzZG9tIGRvZXNuJ3Qgc3VwcG9ydCBpbm5lclRleHRcbiAgICB0ZXh0ID0gbmV4dEZvY3VzLnRleHRDb250ZW50O1xuICB9XG4gIHRleHQgPSB0ZXh0LnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAodGV4dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgaWYgKHRleHRDcml0ZXJpYS5yZXBlYXRpbmcpIHtcbiAgICByZXR1cm4gdGV4dFswXSA9PT0gdGV4dENyaXRlcmlhLmtleXNbMF07XG4gIH1cbiAgcmV0dXJuIHRleHQuaW5kZXhPZih0ZXh0Q3JpdGVyaWEua2V5cy5qb2luKCcnKSkgPT09IDA7XG59XG5mdW5jdGlvbiBtb3ZlRm9jdXMobGlzdCwgY3VycmVudEZvY3VzLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHRyYXZlcnNhbEZ1bmN0aW9uLCB0ZXh0Q3JpdGVyaWEpIHtcbiAgbGV0IHdyYXBwZWRPbmNlID0gZmFsc2U7XG4gIGxldCBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBjdXJyZW50Rm9jdXMsIGN1cnJlbnRGb2N1cyA/IGRpc2FibGVMaXN0V3JhcCA6IGZhbHNlKTtcbiAgd2hpbGUgKG5leHRGb2N1cykge1xuICAgIC8vIFByZXZlbnQgaW5maW5pdGUgbG9vcC5cbiAgICBpZiAobmV4dEZvY3VzID09PSBsaXN0LmZpcnN0Q2hpbGQpIHtcbiAgICAgIGlmICh3cmFwcGVkT25jZSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICB3cmFwcGVkT25jZSA9IHRydWU7XG4gICAgfVxuXG4gICAgLy8gU2FtZSBsb2dpYyBhcyB1c2VBdXRvY29tcGxldGUuanNcbiAgICBjb25zdCBuZXh0Rm9jdXNEaXNhYmxlZCA9IGRpc2FibGVkSXRlbXNGb2N1c2FibGUgPyBmYWxzZSA6IG5leHRGb2N1cy5kaXNhYmxlZCB8fCBuZXh0Rm9jdXMuZ2V0QXR0cmlidXRlKCdhcmlhLWRpc2FibGVkJykgPT09ICd0cnVlJztcbiAgICBpZiAoIW5leHRGb2N1cy5oYXNBdHRyaWJ1dGUoJ3RhYmluZGV4JykgfHwgIXRleHRDcml0ZXJpYU1hdGNoZXMobmV4dEZvY3VzLCB0ZXh0Q3JpdGVyaWEpIHx8IG5leHRGb2N1c0Rpc2FibGVkKSB7XG4gICAgICAvLyBNb3ZlIHRvIHRoZSBuZXh0IGVsZW1lbnQuXG4gICAgICBuZXh0Rm9jdXMgPSB0cmF2ZXJzYWxGdW5jdGlvbihsaXN0LCBuZXh0Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5leHRGb2N1cy5mb2N1cygpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG4gIHJldHVybiBmYWxzZTtcbn1cblxuLyoqXG4gKiBBIHBlcm1hbmVudGx5IGRpc3BsYXllZCBtZW51IGZvbGxvd2luZyBodHRwczovL3d3dy53My5vcmcvV0FJL0FSSUEvYXBnL3BhdHRlcm5zL21lbnUtYnV0dG9uLy5cbiAqIEl0J3MgZXhwb3NlZCB0byBoZWxwIGN1c3RvbWl6YXRpb24gb2YgdGhlIFtgTWVudWBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pIGNvbXBvbmVudCBpZiB5b3VcbiAqIHVzZSBpdCBzZXBhcmF0ZWx5IHlvdSBuZWVkIHRvIG1vdmUgZm9jdXMgaW50byB0aGUgY29tcG9uZW50IG1hbnVhbGx5LiBPbmNlXG4gKiB0aGUgZm9jdXMgaXMgcGxhY2VkIGluc2lkZSB0aGUgY29tcG9uZW50IGl0IGlzIGZ1bGx5IGtleWJvYXJkIGFjY2Vzc2libGUuXG4gKi9cbmNvbnN0IE1lbnVMaXN0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUxpc3QocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICAvLyBwcml2YXRlXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgICAgYWN0aW9ucyxcbiAgICAgIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICAgICAgYXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlID0gZmFsc2UsXG4gICAgICBkaXNhYmxlTGlzdFdyYXAgPSBmYWxzZSxcbiAgICAgIG9uS2V5RG93bixcbiAgICAgIHZhcmlhbnQgPSAnc2VsZWN0ZWRNZW51J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBsaXN0UmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCB0ZXh0Q3JpdGVyaWFSZWYgPSBSZWFjdC51c2VSZWYoe1xuICAgIGtleXM6IFtdLFxuICAgIHJlcGVhdGluZzogdHJ1ZSxcbiAgICBwcmV2aW91c0tleU1hdGNoZWQ6IHRydWUsXG4gICAgbGFzdFRpbWU6IG51bGxcbiAgfSk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBsaXN0UmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb25zLCAoKSA9PiAoe1xuICAgIGFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyOiAoY29udGFpbmVyRWxlbWVudCwgdGhlbWUpID0+IHtcbiAgICAgIC8vIExldCdzIGlnbm9yZSB0aGF0IHBpZWNlIG9mIGxvZ2ljIGlmIHVzZXJzIGFyZSBhbHJlYWR5IG92ZXJyaWRpbmcgdGhlIHdpZHRoXG4gICAgICAvLyBvZiB0aGUgbWVudS5cbiAgICAgIGNvbnN0IG5vRXhwbGljaXRXaWR0aCA9ICFsaXN0UmVmLmN1cnJlbnQuc3R5bGUud2lkdGg7XG4gICAgICBpZiAoY29udGFpbmVyRWxlbWVudC5jbGllbnRIZWlnaHQgPCBsaXN0UmVmLmN1cnJlbnQuY2xpZW50SGVpZ2h0ICYmIG5vRXhwbGljaXRXaWR0aCkge1xuICAgICAgICBjb25zdCBzY3JvbGxiYXJTaXplID0gYCR7Z2V0U2Nyb2xsYmFyU2l6ZShvd25lckRvY3VtZW50KGNvbnRhaW5lckVsZW1lbnQpKX1weGA7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZVt0aGVtZS5kaXJlY3Rpb24gPT09ICdydGwnID8gJ3BhZGRpbmdMZWZ0JyA6ICdwYWRkaW5nUmlnaHQnXSA9IHNjcm9sbGJhclNpemU7XG4gICAgICAgIGxpc3RSZWYuY3VycmVudC5zdHlsZS53aWR0aCA9IGBjYWxjKDEwMCUgKyAke3Njcm9sbGJhclNpemV9KWA7XG4gICAgICB9XG4gICAgICByZXR1cm4gbGlzdFJlZi5jdXJyZW50O1xuICAgIH1cbiAgfSksIFtdKTtcbiAgY29uc3QgaGFuZGxlS2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBjb25zdCBsaXN0ID0gbGlzdFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleTtcbiAgICAvKipcbiAgICAgKiBAdHlwZSB7RWxlbWVudH0gLSB3aWxsIGFsd2F5cyBiZSBkZWZpbmVkIHNpbmNlIHdlIGFyZSBpbiBhIGtleWRvd24gaGFuZGxlclxuICAgICAqIGF0dGFjaGVkIHRvIGFuIGVsZW1lbnQuIEEga2V5ZG93biBldmVudCBpcyBlaXRoZXIgZGlzcGF0Y2hlZCB0byB0aGUgYWN0aXZlRWxlbWVudFxuICAgICAqIG9yIGRvY3VtZW50LmJvZHkgb3IgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LiBPbmx5IHRoZSBmaXJzdCBjYXNlIHdpbGxcbiAgICAgKiB0cmlnZ2VyIHRoaXMgc3BlY2lmaWMgaGFuZGxlci5cbiAgICAgKi9cbiAgICBjb25zdCBjdXJyZW50Rm9jdXMgPSBvd25lckRvY3VtZW50KGxpc3QpLmFjdGl2ZUVsZW1lbnQ7XG4gICAgaWYgKGtleSA9PT0gJ0Fycm93RG93bicpIHtcbiAgICAgIC8vIFByZXZlbnQgc2Nyb2xsIG9mIHRoZSBwYWdlXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIGN1cnJlbnRGb2N1cywgZGlzYWJsZUxpc3RXcmFwLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkgPT09ICdBcnJvd1VwJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgcHJldmlvdXNJdGVtKTtcbiAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ0hvbWUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgbW92ZUZvY3VzKGxpc3QsIG51bGwsIGRpc2FibGVMaXN0V3JhcCwgZGlzYWJsZWRJdGVtc0ZvY3VzYWJsZSwgbmV4dEl0ZW0pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnRW5kJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIG1vdmVGb2N1cyhsaXN0LCBudWxsLCBkaXNhYmxlTGlzdFdyYXAsIGRpc2FibGVkSXRlbXNGb2N1c2FibGUsIHByZXZpb3VzSXRlbSk7XG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCBjcml0ZXJpYSA9IHRleHRDcml0ZXJpYVJlZi5jdXJyZW50O1xuICAgICAgY29uc3QgbG93ZXJLZXkgPSBrZXkudG9Mb3dlckNhc2UoKTtcbiAgICAgIGNvbnN0IGN1cnJUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICBpZiAoY3JpdGVyaWEua2V5cy5sZW5ndGggPiAwKSB7XG4gICAgICAgIC8vIFJlc2V0XG4gICAgICAgIGlmIChjdXJyVGltZSAtIGNyaXRlcmlhLmxhc3RUaW1lID4gNTAwKSB7XG4gICAgICAgICAgY3JpdGVyaWEua2V5cyA9IFtdO1xuICAgICAgICAgIGNyaXRlcmlhLnJlcGVhdGluZyA9IHRydWU7XG4gICAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIGlmIChjcml0ZXJpYS5yZXBlYXRpbmcgJiYgbG93ZXJLZXkgIT09IGNyaXRlcmlhLmtleXNbMF0pIHtcbiAgICAgICAgICBjcml0ZXJpYS5yZXBlYXRpbmcgPSBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgY3JpdGVyaWEubGFzdFRpbWUgPSBjdXJyVGltZTtcbiAgICAgIGNyaXRlcmlhLmtleXMucHVzaChsb3dlcktleSk7XG4gICAgICBjb25zdCBrZWVwRm9jdXNPbkN1cnJlbnQgPSBjdXJyZW50Rm9jdXMgJiYgIWNyaXRlcmlhLnJlcGVhdGluZyAmJiB0ZXh0Q3JpdGVyaWFNYXRjaGVzKGN1cnJlbnRGb2N1cywgY3JpdGVyaWEpO1xuICAgICAgaWYgKGNyaXRlcmlhLnByZXZpb3VzS2V5TWF0Y2hlZCAmJiAoa2VlcEZvY3VzT25DdXJyZW50IHx8IG1vdmVGb2N1cyhsaXN0LCBjdXJyZW50Rm9jdXMsIGZhbHNlLCBkaXNhYmxlZEl0ZW1zRm9jdXNhYmxlLCBuZXh0SXRlbSwgY3JpdGVyaWEpKSkge1xuICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY3JpdGVyaWEucHJldmlvdXNLZXlNYXRjaGVkID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKGxpc3RSZWYsIHJlZik7XG5cbiAgLyoqXG4gICAqIHRoZSBpbmRleCBvZiB0aGUgaXRlbSBzaG91bGQgcmVjZWl2ZSBmb2N1c1xuICAgKiBpbiBhIGB2YXJpYW50PVwic2VsZWN0ZWRNZW51XCJgIGl0J3MgdGhlIGZpcnN0IGBzZWxlY3RlZGAgaXRlbVxuICAgKiBvdGhlcndpc2UgaXQncyB0aGUgdmVyeSBmaXJzdCBpdGVtLlxuICAgKi9cbiAgbGV0IGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAvLyBzaW5jZSB3ZSBpbmplY3QgZm9jdXMgcmVsYXRlZCBwcm9wcyBpbnRvIGNoaWxkcmVuIHdlIGhhdmUgdG8gZG8gYSBsb29rYWhlYWRcbiAgLy8gdG8gY2hlY2sgaWYgdGhlcmUgaXMgYSBgc2VsZWN0ZWRgIGl0ZW0uIFdlJ3JlIGxvb2tpbmcgZm9yIHRoZSBsYXN0IGBzZWxlY3RlZGBcbiAgLy8gaXRlbSBhbmQgdXNlIHRoZSBmaXJzdCB2YWxpZCBpdGVtIGFzIGEgZmFsbGJhY2tcbiAgUmVhY3QuQ2hpbGRyZW4uZm9yRWFjaChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IGluZGV4KSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCArPSAxO1xuICAgICAgICBpZiAoYWN0aXZlSXRlbUluZGV4ID49IGNoaWxkcmVuLmxlbmd0aCkge1xuICAgICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IC0xO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoaXNGcmFnbWVudChjaGlsZCkpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbXCJNVUk6IFRoZSBNZW51IGNvbXBvbmVudCBkb2Vzbid0IGFjY2VwdCBhIEZyYWdtZW50IGFzIGEgY2hpbGQuXCIsICdDb25zaWRlciBwcm92aWRpbmcgYW4gYXJyYXkgaW5zdGVhZC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghY2hpbGQucHJvcHMuZGlzYWJsZWQpIHtcbiAgICAgIGlmICh2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51JyAmJiBjaGlsZC5wcm9wcy5zZWxlY3RlZCkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH0gZWxzZSBpZiAoYWN0aXZlSXRlbUluZGV4ID09PSAtMSkge1xuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSBpbmRleDtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGl2ZUl0ZW1JbmRleCA9PT0gaW5kZXggJiYgKGNoaWxkLnByb3BzLmRpc2FibGVkIHx8IGNoaWxkLnByb3BzLm11aVNraXBMaXN0SGlnaGxpZ2h0IHx8IGNoaWxkLnR5cGUubXVpU2tpcExpc3RIaWdobGlnaHQpKSB7XG4gICAgICBhY3RpdmVJdGVtSW5kZXggKz0gMTtcbiAgICAgIGlmIChhY3RpdmVJdGVtSW5kZXggPj0gY2hpbGRyZW4ubGVuZ3RoKSB7XG4gICAgICAgIC8vIHRoZXJlIGFyZSBubyBmb2N1c2FibGUgaXRlbXMgd2l0aGluIHRoZSBsaXN0LlxuICAgICAgICBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBpdGVtcyA9IFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmIChpbmRleCA9PT0gYWN0aXZlSXRlbUluZGV4KSB7XG4gICAgICBjb25zdCBuZXdDaGlsZFByb3BzID0ge307XG4gICAgICBpZiAoYXV0b0ZvY3VzSXRlbSkge1xuICAgICAgICBuZXdDaGlsZFByb3BzLmF1dG9Gb2N1cyA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAoY2hpbGQucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCAmJiB2YXJpYW50ID09PSAnc2VsZWN0ZWRNZW51Jykge1xuICAgICAgICBuZXdDaGlsZFByb3BzLnRhYkluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkLCBuZXdDaGlsZFByb3BzKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkO1xuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KExpc3QsIF9leHRlbmRzKHtcbiAgICByb2xlOiBcIm1lbnVcIixcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvbktleURvd246IGhhbmRsZUtleURvd24sXG4gICAgdGFiSW5kZXg6IGF1dG9Gb2N1cyA/IDAgOiAtMVxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiBpdGVtc1xuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1lbnVMaXN0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgYFtyb2xlPVwibWVudVwiXWAgY29udGFpbmVyIGFuZCBtb3ZlIGludG8gdGFiIG9yZGVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBmb2N1cyB0aGUgZmlyc3QgbWVudWl0ZW0gaWYgYHZhcmlhbnQ9XCJtZW51XCJgIG9yIHNlbGVjdGVkIGl0ZW1cbiAgICogaWYgYHZhcmlhbnQ9XCJzZWxlY3RlZE1lbnVcImAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBhdXRvRm9jdXNJdGVtOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnVMaXN0IGNvbnRlbnRzLCBub3JtYWxseSBgTWVudUl0ZW1gcy5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgd2lsbCBhbGxvdyBmb2N1cyBvbiBkaXNhYmxlZCBpdGVtcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVkSXRlbXNGb2N1c2FibGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbWVudSBpdGVtcyB3aWxsIG5vdCB3cmFwIGZvY3VzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUxpc3RXcmFwOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5RG93bjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuIFVzZSBgbWVudWAgdG8gcHJldmVudCBzZWxlY3RlZCBpdGVtcyBmcm9tIGltcGFjdGluZyB0aGUgaW5pdGlhbCBmb2N1c1xuICAgKiBhbmQgdGhlIHZlcnRpY2FsIGFsaWdubWVudCByZWxhdGl2ZSB0byB0aGUgYW5jaG9yIGVsZW1lbnQuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVMaXN0OyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFkZEVuZExpc3RlbmVyXCIsIFwiYXBwZWFyXCIsIFwiY2hpbGRyZW5cIiwgXCJlYXNpbmdcIiwgXCJpblwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FeGl0XCIsIFwib25FeGl0ZWRcIiwgXCJvbkV4aXRpbmdcIiwgXCJzdHlsZVwiLCBcInRpbWVvdXRcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IGVsZW1lbnRBY2NlcHRpbmdSZWYgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0VHJhbnNpdGlvblByb3BzLCByZWZsb3cgfSBmcm9tICcuLi90cmFuc2l0aW9ucy91dGlscyc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBnZXRTY2FsZSh2YWx1ZSkge1xuICByZXR1cm4gYHNjYWxlKCR7dmFsdWV9LCAke3ZhbHVlICoqIDJ9KWA7XG59XG5jb25zdCBzdHlsZXMgPSB7XG4gIGVudGVyaW5nOiB7XG4gICAgb3BhY2l0eTogMSxcbiAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDEpXG4gIH0sXG4gIGVudGVyZWQ6IHtcbiAgICBvcGFjaXR5OiAxLFxuICAgIHRyYW5zZm9ybTogJ25vbmUnXG4gIH1cbn07XG5cbi8qXG4gVE9ETyB2NjogcmVtb3ZlXG4gQ29uZGl0aW9uYWxseSBhcHBseSBhIHdvcmthcm91bmQgZm9yIHRoZSBDU1MgdHJhbnNpdGlvbiBidWcgaW4gU2FmYXJpIDE1LjQgLyBXZWJLaXQgYnJvd3NlcnMuXG4gKi9cbmNvbnN0IGlzV2ViS2l0MTU0ID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgL14oKD8hY2hyb21lfGFuZHJvaWQpLikqKHNhZmFyaXxtb2JpbGUpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSAmJiAvKG9zIHx2ZXJzaW9uXFwvKTE1KC58Xyk0L2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuLyoqXG4gKiBUaGUgR3JvdyB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtUb29sdGlwXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdG9vbHRpcC8pIGFuZFxuICogW1BvcG92ZXJdKC9tYXRlcmlhbC11aS9yZWFjdC1wb3BvdmVyLykgY29tcG9uZW50cy5cbiAqIEl0IHVzZXMgW3JlYWN0LXRyYW5zaXRpb24tZ3JvdXBdKGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdGpzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXApIGludGVybmFsbHkuXG4gKi9cbmNvbnN0IEdyb3cgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBHcm93KHByb3BzLCByZWYpIHtcbiAgY29uc3Qge1xuICAgICAgYWRkRW5kTGlzdGVuZXIsXG4gICAgICBhcHBlYXIgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBlYXNpbmcsXG4gICAgICBpbjogaW5Qcm9wLFxuICAgICAgb25FbnRlcixcbiAgICAgIG9uRW50ZXJlZCxcbiAgICAgIG9uRW50ZXJpbmcsXG4gICAgICBvbkV4aXQsXG4gICAgICBvbkV4aXRlZCxcbiAgICAgIG9uRXhpdGluZyxcbiAgICAgIHN0eWxlLFxuICAgICAgdGltZW91dCA9ICdhdXRvJyxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCB0aW1lciA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCBhdXRvVGltZW91dCA9IFJlYWN0LnVzZVJlZigpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IG5vZGVSZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IGhhbmRsZVJlZiA9IHVzZUZvcmtSZWYobm9kZVJlZiwgY2hpbGRyZW4ucmVmLCByZWYpO1xuICBjb25zdCBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrID0gY2FsbGJhY2sgPT4gbWF5YmVJc0FwcGVhcmluZyA9PiB7XG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjb25zdCBub2RlID0gbm9kZVJlZi5jdXJyZW50O1xuXG4gICAgICAvLyBvbkVudGVyWHh4IGFuZCBvbkV4aXRYeHggY2FsbGJhY2tzIGhhdmUgYSBkaWZmZXJlbnQgYXJndW1lbnRzLmxlbmd0aCB2YWx1ZS5cbiAgICAgIGlmIChtYXliZUlzQXBwZWFyaW5nID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY2FsbGJhY2sobm9kZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWxsYmFjayhub2RlLCBtYXliZUlzQXBwZWFyaW5nKTtcbiAgICAgIH1cbiAgICB9XG4gIH07XG4gIGNvbnN0IGhhbmRsZUVudGVyaW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyaW5nKTtcbiAgY29uc3QgaGFuZGxlRW50ZXIgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKChub2RlLCBpc0FwcGVhcmluZykgPT4ge1xuICAgIHJlZmxvdyhub2RlKTsgLy8gU28gdGhlIGFuaW1hdGlvbiBhbHdheXMgc3RhcnQgZnJvbSB0aGUgc3RhcnQuXG5cbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2VudGVyJ1xuICAgIH0pO1xuICAgIGxldCBkdXJhdGlvbjtcbiAgICBpZiAodGltZW91dCA9PT0gJ2F1dG8nKSB7XG4gICAgICBkdXJhdGlvbiA9IHRoZW1lLnRyYW5zaXRpb25zLmdldEF1dG9IZWlnaHREdXJhdGlvbihub2RlLmNsaWVudEhlaWdodCk7XG4gICAgICBhdXRvVGltZW91dC5jdXJyZW50ID0gZHVyYXRpb247XG4gICAgfSBlbHNlIHtcbiAgICAgIGR1cmF0aW9uID0gdHJhbnNpdGlvbkR1cmF0aW9uO1xuICAgIH1cbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSBbdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5Jywge1xuICAgICAgZHVyYXRpb24sXG4gICAgICBkZWxheVxuICAgIH0pLCB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ3RyYW5zZm9ybScsIHtcbiAgICAgIGR1cmF0aW9uOiBpc1dlYktpdDE1NCA/IGR1cmF0aW9uIDogZHVyYXRpb24gKiAwLjY2NixcbiAgICAgIGRlbGF5LFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFbnRlcmVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRpbmcpO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBkdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uLFxuICAgICAgZGVsYXksXG4gICAgICBlYXNpbmc6IHRyYW5zaXRpb25UaW1pbmdGdW5jdGlvblxuICAgIH0gPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2V4aXQnXG4gICAgfSk7XG4gICAgbGV0IGR1cmF0aW9uO1xuICAgIGlmICh0aW1lb3V0ID09PSAnYXV0bycpIHtcbiAgICAgIGR1cmF0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuZ2V0QXV0b0hlaWdodER1cmF0aW9uKG5vZGUuY2xpZW50SGVpZ2h0KTtcbiAgICAgIGF1dG9UaW1lb3V0LmN1cnJlbnQgPSBkdXJhdGlvbjtcbiAgICB9IGVsc2Uge1xuICAgICAgZHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb247XG4gICAgfVxuICAgIG5vZGUuc3R5bGUudHJhbnNpdGlvbiA9IFt0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB7XG4gICAgICBkdXJhdGlvbixcbiAgICAgIGRlbGF5XG4gICAgfSksIHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJywge1xuICAgICAgZHVyYXRpb246IGlzV2ViS2l0MTU0ID8gZHVyYXRpb24gOiBkdXJhdGlvbiAqIDAuNjY2LFxuICAgICAgZGVsYXk6IGlzV2ViS2l0MTU0ID8gZGVsYXkgOiBkZWxheSB8fCBkdXJhdGlvbiAqIDAuMzMzLFxuICAgICAgZWFzaW5nOiB0cmFuc2l0aW9uVGltaW5nRnVuY3Rpb25cbiAgICB9KV0uam9pbignLCcpO1xuICAgIG5vZGUuc3R5bGUub3BhY2l0eSA9IDA7XG4gICAgbm9kZS5zdHlsZS50cmFuc2Zvcm0gPSBnZXRTY2FsZSgwLjc1KTtcbiAgICBpZiAob25FeGl0KSB7XG4gICAgICBvbkV4aXQobm9kZSk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRlZCk7XG4gIGNvbnN0IGhhbmRsZUFkZEVuZExpc3RlbmVyID0gbmV4dCA9PiB7XG4gICAgaWYgKHRpbWVvdXQgPT09ICdhdXRvJykge1xuICAgICAgdGltZXIuY3VycmVudCA9IHNldFRpbWVvdXQobmV4dCwgYXV0b1RpbWVvdXQuY3VycmVudCB8fCAwKTtcbiAgICB9XG4gICAgaWYgKGFkZEVuZExpc3RlbmVyKSB7XG4gICAgICAvLyBPbGQgY2FsbCBzaWduYXR1cmUgYmVmb3JlIGByZWFjdC10cmFuc2l0aW9uLWdyb3VwYCBpbXBsZW1lbnRlZCBgbm9kZVJlZmBcbiAgICAgIGFkZEVuZExpc3RlbmVyKG5vZGVSZWYuY3VycmVudCwgbmV4dCk7XG4gICAgfVxuICB9O1xuICBSZWFjdC51c2VFZmZlY3QoKCkgPT4ge1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXIuY3VycmVudCk7XG4gICAgfTtcbiAgfSwgW10pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgIGFwcGVhcjogYXBwZWFyLFxuICAgIGluOiBpblByb3AsXG4gICAgbm9kZVJlZjogbm9kZVJlZixcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkVudGVyZWQ6IGhhbmRsZUVudGVyZWQsXG4gICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgb25FeGl0OiBoYW5kbGVFeGl0LFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgb25FeGl0aW5nOiBoYW5kbGVFeGl0aW5nLFxuICAgIGFkZEVuZExpc3RlbmVyOiBoYW5kbGVBZGRFbmRMaXN0ZW5lcixcbiAgICB0aW1lb3V0OiB0aW1lb3V0ID09PSAnYXV0bycgPyBudWxsIDogdGltZW91dFxuICB9LCBvdGhlciwge1xuICAgIGNoaWxkcmVuOiAoc3RhdGUsIGNoaWxkUHJvcHMpID0+IHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCBfZXh0ZW5kcyh7XG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgb3BhY2l0eTogMCxcbiAgICAgICAgICB0cmFuc2Zvcm06IGdldFNjYWxlKDAuNzUpLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHN0YXRlID09PSAnZXhpdGVkJyAmJiAhaW5Qcm9wID8gJ2hpZGRlbicgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgc3R5bGVzW3N0YXRlXSwgc3R5bGUsIGNoaWxkcmVuLnByb3BzLnN0eWxlKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH0sIGNoaWxkUHJvcHMpKTtcbiAgICB9XG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR3Jvdy5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlbiBpdCBmaXJzdCBtb3VudHMgaWYgYGluYCBpcyBhbHNvIGB0cnVlYC5cbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHRyYW5zaXRpb24gdGltaW5nIGZ1bmN0aW9uLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgZWFzaW5nIG9yIGEgb2JqZWN0IGNvbnRhaW5pbmcgZW50ZXIgYW5kIGV4aXQgdmFsdWVzLlxuICAgKi9cbiAgZWFzaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRyYW5zaXRpb24gaW4uXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICpcbiAgICogU2V0IHRvICdhdXRvJyB0byBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZSB0cmFuc2l0aW9uIHRpbWUgYmFzZWQgb24gaGVpZ2h0LlxuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRpbWVvdXQ6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2F1dG8nXSksIFByb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zaGFwZSh7XG4gICAgYXBwZWFyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGVudGVyOiBQcm9wVHlwZXMubnVtYmVyLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5udW1iZXJcbiAgfSldKVxufSA6IHZvaWQgMDtcbkdyb3cubXVpU3VwcG9ydEF1dG8gPSB0cnVlO1xuZXhwb3J0IGRlZmF1bHQgR3JvdzsiLCJpbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0TW9kYWxVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aU1vZGFsJywgc2xvdCk7XG59XG5jb25zdCBtb2RhbENsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlNb2RhbCcsIFsncm9vdCcsICdoaWRkZW4nLCAnYmFja2Ryb3AnXSk7XG5leHBvcnQgZGVmYXVsdCBtb2RhbENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiQmFja2Ryb3BDb21wb25lbnRcIiwgXCJCYWNrZHJvcFByb3BzXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiLCBcImNsb3NlQWZ0ZXJUcmFuc2l0aW9uXCIsIFwiY2hpbGRyZW5cIiwgXCJjb250YWluZXJcIiwgXCJjb21wb25lbnRcIiwgXCJjb21wb25lbnRzXCIsIFwiY29tcG9uZW50c1Byb3BzXCIsIFwiZGlzYWJsZUF1dG9Gb2N1c1wiLCBcImRpc2FibGVFbmZvcmNlRm9jdXNcIiwgXCJkaXNhYmxlRXNjYXBlS2V5RG93blwiLCBcImRpc2FibGVQb3J0YWxcIiwgXCJkaXNhYmxlUmVzdG9yZUZvY3VzXCIsIFwiZGlzYWJsZVNjcm9sbExvY2tcIiwgXCJoaWRlQmFja2Ryb3BcIiwgXCJrZWVwTW91bnRlZFwiLCBcIm9uQmFja2Ryb3BDbGlja1wiLCBcIm9uQ2xvc2VcIiwgXCJvblRyYW5zaXRpb25FbnRlclwiLCBcIm9uVHJhbnNpdGlvbkV4aXRlZFwiLCBcIm9wZW5cIiwgXCJzbG90UHJvcHNcIiwgXCJzbG90c1wiLCBcInRoZW1lXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgZWxlbWVudEFjY2VwdGluZ1JlZiwgSFRNTEVsZW1lbnRUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1c2VTbG90UHJvcHMgfSBmcm9tICdAbXVpL2Jhc2UnO1xuaW1wb3J0IHsgdW5zdGFibGVfdXNlTW9kYWwgYXMgdXNlTW9kYWwgfSBmcm9tICdAbXVpL2Jhc2UvdW5zdGFibGVfdXNlTW9kYWwnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuLi9VbnN0YWJsZV9UcmFwRm9jdXMnO1xuaW1wb3J0IFBvcnRhbCBmcm9tICcuLi9Qb3J0YWwnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuLi9CYWNrZHJvcCc7XG5pbXBvcnQgeyBnZXRNb2RhbFV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbW9kYWxDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgb3BlbixcbiAgICBleGl0ZWQsXG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgIW9wZW4gJiYgZXhpdGVkICYmICdoaWRkZW4nXSxcbiAgICBiYWNrZHJvcDogWydiYWNrZHJvcCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TW9kYWxVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IE1vZGFsUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpTW9kYWwnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgIW93bmVyU3RhdGUub3BlbiAmJiBvd25lclN0YXRlLmV4aXRlZCAmJiBzdHlsZXMuaGlkZGVuXTtcbiAgfVxufSkoKHtcbiAgdGhlbWUsXG4gIG93bmVyU3RhdGVcbn0pID0+IF9leHRlbmRzKHtcbiAgcG9zaXRpb246ICdmaXhlZCcsXG4gIHpJbmRleDogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnpJbmRleC5tb2RhbCxcbiAgcmlnaHQ6IDAsXG4gIGJvdHRvbTogMCxcbiAgdG9wOiAwLFxuICBsZWZ0OiAwXG59LCAhb3duZXJTdGF0ZS5vcGVuICYmIG93bmVyU3RhdGUuZXhpdGVkICYmIHtcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbidcbn0pKTtcbmNvbnN0IE1vZGFsQmFja2Ryb3AgPSBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgbmFtZTogJ011aU1vZGFsJyxcbiAgc2xvdDogJ0JhY2tkcm9wJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgcmV0dXJuIHN0eWxlcy5iYWNrZHJvcDtcbiAgfVxufSkoe1xuICB6SW5kZXg6IC0xXG59KTtcblxuLyoqXG4gKiBNb2RhbCBpcyBhIGxvd2VyLWxldmVsIGNvbnN0cnVjdCB0aGF0IGlzIGxldmVyYWdlZCBieSB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHM6XG4gKlxuICogLSBbRGlhbG9nXSgvbWF0ZXJpYWwtdWkvYXBpL2RpYWxvZy8pXG4gKiAtIFtEcmF3ZXJdKC9tYXRlcmlhbC11aS9hcGkvZHJhd2VyLylcbiAqIC0gW01lbnVdKC9tYXRlcmlhbC11aS9hcGkvbWVudS8pXG4gKiAtIFtQb3BvdmVyXSgvbWF0ZXJpYWwtdWkvYXBpL3BvcG92ZXIvKVxuICpcbiAqIElmIHlvdSBhcmUgY3JlYXRpbmcgYSBtb2RhbCBkaWFsb2csIHlvdSBwcm9iYWJseSB3YW50IHRvIHVzZSB0aGUgW0RpYWxvZ10oL21hdGVyaWFsLXVpL2FwaS9kaWFsb2cvKSBjb21wb25lbnRcbiAqIHJhdGhlciB0aGFuIGRpcmVjdGx5IHVzaW5nIE1vZGFsLlxuICpcbiAqIFRoaXMgY29tcG9uZW50IHNoYXJlcyBtYW55IGNvbmNlcHRzIHdpdGggW3JlYWN0LW92ZXJsYXlzXShodHRwczovL3JlYWN0LWJvb3RzdHJhcC5naXRodWIuaW8vcmVhY3Qtb3ZlcmxheXMvI21vZGFscykuXG4gKi9cbmNvbnN0IE1vZGFsID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTW9kYWwoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfcmVmLCBfc2xvdHMkcm9vdCwgX3JlZjIsIF9zbG90cyRiYWNrZHJvcCwgX3Nsb3RQcm9wcyRyb290LCBfc2xvdFByb3BzJGJhY2tkcm9wO1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIG5hbWU6ICdNdWlNb2RhbCcsXG4gICAgcHJvcHM6IGluUHJvcHNcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIEJhY2tkcm9wQ29tcG9uZW50ID0gTW9kYWxCYWNrZHJvcCxcbiAgICAgIEJhY2tkcm9wUHJvcHMsXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBjbG9zZUFmdGVyVHJhbnNpdGlvbiA9IGZhbHNlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb250YWluZXIsXG4gICAgICBjb21wb25lbnQsXG4gICAgICBjb21wb25lbnRzID0ge30sXG4gICAgICBjb21wb25lbnRzUHJvcHMgPSB7fSxcbiAgICAgIGRpc2FibGVBdXRvRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXMgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFc2NhcGVLZXlEb3duID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUG9ydGFsID0gZmFsc2UsXG4gICAgICBkaXNhYmxlUmVzdG9yZUZvY3VzID0gZmFsc2UsXG4gICAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlLFxuICAgICAgaGlkZUJhY2tkcm9wID0gZmFsc2UsXG4gICAgICBrZWVwTW91bnRlZCA9IGZhbHNlLFxuICAgICAgb25CYWNrZHJvcENsaWNrLFxuICAgICAgb3BlbixcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHNsb3RzXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvcHJvcC10eXBlc1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBwcm9wc1dpdGhEZWZhdWx0cyA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uLFxuICAgIGRpc2FibGVBdXRvRm9jdXMsXG4gICAgZGlzYWJsZUVuZm9yY2VGb2N1cyxcbiAgICBkaXNhYmxlRXNjYXBlS2V5RG93bixcbiAgICBkaXNhYmxlUG9ydGFsLFxuICAgIGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgZGlzYWJsZVNjcm9sbExvY2ssXG4gICAgaGlkZUJhY2tkcm9wLFxuICAgIGtlZXBNb3VudGVkXG4gIH0pO1xuICBjb25zdCB7XG4gICAgZ2V0Um9vdFByb3BzLFxuICAgIGdldEJhY2tkcm9wUHJvcHMsXG4gICAgZ2V0VHJhbnNpdGlvblByb3BzLFxuICAgIHBvcnRhbFJlZixcbiAgICBpc1RvcE1vZGFsLFxuICAgIGV4aXRlZCxcbiAgICBoYXNUcmFuc2l0aW9uXG4gIH0gPSB1c2VNb2RhbChfZXh0ZW5kcyh7fSwgcHJvcHNXaXRoRGVmYXVsdHMsIHtcbiAgICByb290UmVmOiByZWZcbiAgfSkpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzV2l0aERlZmF1bHRzLCB7XG4gICAgZXhpdGVkXG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IGNoaWxkUHJvcHMgPSB7fTtcbiAgaWYgKGNoaWxkcmVuLnByb3BzLnRhYkluZGV4ID09PSB1bmRlZmluZWQpIHtcbiAgICBjaGlsZFByb3BzLnRhYkluZGV4ID0gJy0xJztcbiAgfVxuXG4gIC8vIEl0J3MgYSBUcmFuc2l0aW9uIGxpa2UgY29tcG9uZW50XG4gIGlmIChoYXNUcmFuc2l0aW9uKSB7XG4gICAgY29uc3Qge1xuICAgICAgb25FbnRlcixcbiAgICAgIG9uRXhpdGVkXG4gICAgfSA9IGdldFRyYW5zaXRpb25Qcm9wcygpO1xuICAgIGNoaWxkUHJvcHMub25FbnRlciA9IG9uRW50ZXI7XG4gICAgY2hpbGRQcm9wcy5vbkV4aXRlZCA9IG9uRXhpdGVkO1xuICB9XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cyA9PSBudWxsID8gdm9pZCAwIDogc2xvdHMucm9vdCkgIT0gbnVsbCA/IF9zbG90cyRyb290IDogY29tcG9uZW50cy5Sb290KSAhPSBudWxsID8gX3JlZiA6IE1vZGFsUm9vdDtcbiAgY29uc3QgQmFja2Ryb3BTbG90ID0gKF9yZWYyID0gKF9zbG90cyRiYWNrZHJvcCA9IHNsb3RzID09IG51bGwgPyB2b2lkIDAgOiBzbG90cy5iYWNrZHJvcCkgIT0gbnVsbCA/IF9zbG90cyRiYWNrZHJvcCA6IGNvbXBvbmVudHMuQmFja2Ryb3ApICE9IG51bGwgPyBfcmVmMiA6IEJhY2tkcm9wQ29tcG9uZW50O1xuICBjb25zdCByb290U2xvdFByb3BzID0gKF9zbG90UHJvcHMkcm9vdCA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLnJvb3QpICE9IG51bGwgPyBfc2xvdFByb3BzJHJvb3QgOiBjb21wb25lbnRzUHJvcHMucm9vdDtcbiAgY29uc3QgYmFja2Ryb3BTbG90UHJvcHMgPSAoX3Nsb3RQcm9wcyRiYWNrZHJvcCA9IHNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogc2xvdFByb3BzLmJhY2tkcm9wKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRiYWNrZHJvcCA6IGNvbXBvbmVudHNQcm9wcy5iYWNrZHJvcDtcbiAgY29uc3Qgcm9vdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUm9vdFNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHJvb3RTbG90UHJvcHMsXG4gICAgZXh0ZXJuYWxGb3J3YXJkZWRQcm9wczogb3RoZXIsXG4gICAgZ2V0U2xvdFByb3BzOiBnZXRSb290UHJvcHMsXG4gICAgYWRkaXRpb25hbFByb3BzOiB7XG4gICAgICByZWYsXG4gICAgICBhczogY29tcG9uZW50XG4gICAgfSxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjbGFzc05hbWUsIHJvb3RTbG90UHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IHJvb3RTbG90UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLnJvb3QsICFvd25lclN0YXRlLm9wZW4gJiYgb3duZXJTdGF0ZS5leGl0ZWQgJiYgKGNsYXNzZXMgPT0gbnVsbCA/IHZvaWQgMCA6IGNsYXNzZXMuaGlkZGVuKSlcbiAgfSk7XG4gIGNvbnN0IGJhY2tkcm9wUHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBCYWNrZHJvcFNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IGJhY2tkcm9wU2xvdFByb3BzLFxuICAgIGFkZGl0aW9uYWxQcm9wczogQmFja2Ryb3BQcm9wcyxcbiAgICBnZXRTbG90UHJvcHM6IG90aGVySGFuZGxlcnMgPT4ge1xuICAgICAgcmV0dXJuIGdldEJhY2tkcm9wUHJvcHMoX2V4dGVuZHMoe30sIG90aGVySGFuZGxlcnMsIHtcbiAgICAgICAgb25DbGljazogZSA9PiB7XG4gICAgICAgICAgaWYgKG9uQmFja2Ryb3BDbGljaykge1xuICAgICAgICAgICAgb25CYWNrZHJvcENsaWNrKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3RoZXJIYW5kbGVycyAhPSBudWxsICYmIG90aGVySGFuZGxlcnMub25DbGljaykge1xuICAgICAgICAgICAgb3RoZXJIYW5kbGVycy5vbkNsaWNrKGUpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH0sXG4gICAgY2xhc3NOYW1lOiBjbHN4KGJhY2tkcm9wU2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBiYWNrZHJvcFNsb3RQcm9wcy5jbGFzc05hbWUsIEJhY2tkcm9wUHJvcHMgPT0gbnVsbCA/IHZvaWQgMCA6IEJhY2tkcm9wUHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzID09IG51bGwgPyB2b2lkIDAgOiBjbGFzc2VzLmJhY2tkcm9wKSxcbiAgICBvd25lclN0YXRlXG4gIH0pO1xuICBpZiAoIWtlZXBNb3VudGVkICYmICFvcGVuICYmICghaGFzVHJhbnNpdGlvbiB8fCBleGl0ZWQpKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBvcnRhbCwge1xuICAgIHJlZjogcG9ydGFsUmVmLFxuICAgIGNvbnRhaW5lcjogY29udGFpbmVyLFxuICAgIGRpc2FibGVQb3J0YWw6IGRpc2FibGVQb3J0YWwsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4cyhSb290U2xvdCwgX2V4dGVuZHMoe30sIHJvb3RQcm9wcywge1xuICAgICAgY2hpbGRyZW46IFshaGlkZUJhY2tkcm9wICYmIEJhY2tkcm9wQ29tcG9uZW50ID8gLyojX19QVVJFX18qL19qc3goQmFja2Ryb3BTbG90LCBfZXh0ZW5kcyh7fSwgYmFja2Ryb3BQcm9wcykpIDogbnVsbCwgLyojX19QVVJFX18qL19qc3goRm9jdXNUcmFwLCB7XG4gICAgICAgIGRpc2FibGVFbmZvcmNlRm9jdXM6IGRpc2FibGVFbmZvcmNlRm9jdXMsXG4gICAgICAgIGRpc2FibGVBdXRvRm9jdXM6IGRpc2FibGVBdXRvRm9jdXMsXG4gICAgICAgIGRpc2FibGVSZXN0b3JlRm9jdXM6IGRpc2FibGVSZXN0b3JlRm9jdXMsXG4gICAgICAgIGlzRW5hYmxlZDogaXNUb3BNb2RhbCxcbiAgICAgICAgb3Blbjogb3BlbixcbiAgICAgICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIGNoaWxkUHJvcHMpXG4gICAgICB9KV1cbiAgICB9KSlcbiAgfSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IE1vZGFsLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIEEgYmFja2Ryb3AgY29tcG9uZW50LiBUaGlzIHByb3AgZW5hYmxlcyBjdXN0b20gYmFja2Ryb3AgcmVuZGVyaW5nLlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYHNsb3RzLmJhY2tkcm9wYCBpbnN0ZWFkLiBXaGlsZSB0aGlzIHByb3AgY3VycmVudGx5IHdvcmtzLCBpdCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5leHQgbWFqb3IgdmVyc2lvbi5cbiAgICogVXNlIHRoZSBgc2xvdHMuYmFja2Ryb3BgIHByb3AgdG8gbWFrZSB5b3VyIGFwcGxpY2F0aW9uIHJlYWR5IGZvciB0aGUgbmV4dCB2ZXJzaW9uIG9mIE1hdGVyaWFsIFVJLlxuICAgKiBAZGVmYXVsdCBzdHlsZWQoQmFja2Ryb3AsIHtcbiAgICogICBuYW1lOiAnTXVpTW9kYWwnLFxuICAgKiAgIHNsb3Q6ICdCYWNrZHJvcCcsXG4gICAqICAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAqICAgICByZXR1cm4gc3R5bGVzLmJhY2tkcm9wO1xuICAgKiAgIH0sXG4gICAqIH0pKHtcbiAgICogICB6SW5kZXg6IC0xLFxuICAgKiB9KVxuICAgKi9cbiAgQmFja2Ryb3BDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIFtgQmFja2Ryb3BgXSgvbWF0ZXJpYWwtdWkvYXBpL2JhY2tkcm9wLykgZWxlbWVudC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBzbG90UHJvcHMuYmFja2Ryb3BgIGluc3RlYWQuXG4gICAqL1xuICBCYWNrZHJvcFByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQSBzaW5nbGUgY2hpbGQgY29udGVudCBlbGVtZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IGVsZW1lbnRBY2NlcHRpbmdSZWYuaXNSZXF1aXJlZCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBjbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBXaGVuIHNldCB0byB0cnVlIHRoZSBNb2RhbCB3YWl0cyB1bnRpbCBhIG5lc3RlZCBUcmFuc2l0aW9uIGlzIGNvbXBsZXRlZCBiZWZvcmUgY2xvc2luZy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNsb3NlQWZ0ZXJUcmFuc2l0aW9uOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogVGhpcyBwcm9wIGlzIGFuIGFsaWFzIGZvciB0aGUgYHNsb3RzYCBwcm9wLlxuICAgKiBJdCdzIHJlY29tbWVuZGVkIHRvIHVzZSB0aGUgYHNsb3RzYCBwcm9wIGluc3RlYWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBjb21wb25lbnRzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIEJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgUm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGV4dHJhIHByb3BzIGZvciB0aGUgc2xvdCBjb21wb25lbnRzLlxuICAgKiBZb3UgY2FuIG92ZXJyaWRlIHRoZSBleGlzdGluZyBwcm9wcyBvciBhZGQgbmV3IG9uZXMuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBzbG90UHJvcHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdFByb3BzYCBwcm9wIGluc3RlYWQsIGFzIGBjb21wb25lbnRzUHJvcHNgIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgY29tcG9uZW50c1Byb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQgb3IgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogVGhlIGBjb250YWluZXJgIHdpbGwgaGF2ZSB0aGUgcG9ydGFsIGNoaWxkcmVuIGFwcGVuZGVkIHRvIGl0LlxuICAgKlxuICAgKiBZb3UgY2FuIGFsc28gcHJvdmlkZSBhIGNhbGxiYWNrLCB3aGljaCBpcyBjYWxsZWQgaW4gYSBSZWFjdCBsYXlvdXQgZWZmZWN0LlxuICAgKiBUaGlzIGxldHMgeW91IHNldCB0aGUgY29udGFpbmVyIGZyb20gYSByZWYsIGFuZCBhbHNvIG1ha2VzIHNlcnZlci1zaWRlIHJlbmRlcmluZyBwb3NzaWJsZS5cbiAgICpcbiAgICogQnkgZGVmYXVsdCwgaXQgdXNlcyB0aGUgYm9keSBvZiB0aGUgdG9wLWxldmVsIGRvY3VtZW50IG9iamVjdCxcbiAgICogc28gaXQncyBzaW1wbHkgYGRvY3VtZW50LmJvZHlgIG1vc3Qgb2YgdGhlIHRpbWUuXG4gICAqL1xuICBjb250YWluZXI6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgYXV0b21hdGljYWxseSBzaGlmdCBmb2N1cyB0byBpdHNlbGYgd2hlbiBpdCBvcGVucywgYW5kXG4gICAqIHJlcGxhY2UgaXQgdG8gdGhlIGxhc3QgZm9jdXNlZCBlbGVtZW50IHdoZW4gaXQgY2xvc2VzLlxuICAgKiBUaGlzIGFsc28gd29ya3MgY29ycmVjdGx5IHdpdGggYW55IG1vZGFsIGNoaWxkcmVuIHRoYXQgaGF2ZSB0aGUgYGRpc2FibGVBdXRvRm9jdXNgIHByb3AuXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVBdXRvRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbW9kYWwgd2lsbCBub3QgcHJldmVudCBmb2N1cyBmcm9tIGxlYXZpbmcgdGhlIG1vZGFsIHdoaWxlIG9wZW4uXG4gICAqXG4gICAqIEdlbmVyYWxseSB0aGlzIHNob3VsZCBuZXZlciBiZSBzZXQgdG8gYHRydWVgIGFzIGl0IG1ha2VzIHRoZSBtb2RhbCBsZXNzXG4gICAqIGFjY2Vzc2libGUgdG8gYXNzaXN0aXZlIHRlY2hub2xvZ2llcywgbGlrZSBzY3JlZW4gcmVhZGVycy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVFbmZvcmNlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBoaXR0aW5nIGVzY2FwZSB3aWxsIG5vdCBmaXJlIHRoZSBgb25DbG9zZWAgY2FsbGJhY2suXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlRXNjYXBlS2V5RG93bjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgYGNoaWxkcmVuYCB3aWxsIGJlIHVuZGVyIHRoZSBET00gaGllcmFyY2h5IG9mIHRoZSBwYXJlbnQgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVBvcnRhbDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBtb2RhbCB3aWxsIG5vdCByZXN0b3JlIGZvY3VzIHRvIHByZXZpb3VzbHkgZm9jdXNlZCBlbGVtZW50IG9uY2VcbiAgICogbW9kYWwgaXMgaGlkZGVuIG9yIHVubW91bnRlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSZXN0b3JlRm9jdXM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogRGlzYWJsZSB0aGUgc2Nyb2xsIGxvY2sgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlU2Nyb2xsTG9jazogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYWNrZHJvcCBpcyBub3QgcmVuZGVyZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBoaWRlQmFja2Ryb3A6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQWx3YXlzIGtlZXAgdGhlIGNoaWxkcmVuIGluIHRoZSBET00uXG4gICAqIFRoaXMgcHJvcCBjYW4gYmUgdXNlZnVsIGluIFNFTyBzaXR1YXRpb24gb3JcbiAgICogd2hlbiB5b3Ugd2FudCB0byBtYXhpbWl6ZSB0aGUgcmVzcG9uc2l2ZW5lc3Mgb2YgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAga2VlcE1vdW50ZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgYmFja2Ryb3AgaXMgY2xpY2tlZC5cbiAgICogQGRlcHJlY2F0ZWQgVXNlIHRoZSBgb25DbG9zZWAgcHJvcCB3aXRoIHRoZSBgcmVhc29uYCBhcmd1bWVudCB0byBoYW5kbGUgdGhlIGBiYWNrZHJvcENsaWNrYCBldmVudHMuXG4gICAqL1xuICBvbkJhY2tkcm9wQ2xpY2s6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgY29tcG9uZW50IHJlcXVlc3RzIHRvIGJlIGNsb3NlZC5cbiAgICogVGhlIGByZWFzb25gIHBhcmFtZXRlciBjYW4gb3B0aW9uYWxseSBiZSB1c2VkIHRvIGNvbnRyb2wgdGhlIHJlc3BvbnNlIHRvIGBvbkNsb3NlYC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uIENhbiBiZTogYFwiZXNjYXBlS2V5RG93blwiYCwgYFwiYmFja2Ryb3BDbGlja1wiYC5cbiAgICovXG4gIG9uQ2xvc2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIHRyYW5zaXRpb24gZW50ZXJzLlxuICAgKi9cbiAgb25UcmFuc2l0aW9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQSBmdW5jdGlvbiBjYWxsZWQgd2hlbiBhIHRyYW5zaXRpb24gaGFzIGV4aXRlZC5cbiAgICovXG4gIG9uVHJhbnNpdGlvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHByb3BzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUgdGhlIE1vZGFsLlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlIHRoZSBNb2RhbC5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGJhY2tkcm9wOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgTW9kYWw7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBvcG92ZXJVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVBvcG92ZXInLCBzbG90KTtcbn1cbmNvbnN0IHBvcG92ZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUG9wb3ZlcicsIFsncm9vdCcsICdwYXBlciddKTtcbmV4cG9ydCBkZWZhdWx0IHBvcG92ZXJDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhY3Rpb25cIiwgXCJhbmNob3JFbFwiLCBcImFuY2hvck9yaWdpblwiLCBcImFuY2hvclBvc2l0aW9uXCIsIFwiYW5jaG9yUmVmZXJlbmNlXCIsIFwiY2hpbGRyZW5cIiwgXCJjbGFzc05hbWVcIiwgXCJjb250YWluZXJcIiwgXCJlbGV2YXRpb25cIiwgXCJtYXJnaW5UaHJlc2hvbGRcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCIsIFwidHJhbnNmb3JtT3JpZ2luXCIsIFwiVHJhbnNpdGlvbkNvbXBvbmVudFwiLCBcInRyYW5zaXRpb25EdXJhdGlvblwiLCBcIlRyYW5zaXRpb25Qcm9wc1wiLCBcImRpc2FibGVTY3JvbGxMb2NrXCJdLFxuICBfZXhjbHVkZWQzID0gW1wic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMsIHVzZVNsb3RQcm9wcywgaXNIb3N0Q29tcG9uZW50IH0gZnJvbSAnQG11aS9iYXNlJztcbmltcG9ydCB7IGNoYWluUHJvcFR5cGVzLCBpbnRlZ2VyUHJvcFR5cGUsIGVsZW1lbnRUeXBlQWNjZXB0aW5nUmVmLCByZWZUeXBlLCBIVE1MRWxlbWVudFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgZGVib3VuY2UgZnJvbSAnLi4vdXRpbHMvZGVib3VuY2UnO1xuaW1wb3J0IG93bmVyRG9jdW1lbnQgZnJvbSAnLi4vdXRpbHMvb3duZXJEb2N1bWVudCc7XG5pbXBvcnQgb3duZXJXaW5kb3cgZnJvbSAnLi4vdXRpbHMvb3duZXJXaW5kb3cnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgR3JvdyBmcm9tICcuLi9Hcm93JztcbmltcG9ydCBNb2RhbCBmcm9tICcuLi9Nb2RhbCc7XG5pbXBvcnQgUGFwZXJCYXNlIGZyb20gJy4uL1BhcGVyJztcbmltcG9ydCB7IGdldFBvcG92ZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BvcG92ZXJDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgZnVuY3Rpb24gZ2V0T2Zmc2V0VG9wKHJlY3QsIHZlcnRpY2FsKSB7XG4gIGxldCBvZmZzZXQgPSAwO1xuICBpZiAodHlwZW9mIHZlcnRpY2FsID09PSAnbnVtYmVyJykge1xuICAgIG9mZnNldCA9IHZlcnRpY2FsO1xuICB9IGVsc2UgaWYgKHZlcnRpY2FsID09PSAnY2VudGVyJykge1xuICAgIG9mZnNldCA9IHJlY3QuaGVpZ2h0IC8gMjtcbiAgfSBlbHNlIGlmICh2ZXJ0aWNhbCA9PT0gJ2JvdHRvbScpIHtcbiAgICBvZmZzZXQgPSByZWN0LmhlaWdodDtcbiAgfVxuICByZXR1cm4gb2Zmc2V0O1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldE9mZnNldExlZnQocmVjdCwgaG9yaXpvbnRhbCkge1xuICBsZXQgb2Zmc2V0ID0gMDtcbiAgaWYgKHR5cGVvZiBob3Jpem9udGFsID09PSAnbnVtYmVyJykge1xuICAgIG9mZnNldCA9IGhvcml6b250YWw7XG4gIH0gZWxzZSBpZiAoaG9yaXpvbnRhbCA9PT0gJ2NlbnRlcicpIHtcbiAgICBvZmZzZXQgPSByZWN0LndpZHRoIC8gMjtcbiAgfSBlbHNlIGlmIChob3Jpem9udGFsID09PSAncmlnaHQnKSB7XG4gICAgb2Zmc2V0ID0gcmVjdC53aWR0aDtcbiAgfVxuICByZXR1cm4gb2Zmc2V0O1xufVxuZnVuY3Rpb24gZ2V0VHJhbnNmb3JtT3JpZ2luVmFsdWUodHJhbnNmb3JtT3JpZ2luKSB7XG4gIHJldHVybiBbdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbF0ubWFwKG4gPT4gdHlwZW9mIG4gPT09ICdudW1iZXInID8gYCR7bn1weGAgOiBuKS5qb2luKCcgJyk7XG59XG5mdW5jdGlvbiByZXNvbHZlQW5jaG9yRWwoYW5jaG9yRWwpIHtcbiAgcmV0dXJuIHR5cGVvZiBhbmNob3JFbCA9PT0gJ2Z1bmN0aW9uJyA/IGFuY2hvckVsKCkgOiBhbmNob3JFbDtcbn1cbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IFBvcG92ZXJSb290ID0gc3R5bGVkKE1vZGFsLCB7XG4gIG5hbWU6ICdNdWlQb3BvdmVyJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5yb290XG59KSh7fSk7XG5leHBvcnQgY29uc3QgUG9wb3ZlclBhcGVyID0gc3R5bGVkKFBhcGVyQmFzZSwge1xuICBuYW1lOiAnTXVpUG9wb3ZlcicsXG4gIHNsb3Q6ICdQYXBlcicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLnBhcGVyXG59KSh7XG4gIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICBvdmVyZmxvd1k6ICdhdXRvJyxcbiAgb3ZlcmZsb3dYOiAnaGlkZGVuJyxcbiAgLy8gU28gd2Ugc2VlIHRoZSBwb3BvdmVyIHdoZW4gaXQncyBlbXB0eS5cbiAgLy8gSXQncyBtb3N0IGxpa2VseSBvbiBpc3N1ZSBvbiB1c2VybGFuZC5cbiAgbWluV2lkdGg6IDE2LFxuICBtaW5IZWlnaHQ6IDE2LFxuICBtYXhXaWR0aDogJ2NhbGMoMTAwJSAtIDMycHgpJyxcbiAgbWF4SGVpZ2h0OiAnY2FsYygxMDAlIC0gMzJweCknLFxuICAvLyBXZSBkaXNhYmxlIHRoZSBmb2N1cyByaW5nIGZvciBtb3VzZSwgdG91Y2ggYW5kIGtleWJvYXJkIHVzZXJzLlxuICBvdXRsaW5lOiAwXG59KTtcbmNvbnN0IFBvcG92ZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBQb3BvdmVyKGluUHJvcHMsIHJlZikge1xuICB2YXIgX3Nsb3RQcm9wcyRwYXBlciwgX3Nsb3RzJHJvb3QsIF9zbG90cyRwYXBlcjtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpUG9wb3ZlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGFjdGlvbixcbiAgICAgIGFuY2hvckVsLFxuICAgICAgYW5jaG9yT3JpZ2luID0ge1xuICAgICAgICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAgICAgIGhvcml6b250YWw6ICdsZWZ0J1xuICAgICAgfSxcbiAgICAgIGFuY2hvclBvc2l0aW9uLFxuICAgICAgYW5jaG9yUmVmZXJlbmNlID0gJ2FuY2hvckVsJyxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29udGFpbmVyOiBjb250YWluZXJQcm9wLFxuICAgICAgZWxldmF0aW9uID0gOCxcbiAgICAgIG1hcmdpblRocmVzaG9sZCA9IDE2LFxuICAgICAgb3BlbixcbiAgICAgIFBhcGVyUHJvcHM6IFBhcGVyUHJvcHNQcm9wID0ge30sXG4gICAgICBzbG90cyxcbiAgICAgIHNsb3RQcm9wcyxcbiAgICAgIHRyYW5zZm9ybU9yaWdpbiA9IHtcbiAgICAgICAgdmVydGljYWw6ICd0b3AnLFxuICAgICAgICBob3Jpem9udGFsOiAnbGVmdCdcbiAgICAgIH0sXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gR3JvdyxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbjogdHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9ICdhdXRvJyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgICBvbkVudGVyaW5nXG4gICAgICB9ID0ge30sXG4gICAgICBkaXNhYmxlU2Nyb2xsTG9jayA9IGZhbHNlXG4gICAgfSA9IHByb3BzLFxuICAgIFRyYW5zaXRpb25Qcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLlRyYW5zaXRpb25Qcm9wcywgX2V4Y2x1ZGVkKSxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQyKTtcbiAgY29uc3QgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucGFwZXIpICE9IG51bGwgPyBfc2xvdFByb3BzJHBhcGVyIDogUGFwZXJQcm9wc1Byb3A7XG4gIGNvbnN0IHBhcGVyUmVmID0gUmVhY3QudXNlUmVmKCk7XG4gIGNvbnN0IGhhbmRsZVBhcGVyUmVmID0gdXNlRm9ya1JlZihwYXBlclJlZiwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5yZWYpO1xuICBjb25zdCBvd25lclN0YXRlID0gX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgYW5jaG9yT3JpZ2luLFxuICAgIGFuY2hvclJlZmVyZW5jZSxcbiAgICBlbGV2YXRpb24sXG4gICAgbWFyZ2luVGhyZXNob2xkLFxuICAgIGV4dGVybmFsUGFwZXJTbG90UHJvcHMsXG4gICAgdHJhbnNmb3JtT3JpZ2luLFxuICAgIFRyYW5zaXRpb25Db21wb25lbnQsXG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uOiB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wLFxuICAgIFRyYW5zaXRpb25Qcm9wc1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuXG4gIC8vIFJldHVybnMgdGhlIHRvcC9sZWZ0IG9mZnNldCBvZiB0aGUgcG9zaXRpb25cbiAgLy8gdG8gYXR0YWNoIHRvIG9uIHRoZSBhbmNob3IgZWxlbWVudCAob3IgYm9keSBpZiBub25lIGlzIHByb3ZpZGVkKVxuICBjb25zdCBnZXRBbmNob3JPZmZzZXQgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGFuY2hvclJlZmVyZW5jZSA9PT0gJ2FuY2hvclBvc2l0aW9uJykge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFhbmNob3JQb3NpdGlvbikge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ01VSTogWW91IG5lZWQgdG8gcHJvdmlkZSBhIGBhbmNob3JQb3NpdGlvbmAgcHJvcCB3aGVuIHVzaW5nICcgKyAnPFBvcG92ZXIgYW5jaG9yUmVmZXJlbmNlPVwiYW5jaG9yUG9zaXRpb25cIiAvPi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGFuY2hvclBvc2l0aW9uO1xuICAgIH1cbiAgICBjb25zdCByZXNvbHZlZEFuY2hvckVsID0gcmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKTtcblxuICAgIC8vIElmIGFuIGFuY2hvciBlbGVtZW50IHdhc24ndCBwcm92aWRlZCwganVzdCB1c2UgdGhlIHBhcmVudCBib2R5IGVsZW1lbnQgb2YgdGhpcyBQb3BvdmVyXG4gICAgY29uc3QgYW5jaG9yRWxlbWVudCA9IHJlc29sdmVkQW5jaG9yRWwgJiYgcmVzb2x2ZWRBbmNob3JFbC5ub2RlVHlwZSA9PT0gMSA/IHJlc29sdmVkQW5jaG9yRWwgOiBvd25lckRvY3VtZW50KHBhcGVyUmVmLmN1cnJlbnQpLmJvZHk7XG4gICAgY29uc3QgYW5jaG9yUmVjdCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnN0IGJveCA9IGFuY2hvckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICd0ZXN0JyAmJiBib3gudG9wID09PSAwICYmIGJveC5sZWZ0ID09PSAwICYmIGJveC5yaWdodCA9PT0gMCAmJiBib3guYm90dG9tID09PSAwKSB7XG4gICAgICAgIGNvbnNvbGUud2FybihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgJ1RoZSBhbmNob3IgZWxlbWVudCBzaG91bGQgYmUgcGFydCBvZiB0aGUgZG9jdW1lbnQgbGF5b3V0LicsIFwiTWFrZSBzdXJlIHRoZSBlbGVtZW50IGlzIHByZXNlbnQgaW4gdGhlIGRvY3VtZW50IG9yIHRoYXQgaXQncyBub3QgZGlzcGxheSBub25lLlwiXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IGFuY2hvclJlY3QudG9wICsgZ2V0T2Zmc2V0VG9wKGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBsZWZ0OiBhbmNob3JSZWN0LmxlZnQgKyBnZXRPZmZzZXRMZWZ0KGFuY2hvclJlY3QsIGFuY2hvck9yaWdpbi5ob3Jpem9udGFsKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yT3JpZ2luLmhvcml6b250YWwsIGFuY2hvck9yaWdpbi52ZXJ0aWNhbCwgYW5jaG9yUG9zaXRpb24sIGFuY2hvclJlZmVyZW5jZV0pO1xuXG4gIC8vIFJldHVybnMgdGhlIGJhc2UgdHJhbnNmb3JtIG9yaWdpbiB1c2luZyB0aGUgZWxlbWVudFxuICBjb25zdCBnZXRUcmFuc2Zvcm1PcmlnaW4gPSBSZWFjdC51c2VDYWxsYmFjayhlbGVtUmVjdCA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnRpY2FsOiBnZXRPZmZzZXRUb3AoZWxlbVJlY3QsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCksXG4gICAgICBob3Jpem9udGFsOiBnZXRPZmZzZXRMZWZ0KGVsZW1SZWN0LCB0cmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbClcbiAgICB9O1xuICB9LCBbdHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwsIHRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbF0pO1xuICBjb25zdCBnZXRQb3NpdGlvbmluZ1N0eWxlID0gUmVhY3QudXNlQ2FsbGJhY2soZWxlbWVudCA9PiB7XG4gICAgY29uc3QgZWxlbVJlY3QgPSB7XG4gICAgICB3aWR0aDogZWxlbWVudC5vZmZzZXRXaWR0aCxcbiAgICAgIGhlaWdodDogZWxlbWVudC5vZmZzZXRIZWlnaHRcbiAgICB9O1xuXG4gICAgLy8gR2V0IHRoZSB0cmFuc2Zvcm0gb3JpZ2luIHBvaW50IG9uIHRoZSBlbGVtZW50IGl0c2VsZlxuICAgIGNvbnN0IGVsZW1UcmFuc2Zvcm1PcmlnaW4gPSBnZXRUcmFuc2Zvcm1PcmlnaW4oZWxlbVJlY3QpO1xuICAgIGlmIChhbmNob3JSZWZlcmVuY2UgPT09ICdub25lJykge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdG9wOiBudWxsLFxuICAgICAgICBsZWZ0OiBudWxsLFxuICAgICAgICB0cmFuc2Zvcm1PcmlnaW46IGdldFRyYW5zZm9ybU9yaWdpblZhbHVlKGVsZW1UcmFuc2Zvcm1PcmlnaW4pXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEdldCB0aGUgb2Zmc2V0IG9mIHRoZSBhbmNob3JpbmcgZWxlbWVudFxuICAgIGNvbnN0IGFuY2hvck9mZnNldCA9IGdldEFuY2hvck9mZnNldCgpO1xuXG4gICAgLy8gQ2FsY3VsYXRlIGVsZW1lbnQgcG9zaXRpb25pbmdcbiAgICBsZXQgdG9wID0gYW5jaG9yT2Zmc2V0LnRvcCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4udmVydGljYWw7XG4gICAgbGV0IGxlZnQgPSBhbmNob3JPZmZzZXQubGVmdCAtIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbDtcbiAgICBjb25zdCBib3R0b20gPSB0b3AgKyBlbGVtUmVjdC5oZWlnaHQ7XG4gICAgY29uc3QgcmlnaHQgPSBsZWZ0ICsgZWxlbVJlY3Qud2lkdGg7XG5cbiAgICAvLyBVc2UgdGhlIHBhcmVudCB3aW5kb3cgb2YgdGhlIGFuY2hvckVsIGlmIHByb3ZpZGVkXG4gICAgY29uc3QgY29udGFpbmVyV2luZG93ID0gb3duZXJXaW5kb3cocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSk7XG5cbiAgICAvLyBXaW5kb3cgdGhyZXNob2xkcyB0YWtpbmcgcmVxdWlyZWQgbWFyZ2luIGludG8gYWNjb3VudFxuICAgIGNvbnN0IGhlaWdodFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lckhlaWdodCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICBjb25zdCB3aWR0aFRocmVzaG9sZCA9IGNvbnRhaW5lcldpbmRvdy5pbm5lcldpZHRoIC0gbWFyZ2luVGhyZXNob2xkO1xuXG4gICAgLy8gQ2hlY2sgaWYgdGhlIHZlcnRpY2FsIGF4aXMgbmVlZHMgc2hpZnRpbmdcbiAgICBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIHRvcCA8IG1hcmdpblRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHRvcCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAobWFyZ2luVGhyZXNob2xkICE9PSBudWxsICYmIGJvdHRvbSA+IGhlaWdodFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IGJvdHRvbSAtIGhlaWdodFRocmVzaG9sZDtcbiAgICAgIHRvcCAtPSBkaWZmO1xuICAgICAgZWxlbVRyYW5zZm9ybU9yaWdpbi52ZXJ0aWNhbCArPSBkaWZmO1xuICAgIH1cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKGVsZW1SZWN0LmhlaWdodCA+IGhlaWdodFRocmVzaG9sZCAmJiBlbGVtUmVjdC5oZWlnaHQgJiYgaGVpZ2h0VGhyZXNob2xkKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBwb3BvdmVyIGNvbXBvbmVudCBpcyB0b28gdGFsbC4nLCBgU29tZSBwYXJ0IG9mIGl0IGNhbiBub3QgYmUgc2VlbiBvbiB0aGUgc2NyZWVuICgke2VsZW1SZWN0LmhlaWdodCAtIGhlaWdodFRocmVzaG9sZH1weCkuYCwgJ1BsZWFzZSBjb25zaWRlciBhZGRpbmcgYSBgbWF4LWhlaWdodGAgdG8gaW1wcm92ZSB0aGUgdXNlci1leHBlcmllbmNlLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiB0aGUgaG9yaXpvbnRhbCBheGlzIG5lZWRzIHNoaWZ0aW5nXG4gICAgaWYgKG1hcmdpblRocmVzaG9sZCAhPT0gbnVsbCAmJiBsZWZ0IDwgbWFyZ2luVGhyZXNob2xkKSB7XG4gICAgICBjb25zdCBkaWZmID0gbGVmdCAtIG1hcmdpblRocmVzaG9sZDtcbiAgICAgIGxlZnQgLT0gZGlmZjtcbiAgICAgIGVsZW1UcmFuc2Zvcm1PcmlnaW4uaG9yaXpvbnRhbCArPSBkaWZmO1xuICAgIH0gZWxzZSBpZiAocmlnaHQgPiB3aWR0aFRocmVzaG9sZCkge1xuICAgICAgY29uc3QgZGlmZiA9IHJpZ2h0IC0gd2lkdGhUaHJlc2hvbGQ7XG4gICAgICBsZWZ0IC09IGRpZmY7XG4gICAgICBlbGVtVHJhbnNmb3JtT3JpZ2luLmhvcml6b250YWwgKz0gZGlmZjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogYCR7TWF0aC5yb3VuZCh0b3ApfXB4YCxcbiAgICAgIGxlZnQ6IGAke01hdGgucm91bmQobGVmdCl9cHhgLFxuICAgICAgdHJhbnNmb3JtT3JpZ2luOiBnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZShlbGVtVHJhbnNmb3JtT3JpZ2luKVxuICAgIH07XG4gIH0sIFthbmNob3JFbCwgYW5jaG9yUmVmZXJlbmNlLCBnZXRBbmNob3JPZmZzZXQsIGdldFRyYW5zZm9ybU9yaWdpbiwgbWFyZ2luVGhyZXNob2xkXSk7XG4gIGNvbnN0IFtpc1Bvc2l0aW9uZWQsIHNldElzUG9zaXRpb25lZF0gPSBSZWFjdC51c2VTdGF0ZShvcGVuKTtcbiAgY29uc3Qgc2V0UG9zaXRpb25pbmdTdHlsZXMgPSBSZWFjdC51c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgY29uc3QgZWxlbWVudCA9IHBhcGVyUmVmLmN1cnJlbnQ7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnN0IHBvc2l0aW9uaW5nID0gZ2V0UG9zaXRpb25pbmdTdHlsZShlbGVtZW50KTtcbiAgICBpZiAocG9zaXRpb25pbmcudG9wICE9PSBudWxsKSB7XG4gICAgICBlbGVtZW50LnN0eWxlLnRvcCA9IHBvc2l0aW9uaW5nLnRvcDtcbiAgICB9XG4gICAgaWYgKHBvc2l0aW9uaW5nLmxlZnQgIT09IG51bGwpIHtcbiAgICAgIGVsZW1lbnQuc3R5bGUubGVmdCA9IHBvc2l0aW9uaW5nLmxlZnQ7XG4gICAgfVxuICAgIGVsZW1lbnQuc3R5bGUudHJhbnNmb3JtT3JpZ2luID0gcG9zaXRpb25pbmcudHJhbnNmb3JtT3JpZ2luO1xuICAgIHNldElzUG9zaXRpb25lZCh0cnVlKTtcbiAgfSwgW2dldFBvc2l0aW9uaW5nU3R5bGVdKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZVNjcm9sbExvY2spIHtcbiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBzZXRQb3NpdGlvbmluZ1N0eWxlcyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgc2V0UG9zaXRpb25pbmdTdHlsZXMpO1xuICB9LCBbYW5jaG9yRWwsIGRpc2FibGVTY3JvbGxMb2NrLCBzZXRQb3NpdGlvbmluZ1N0eWxlc10pO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChvbkVudGVyaW5nKSB7XG4gICAgICBvbkVudGVyaW5nKGVsZW1lbnQsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gICAgc2V0UG9zaXRpb25pbmdTdHlsZXMoKTtcbiAgfTtcbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gKCkgPT4ge1xuICAgIHNldElzUG9zaXRpb25lZChmYWxzZSk7XG4gIH07XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKG9wZW4pIHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9KTtcbiAgUmVhY3QudXNlSW1wZXJhdGl2ZUhhbmRsZShhY3Rpb24sICgpID0+IG9wZW4gPyB7XG4gICAgdXBkYXRlUG9zaXRpb246ICgpID0+IHtcbiAgICAgIHNldFBvc2l0aW9uaW5nU3R5bGVzKCk7XG4gICAgfVxuICB9IDogbnVsbCwgW29wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFvcGVuKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgICBjb25zdCBoYW5kbGVSZXNpemUgPSBkZWJvdW5jZSgoKSA9PiB7XG4gICAgICBzZXRQb3NpdGlvbmluZ1N0eWxlcygpO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbnRhaW5lcldpbmRvdyA9IG93bmVyV2luZG93KGFuY2hvckVsKTtcbiAgICBjb250YWluZXJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgaGFuZGxlUmVzaXplLmNsZWFyKCk7XG4gICAgICBjb250YWluZXJXaW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaGFuZGxlUmVzaXplKTtcbiAgICB9O1xuICB9LCBbYW5jaG9yRWwsIG9wZW4sIHNldFBvc2l0aW9uaW5nU3R5bGVzXSk7XG4gIGxldCB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb25Qcm9wO1xuICBpZiAodHJhbnNpdGlvbkR1cmF0aW9uUHJvcCA9PT0gJ2F1dG8nICYmICFUcmFuc2l0aW9uQ29tcG9uZW50Lm11aVN1cHBvcnRBdXRvKSB7XG4gICAgdHJhbnNpdGlvbkR1cmF0aW9uID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLy8gSWYgdGhlIGNvbnRhaW5lciBwcm9wIGlzIHByb3ZpZGVkLCB1c2UgdGhhdFxuICAvLyBJZiB0aGUgYW5jaG9yRWwgcHJvcCBpcyBwcm92aWRlZCwgdXNlIGl0cyBwYXJlbnQgYm9keSBlbGVtZW50IGFzIHRoZSBjb250YWluZXJcbiAgLy8gSWYgbmVpdGhlciBhcmUgcHJvdmlkZWQgbGV0IHRoZSBNb2RhbCB0YWtlIGNhcmUgb2YgY2hvb3NpbmcgdGhlIGNvbnRhaW5lclxuICBjb25zdCBjb250YWluZXIgPSBjb250YWluZXJQcm9wIHx8IChhbmNob3JFbCA/IG93bmVyRG9jdW1lbnQocmVzb2x2ZUFuY2hvckVsKGFuY2hvckVsKSkuYm9keSA6IHVuZGVmaW5lZCk7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9zbG90cyRyb290ID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnJvb3QpICE9IG51bGwgPyBfc2xvdHMkcm9vdCA6IFBvcG92ZXJSb290O1xuICBjb25zdCBQYXBlclNsb3QgPSAoX3Nsb3RzJHBhcGVyID0gc2xvdHMgPT0gbnVsbCA/IHZvaWQgMCA6IHNsb3RzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RzJHBhcGVyIDogUG9wb3ZlclBhcGVyO1xuICBjb25zdCBwYXBlclByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICBlbGVtZW50VHlwZTogUGFwZXJTbG90LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcywge1xuICAgICAgc3R5bGU6IGlzUG9zaXRpb25lZCA/IGV4dGVybmFsUGFwZXJTbG90UHJvcHMuc3R5bGUgOiBfZXh0ZW5kcyh7fSwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5zdHlsZSwge1xuICAgICAgICBvcGFjaXR5OiAwXG4gICAgICB9KVxuICAgIH0pLFxuICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgZWxldmF0aW9uLFxuICAgICAgcmVmOiBoYW5kbGVQYXBlclJlZlxuICAgIH0sXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5wYXBlciwgZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyA9PSBudWxsID8gdm9pZCAwIDogZXh0ZXJuYWxQYXBlclNsb3RQcm9wcy5jbGFzc05hbWUpXG4gIH0pO1xuICBjb25zdCBfdXNlU2xvdFByb3BzID0gdXNlU2xvdFByb3BzKHtcbiAgICAgIGVsZW1lbnRUeXBlOiBSb290U2xvdCxcbiAgICAgIGV4dGVybmFsU2xvdFByb3BzOiAoc2xvdFByb3BzID09IG51bGwgPyB2b2lkIDAgOiBzbG90UHJvcHMucm9vdCkgfHwge30sXG4gICAgICBleHRlcm5hbEZvcndhcmRlZFByb3BzOiBvdGhlcixcbiAgICAgIGFkZGl0aW9uYWxQcm9wczoge1xuICAgICAgICByZWYsXG4gICAgICAgIHNsb3RQcm9wczoge1xuICAgICAgICAgIGJhY2tkcm9wOiB7XG4gICAgICAgICAgICBpbnZpc2libGU6IHRydWVcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGNvbnRhaW5lcixcbiAgICAgICAgb3BlblxuICAgICAgfSxcbiAgICAgIG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSksXG4gICAge1xuICAgICAgc2xvdFByb3BzOiByb290U2xvdFByb3BzUHJvcFxuICAgIH0gPSBfdXNlU2xvdFByb3BzLFxuICAgIHJvb3RQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF91c2VTbG90UHJvcHMsIF9leGNsdWRlZDMpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goUm9vdFNsb3QsIF9leHRlbmRzKHt9LCByb290UHJvcHMsICFpc0hvc3RDb21wb25lbnQoUm9vdFNsb3QpICYmIHtcbiAgICBzbG90UHJvcHM6IHJvb3RTbG90UHJvcHNQcm9wLFxuICAgIGRpc2FibGVTY3JvbGxMb2NrXG4gIH0sIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkNvbXBvbmVudCwgX2V4dGVuZHMoe1xuICAgICAgYXBwZWFyOiB0cnVlLFxuICAgICAgaW46IG9wZW4sXG4gICAgICBvbkVudGVyaW5nOiBoYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgICB0aW1lb3V0OiB0cmFuc2l0aW9uRHVyYXRpb25cbiAgICB9LCBUcmFuc2l0aW9uUHJvcHMsIHtcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChQYXBlclNsb3QsIF9leHRlbmRzKHt9LCBwYXBlclByb3BzLCB7XG4gICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICAgICAgfSkpXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gUG9wb3Zlci5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBIHJlZiBmb3IgaW1wZXJhdGl2ZSBhY3Rpb25zLlxuICAgKiBJdCBjdXJyZW50bHkgb25seSBzdXBwb3J0cyB1cGRhdGVQb3NpdGlvbigpIGFjdGlvbi5cbiAgICovXG4gIGFjdGlvbjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIEFuIEhUTUwgZWxlbWVudCwgW1BvcG92ZXJWaXJ0dWFsRWxlbWVudF0oL21hdGVyaWFsLXVpL3JlYWN0LXBvcG92ZXIvI3ZpcnR1YWwtZWxlbWVudCksXG4gICAqIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGVpdGhlci5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqL1xuICBhbmNob3JFbDogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLm9uZU9mVHlwZShbSFRNTEVsZW1lbnRUeXBlLCBQcm9wVHlwZXMuZnVuY10pLCBwcm9wcyA9PiB7XG4gICAgaWYgKHByb3BzLm9wZW4gJiYgKCFwcm9wcy5hbmNob3JSZWZlcmVuY2UgfHwgcHJvcHMuYW5jaG9yUmVmZXJlbmNlID09PSAnYW5jaG9yRWwnKSkge1xuICAgICAgY29uc3QgcmVzb2x2ZWRBbmNob3JFbCA9IHJlc29sdmVBbmNob3JFbChwcm9wcy5hbmNob3JFbCk7XG4gICAgICBpZiAocmVzb2x2ZWRBbmNob3JFbCAmJiByZXNvbHZlZEFuY2hvckVsLm5vZGVUeXBlID09PSAxKSB7XG4gICAgICAgIGNvbnN0IGJveCA9IHJlc29sdmVkQW5jaG9yRWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Rlc3QnICYmIGJveC50b3AgPT09IDAgJiYgYm94LmxlZnQgPT09IDAgJiYgYm94LnJpZ2h0ID09PSAwICYmIGJveC5ib3R0b20gPT09IDApIHtcbiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKFsnTVVJOiBUaGUgYGFuY2hvckVsYCBwcm9wIHByb3ZpZGVkIHRvIHRoZSBjb21wb25lbnQgaXMgaW52YWxpZC4nLCAnVGhlIGFuY2hvciBlbGVtZW50IHNob3VsZCBiZSBwYXJ0IG9mIHRoZSBkb2N1bWVudCBsYXlvdXQuJywgXCJNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgcHJlc2VudCBpbiB0aGUgZG9jdW1lbnQgb3IgdGhhdCBpdCdzIG5vdCBkaXNwbGF5IG5vbmUuXCJdLmpvaW4oJ1xcbicpKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG5ldyBFcnJvcihbJ01VSTogVGhlIGBhbmNob3JFbGAgcHJvcCBwcm92aWRlZCB0byB0aGUgY29tcG9uZW50IGlzIGludmFsaWQuJywgYEl0IHNob3VsZCBiZSBhbiBFbGVtZW50IG9yIFBvcG92ZXJWaXJ0dWFsRWxlbWVudCBpbnN0YW5jZSBidXQgaXQncyBcXGAke3Jlc29sdmVkQW5jaG9yRWx9XFxgIGluc3RlYWQuYF0uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGlzIGlzIHRoZSBwb2ludCBvbiB0aGUgYW5jaG9yIHdoZXJlIHRoZSBwb3BvdmVyJ3NcbiAgICogYGFuY2hvckVsYCB3aWxsIGF0dGFjaCB0by4gVGhpcyBpcyBub3QgdXNlZCB3aGVuIHRoZVxuICAgKiBhbmNob3JSZWZlcmVuY2UgaXMgJ2FuY2hvclBvc2l0aW9uJy5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tXTtcbiAgICogaG9yaXpvbnRhbDogW2xlZnQsIGNlbnRlciwgcmlnaHRdLlxuICAgKiBAZGVmYXVsdCB7XG4gICAqICAgdmVydGljYWw6ICd0b3AnLFxuICAgKiAgIGhvcml6b250YWw6ICdsZWZ0JyxcbiAgICogfVxuICAgKi9cbiAgYW5jaG9yT3JpZ2luOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGhvcml6b250YWw6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2NlbnRlcicsICdsZWZ0JywgJ3JpZ2h0J10pLCBQcm9wVHlwZXMubnVtYmVyXSkuaXNSZXF1aXJlZCxcbiAgICB2ZXJ0aWNhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYm90dG9tJywgJ2NlbnRlcicsICd0b3AnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9zaXRpb24gdGhhdCBtYXkgYmUgdXNlZCB0byBzZXQgdGhlIHBvc2l0aW9uIG9mIHRoZSBwb3BvdmVyLlxuICAgKiBUaGUgY29vcmRpbmF0ZXMgYXJlIHJlbGF0aXZlIHRvIHRoZSBhcHBsaWNhdGlvbidzIGNsaWVudCBhcmVhLlxuICAgKi9cbiAgYW5jaG9yUG9zaXRpb246IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgbGVmdDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkLFxuICAgIHRvcDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG4gIH0pLFxuICAvKipcbiAgICogVGhpcyBkZXRlcm1pbmVzIHdoaWNoIGFuY2hvciBwcm9wIHRvIHJlZmVyIHRvIHdoZW4gc2V0dGluZ1xuICAgKiB0aGUgcG9zaXRpb24gb2YgdGhlIHBvcG92ZXIuXG4gICAqIEBkZWZhdWx0ICdhbmNob3JFbCdcbiAgICovXG4gIGFuY2hvclJlZmVyZW5jZTogUHJvcFR5cGVzLm9uZU9mKFsnYW5jaG9yRWwnLCAnYW5jaG9yUG9zaXRpb24nLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQW4gSFRNTCBlbGVtZW50LCBjb21wb25lbnQgaW5zdGFuY2UsIG9yIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBlaXRoZXIuXG4gICAqIFRoZSBgY29udGFpbmVyYCB3aWxsIHBhc3NlZCB0byB0aGUgTW9kYWwgY29tcG9uZW50LlxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBpdCB1c2VzIHRoZSBib2R5IG9mIHRoZSBhbmNob3JFbCdzIHRvcC1sZXZlbCBkb2N1bWVudCBvYmplY3QsXG4gICAqIHNvIGl0J3Mgc2ltcGx5IGBkb2N1bWVudC5ib2R5YCBtb3N0IG9mIHRoZSB0aW1lLlxuICAgKi9cbiAgY29udGFpbmVyOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW0hUTUxFbGVtZW50VHlwZSwgUHJvcFR5cGVzLmZ1bmNdKSxcbiAgLyoqXG4gICAqIERpc2FibGUgdGhlIHNjcm9sbCBsb2NrIGJlaGF2aW9yLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNjcm9sbExvY2s6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhlIGVsZXZhdGlvbiBvZiB0aGUgcG9wb3Zlci5cbiAgICogQGRlZmF1bHQgOFxuICAgKi9cbiAgZWxldmF0aW9uOiBpbnRlZ2VyUHJvcFR5cGUsXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgaG93IGNsb3NlIHRvIHRoZSBlZGdlIG9mIHRoZSB3aW5kb3cgdGhlIHBvcG92ZXIgY2FuIGFwcGVhci5cbiAgICogSWYgbnVsbCwgdGhlIHBvcG92ZXIgd2lsbCBub3QgYmUgY29uc3RyYWluZWQgYnkgdGhlIHdpbmRvdy5cbiAgICogQGRlZmF1bHQgMTZcbiAgICovXG4gIG1hcmdpblRocmVzaG9sZDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIHdoZW4gdGhlIGNvbXBvbmVudCByZXF1ZXN0cyB0byBiZSBjbG9zZWQuXG4gICAqIFRoZSBgcmVhc29uYCBwYXJhbWV0ZXIgY2FuIG9wdGlvbmFsbHkgYmUgdXNlZCB0byBjb250cm9sIHRoZSByZXNwb25zZSB0byBgb25DbG9zZWAuXG4gICAqL1xuICBvbkNsb3NlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBzaG93bi5cbiAgICovXG4gIG9wZW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSBbYFBhcGVyYF0oL21hdGVyaWFsLXVpL2FwaS9wYXBlci8pIGVsZW1lbnQuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgYHNsb3RQcm9wcy5wYXBlcmAgYW5kIHdpbGwgYmUgb3ZlcnJpZGVuIGJ5IGl0IGlmIGJvdGggYXJlIHVzZWQuXG4gICAqIEBkZXByZWNhdGVkIFVzZSBgc2xvdFByb3BzLnBhcGVyYCBpbnN0ZWFkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8uc2hhcGUoe1xuICAgIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWZcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZXh0cmEgcHJvcHMgZm9yIHRoZSBzbG90IGNvbXBvbmVudHMuXG4gICAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlIGV4aXN0aW5nIHByb3BzIG9yIGFkZCBuZXcgb25lcy5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RQcm9wczogUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBwYXBlcjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgICByb290OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG4gIH0pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudHMgdXNlZCBmb3IgZWFjaCBzbG90IGluc2lkZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAvKipcbiAgICogVGhpcyBpcyB0aGUgcG9pbnQgb24gdGhlIHBvcG92ZXIgd2hpY2hcbiAgICogd2lsbCBhdHRhY2ggdG8gdGhlIGFuY2hvcidzIG9yaWdpbi5cbiAgICpcbiAgICogT3B0aW9uczpcbiAgICogdmVydGljYWw6IFt0b3AsIGNlbnRlciwgYm90dG9tLCB4KHB4KV07XG4gICAqIGhvcml6b250YWw6IFtsZWZ0LCBjZW50ZXIsIHJpZ2h0LCB4KHB4KV0uXG4gICAqIEBkZWZhdWx0IHtcbiAgICogICB2ZXJ0aWNhbDogJ3RvcCcsXG4gICAqICAgaG9yaXpvbnRhbDogJ2xlZnQnLFxuICAgKiB9XG4gICAqL1xuICB0cmFuc2Zvcm1PcmlnaW46IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgaG9yaXpvbnRhbDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnY2VudGVyJywgJ2xlZnQnLCAncmlnaHQnXSksIFByb3BUeXBlcy5udW1iZXJdKS5pc1JlcXVpcmVkLFxuICAgIHZlcnRpY2FsOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydib3R0b20nLCAnY2VudGVyJywgJ3RvcCddKSwgUHJvcFR5cGVzLm51bWJlcl0pLmlzUmVxdWlyZWRcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSB0cmFuc2l0aW9uLlxuICAgKiBbRm9sbG93IHRoaXMgZ3VpZGVdKC9tYXRlcmlhbC11aS90cmFuc2l0aW9ucy8jdHJhbnNpdGlvbmNvbXBvbmVudC1wcm9wKSB0byBsZWFybiBtb3JlIGFib3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIHRoaXMgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCBHcm93XG4gICAqL1xuICBUcmFuc2l0aW9uQ29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBTZXQgdG8gJ2F1dG8nIHRvIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlIHRyYW5zaXRpb24gdGltZSBiYXNlZCBvbiBoZWlnaHQuXG4gICAqIEBkZWZhdWx0ICdhdXRvJ1xuICAgKi9cbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydhdXRvJ10pLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSksXG4gIC8qKlxuICAgKiBQcm9wcyBhcHBsaWVkIHRvIHRoZSB0cmFuc2l0aW9uIGVsZW1lbnQuXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBlbGVtZW50IGlzIGJhc2VkIG9uIHRoaXMgW2BUcmFuc2l0aW9uYF0oaHR0cDovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24vKSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICBUcmFuc2l0aW9uUHJvcHM6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlNZW51Jywgc2xvdCk7XG59XG5jb25zdCBtZW51Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnUnLCBbJ3Jvb3QnLCAncGFwZXInLCAnbGlzdCddKTtcbmV4cG9ydCBkZWZhdWx0IG1lbnVDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm9uRW50ZXJpbmdcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJhdXRvRm9jdXNcIiwgXCJjaGlsZHJlblwiLCBcImNsYXNzTmFtZVwiLCBcImRpc2FibGVBdXRvRm9jdXNJdGVtXCIsIFwiTWVudUxpc3RQcm9wc1wiLCBcIm9uQ2xvc2VcIiwgXCJvcGVuXCIsIFwiUGFwZXJQcm9wc1wiLCBcIlBvcG92ZXJDbGFzc2VzXCIsIFwidHJhbnNpdGlvbkR1cmF0aW9uXCIsIFwiVHJhbnNpdGlvblByb3BzXCIsIFwidmFyaWFudFwiLCBcInNsb3RzXCIsIFwic2xvdFByb3BzXCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgaXNGcmFnbWVudCB9IGZyb20gJ3JlYWN0LWlzJztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCB7IHVuc3RhYmxlX2NvbXBvc2VDbGFzc2VzIGFzIGNvbXBvc2VDbGFzc2VzIH0gZnJvbSAnQG11aS9iYXNlL2NvbXBvc2VDbGFzc2VzJztcbmltcG9ydCB7IHVzZVNsb3RQcm9wcyB9IGZyb20gJ0BtdWkvYmFzZS91dGlscyc7XG5pbXBvcnQgeyBIVE1MRWxlbWVudFR5cGUgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBNZW51TGlzdCBmcm9tICcuLi9NZW51TGlzdCc7XG5pbXBvcnQgUG9wb3ZlciwgeyBQb3BvdmVyUGFwZXIgfSBmcm9tICcuLi9Qb3BvdmVyJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGdldE1lbnVVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL21lbnVDbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBSVExfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdyaWdodCdcbn07XG5jb25zdCBMVFJfT1JJR0lOID0ge1xuICB2ZXJ0aWNhbDogJ3RvcCcsXG4gIGhvcml6b250YWw6ICdsZWZ0J1xufTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnXSxcbiAgICBwYXBlcjogWydwYXBlciddLFxuICAgIGxpc3Q6IFsnbGlzdCddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0TWVudVV0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgTWVudVJvb3QgPSBzdHlsZWQoUG9wb3Zlciwge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcHJvcCA9PiByb290U2hvdWxkRm9yd2FyZFByb3AocHJvcCkgfHwgcHJvcCA9PT0gJ2NsYXNzZXMnLFxuICBuYW1lOiAnTXVpTWVudScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe30pO1xuZXhwb3J0IGNvbnN0IE1lbnVQYXBlciA9IHN0eWxlZChQb3BvdmVyUGFwZXIsIHtcbiAgbmFtZTogJ011aU1lbnUnLFxuICBzbG90OiAnUGFwZXInLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5wYXBlclxufSkoe1xuICAvLyBzcGVjWjogVGhlIG1heGltdW0gaGVpZ2h0IG9mIGEgc2ltcGxlIG1lbnUgc2hvdWxkIGJlIG9uZSBvciBtb3JlIHJvd3MgbGVzcyB0aGFuIHRoZSB2aWV3XG4gIC8vIGhlaWdodC4gVGhpcyBlbnN1cmVzIGEgdGFwcGFibGUgYXJlYSBvdXRzaWRlIG9mIHRoZSBzaW1wbGUgbWVudSB3aXRoIHdoaWNoIHRvIGRpc21pc3NcbiAgLy8gdGhlIG1lbnUuXG4gIG1heEhlaWdodDogJ2NhbGMoMTAwJSAtIDk2cHgpJyxcbiAgLy8gQWRkIGlPUyBtb21lbnR1bSBzY3JvbGxpbmcgZm9yIGlPUyA8IDEzLjBcbiAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCdcbn0pO1xuY29uc3QgTWVudU1lbnVMaXN0ID0gc3R5bGVkKE1lbnVMaXN0LCB7XG4gIG5hbWU6ICdNdWlNZW51JyxcbiAgc2xvdDogJ0xpc3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5saXN0XG59KSh7XG4gIC8vIFdlIGRpc2FibGUgdGhlIGZvY3VzIHJpbmcgZm9yIG1vdXNlLCB0b3VjaCBhbmQga2V5Ym9hcmQgdXNlcnMuXG4gIG91dGxpbmU6IDBcbn0pO1xuY29uc3QgTWVudSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIE1lbnUoaW5Qcm9wcywgcmVmKSB7XG4gIHZhciBfc2xvdHMkcGFwZXIsIF9zbG90UHJvcHMkcGFwZXI7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU1lbnUnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhdXRvRm9jdXMgPSB0cnVlLFxuICAgICAgY2hpbGRyZW4sXG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSA9IGZhbHNlLFxuICAgICAgTWVudUxpc3RQcm9wcyA9IHt9LFxuICAgICAgb25DbG9zZSxcbiAgICAgIG9wZW4sXG4gICAgICBQYXBlclByb3BzID0ge30sXG4gICAgICBQb3BvdmVyQ2xhc3NlcyxcbiAgICAgIHRyYW5zaXRpb25EdXJhdGlvbiA9ICdhdXRvJyxcbiAgICAgIFRyYW5zaXRpb25Qcm9wczoge1xuICAgICAgICBvbkVudGVyaW5nXG4gICAgICB9ID0ge30sXG4gICAgICB2YXJpYW50ID0gJ3NlbGVjdGVkTWVudScsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgc2xvdFByb3BzID0ge31cbiAgICB9ID0gcHJvcHMsXG4gICAgVHJhbnNpdGlvblByb3BzID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMuVHJhbnNpdGlvblByb3BzLCBfZXhjbHVkZWQpLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZDIpO1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGlzUnRsID0gdGhlbWUuZGlyZWN0aW9uID09PSAncnRsJztcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGF1dG9Gb2N1cyxcbiAgICBkaXNhYmxlQXV0b0ZvY3VzSXRlbSxcbiAgICBNZW51TGlzdFByb3BzLFxuICAgIG9uRW50ZXJpbmcsXG4gICAgUGFwZXJQcm9wcyxcbiAgICB0cmFuc2l0aW9uRHVyYXRpb24sXG4gICAgVHJhbnNpdGlvblByb3BzLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgYXV0b0ZvY3VzSXRlbSA9IGF1dG9Gb2N1cyAmJiAhZGlzYWJsZUF1dG9Gb2N1c0l0ZW0gJiYgb3BlbjtcbiAgY29uc3QgbWVudUxpc3RBY3Rpb25zUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVFbnRlcmluZyA9IChlbGVtZW50LCBpc0FwcGVhcmluZykgPT4ge1xuICAgIGlmIChtZW51TGlzdEFjdGlvbnNSZWYuY3VycmVudCkge1xuICAgICAgbWVudUxpc3RBY3Rpb25zUmVmLmN1cnJlbnQuYWRqdXN0U3R5bGVGb3JTY3JvbGxiYXIoZWxlbWVudCwgdGhlbWUpO1xuICAgIH1cbiAgICBpZiAob25FbnRlcmluZykge1xuICAgICAgb25FbnRlcmluZyhlbGVtZW50LCBpc0FwcGVhcmluZyk7XG4gICAgfVxuICB9O1xuICBjb25zdCBoYW5kbGVMaXN0S2V5RG93biA9IGV2ZW50ID0+IHtcbiAgICBpZiAoZXZlbnQua2V5ID09PSAnVGFiJykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGlmIChvbkNsb3NlKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsICd0YWJLZXlEb3duJyk7XG4gICAgICB9XG4gICAgfVxuICB9O1xuXG4gIC8qKlxuICAgKiB0aGUgaW5kZXggb2YgdGhlIGl0ZW0gc2hvdWxkIHJlY2VpdmUgZm9jdXNcbiAgICogaW4gYSBgdmFyaWFudD1cInNlbGVjdGVkTWVudVwiYCBpdCdzIHRoZSBmaXJzdCBgc2VsZWN0ZWRgIGl0ZW1cbiAgICogb3RoZXJ3aXNlIGl0J3MgdGhlIHZlcnkgZmlyc3QgaXRlbS5cbiAgICovXG4gIGxldCBhY3RpdmVJdGVtSW5kZXggPSAtMTtcbiAgLy8gc2luY2Ugd2UgaW5qZWN0IGZvY3VzIHJlbGF0ZWQgcHJvcHMgaW50byBjaGlsZHJlbiB3ZSBoYXZlIHRvIGRvIGEgbG9va2FoZWFkXG4gIC8vIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgYHNlbGVjdGVkYCBpdGVtLiBXZSdyZSBsb29raW5nIGZvciB0aGUgbGFzdCBgc2VsZWN0ZWRgXG4gIC8vIGl0ZW0gYW5kIHVzZSB0aGUgZmlyc3QgdmFsaWQgaXRlbSBhcyBhIGZhbGxiYWNrXG4gIFJlYWN0LkNoaWxkcmVuLm1hcChjaGlsZHJlbiwgKGNoaWxkLCBpbmRleCkgPT4ge1xuICAgIGlmICghIC8qI19fUFVSRV9fKi9SZWFjdC5pc1ZhbGlkRWxlbWVudChjaGlsZCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChpc0ZyYWdtZW50KGNoaWxkKSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKFtcIk1VSTogVGhlIE1lbnUgY29tcG9uZW50IGRvZXNuJ3QgYWNjZXB0IGEgRnJhZ21lbnQgYXMgYSBjaGlsZC5cIiwgJ0NvbnNpZGVyIHByb3ZpZGluZyBhbiBhcnJheSBpbnN0ZWFkLiddLmpvaW4oJ1xcbicpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKCFjaGlsZC5wcm9wcy5kaXNhYmxlZCkge1xuICAgICAgaWYgKHZhcmlhbnQgPT09ICdzZWxlY3RlZE1lbnUnICYmIGNoaWxkLnByb3BzLnNlbGVjdGVkKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfSBlbHNlIGlmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xKSB7XG4gICAgICAgIGFjdGl2ZUl0ZW1JbmRleCA9IGluZGV4O1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIGNvbnN0IFBhcGVyU2xvdCA9IChfc2xvdHMkcGFwZXIgPSBzbG90cy5wYXBlcikgIT0gbnVsbCA/IF9zbG90cyRwYXBlciA6IE1lbnVQYXBlcjtcbiAgY29uc3QgcGFwZXJFeHRlcm5hbFNsb3RQcm9wcyA9IChfc2xvdFByb3BzJHBhcGVyID0gc2xvdFByb3BzLnBhcGVyKSAhPSBudWxsID8gX3Nsb3RQcm9wcyRwYXBlciA6IFBhcGVyUHJvcHM7XG4gIGNvbnN0IHJvb3RTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBzbG90cy5yb290LFxuICAgIGV4dGVybmFsU2xvdFByb3BzOiBzbG90UHJvcHMucm9vdCxcbiAgICBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogW2NsYXNzZXMucm9vdCwgY2xhc3NOYW1lXVxuICB9KTtcbiAgY29uc3QgcGFwZXJTbG90UHJvcHMgPSB1c2VTbG90UHJvcHMoe1xuICAgIGVsZW1lbnRUeXBlOiBQYXBlclNsb3QsXG4gICAgZXh0ZXJuYWxTbG90UHJvcHM6IHBhcGVyRXh0ZXJuYWxTbG90UHJvcHMsXG4gICAgb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzZXMucGFwZXJcbiAgfSk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChNZW51Um9vdCwgX2V4dGVuZHMoe1xuICAgIG9uQ2xvc2U6IG9uQ2xvc2UsXG4gICAgYW5jaG9yT3JpZ2luOiB7XG4gICAgICB2ZXJ0aWNhbDogJ2JvdHRvbScsXG4gICAgICBob3Jpem9udGFsOiBpc1J0bCA/ICdyaWdodCcgOiAnbGVmdCdcbiAgICB9LFxuICAgIHRyYW5zZm9ybU9yaWdpbjogaXNSdGwgPyBSVExfT1JJR0lOIDogTFRSX09SSUdJTixcbiAgICBzbG90czoge1xuICAgICAgcGFwZXI6IFBhcGVyU2xvdCxcbiAgICAgIHJvb3Q6IHNsb3RzLnJvb3RcbiAgICB9LFxuICAgIHNsb3RQcm9wczoge1xuICAgICAgcm9vdDogcm9vdFNsb3RQcm9wcyxcbiAgICAgIHBhcGVyOiBwYXBlclNsb3RQcm9wc1xuICAgIH0sXG4gICAgb3Blbjogb3BlbixcbiAgICByZWY6IHJlZixcbiAgICB0cmFuc2l0aW9uRHVyYXRpb246IHRyYW5zaXRpb25EdXJhdGlvbixcbiAgICBUcmFuc2l0aW9uUHJvcHM6IF9leHRlbmRzKHtcbiAgICAgIG9uRW50ZXJpbmc6IGhhbmRsZUVudGVyaW5nXG4gICAgfSwgVHJhbnNpdGlvblByb3BzKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogUG9wb3ZlckNsYXNzZXMsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE1lbnVNZW51TGlzdCwgX2V4dGVuZHMoe1xuICAgICAgb25LZXlEb3duOiBoYW5kbGVMaXN0S2V5RG93bixcbiAgICAgIGFjdGlvbnM6IG1lbnVMaXN0QWN0aW9uc1JlZixcbiAgICAgIGF1dG9Gb2N1czogYXV0b0ZvY3VzICYmIChhY3RpdmVJdGVtSW5kZXggPT09IC0xIHx8IGRpc2FibGVBdXRvRm9jdXNJdGVtKSxcbiAgICAgIGF1dG9Gb2N1c0l0ZW06IGF1dG9Gb2N1c0l0ZW0sXG4gICAgICB2YXJpYW50OiB2YXJpYW50XG4gICAgfSwgTWVudUxpc3RQcm9wcywge1xuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMubGlzdCwgTWVudUxpc3RQcm9wcy5jbGFzc05hbWUpLFxuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gICAgfSkpXG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTWVudS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBBbiBIVE1MIGVsZW1lbnQsIG9yIGEgZnVuY3Rpb24gdGhhdCByZXR1cm5zIG9uZS5cbiAgICogSXQncyB1c2VkIHRvIHNldCB0aGUgcG9zaXRpb24gb2YgdGhlIG1lbnUuXG4gICAqL1xuICBhbmNob3JFbDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtIVE1MRWxlbWVudFR5cGUsIFByb3BUeXBlcy5mdW5jXSksXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAgKERlZmF1bHQpIHdpbGwgZm9jdXMgdGhlIGBbcm9sZT1cIm1lbnVcIl1gIGlmIG5vIGZvY3VzYWJsZSBjaGlsZCBpcyBmb3VuZC4gRGlzYWJsZWRcbiAgICogY2hpbGRyZW4gYXJlIG5vdCBmb2N1c2FibGUuIElmIHlvdSBzZXQgdGhpcyBwcm9wIHRvIGBmYWxzZWAgZm9jdXMgd2lsbCBiZSBwbGFjZWRcbiAgICogb24gdGhlIHBhcmVudCBtb2RhbCBjb250YWluZXIuIFRoaXMgaGFzIHNldmVyZSBhY2Nlc3NpYmlsaXR5IGltcGxpY2F0aW9uc1xuICAgKiBhbmQgc2hvdWxkIG9ubHkgYmUgY29uc2lkZXJlZCBpZiB5b3UgbWFuYWdlIGZvY3VzIG90aGVyd2lzZS5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE1lbnUgY29udGVudHMsIG5vcm1hbGx5IGBNZW51SXRlbWBzLlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFdoZW4gb3BlbmluZyB0aGUgbWVudSB3aWxsIG5vdCBmb2N1cyB0aGUgYWN0aXZlIGl0ZW0gYnV0IHRoZSBgW3JvbGU9XCJtZW51XCJdYFxuICAgKiB1bmxlc3MgYGF1dG9Gb2N1c2AgaXMgYWxzbyBzZXQgdG8gYGZhbHNlYC4gTm90IHVzaW5nIHRoZSBkZWZhdWx0IG1lYW5zIG5vdFxuICAgKiBmb2xsb3dpbmcgV0FJLUFSSUEgYXV0aG9yaW5nIHByYWN0aWNlcy4gUGxlYXNlIGJlIGNvbnNpZGVyYXRlIGFib3V0IHBvc3NpYmxlXG4gICAqIGFjY2Vzc2liaWxpdHkgaW1wbGljYXRpb25zLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUF1dG9Gb2N1c0l0ZW06IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgW2BNZW51TGlzdGBdKC9tYXRlcmlhbC11aS9hcGkvbWVudS1saXN0LykgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIE1lbnVMaXN0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgcmVxdWVzdHMgdG8gYmUgY2xvc2VkLlxuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gZXZlbnQgVGhlIGV2ZW50IHNvdXJjZSBvZiB0aGUgY2FsbGJhY2suXG4gICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24gQ2FuIGJlOiBgXCJlc2NhcGVLZXlEb3duXCJgLCBgXCJiYWNrZHJvcENsaWNrXCJgLCBgXCJ0YWJLZXlEb3duXCJgLlxuICAgKi9cbiAgb25DbG9zZTogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2hvd24uXG4gICAqL1xuICBvcGVuOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgUGFwZXJQcm9wczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIGBjbGFzc2VzYCBwcm9wIGFwcGxpZWQgdG8gdGhlIFtgUG9wb3ZlcmBdKC9tYXRlcmlhbC11aS9hcGkvcG9wb3Zlci8pIGVsZW1lbnQuXG4gICAqL1xuICBQb3BvdmVyQ2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBleHRyYSBwcm9wcyBmb3IgdGhlIHNsb3QgY29tcG9uZW50cy5cbiAgICogWW91IGNhbiBvdmVycmlkZSB0aGUgZXhpc3RpbmcgcHJvcHMgb3IgYWRkIG5ldyBvbmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdFByb3BzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIHBhcGVyOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLFxuICAgIHJvb3Q6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSlcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgc2xvdHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgcGFwZXI6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICByb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgbGVuZ3RoIG9mIHRoZSB0cmFuc2l0aW9uIGluIGBtc2AsIG9yICdhdXRvJ1xuICAgKiBAZGVmYXVsdCAnYXV0bydcbiAgICovXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnYXV0byddKSwgUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnNoYXBlKHtcbiAgICBhcHBlYXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZW50ZXI6IFByb3BUeXBlcy5udW1iZXIsXG4gICAgZXhpdDogUHJvcFR5cGVzLm51bWJlclxuICB9KV0pLFxuICAvKipcbiAgICogUHJvcHMgYXBwbGllZCB0byB0aGUgdHJhbnNpdGlvbiBlbGVtZW50LlxuICAgKiBCeSBkZWZhdWx0LCB0aGUgZWxlbWVudCBpcyBiYXNlZCBvbiB0aGlzIFtgVHJhbnNpdGlvbmBdKGh0dHA6Ly9yZWFjdGNvbW11bml0eS5vcmcvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC90cmFuc2l0aW9uLykgY29tcG9uZW50LlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgVHJhbnNpdGlvblByb3BzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogVGhlIHZhcmlhbnQgdG8gdXNlLiBVc2UgYG1lbnVgIHRvIHByZXZlbnQgc2VsZWN0ZWQgaXRlbXMgZnJvbSBpbXBhY3RpbmcgdGhlIGluaXRpYWwgZm9jdXMuXG4gICAqIEBkZWZhdWx0ICdzZWxlY3RlZE1lbnUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydtZW51JywgJ3NlbGVjdGVkTWVudSddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnU7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldExpc3RJdGVtSWNvblV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTGlzdEl0ZW1JY29uJywgc2xvdCk7XG59XG5jb25zdCBsaXN0SXRlbUljb25DbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTGlzdEl0ZW1JY29uJywgWydyb290JywgJ2FsaWduSXRlbXNGbGV4U3RhcnQnXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbUljb25DbGFzc2VzOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRMaXN0SXRlbVRleHRVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUxpc3RJdGVtVGV4dCcsIHNsb3QpO1xufVxuY29uc3QgbGlzdEl0ZW1UZXh0Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUxpc3RJdGVtVGV4dCcsIFsncm9vdCcsICdtdWx0aWxpbmUnLCAnZGVuc2UnLCAnaW5zZXQnLCAncHJpbWFyeScsICdzZWNvbmRhcnknXSk7XG5leHBvcnQgZGVmYXVsdCBsaXN0SXRlbVRleHRDbGFzc2VzOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRNZW51SXRlbVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTWVudUl0ZW0nLCBzbG90KTtcbn1cbmNvbnN0IG1lbnVJdGVtQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aU1lbnVJdGVtJywgWydyb290JywgJ2ZvY3VzVmlzaWJsZScsICdkZW5zZScsICdkaXNhYmxlZCcsICdkaXZpZGVyJywgJ2d1dHRlcnMnLCAnc2VsZWN0ZWQnXSk7XG5leHBvcnQgZGVmYXVsdCBtZW51SXRlbUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiYXV0b0ZvY3VzXCIsIFwiY29tcG9uZW50XCIsIFwiZGVuc2VcIiwgXCJkaXZpZGVyXCIsIFwiZGlzYWJsZUd1dHRlcnNcIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJyb2xlXCIsIFwidGFiSW5kZXhcIiwgXCJjbGFzc05hbWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgeyBhbHBoYSB9IGZyb20gJ0BtdWkvc3lzdGVtJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgdXNlVGhlbWVQcm9wcyBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgTGlzdENvbnRleHQgZnJvbSAnLi4vTGlzdC9MaXN0Q29udGV4dCc7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCB1c2VFbmhhbmNlZEVmZmVjdCBmcm9tICcuLi91dGlscy91c2VFbmhhbmNlZEVmZmVjdCc7XG5pbXBvcnQgdXNlRm9ya1JlZiBmcm9tICcuLi91dGlscy91c2VGb3JrUmVmJztcbmltcG9ydCB7IGRpdmlkZXJDbGFzc2VzIH0gZnJvbSAnLi4vRGl2aWRlcic7XG5pbXBvcnQgeyBsaXN0SXRlbUljb25DbGFzc2VzIH0gZnJvbSAnLi4vTGlzdEl0ZW1JY29uJztcbmltcG9ydCB7IGxpc3RJdGVtVGV4dENsYXNzZXMgfSBmcm9tICcuLi9MaXN0SXRlbVRleHQnO1xuaW1wb3J0IG1lbnVJdGVtQ2xhc3NlcywgeyBnZXRNZW51SXRlbVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vbWVudUl0ZW1DbGFzc2VzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3Qgb3ZlcnJpZGVzUmVzb2x2ZXIgPSAocHJvcHMsIHN0eWxlcykgPT4ge1xuICBjb25zdCB7XG4gICAgb3duZXJTdGF0ZVxuICB9ID0gcHJvcHM7XG4gIHJldHVybiBbc3R5bGVzLnJvb3QsIG93bmVyU3RhdGUuZGVuc2UgJiYgc3R5bGVzLmRlbnNlLCBvd25lclN0YXRlLmRpdmlkZXIgJiYgc3R5bGVzLmRpdmlkZXIsICFvd25lclN0YXRlLmRpc2FibGVHdXR0ZXJzICYmIHN0eWxlcy5ndXR0ZXJzXTtcbn07XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgZGlzYWJsZWQsXG4gICAgZGVuc2UsXG4gICAgZGl2aWRlcixcbiAgICBkaXNhYmxlR3V0dGVycyxcbiAgICBzZWxlY3RlZCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBkZW5zZSAmJiAnZGVuc2UnLCBkaXNhYmxlZCAmJiAnZGlzYWJsZWQnLCAhZGlzYWJsZUd1dHRlcnMgJiYgJ2d1dHRlcnMnLCBkaXZpZGVyICYmICdkaXZpZGVyJywgc2VsZWN0ZWQgJiYgJ3NlbGVjdGVkJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldE1lbnVJdGVtVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IE1lbnVJdGVtUm9vdCA9IHN0eWxlZChCdXR0b25CYXNlLCB7XG4gIHNob3VsZEZvcndhcmRQcm9wOiBwcm9wID0+IHJvb3RTaG91bGRGb3J3YXJkUHJvcChwcm9wKSB8fCBwcm9wID09PSAnY2xhc3NlcycsXG4gIG5hbWU6ICdNdWlNZW51SXRlbScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7fSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBkaXNwbGF5OiAnZmxleCcsXG4gIGp1c3RpZnlDb250ZW50OiAnZmxleC1zdGFydCcsXG4gIGFsaWduSXRlbXM6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgbWluSGVpZ2h0OiA0OCxcbiAgcGFkZGluZ1RvcDogNixcbiAgcGFkZGluZ0JvdHRvbTogNixcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIHdoaXRlU3BhY2U6ICdub3dyYXAnXG59LCAhb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiB7XG4gIHBhZGRpbmdMZWZ0OiAxNixcbiAgcGFkZGluZ1JpZ2h0OiAxNlxufSwgb3duZXJTdGF0ZS5kaXZpZGVyICYmIHtcbiAgYm9yZGVyQm90dG9tOiBgMXB4IHNvbGlkICR7KHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuZGl2aWRlcn1gLFxuICBiYWNrZ3JvdW5kQ2xpcDogJ3BhZGRpbmctYm94J1xufSwge1xuICAnJjpob3Zlcic6IHtcbiAgICB0ZXh0RGVjb3JhdGlvbjogJ25vbmUnLFxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmhvdmVyLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgfVxuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuc2VsZWN0ZWR9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlLnByaW1hcnkubWFpbiwgdGhlbWUucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5KSxcbiAgICBbYCYuJHttZW51SXRlbUNsYXNzZXMuZm9jdXNWaXNpYmxlfWBdOiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uZm9jdXNPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5mb2N1c09wYWNpdHkpXG4gICAgfVxuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuc2VsZWN0ZWR9OmhvdmVyYF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5wcmltYXJ5Lm1haW5DaGFubmVsfSAvIGNhbGMoJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eX0gKyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uaG92ZXJPcGFjaXR5fSkpYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUucHJpbWFyeS5tYWluLCB0aGVtZS5wYWxldHRlLmFjdGlvbi5zZWxlY3RlZE9wYWNpdHkgKyB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgYmFja2dyb3VuZENvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUucHJpbWFyeS5tYWluQ2hhbm5lbH0gLyAke3RoZW1lLnZhcnMucGFsZXR0ZS5hY3Rpb24uc2VsZWN0ZWRPcGFjaXR5fSlgIDogYWxwaGEodGhlbWUucGFsZXR0ZS5wcmltYXJ5Lm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLnNlbGVjdGVkT3BhY2l0eSlcbiAgICB9XG4gIH0sXG4gIFtgJi4ke21lbnVJdGVtQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5mb2N1c1xuICB9LFxuICBbYCYuJHttZW51SXRlbUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBvcGFjaXR5OiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRPcGFjaXR5XG4gIH0sXG4gIFtgJiArIC4ke2RpdmlkZXJDbGFzc2VzLnJvb3R9YF06IHtcbiAgICBtYXJnaW5Ub3A6IHRoZW1lLnNwYWNpbmcoMSksXG4gICAgbWFyZ2luQm90dG9tOiB0aGVtZS5zcGFjaW5nKDEpXG4gIH0sXG4gIFtgJiArIC4ke2RpdmlkZXJDbGFzc2VzLmluc2V0fWBdOiB7XG4gICAgbWFyZ2luTGVmdDogNTJcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtVGV4dENsYXNzZXMucm9vdH1gXToge1xuICAgIG1hcmdpblRvcDogMCxcbiAgICBtYXJnaW5Cb3R0b206IDBcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtVGV4dENsYXNzZXMuaW5zZXR9YF06IHtcbiAgICBwYWRkaW5nTGVmdDogMzZcbiAgfSxcbiAgW2AmIC4ke2xpc3RJdGVtSWNvbkNsYXNzZXMucm9vdH1gXToge1xuICAgIG1pbldpZHRoOiAzNlxuICB9XG59LCAhb3duZXJTdGF0ZS5kZW5zZSAmJiB7XG4gIFt0aGVtZS5icmVha3BvaW50cy51cCgnc20nKV06IHtcbiAgICBtaW5IZWlnaHQ6ICdhdXRvJ1xuICB9XG59LCBvd25lclN0YXRlLmRlbnNlICYmIF9leHRlbmRzKHtcbiAgbWluSGVpZ2h0OiAzMixcbiAgLy8gaHR0cHM6Ly9tMi5tYXRlcmlhbC5pby9jb21wb25lbnRzL21lbnVzI3NwZWNzID4gRGVuc2VcbiAgcGFkZGluZ1RvcDogNCxcbiAgcGFkZGluZ0JvdHRvbTogNFxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5Miwge1xuICBbYCYgLiR7bGlzdEl0ZW1JY29uQ2xhc3Nlcy5yb290fSBzdmdgXToge1xuICAgIGZvbnRTaXplOiAnMS4yNXJlbSdcbiAgfVxufSkpKTtcbmNvbnN0IE1lbnVJdGVtID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTWVudUl0ZW0oaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlVGhlbWVQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aU1lbnVJdGVtJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gICAgICBjb21wb25lbnQgPSAnbGknLFxuICAgICAgZGVuc2UgPSBmYWxzZSxcbiAgICAgIGRpdmlkZXIgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVHdXR0ZXJzID0gZmFsc2UsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICByb2xlID0gJ21lbnVpdGVtJyxcbiAgICAgIHRhYkluZGV4OiB0YWJJbmRleFByb3AsXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgY29udGV4dCA9IFJlYWN0LnVzZUNvbnRleHQoTGlzdENvbnRleHQpO1xuICBjb25zdCBjaGlsZENvbnRleHQgPSBSZWFjdC51c2VNZW1vKCgpID0+ICh7XG4gICAgZGVuc2U6IGRlbnNlIHx8IGNvbnRleHQuZGVuc2UgfHwgZmFsc2UsXG4gICAgZGlzYWJsZUd1dHRlcnNcbiAgfSksIFtjb250ZXh0LmRlbnNlLCBkZW5zZSwgZGlzYWJsZUd1dHRlcnNdKTtcbiAgY29uc3QgbWVudUl0ZW1SZWYgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIHVzZUVuaGFuY2VkRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoYXV0b0ZvY3VzKSB7XG4gICAgICBpZiAobWVudUl0ZW1SZWYuY3VycmVudCkge1xuICAgICAgICBtZW51SXRlbVJlZi5jdXJyZW50LmZvY3VzKCk7XG4gICAgICB9IGVsc2UgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcignTVVJOiBVbmFibGUgdG8gc2V0IGZvY3VzIHRvIGEgTWVudUl0ZW0gd2hvc2UgY29tcG9uZW50IGhhcyBub3QgYmVlbiByZW5kZXJlZC4nKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFthdXRvRm9jdXNdKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRlbnNlOiBjaGlsZENvbnRleHQuZGVuc2UsXG4gICAgZGl2aWRlcixcbiAgICBkaXNhYmxlR3V0dGVyc1xuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKHByb3BzKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihtZW51SXRlbVJlZiwgcmVmKTtcbiAgbGV0IHRhYkluZGV4O1xuICBpZiAoIXByb3BzLmRpc2FibGVkKSB7XG4gICAgdGFiSW5kZXggPSB0YWJJbmRleFByb3AgIT09IHVuZGVmaW5lZCA/IHRhYkluZGV4UHJvcCA6IC0xO1xuICB9XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChMaXN0Q29udGV4dC5Qcm92aWRlciwge1xuICAgIHZhbHVlOiBjaGlsZENvbnRleHQsXG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE1lbnVJdGVtUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgcmVmOiBoYW5kbGVSZWYsXG4gICAgICByb2xlOiByb2xlLFxuICAgICAgdGFiSW5kZXg6IHRhYkluZGV4LFxuICAgICAgY29tcG9uZW50OiBjb21wb25lbnQsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpXG4gICAgfSwgb3RoZXIsIHtcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc2VzOiBjbGFzc2VzXG4gICAgfSkpXG4gIH0pO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBNZW51SXRlbS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gV2FybmluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB8IFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucyB8XG4gIC8vIHwgICAgIFRvIHVwZGF0ZSB0aGVtIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIFwieWFybiBwcm9wdHlwZXNcIiAgICAgfFxuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBsaXN0IGl0ZW0gaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKiBGb2N1cyB3aWxsIGFsc28gYmUgdHJpZ2dlcmVkIGlmIHRoZSB2YWx1ZSBjaGFuZ2VzIGZyb20gZmFsc2UgdG8gdHJ1ZS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGF1dG9Gb2N1czogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBjb21wYWN0IHZlcnRpY2FsIHBhZGRpbmcgZGVzaWduZWQgZm9yIGtleWJvYXJkIGFuZCBtb3VzZSBpbnB1dCBpcyB1c2VkLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBNZW51IGNvbXBvbmVudC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRlbnNlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGxlZnQgYW5kIHJpZ2h0IHBhZGRpbmcgaXMgcmVtb3ZlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgYSAxcHggbGlnaHQgYm9yZGVyIGlzIGFkZGVkIHRvIHRoZSBib3R0b20gb2YgdGhlIG1lbnUgaXRlbS5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpdmlkZXI6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogVGhpcyBwcm9wIGNhbiBoZWxwIGlkZW50aWZ5IHdoaWNoIGVsZW1lbnQgaGFzIGtleWJvYXJkIGZvY3VzLlxuICAgKiBUaGUgY2xhc3MgbmFtZSB3aWxsIGJlIGFwcGxpZWQgd2hlbiB0aGUgZWxlbWVudCBnYWlucyB0aGUgZm9jdXMgdGhyb3VnaCBrZXlib2FyZCBpbnRlcmFjdGlvbi5cbiAgICogSXQncyBhIHBvbHlmaWxsIGZvciB0aGUgW0NTUyA6Zm9jdXMtdmlzaWJsZSBzZWxlY3Rvcl0oaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3NlbGVjdG9ycy00LyN0aGUtZm9jdXMtdmlzaWJsZS1wc2V1ZG8pLlxuICAgKiBUaGUgcmF0aW9uYWxlIGZvciB1c2luZyB0aGlzIGZlYXR1cmUgW2lzIGV4cGxhaW5lZCBoZXJlXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlL2Jsb2IvSEVBRC9leHBsYWluZXIubWQpLlxuICAgKiBBIFtwb2x5ZmlsbCBjYW4gYmUgdXNlZF0oaHR0cHM6Ly9naXRodWIuY29tL1dJQ0cvZm9jdXMtdmlzaWJsZSkgdG8gYXBwbHkgYSBgZm9jdXMtdmlzaWJsZWAgY2xhc3MgdG8gb3RoZXIgY29tcG9uZW50c1xuICAgKiBpZiBuZWVkZWQuXG4gICAqL1xuICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByb2xlOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgc2VsZWN0ZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBzZWxlY3RlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlclxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtOyIsImltcG9ydCB7IHVuc3RhYmxlX2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMgYXMgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzIGZyb20gJy4uL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpTmF0aXZlU2VsZWN0Jywgc2xvdCk7XG59XG5jb25zdCBuYXRpdmVTZWxlY3RDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpTmF0aXZlU2VsZWN0JywgWydyb290JywgJ3NlbGVjdCcsICdtdWx0aXBsZScsICdmaWxsZWQnLCAnb3V0bGluZWQnLCAnc3RhbmRhcmQnLCAnZGlzYWJsZWQnLCAnaWNvbicsICdpY29uT3BlbicsICdpY29uRmlsbGVkJywgJ2ljb25PdXRsaW5lZCcsICdpY29uU3RhbmRhcmQnLCAnbmF0aXZlSW5wdXQnLCAnZXJyb3InXSk7XG5leHBvcnQgZGVmYXVsdCBuYXRpdmVTZWxlY3RDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImRpc2FibGVkXCIsIFwiZXJyb3JcIiwgXCJJY29uQ29tcG9uZW50XCIsIFwiaW5wdXRSZWZcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgcmVmVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnLi4vdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgbmF0aXZlU2VsZWN0Q2xhc3NlcywgeyBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcyB9IGZyb20gJy4vbmF0aXZlU2VsZWN0Q2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgbXVsdGlwbGUsXG4gICAgb3BlbixcbiAgICBlcnJvclxuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgc2VsZWN0OiBbJ3NlbGVjdCcsIHZhcmlhbnQsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIG11bHRpcGxlICYmICdtdWx0aXBsZScsIGVycm9yICYmICdlcnJvciddLFxuICAgIGljb246IFsnaWNvbicsIGBpY29uJHtjYXBpdGFsaXplKHZhcmlhbnQpfWAsIG9wZW4gJiYgJ2ljb25PcGVuJywgZGlzYWJsZWQgJiYgJ2Rpc2FibGVkJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXROYXRpdmVTZWxlY3RVdGlsaXR5Q2xhc3NlcywgY2xhc3Nlcyk7XG59O1xuZXhwb3J0IGNvbnN0IG5hdGl2ZVNlbGVjdFNlbGVjdFN0eWxlcyA9ICh7XG4gIG93bmVyU3RhdGUsXG4gIHRoZW1lXG59KSA9PiBfZXh0ZW5kcyh7XG4gIE1vekFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgV2Via2l0QXBwZWFyYW5jZTogJ25vbmUnLFxuICAvLyBSZXNldFxuICAvLyBXaGVuIGludGVyYWN0aW5nIHF1aWNrbHksIHRoZSB0ZXh0IGNhbiBlbmQgdXAgc2VsZWN0ZWQuXG4gIC8vIE5hdGl2ZSBzZWxlY3QgY2FuJ3QgYmUgc2VsZWN0ZWQgZWl0aGVyLlxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogMCxcbiAgLy8gUmVzZXRcbiAgY3Vyc29yOiAncG9pbnRlcicsXG4gICcmOmZvY3VzJzogX2V4dGVuZHMoe30sIHRoZW1lLnZhcnMgPyB7XG4gICAgYmFja2dyb3VuZENvbG9yOiBgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZS5jb21tb24ub25CYWNrZ3JvdW5kQ2hhbm5lbH0gLyAwLjA1KWBcbiAgfSA6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMDUpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpJ1xuICB9LCB7XG4gICAgYm9yZGVyUmFkaXVzOiAwIC8vIFJlc2V0IENocm9tZSBzdHlsZVxuICB9KSxcblxuICAvLyBSZW1vdmUgSUUxMSBhcnJvd1xuICAnJjo6LW1zLWV4cGFuZCc6IHtcbiAgICBkaXNwbGF5OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7bmF0aXZlU2VsZWN0Q2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICcmW211bHRpcGxlXSc6IHtcbiAgICBoZWlnaHQ6ICdhdXRvJ1xuICB9LFxuICAnJjpub3QoW211bHRpcGxlXSkgb3B0aW9uLCAmOm5vdChbbXVsdGlwbGVdKSBvcHRncm91cCc6IHtcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQucGFwZXJcbiAgfSxcbiAgLy8gQnVtcCBzcGVjaWZpY2l0eSB0byBhbGxvdyBleHRlbmRpbmcgY3VzdG9tIGlucHV0c1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMjQsXG4gICAgbWluV2lkdGg6IDE2IC8vIFNvIGl0IGRvZXNuJ3QgY29sbGFwc2UuXG4gIH1cbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYge1xuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMzJcbiAgfVxufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgYm9yZGVyUmFkaXVzOiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhcGUuYm9yZGVyUmFkaXVzLFxuICAnJjpmb2N1cyc6IHtcbiAgICBib3JkZXJSYWRpdXM6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFwZS5ib3JkZXJSYWRpdXMgLy8gUmVzZXQgdGhlIHJlc2V0IGZvciBDaHJvbWUgc3R5bGVcbiAgfSxcblxuICAnJiYmJzoge1xuICAgIHBhZGRpbmdSaWdodDogMzJcbiAgfVxufSk7XG5jb25zdCBOYXRpdmVTZWxlY3RTZWxlY3QgPSBzdHlsZWQoJ3NlbGVjdCcsIHtcbiAgbmFtZTogJ011aU5hdGl2ZVNlbGVjdCcsXG4gIHNsb3Q6ICdTZWxlY3QnLFxuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnNlbGVjdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sIG93bmVyU3RhdGUuZXJyb3IgJiYgc3R5bGVzLmVycm9yLCB7XG4gICAgICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLm11bHRpcGxlfWBdOiBzdHlsZXMubXVsdGlwbGVcbiAgICB9XTtcbiAgfVxufSkobmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzKTtcbmV4cG9ydCBjb25zdCBuYXRpdmVTZWxlY3RJY29uU3R5bGVzID0gKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgLy8gV2UgdXNlIGEgcG9zaXRpb24gYWJzb2x1dGUgb3ZlciBhIGZsZXhib3ggaW4gb3JkZXIgdG8gZm9yd2FyZCB0aGUgcG9pbnRlciBldmVudHNcbiAgLy8gdG8gdGhlIGlucHV0IGFuZCB0byBzdXBwb3J0IHdyYXBwaW5nIHRhZ3MuLlxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgcmlnaHQ6IDAsXG4gIHRvcDogJ2NhbGMoNTAlIC0gLjVlbSknLFxuICAvLyBDZW50ZXIgdmVydGljYWxseSwgaGVpZ2h0IGlzIDFlbVxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIC8vIERvbid0IGJsb2NrIHBvaW50ZXIgZXZlbnRzIG9uIHRoZSBzZWxlY3QgdW5kZXIgdGhlIGljb24uXG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uYWN0aXZlLFxuICBbYCYuJHtuYXRpdmVTZWxlY3RDbGFzc2VzLmRpc2FibGVkfWBdOiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZFxuICB9XG59LCBvd25lclN0YXRlLm9wZW4gJiYge1xuICB0cmFuc2Zvcm06ICdyb3RhdGUoMTgwZGVnKSdcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2ZpbGxlZCcgJiYge1xuICByaWdodDogN1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgcmlnaHQ6IDdcbn0pO1xuY29uc3QgTmF0aXZlU2VsZWN0SWNvbiA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpTmF0aXZlU2VsZWN0JyxcbiAgc2xvdDogJ0ljb24nLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmljb24sIG93bmVyU3RhdGUudmFyaWFudCAmJiBzdHlsZXNbYGljb24ke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5vcGVuICYmIHN0eWxlcy5pY29uT3Blbl07XG4gIH1cbn0pKG5hdGl2ZVNlbGVjdEljb25TdHlsZXMpO1xuXG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IE5hdGl2ZVNlbGVjdElucHV0ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gTmF0aXZlU2VsZWN0SW5wdXQocHJvcHMsIHJlZikge1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBkaXNhYmxlZCxcbiAgICAgIGVycm9yLFxuICAgICAgSWNvbkNvbXBvbmVudCxcbiAgICAgIGlucHV0UmVmLFxuICAgICAgdmFyaWFudCA9ICdzdGFuZGFyZCdcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGRpc2FibGVkLFxuICAgIHZhcmlhbnQsXG4gICAgZXJyb3JcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4cyhSZWFjdC5GcmFnbWVudCwge1xuICAgIGNoaWxkcmVuOiBbLyojX19QVVJFX18qL19qc3goTmF0aXZlU2VsZWN0U2VsZWN0LCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMuc2VsZWN0LCBjbGFzc05hbWUpLFxuICAgICAgZGlzYWJsZWQ6IGRpc2FibGVkLFxuICAgICAgcmVmOiBpbnB1dFJlZiB8fCByZWZcbiAgICB9LCBvdGhlcikpLCBwcm9wcy5tdWx0aXBsZSA/IG51bGwgOiAvKiNfX1BVUkVfXyovX2pzeChOYXRpdmVTZWxlY3RJY29uLCB7XG4gICAgICBhczogSWNvbkNvbXBvbmVudCxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICBjbGFzc05hbWU6IGNsYXNzZXMuaWNvblxuICAgIH0pXVxuICB9KTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTmF0aXZlU2VsZWN0SW5wdXQucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogVGhlIG9wdGlvbiBlbGVtZW50cyB0byBwb3B1bGF0ZSB0aGUgc2VsZWN0IHdpdGguXG4gICAqIENhbiBiZSBzb21lIGA8b3B0aW9uPmAgZWxlbWVudHMuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqIFNlZSBbQ1NTIEFQSV0oI2NzcykgYmVsb3cgZm9yIG1vcmUgZGV0YWlscy5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgQ1NTIGNsYXNzIG5hbWUgb2YgdGhlIHNlbGVjdCBlbGVtZW50LlxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2VsZWN0IGlzIGRpc2FibGVkLlxuICAgKi9cbiAgZGlzYWJsZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgYHNlbGVjdCBpbnB1dGAgd2lsbCBpbmRpY2F0ZSBhbiBlcnJvci5cbiAgICovXG4gIGVycm9yOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpY29uIHRoYXQgZGlzcGxheXMgdGhlIGFycm93LlxuICAgKi9cbiAgSWNvbkNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBVc2UgdGhhdCBwcm9wIHRvIHBhc3MgYSByZWYgdG8gdGhlIG5hdGl2ZSBzZWxlY3QgZWxlbWVudC5cbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIGlucHV0UmVmOiByZWZUeXBlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgbXVsdGlwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogTmFtZSBhdHRyaWJ1dGUgb2YgdGhlIGBzZWxlY3RgIG9yIGhpZGRlbiBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiBhIG1lbnUgaXRlbSBpcyBzZWxlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtvYmplY3R9IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIGlucHV0IHZhbHVlLlxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5hbnksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydzdGFuZGFyZCcsICdvdXRsaW5lZCcsICdmaWxsZWQnXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBOYXRpdmVTZWxlY3RJbnB1dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG52YXIgX3NwYW47XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNsYXNzZXNcIiwgXCJjbGFzc05hbWVcIiwgXCJsYWJlbFwiLCBcIm5vdGNoZWRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHN0eWxlZCwgeyByb290U2hvdWxkRm9yd2FyZFByb3AgfSBmcm9tICcuLi9zdHlsZXMvc3R5bGVkJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCBOb3RjaGVkT3V0bGluZVJvb3QgPSBzdHlsZWQoJ2ZpZWxkc2V0Jywge1xuICBzaG91bGRGb3J3YXJkUHJvcDogcm9vdFNob3VsZEZvcndhcmRQcm9wXG59KSh7XG4gIHRleHRBbGlnbjogJ2xlZnQnLFxuICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgYm90dG9tOiAwLFxuICByaWdodDogMCxcbiAgdG9wOiAtNSxcbiAgbGVmdDogMCxcbiAgbWFyZ2luOiAwLFxuICBwYWRkaW5nOiAnMCA4cHgnLFxuICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gIGJvcmRlclJhZGl1czogJ2luaGVyaXQnLFxuICBib3JkZXJTdHlsZTogJ3NvbGlkJyxcbiAgYm9yZGVyV2lkdGg6IDEsXG4gIG92ZXJmbG93OiAnaGlkZGVuJyxcbiAgbWluV2lkdGg6ICcwJSdcbn0pO1xuY29uc3QgTm90Y2hlZE91dGxpbmVMZWdlbmQgPSBzdHlsZWQoJ2xlZ2VuZCcsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHJvb3RTaG91bGRGb3J3YXJkUHJvcFxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgZmxvYXQ6ICd1bnNldCcsXG4gIC8vIEZpeCBjb25mbGljdCB3aXRoIGJvb3RzdHJhcFxuICB3aWR0aDogJ2F1dG8nLFxuICAvLyBGaXggY29uZmxpY3Qgd2l0aCBib290c3RyYXBcbiAgb3ZlcmZsb3c6ICdoaWRkZW4nXG59LCAhb3duZXJTdGF0ZS53aXRoTGFiZWwgJiYge1xuICBwYWRkaW5nOiAwLFxuICBsaW5lSGVpZ2h0OiAnMTFweCcsXG4gIC8vIHN5bmMgd2l0aCBgaGVpZ2h0YCBpbiBgbGVnZW5kYCBzdHlsZXNcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCd3aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogMTUwLFxuICAgIGVhc2luZzogdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VPdXRcbiAgfSlcbn0sIG93bmVyU3RhdGUud2l0aExhYmVsICYmIF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyxcbiAgLy8gRml4IGNvbmZsaWN0IHdpdGggbm9ybWFsaXplLmNzcyBhbmQgc2FuaXRpemUuY3NzXG4gIHBhZGRpbmc6IDAsXG4gIGhlaWdodDogMTEsXG4gIC8vIHN5bmMgd2l0aCBgbGluZUhlaWdodGAgaW4gYGxlZ2VuZGAgc3R5bGVzXG4gIGZvbnRTaXplOiAnMC43NWVtJyxcbiAgdmlzaWJpbGl0eTogJ2hpZGRlbicsXG4gIG1heFdpZHRoOiAwLjAxLFxuICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ21heC13aWR0aCcsIHtcbiAgICBkdXJhdGlvbjogNTAsXG4gICAgZWFzaW5nOiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZU91dFxuICB9KSxcbiAgd2hpdGVTcGFjZTogJ25vd3JhcCcsXG4gICcmID4gc3Bhbic6IHtcbiAgICBwYWRkaW5nTGVmdDogNSxcbiAgICBwYWRkaW5nUmlnaHQ6IDUsXG4gICAgZGlzcGxheTogJ2lubGluZS1ibG9jaycsXG4gICAgb3BhY2l0eTogMCxcbiAgICB2aXNpYmlsaXR5OiAndmlzaWJsZSdcbiAgfVxufSwgb3duZXJTdGF0ZS5ub3RjaGVkICYmIHtcbiAgbWF4V2lkdGg6ICcxMDAlJyxcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdtYXgtd2lkdGgnLCB7XG4gICAgZHVyYXRpb246IDEwMCxcbiAgICBlYXNpbmc6IHRoZW1lLnRyYW5zaXRpb25zLmVhc2luZy5lYXNlT3V0LFxuICAgIGRlbGF5OiA1MFxuICB9KVxufSkpKTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBOb3RjaGVkT3V0bGluZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgICBjbGFzc05hbWUsXG4gICAgICBsYWJlbCxcbiAgICAgIG5vdGNoZWRcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgd2l0aExhYmVsID0gbGFiZWwgIT0gbnVsbCAmJiBsYWJlbCAhPT0gJyc7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBub3RjaGVkLFxuICAgIHdpdGhMYWJlbFxuICB9KTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lUm9vdCwgX2V4dGVuZHMoe1xuICAgIFwiYXJpYS1oaWRkZW5cIjogdHJ1ZSxcbiAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlXG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IC8qI19fUFVSRV9fKi9fanN4KE5vdGNoZWRPdXRsaW5lTGVnZW5kLCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2hpbGRyZW46IHdpdGhMYWJlbCA/IC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgICAgIGNoaWxkcmVuOiBsYWJlbFxuICAgICAgfSkgOiAvLyBub3RyYW5zbGF0ZSBuZWVkZWQgd2hpbGUgR29vZ2xlIFRyYW5zbGF0ZSB3aWxsIG5vdCBmaXggemVyby13aWR0aCBzcGFjZSBpc3N1ZVxuICAgICAgX3NwYW4gfHwgKF9zcGFuID0gLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBcIm5vdHJhbnNsYXRlXCIsXG4gICAgICAgIGNoaWxkcmVuOiBcIlxcdTIwMEJcIlxuICAgICAgfSkpXG4gICAgfSlcbiAgfSkpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gTm90Y2hlZE91dGxpbmUucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogVGhlIGNvbnRlbnQgb2YgdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICogU2VlIFtDU1MgQVBJXSgjY3NzKSBiZWxvdyBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBsYWJlbC5cbiAgICovXG4gIGxhYmVsOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIG91dGxpbmUgaXMgbm90Y2hlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbGFiZWwuXG4gICAqL1xuICBub3RjaGVkOiBQcm9wVHlwZXMuYm9vbC5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgeyB1bnN0YWJsZV9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGFzIGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgfSBmcm9tICdAbXVpL3V0aWxzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICcuLi9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgeyBpbnB1dEJhc2VDbGFzc2VzIH0gZnJvbSAnLi4vSW5wdXRCYXNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlPdXRsaW5lZElucHV0Jywgc2xvdCk7XG59XG5jb25zdCBvdXRsaW5lZElucHV0Q2xhc3NlcyA9IF9leHRlbmRzKHt9LCBpbnB1dEJhc2VDbGFzc2VzLCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlPdXRsaW5lZElucHV0JywgWydyb290JywgJ25vdGNoZWRPdXRsaW5lJywgJ2lucHV0J10pKTtcbmV4cG9ydCBkZWZhdWx0IG91dGxpbmVkSW5wdXRDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNvbXBvbmVudHNcIiwgXCJmdWxsV2lkdGhcIiwgXCJpbnB1dENvbXBvbmVudFwiLCBcImxhYmVsXCIsIFwibXVsdGlsaW5lXCIsIFwibm90Y2hlZFwiLCBcInNsb3RzXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyByZWZUeXBlIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgeyB1bnN0YWJsZV9jb21wb3NlQ2xhc3NlcyBhcyBjb21wb3NlQ2xhc3NlcyB9IGZyb20gJ0BtdWkvYmFzZS9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgTm90Y2hlZE91dGxpbmUgZnJvbSAnLi9Ob3RjaGVkT3V0bGluZSc7XG5pbXBvcnQgdXNlRm9ybUNvbnRyb2wgZnJvbSAnLi4vRm9ybUNvbnRyb2wvdXNlRm9ybUNvbnRyb2wnO1xuaW1wb3J0IGZvcm1Db250cm9sU3RhdGUgZnJvbSAnLi4vRm9ybUNvbnRyb2wvZm9ybUNvbnRyb2xTdGF0ZSc7XG5pbXBvcnQgc3R5bGVkLCB7IHJvb3RTaG91bGRGb3J3YXJkUHJvcCB9IGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IG91dGxpbmVkSW5wdXRDbGFzc2VzLCB7IGdldE91dGxpbmVkSW5wdXRVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL291dGxpbmVkSW5wdXRDbGFzc2VzJztcbmltcG9ydCBJbnB1dEJhc2UsIHsgcm9vdE92ZXJyaWRlc1Jlc29sdmVyIGFzIGlucHV0QmFzZVJvb3RPdmVycmlkZXNSZXNvbHZlciwgaW5wdXRPdmVycmlkZXNSZXNvbHZlciBhcyBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyLCBJbnB1dEJhc2VSb290LCBJbnB1dEJhc2VDb21wb25lbnQgYXMgSW5wdXRCYXNlSW5wdXQgfSBmcm9tICcuLi9JbnB1dEJhc2UvSW5wdXRCYXNlJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY2xhc3Nlc1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290J10sXG4gICAgbm90Y2hlZE91dGxpbmU6IFsnbm90Y2hlZE91dGxpbmUnXSxcbiAgICBpbnB1dDogWydpbnB1dCddXG4gIH07XG4gIGNvbnN0IGNvbXBvc2VkQ2xhc3NlcyA9IGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRPdXRsaW5lZElucHV0VXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IE91dGxpbmVkSW5wdXRSb290ID0gc3R5bGVkKElucHV0QmFzZVJvb3QsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aU91dGxpbmVkSW5wdXQnLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VSb290T3ZlcnJpZGVzUmVzb2x2ZXJcbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIGNvbnN0IGJvcmRlckNvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gJ3JnYmEoMCwgMCwgMCwgMC4yMyknIDogJ3JnYmEoMjU1LCAyNTUsIDI1NSwgMC4yMyknO1xuICByZXR1cm4gX2V4dGVuZHMoe1xuICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICBbYCY6aG92ZXIgLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnlcbiAgICB9LFxuICAgIC8vIFJlc2V0IG9uIHRvdWNoIGRldmljZXMsIGl0IGRvZXNuJ3QgYWRkIHNwZWNpZmljaXR5XG4gICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgW2AmOmhvdmVyIC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICAgIGJvcmRlckNvbG9yOiB0aGVtZS52YXJzID8gYHJnYmEoJHt0aGVtZS52YXJzLnBhbGV0dGUuY29tbW9uLm9uQmFja2dyb3VuZENoYW5uZWx9IC8gMC4yMylgIDogYm9yZGVyQ29sb3JcbiAgICAgIH1cbiAgICB9LFxuICAgIFtgJi4ke291dGxpbmVkSW5wdXRDbGFzc2VzLmZvY3VzZWR9IC4ke291dGxpbmVkSW5wdXRDbGFzc2VzLm5vdGNoZWRPdXRsaW5lfWBdOiB7XG4gICAgICBib3JkZXJDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGVbb3duZXJTdGF0ZS5jb2xvcl0ubWFpbixcbiAgICAgIGJvcmRlcldpZHRoOiAyXG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5lcnJvcn0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5lcnJvci5tYWluXG4gICAgfSxcbiAgICBbYCYuJHtvdXRsaW5lZElucHV0Q2xhc3Nlcy5kaXNhYmxlZH0gLiR7b3V0bGluZWRJbnB1dENsYXNzZXMubm90Y2hlZE91dGxpbmV9YF06IHtcbiAgICAgIGJvcmRlckNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5hY3Rpb24uZGlzYWJsZWRcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiAxNFxuICB9LCBvd25lclN0YXRlLmVuZEFkb3JubWVudCAmJiB7XG4gICAgcGFkZGluZ1JpZ2h0OiAxNFxuICB9LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiBfZXh0ZW5kcyh7XG4gICAgcGFkZGluZzogJzE2LjVweCAxNHB4J1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAgIHBhZGRpbmc6ICc4LjVweCAxNHB4J1xuICB9KSk7XG59KTtcbmNvbnN0IE5vdGNoZWRPdXRsaW5lUm9vdCA9IHN0eWxlZChOb3RjaGVkT3V0bGluZSwge1xuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdOb3RjaGVkT3V0bGluZScsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzLm5vdGNoZWRPdXRsaW5lXG59KSgoe1xuICB0aGVtZVxufSkgPT4ge1xuICBjb25zdCBib3JkZXJDb2xvciA9IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/ICdyZ2JhKDAsIDAsIDAsIDAuMjMpJyA6ICdyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMjMpJztcbiAgcmV0dXJuIHtcbiAgICBib3JkZXJDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLmNvbW1vbi5vbkJhY2tncm91bmRDaGFubmVsfSAvIDAuMjMpYCA6IGJvcmRlckNvbG9yXG4gIH07XG59KTtcbmNvbnN0IE91dGxpbmVkSW5wdXRJbnB1dCA9IHN0eWxlZChJbnB1dEJhc2VJbnB1dCwge1xuICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCcsXG4gIHNsb3Q6ICdJbnB1dCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiBpbnB1dEJhc2VJbnB1dE92ZXJyaWRlc1Jlc29sdmVyXG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4gX2V4dGVuZHMoe1xuICBwYWRkaW5nOiAnMTYuNXB4IDE0cHgnXG59LCAhdGhlbWUudmFycyAmJiB7XG4gICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgV2Via2l0Qm94U2hhZG93OiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdsaWdodCcgPyBudWxsIDogJzAgMCAwIDEwMHB4ICMyNjY3OTggaW5zZXQnLFxuICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6IHRoZW1lLnBhbGV0dGUubW9kZSA9PT0gJ2xpZ2h0JyA/IG51bGwgOiAnI2ZmZicsXG4gICAgY2FyZXRDb2xvcjogdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gbnVsbCA6ICcjZmZmJyxcbiAgICBib3JkZXJSYWRpdXM6ICdpbmhlcml0J1xuICB9XG59LCB0aGVtZS52YXJzICYmIHtcbiAgJyY6LXdlYmtpdC1hdXRvZmlsbCc6IHtcbiAgICBib3JkZXJSYWRpdXM6ICdpbmhlcml0J1xuICB9LFxuICBbdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvcignZGFyaycpXToge1xuICAgICcmOi13ZWJraXQtYXV0b2ZpbGwnOiB7XG4gICAgICBXZWJraXRCb3hTaGFkb3c6ICcwIDAgMCAxMDBweCAjMjY2Nzk4IGluc2V0JyxcbiAgICAgIFdlYmtpdFRleHRGaWxsQ29sb3I6ICcjZmZmJyxcbiAgICAgIGNhcmV0Q29sb3I6ICcjZmZmJ1xuICAgIH1cbiAgfVxufSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIHtcbiAgcGFkZGluZzogJzguNXB4IDE0cHgnXG59LCBvd25lclN0YXRlLm11bHRpbGluZSAmJiB7XG4gIHBhZGRpbmc6IDBcbn0sIG93bmVyU3RhdGUuc3RhcnRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nTGVmdDogMFxufSwgb3duZXJTdGF0ZS5lbmRBZG9ybm1lbnQgJiYge1xuICBwYWRkaW5nUmlnaHQ6IDBcbn0pKTtcbmNvbnN0IE91dGxpbmVkSW5wdXQgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBPdXRsaW5lZElucHV0KGluUHJvcHMsIHJlZikge1xuICB2YXIgX3JlZiwgX3Nsb3RzJHJvb3QsIF9yZWYyLCBfc2xvdHMkaW5wdXQsIF9SZWFjdCRGcmFnbWVudDtcbiAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpT3V0bGluZWRJbnB1dCdcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNvbXBvbmVudHMgPSB7fSxcbiAgICAgIGZ1bGxXaWR0aCA9IGZhbHNlLFxuICAgICAgaW5wdXRDb21wb25lbnQgPSAnaW5wdXQnLFxuICAgICAgbGFiZWwsXG4gICAgICBtdWx0aWxpbmUgPSBmYWxzZSxcbiAgICAgIG5vdGNoZWQsXG4gICAgICBzbG90cyA9IHt9LFxuICAgICAgdHlwZSA9ICd0ZXh0J1xuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMocHJvcHMpO1xuICBjb25zdCBtdWlGb3JtQ29udHJvbCA9IHVzZUZvcm1Db250cm9sKCk7XG4gIGNvbnN0IGZjcyA9IGZvcm1Db250cm9sU3RhdGUoe1xuICAgIHByb3BzLFxuICAgIG11aUZvcm1Db250cm9sLFxuICAgIHN0YXRlczogWydjb2xvcicsICdkaXNhYmxlZCcsICdlcnJvcicsICdmb2N1c2VkJywgJ2hpZGRlbkxhYmVsJywgJ3NpemUnLCAncmVxdWlyZWQnXVxuICB9KTtcbiAgY29uc3Qgb3duZXJTdGF0ZSA9IF9leHRlbmRzKHt9LCBwcm9wcywge1xuICAgIGNvbG9yOiBmY3MuY29sb3IgfHwgJ3ByaW1hcnknLFxuICAgIGRpc2FibGVkOiBmY3MuZGlzYWJsZWQsXG4gICAgZXJyb3I6IGZjcy5lcnJvcixcbiAgICBmb2N1c2VkOiBmY3MuZm9jdXNlZCxcbiAgICBmb3JtQ29udHJvbDogbXVpRm9ybUNvbnRyb2wsXG4gICAgZnVsbFdpZHRoLFxuICAgIGhpZGRlbkxhYmVsOiBmY3MuaGlkZGVuTGFiZWwsXG4gICAgbXVsdGlsaW5lLFxuICAgIHNpemU6IGZjcy5zaXplLFxuICAgIHR5cGVcbiAgfSk7XG4gIGNvbnN0IFJvb3RTbG90ID0gKF9yZWYgPSAoX3Nsb3RzJHJvb3QgPSBzbG90cy5yb290KSAhPSBudWxsID8gX3Nsb3RzJHJvb3QgOiBjb21wb25lbnRzLlJvb3QpICE9IG51bGwgPyBfcmVmIDogT3V0bGluZWRJbnB1dFJvb3Q7XG4gIGNvbnN0IElucHV0U2xvdCA9IChfcmVmMiA9IChfc2xvdHMkaW5wdXQgPSBzbG90cy5pbnB1dCkgIT0gbnVsbCA/IF9zbG90cyRpbnB1dCA6IGNvbXBvbmVudHMuSW5wdXQpICE9IG51bGwgPyBfcmVmMiA6IE91dGxpbmVkSW5wdXRJbnB1dDtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KElucHV0QmFzZSwgX2V4dGVuZHMoe1xuICAgIHNsb3RzOiB7XG4gICAgICByb290OiBSb290U2xvdCxcbiAgICAgIGlucHV0OiBJbnB1dFNsb3RcbiAgICB9LFxuICAgIHJlbmRlclN1ZmZpeDogc3RhdGUgPT4gLyojX19QVVJFX18qL19qc3goTm90Y2hlZE91dGxpbmVSb290LCB7XG4gICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLm5vdGNoZWRPdXRsaW5lLFxuICAgICAgbGFiZWw6IGxhYmVsICE9IG51bGwgJiYgbGFiZWwgIT09ICcnICYmIGZjcy5yZXF1aXJlZCA/IF9SZWFjdCRGcmFnbWVudCB8fCAoX1JlYWN0JEZyYWdtZW50ID0gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgICAgIGNoaWxkcmVuOiBbbGFiZWwsIFwiXFx1MjAwOVwiLCAnKiddXG4gICAgICB9KSkgOiBsYWJlbCxcbiAgICAgIG5vdGNoZWQ6IHR5cGVvZiBub3RjaGVkICE9PSAndW5kZWZpbmVkJyA/IG5vdGNoZWQgOiBCb29sZWFuKHN0YXRlLnN0YXJ0QWRvcm5tZW50IHx8IHN0YXRlLmZpbGxlZCB8fCBzdGF0ZS5mb2N1c2VkKVxuICAgIH0pLFxuICAgIGZ1bGxXaWR0aDogZnVsbFdpZHRoLFxuICAgIGlucHV0Q29tcG9uZW50OiBpbnB1dENvbXBvbmVudCxcbiAgICBtdWx0aWxpbmU6IG11bHRpbGluZSxcbiAgICByZWY6IHJlZixcbiAgICB0eXBlOiB0eXBlXG4gIH0sIG90aGVyLCB7XG4gICAgY2xhc3NlczogX2V4dGVuZHMoe30sIGNsYXNzZXMsIHtcbiAgICAgIG5vdGNoZWRPdXRsaW5lOiBudWxsXG4gICAgfSlcbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBPdXRsaW5lZElucHV0LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoaXMgcHJvcCBoZWxwcyB1c2VycyB0byBmaWxsIGZvcm1zIGZhc3RlciwgZXNwZWNpYWxseSBvbiBtb2JpbGUgZGV2aWNlcy5cbiAgICogVGhlIG5hbWUgY2FuIGJlIGNvbmZ1c2luZywgYXMgaXQncyBtb3JlIGxpa2UgYW4gYXV0b2ZpbGwuXG4gICAqIFlvdSBjYW4gbGVhcm4gbW9yZSBhYm91dCBpdCBbZm9sbG93aW5nIHRoZSBzcGVjaWZpY2F0aW9uXShodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNhdXRvZmlsbCkuXG4gICAqL1xuICBhdXRvQ29tcGxldGU6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgZm9jdXNlZCBkdXJpbmcgdGhlIGZpcnN0IG1vdW50LlxuICAgKi9cbiAgYXV0b0ZvY3VzOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE92ZXJyaWRlIG9yIGV4dGVuZCB0aGUgc3R5bGVzIGFwcGxpZWQgdG8gdGhlIGNvbXBvbmVudC5cbiAgICovXG4gIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgY29sb3Igb2YgdGhlIGNvbXBvbmVudC5cbiAgICogSXQgc3VwcG9ydHMgYm90aCBkZWZhdWx0IGFuZCBjdXN0b20gdGhlbWUgY29sb3JzLCB3aGljaCBjYW4gYmUgYWRkZWQgYXMgc2hvd24gaW4gdGhlXG4gICAqIFtwYWxldHRlIGN1c3RvbWl6YXRpb24gZ3VpZGVdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9jdXN0b21pemF0aW9uL3BhbGV0dGUvI2N1c3RvbS1jb2xvcnMpLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAncHJpbWFyeSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbG9yOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3ByaW1hcnknLCAnc2Vjb25kYXJ5J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50cyB1c2VkIGZvciBlYWNoIHNsb3QgaW5zaWRlLlxuICAgKlxuICAgKiBUaGlzIHByb3AgaXMgYW4gYWxpYXMgZm9yIHRoZSBgc2xvdHNgIHByb3AuXG4gICAqIEl0J3MgcmVjb21tZW5kZWQgdG8gdXNlIHRoZSBgc2xvdHNgIHByb3AgaW5zdGVhZC5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGNvbXBvbmVudHM6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgSW5wdXQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgICBSb290OiBQcm9wVHlwZXMuZWxlbWVudFR5cGVcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCB2YWx1ZS4gVXNlIHdoZW4gdGhlIGNvbXBvbmVudCBpcyBub3QgY29udHJvbGxlZC5cbiAgICovXG4gIGRlZmF1bHRWYWx1ZTogUHJvcFR5cGVzLmFueSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCBpcyBkaXNhYmxlZC5cbiAgICogVGhlIHByb3AgZGVmYXVsdHMgdG8gdGhlIHZhbHVlIChgZmFsc2VgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIGRpc2FibGVkOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIEVuZCBgSW5wdXRBZG9ybm1lbnRgIGZvciB0aGlzIGNvbXBvbmVudC5cbiAgICovXG4gIGVuZEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgaW5kaWNhdGUgYW4gZXJyb3IuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICBlcnJvcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIHdpbGwgdGFrZSB1cCB0aGUgZnVsbCB3aWR0aCBvZiBpdHMgY29udGFpbmVyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZnVsbFdpZHRoOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgYGlucHV0YCBlbGVtZW50LlxuICAgKi9cbiAgaWQ6IFByb3BUeXBlcy5zdHJpbmcsXG4gIC8qKlxuICAgKiBUaGUgY29tcG9uZW50IHVzZWQgZm9yIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqIEVpdGhlciBhIHN0cmluZyB0byB1c2UgYSBIVE1MIGVsZW1lbnQgb3IgYSBjb21wb25lbnQuXG4gICAqIEBkZWZhdWx0ICdpbnB1dCdcbiAgICovXG4gIGlucHV0Q29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBbQXR0cmlidXRlc10oaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSFRNTC9FbGVtZW50L2lucHV0I0F0dHJpYnV0ZXMpIGFwcGxpZWQgdG8gdGhlIGBpbnB1dGAgZWxlbWVudC5cbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIGlucHV0UHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBQYXNzIGEgcmVmIHRvIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBpbnB1dFJlZjogcmVmVHlwZSxcbiAgLyoqXG4gICAqIFRoZSBsYWJlbCBvZiB0aGUgYGlucHV0YC4gSXQgaXMgb25seSB1c2VkIGZvciBsYXlvdXQuIFRoZSBhY3R1YWwgbGFiZWxsaW5nXG4gICAqIGlzIGhhbmRsZWQgYnkgYElucHV0TGFiZWxgLlxuICAgKi9cbiAgbGFiZWw6IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogSWYgYGRlbnNlYCwgd2lsbCBhZGp1c3QgdmVydGljYWwgc3BhY2luZy4gVGhpcyBpcyBub3JtYWxseSBvYnRhaW5lZCB2aWEgY29udGV4dCBmcm9tXG4gICAqIEZvcm1Db250cm9sLlxuICAgKiBUaGUgcHJvcCBkZWZhdWx0cyB0byB0aGUgdmFsdWUgKGAnbm9uZSdgKSBpbmhlcml0ZWQgZnJvbSB0aGUgcGFyZW50IEZvcm1Db250cm9sIGNvbXBvbmVudC5cbiAgICovXG4gIG1hcmdpbjogUHJvcFR5cGVzLm9uZU9mKFsnZGVuc2UnLCAnbm9uZSddKSxcbiAgLyoqXG4gICAqIE1heGltdW0gbnVtYmVyIG9mIHJvd3MgdG8gZGlzcGxheSB3aGVuIG11bHRpbGluZSBvcHRpb24gaXMgc2V0IHRvIHRydWUuXG4gICAqL1xuICBtYXhSb3dzOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBNaW5pbXVtIG51bWJlciBvZiByb3dzIHRvIGRpc3BsYXkgd2hlbiBtdWx0aWxpbmUgb3B0aW9uIGlzIHNldCB0byB0cnVlLlxuICAgKi9cbiAgbWluUm93czogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLm51bWJlciwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCBhIFtUZXh0YXJlYUF1dG9zaXplXSgvbWF0ZXJpYWwtdWkvcmVhY3QtdGV4dGFyZWEtYXV0b3NpemUvKSBlbGVtZW50IGlzIHJlbmRlcmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgbXVsdGlsaW5lOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIE5hbWUgYXR0cmlidXRlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuXG4gICAqL1xuICBuYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgb3V0bGluZSBpcyBub3RjaGVkIHRvIGFjY29tbW9kYXRlIHRoZSBsYWJlbC5cbiAgICovXG4gIG5vdGNoZWQ6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQ2FsbGJhY2sgZmlyZWQgd2hlbiB0aGUgdmFsdWUgaXMgY2hhbmdlZC5cbiAgICpcbiAgICogQHBhcmFtIHtSZWFjdC5DaGFuZ2VFdmVudDxIVE1MVGV4dEFyZWFFbGVtZW50IHwgSFRNTElucHV0RWxlbWVudD59IGV2ZW50IFRoZSBldmVudCBzb3VyY2Ugb2YgdGhlIGNhbGxiYWNrLlxuICAgKiBZb3UgY2FuIHB1bGwgb3V0IHRoZSBuZXcgdmFsdWUgYnkgYWNjZXNzaW5nIGBldmVudC50YXJnZXQudmFsdWVgIChzdHJpbmcpLlxuICAgKi9cbiAgb25DaGFuZ2U6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogVGhlIHNob3J0IGhpbnQgZGlzcGxheWVkIGluIHRoZSBgaW5wdXRgIGJlZm9yZSB0aGUgdXNlciBlbnRlcnMgYSB2YWx1ZS5cbiAgICovXG4gIHBsYWNlaG9sZGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogSXQgcHJldmVudHMgdGhlIHVzZXIgZnJvbSBjaGFuZ2luZyB0aGUgdmFsdWUgb2YgdGhlIGZpZWxkXG4gICAqIChub3QgZnJvbSBpbnRlcmFjdGluZyB3aXRoIHRoZSBmaWVsZCkuXG4gICAqL1xuICByZWFkT25seTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBgaW5wdXRgIGVsZW1lbnQgaXMgcmVxdWlyZWQuXG4gICAqIFRoZSBwcm9wIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSAoYGZhbHNlYCkgaW5oZXJpdGVkIGZyb20gdGhlIHBhcmVudCBGb3JtQ29udHJvbCBjb21wb25lbnQuXG4gICAqL1xuICByZXF1aXJlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygcm93cyB0byBkaXNwbGF5IHdoZW4gbXVsdGlsaW5lIG9wdGlvbiBpcyBzZXQgdG8gdHJ1ZS5cbiAgICovXG4gIHJvd3M6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5udW1iZXIsIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnRzIHVzZWQgZm9yIGVhY2ggc2xvdCBpbnNpZGUuXG4gICAqXG4gICAqIFRoaXMgcHJvcCBpcyBhbiBhbGlhcyBmb3IgdGhlIGBjb21wb25lbnRzYCBwcm9wLCB3aGljaCB3aWxsIGJlIGRlcHJlY2F0ZWQgaW4gdGhlIGZ1dHVyZS5cbiAgICpcbiAgICogQGRlZmF1bHQge31cbiAgICovXG4gIHNsb3RzOiBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGlucHV0OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gICAgcm9vdDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlXG4gIH0pLFxuICAvKipcbiAgICogU3RhcnQgYElucHV0QWRvcm5tZW50YCBmb3IgdGhpcyBjb21wb25lbnQuXG4gICAqL1xuICBzdGFydEFkb3JubWVudDogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUeXBlIG9mIHRoZSBgaW5wdXRgIGVsZW1lbnQuIEl0IHNob3VsZCBiZSBbYSB2YWxpZCBIVE1MNSBpbnB1dCB0eXBlXShodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVE1ML0VsZW1lbnQvaW5wdXQjRm9ybV8lM0NpbnB1dCUzRV90eXBlcykuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdHlwZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSB2YWx1ZSBvZiB0aGUgYGlucHV0YCBlbGVtZW50LCByZXF1aXJlZCBmb3IgYSBjb250cm9sbGVkIGNvbXBvbmVudC5cbiAgICovXG4gIHZhbHVlOiBQcm9wVHlwZXMuYW55XG59IDogdm9pZCAwO1xuT3V0bGluZWRJbnB1dC5tdWlOYW1lID0gJ0lucHV0JztcbmV4cG9ydCBkZWZhdWx0IE91dGxpbmVkSW5wdXQ7IiwiaW1wb3J0IHsgdW5zdGFibGVfZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBhcyBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnLi4vZ2VuZXJhdGVVdGlsaXR5Q2xhc3MnO1xuZXhwb3J0IGZ1bmN0aW9uIGdldFBhcGVyVXRpbGl0eUNsYXNzKHNsb3QpIHtcbiAgcmV0dXJuIGdlbmVyYXRlVXRpbGl0eUNsYXNzKCdNdWlQYXBlcicsIHNsb3QpO1xufVxuY29uc3QgcGFwZXJDbGFzc2VzID0gZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcygnTXVpUGFwZXInLCBbJ3Jvb3QnLCAncm91bmRlZCcsICdvdXRsaW5lZCcsICdlbGV2YXRpb24nLCAnZWxldmF0aW9uMCcsICdlbGV2YXRpb24xJywgJ2VsZXZhdGlvbjInLCAnZWxldmF0aW9uMycsICdlbGV2YXRpb240JywgJ2VsZXZhdGlvbjUnLCAnZWxldmF0aW9uNicsICdlbGV2YXRpb243JywgJ2VsZXZhdGlvbjgnLCAnZWxldmF0aW9uOScsICdlbGV2YXRpb24xMCcsICdlbGV2YXRpb24xMScsICdlbGV2YXRpb24xMicsICdlbGV2YXRpb24xMycsICdlbGV2YXRpb24xNCcsICdlbGV2YXRpb24xNScsICdlbGV2YXRpb24xNicsICdlbGV2YXRpb24xNycsICdlbGV2YXRpb24xOCcsICdlbGV2YXRpb24xOScsICdlbGV2YXRpb24yMCcsICdlbGV2YXRpb24yMScsICdlbGV2YXRpb24yMicsICdlbGV2YXRpb24yMycsICdlbGV2YXRpb24yNCddKTtcbmV4cG9ydCBkZWZhdWx0IHBhcGVyQ2xhc3NlczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIiwgXCJlbGV2YXRpb25cIiwgXCJzcXVhcmVcIiwgXCJ2YXJpYW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsgY2hhaW5Qcm9wVHlwZXMsIGludGVnZXJQcm9wVHlwZSB9IGZyb20gJ0BtdWkvdXRpbHMnO1xuaW1wb3J0IHsgdW5zdGFibGVfY29tcG9zZUNsYXNzZXMgYXMgY29tcG9zZUNsYXNzZXMgfSBmcm9tICdAbXVpL2Jhc2UvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IGdldE92ZXJsYXlBbHBoYSBmcm9tICcuLi9zdHlsZXMvZ2V0T3ZlcmxheUFscGhhJztcbmltcG9ydCB1c2VUaGVtZVByb3BzIGZyb20gJy4uL3N0eWxlcy91c2VUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi9zdHlsZXMvdXNlVGhlbWUnO1xuaW1wb3J0IHsgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MgfSBmcm9tICcuL3BhcGVyQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSBvd25lclN0YXRlID0+IHtcbiAgY29uc3Qge1xuICAgIHNxdWFyZSxcbiAgICBlbGV2YXRpb24sXG4gICAgdmFyaWFudCxcbiAgICBjbGFzc2VzXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCB2YXJpYW50LCAhc3F1YXJlICYmICdyb3VuZGVkJywgdmFyaWFudCA9PT0gJ2VsZXZhdGlvbicgJiYgYGVsZXZhdGlvbiR7ZWxldmF0aW9ufWBdXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0UGFwZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmNvbnN0IFBhcGVyUm9vdCA9IHN0eWxlZCgnZGl2Jywge1xuICBuYW1lOiAnTXVpUGFwZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW293bmVyU3RhdGUudmFyaWFudF0sICFvd25lclN0YXRlLnNxdWFyZSAmJiBzdHlsZXMucm91bmRlZCwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZWxldmF0aW9uJyAmJiBzdHlsZXNbYGVsZXZhdGlvbiR7b3duZXJTdGF0ZS5lbGV2YXRpb259YF1dO1xuICB9XG59KSgoe1xuICB0aGVtZSxcbiAgb3duZXJTdGF0ZVxufSkgPT4ge1xuICB2YXIgX3RoZW1lJHZhcnMkb3ZlcmxheXM7XG4gIHJldHVybiBfZXh0ZW5kcyh7XG4gICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLnBhcGVyLFxuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS50ZXh0LnByaW1hcnksXG4gICAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdib3gtc2hhZG93JylcbiAgfSwgIW93bmVyU3RhdGUuc3F1YXJlICYmIHtcbiAgICBib3JkZXJSYWRpdXM6IHRoZW1lLnNoYXBlLmJvcmRlclJhZGl1c1xuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmRpdmlkZXJ9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdlbGV2YXRpb24nICYmIF9leHRlbmRzKHtcbiAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzW293bmVyU3RhdGUuZWxldmF0aW9uXVxuICB9LCAhdGhlbWUudmFycyAmJiB0aGVtZS5wYWxldHRlLm1vZGUgPT09ICdkYXJrJyAmJiB7XG4gICAgYmFja2dyb3VuZEltYWdlOiBgbGluZWFyLWdyYWRpZW50KCR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0sICR7YWxwaGEoJyNmZmYnLCBnZXRPdmVybGF5QWxwaGEob3duZXJTdGF0ZS5lbGV2YXRpb24pKX0pYFxuICB9LCB0aGVtZS52YXJzICYmIHtcbiAgICBiYWNrZ3JvdW5kSW1hZ2U6IChfdGhlbWUkdmFycyRvdmVybGF5cyA9IHRoZW1lLnZhcnMub3ZlcmxheXMpID09IG51bGwgPyB2b2lkIDAgOiBfdGhlbWUkdmFycyRvdmVybGF5c1tvd25lclN0YXRlLmVsZXZhdGlvbl1cbiAgfSkpO1xufSk7XG5jb25zdCBQYXBlciA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFBhcGVyKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZVRoZW1lUHJvcHMoe1xuICAgIHByb3BzOiBpblByb3BzLFxuICAgIG5hbWU6ICdNdWlQYXBlcidcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbXBvbmVudCA9ICdkaXYnLFxuICAgICAgZWxldmF0aW9uID0gMSxcbiAgICAgIHNxdWFyZSA9IGZhbHNlLFxuICAgICAgdmFyaWFudCA9ICdlbGV2YXRpb24nXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb21wb25lbnQsXG4gICAgZWxldmF0aW9uLFxuICAgIHNxdWFyZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL3J1bGVzLW9mLWhvb2tzXG4gICAgY29uc3QgdGhlbWUgPSB1c2VUaGVtZSgpO1xuICAgIGlmICh0aGVtZS5zaGFkb3dzW2VsZXZhdGlvbl0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIGVsZXZhdGlvbiBwcm92aWRlZCA8UGFwZXIgZWxldmF0aW9uPXske2VsZXZhdGlvbn19PiBpcyBub3QgYXZhaWxhYmxlIGluIHRoZSB0aGVtZS5gLCBgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IFxcYHRoZW1lLnNoYWRvd3NbJHtlbGV2YXRpb259XVxcYCBpcyBkZWZpbmVkLmBdLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFBhcGVyUm9vdCwgX2V4dGVuZHMoe1xuICAgIGFzOiBjb21wb25lbnQsXG4gICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHJlZjogcmVmXG4gIH0sIG90aGVyKSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFBhcGVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBXYXJuaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gIC8vIHwgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zIHxcbiAgLy8gfCAgICAgVG8gdXBkYXRlIHRoZW0gZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gXCJ5YXJuIHByb3B0eXBlc1wiICAgICB8XG4gIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50IG9mIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBTaGFkb3cgZGVwdGgsIGNvcnJlc3BvbmRzIHRvIGBkcGAgaW4gdGhlIHNwZWMuXG4gICAqIEl0IGFjY2VwdHMgdmFsdWVzIGJldHdlZW4gMCBhbmQgMjQgaW5jbHVzaXZlLlxuICAgKiBAZGVmYXVsdCAxXG4gICAqL1xuICBlbGV2YXRpb246IGNoYWluUHJvcFR5cGVzKGludGVnZXJQcm9wVHlwZSwgcHJvcHMgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIGVsZXZhdGlvbixcbiAgICAgIHZhcmlhbnRcbiAgICB9ID0gcHJvcHM7XG4gICAgaWYgKGVsZXZhdGlvbiA+IDAgJiYgdmFyaWFudCA9PT0gJ291dGxpbmVkJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcihgTVVJOiBDb21iaW5pbmcgXFxgZWxldmF0aW9uPXske2VsZXZhdGlvbn19XFxgIHdpdGggXFxgdmFyaWFudD1cIiR7dmFyaWFudH1cIlxcYCBoYXMgbm8gZWZmZWN0LiBFaXRoZXIgdXNlIFxcYGVsZXZhdGlvbj17MH1cXGAgb3IgdXNlIGEgZGlmZmVyZW50IFxcYHZhcmlhbnRcXGAuYCk7XG4gICAgfVxuICAgIHJldHVybiBudWxsO1xuICB9KSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgcm91bmRlZCBjb3JuZXJzIGFyZSBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHNxdWFyZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICdlbGV2YXRpb24nXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2VsZXZhdGlvbicsICdvdXRsaW5lZCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUGFwZXI7Il0sIm5hbWVzIjpbImdldEZpbGxlZElucHV0VXRpbGl0eUNsYXNzIiwic2xvdCIsImdlbmVyYXRlVXRpbGl0eUNsYXNzIiwiaW5wdXRCYXNlQ2xhc3NlcyIsImdlbmVyYXRlVXRpbGl0eUNsYXNzZXMiLCJfZXhjbHVkZWQiLCJGaWxsZWRJbnB1dFJvb3QiLCJzdHlsZWQiLCJJbnB1dEJhc2UiLCJzaG91bGRGb3J3YXJkUHJvcCIsInByb3AiLCJuYW1lIiwib3ZlcnJpZGVzUmVzb2x2ZXIiLCJwcm9wcyIsInN0eWxlcyIsIm93bmVyU3RhdGUiLCJkaXNhYmxlVW5kZXJsaW5lIiwidW5kZXJsaW5lIiwidGhlbWUiLCJfcGFsZXR0ZSIsImxpZ2h0IiwicGFsZXR0ZSIsIm1vZGUiLCJib3R0b21MaW5lQ29sb3IiLCJiYWNrZ3JvdW5kQ29sb3IiLCJob3ZlckJhY2tncm91bmQiLCJkaXNhYmxlZEJhY2tncm91bmQiLCJwb3NpdGlvbiIsInZhcnMiLCJGaWxsZWRJbnB1dCIsImJnIiwiYm9yZGVyVG9wTGVmdFJhZGl1cyIsInNoYXBlIiwiYm9yZGVyUmFkaXVzIiwiYm9yZGVyVG9wUmlnaHRSYWRpdXMiLCJ0cmFuc2l0aW9uIiwidHJhbnNpdGlvbnMiLCJjcmVhdGUiLCJkdXJhdGlvbiIsInNob3J0ZXIiLCJlYXNpbmciLCJlYXNlT3V0IiwiaG92ZXJCZyIsImZvY3VzZWQiLCJkaXNhYmxlZCIsImRpc2FibGVkQmciLCJib3JkZXJCb3R0b20iLCJjb2xvciIsIm1haW4iLCJsZWZ0IiwiYm90dG9tIiwiY29udGVudCIsInJpZ2h0IiwidHJhbnNmb3JtIiwicG9pbnRlckV2ZW50cyIsImVycm9yIiwiYm9yZGVyQm90dG9tQ29sb3IiLCJjb21tb24iLCJvbkJhY2tncm91bmRDaGFubmVsIiwib3BhY2l0eSIsImlucHV0VW5kZXJsaW5lIiwidGV4dCIsInByaW1hcnkiLCJib3JkZXJCb3R0b21TdHlsZSIsInN0YXJ0QWRvcm5tZW50IiwicGFkZGluZ0xlZnQiLCJlbmRBZG9ybm1lbnQiLCJwYWRkaW5nUmlnaHQiLCJtdWx0aWxpbmUiLCJwYWRkaW5nIiwic2l6ZSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwiaGlkZGVuTGFiZWwiLCJGaWxsZWRJbnB1dElucHV0IiwiV2Via2l0Qm94U2hhZG93IiwiV2Via2l0VGV4dEZpbGxDb2xvciIsImNhcmV0Q29sb3IiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwiaW5Qcm9wcyIsInJlZiIsIl9yZWYiLCJfc2xvdHMkcm9vdCIsIl9yZWYyIiwiX3Nsb3RzJGlucHV0IiwidXNlVGhlbWVQcm9wcyIsImNvbXBvbmVudHMiLCJjb21wb25lbnRzUHJvcHMiLCJjb21wb25lbnRzUHJvcHNQcm9wIiwiZnVsbFdpZHRoIiwiaW5wdXRDb21wb25lbnQiLCJzbG90UHJvcHMiLCJzbG90cyIsInR5cGUiLCJvdGhlciIsImNsYXNzZXMiLCJyb290IiwiaW5wdXQiLCJjb21wb3NlZENsYXNzZXMiLCJjb21wb3NlQ2xhc3NlcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiZmlsbGVkSW5wdXRDb21wb25lbnRzUHJvcHMiLCJkZWVwbWVyZ2UiLCJSb290U2xvdCIsIlJvb3QiLCJJbnB1dFNsb3QiLCJJbnB1dCIsIm11aU5hbWUiLCJnZXRGb3JtQ29udHJvbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUNvbnRyb2xSb290IiwiY2FwaXRhbGl6ZSIsIm1hcmdpbiIsImRpc3BsYXkiLCJmbGV4RGlyZWN0aW9uIiwibWluV2lkdGgiLCJib3JkZXIiLCJ2ZXJ0aWNhbEFsaWduIiwibWFyZ2luVG9wIiwibWFyZ2luQm90dG9tIiwid2lkdGgiLCJjaGlsZHJlbiIsImNsYXNzTmFtZSIsImNvbXBvbmVudCIsInZpc3VhbGx5Rm9jdXNlZCIsInJlcXVpcmVkIiwidmFyaWFudCIsImFkb3JuZWRTdGFydCIsInNldEFkb3JuZWRTdGFydCIsImluaXRpYWxBZG9ybmVkU3RhcnQiLCJmb3JFYWNoIiwiY2hpbGQiLCJpc011aUVsZW1lbnQiLCJmaWxsZWQiLCJzZXRGaWxsZWQiLCJpbml0aWFsRmlsbGVkIiwiaW5wdXRQcm9wcyIsImZvY3VzZWRTdGF0ZSIsInNldEZvY3VzZWQiLCJ1bmRlZmluZWQiLCJyZWdpc3RlckVmZmVjdCIsImNoaWxkQ29udGV4dCIsIm9uQmx1ciIsIm9uRW1wdHkiLCJvbkZpbGxlZCIsIm9uRm9jdXMiLCJGb3JtQ29udHJvbENvbnRleHQiLCJQcm92aWRlciIsInZhbHVlIiwiYXMiLCJjbHN4IiwiZm9ybUNvbnRyb2xTdGF0ZSIsInN0YXRlcyIsIm11aUZvcm1Db250cm9sIiwicmVkdWNlIiwiYWNjIiwic3RhdGUiLCJ1c2VGb3JtQ29udHJvbCIsImdldEZvcm1IZWxwZXJUZXh0VXRpbGl0eUNsYXNzZXMiLCJfc3BhbiIsIkZvcm1IZWxwZXJUZXh0Um9vdCIsImNvbnRhaW5lZCIsInNlY29uZGFyeSIsInR5cG9ncmFwaHkiLCJjYXB0aW9uIiwidGV4dEFsaWduIiwibWFyZ2luUmlnaHQiLCJtYXJnaW5MZWZ0IiwiZmNzIiwiZGVmYXVsdFRoZW1lIiwidGhlbWVJZCIsImdldEdyaWRVdGlsaXR5Q2xhc3MiLCJHUklEX1NJWkVTIiwibWFwIiwic3BhY2luZyIsImRpcmVjdGlvbiIsIndyYXAiLCJnZXRPZmZzZXQiLCJ2YWwiLCJwYXJzZSIsInBhcnNlRmxvYXQiLCJTdHJpbmciLCJyZXBsYWNlIiwiZXh0cmFjdFplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiYnJlYWtwb2ludHMiLCJ2YWx1ZXMiLCJub25aZXJvS2V5IiwiT2JqZWN0Iiwia2V5cyIsImtleSIsInNvcnRlZEJyZWFrcG9pbnRLZXlzQnlWYWx1ZSIsInNvcnQiLCJhIiwiYiIsInNsaWNlIiwiaW5kZXhPZiIsIkdyaWRSb290IiwiY29udGFpbmVyIiwiaXRlbSIsInplcm9NaW5XaWR0aCIsInNwYWNpbmdTdHlsZXMiLCJOdW1iZXIiLCJpc05hTiIsImJyZWFrcG9pbnQiLCJwdXNoIiwicmVzb2x2ZVNwYWNpbmdTdHlsZXMiLCJicmVha3BvaW50c1N0eWxlcyIsImJveFNpemluZyIsImZsZXhXcmFwIiwiZGlyZWN0aW9uVmFsdWVzIiwicHJvcFZhbHVlIiwib3V0cHV0IiwibWF4V2lkdGgiLCJyb3dTcGFjaW5nIiwicm93U3BhY2luZ1ZhbHVlcyIsInplcm9WYWx1ZUJyZWFrcG9pbnRLZXlzIiwiX3plcm9WYWx1ZUJyZWFrcG9pbnRLIiwidGhlbWVTcGFjaW5nIiwiaW5jbHVkZXMiLCJjb2x1bW5TcGFjaW5nIiwiY29sdW1uU3BhY2luZ1ZhbHVlcyIsIl96ZXJvVmFsdWVCcmVha3BvaW50SzIiLCJnbG9iYWxTdHlsZXMiLCJmbGV4QmFzaXMiLCJmbGV4R3JvdyIsImZsZXhTaHJpbmsiLCJjb2x1bW5zQnJlYWtwb2ludFZhbHVlcyIsImNvbHVtbnMiLCJjb2x1bW5WYWx1ZSIsIk1hdGgiLCJyb3VuZCIsIm1vcmUiLCJhc3NpZ24iLCJ1cCIsIkdyaWQiLCJ0aGVtZVByb3BzIiwidXNlVGhlbWUiLCJleHRlbmRTeFByb3AiLCJjb2x1bW5zUHJvcCIsImNvbHVtblNwYWNpbmdQcm9wIiwicm93U3BhY2luZ1Byb3AiLCJjb2x1bW5zQ29udGV4dCIsImJyZWFrcG9pbnRzVmFsdWVzIiwib3RoZXJGaWx0ZXJlZCIsInNwYWNpbmdDbGFzc2VzIiwicmVzb2x2ZVNwYWNpbmdDbGFzc2VzIiwiYnJlYWtwb2ludHNDbGFzc2VzIiwiZ2V0SW5wdXRVdGlsaXR5Q2xhc3MiLCJJbnB1dFJvb3QiLCJmb3JtQ29udHJvbCIsIklucHV0SW5wdXQiLCJpbnB1dENvbXBvbmVudHNQcm9wcyIsInJvb3RPdmVycmlkZXNSZXNvbHZlciIsImFkb3JuZWRFbmQiLCJzaXplU21hbGwiLCJpbnB1dE92ZXJyaWRlc1Jlc29sdmVyIiwiaW5wdXRTaXplU21hbGwiLCJpbnB1dE11bHRpbGluZSIsImlucHV0VHlwZVNlYXJjaCIsImlucHV0QWRvcm5lZFN0YXJ0IiwiaW5wdXRBZG9ybmVkRW5kIiwiaW5wdXRIaWRkZW5MYWJlbCIsIklucHV0QmFzZVJvb3QiLCJib2R5MSIsImxpbmVIZWlnaHQiLCJjdXJzb3IiLCJhbGlnbkl0ZW1zIiwiSW5wdXRCYXNlQ29tcG9uZW50IiwicGxhY2Vob2xkZXIiLCJpbnB1dFBsYWNlaG9sZGVyIiwicGxhY2Vob2xkZXJIaWRkZW4iLCJwbGFjZWhvbGRlclZpc2libGUiLCJmb250IiwibGV0dGVyU3BhY2luZyIsImJhY2tncm91bmQiLCJoZWlnaHQiLCJXZWJraXRUYXBIaWdobGlnaHRDb2xvciIsImFuaW1hdGlvbk5hbWUiLCJhbmltYXRpb25EdXJhdGlvbiIsIm91dGxpbmUiLCJib3hTaGFkb3ciLCJXZWJraXRBcHBlYXJhbmNlIiwicmVzaXplIiwiTW96QXBwZWFyYW5jZSIsImlucHV0R2xvYmFsU3R5bGVzIiwiZnJvbSIsIl9zbG90UHJvcHMkaW5wdXQiLCJhcmlhRGVzY3JpYmVkYnkiLCJhdXRvQ29tcGxldGUiLCJhdXRvRm9jdXMiLCJkZWZhdWx0VmFsdWUiLCJkaXNhYmxlSW5qZWN0aW5nR2xvYmFsU3R5bGVzIiwiaWQiLCJpbnB1dFByb3BzUHJvcCIsImlucHV0UmVmIiwiaW5wdXRSZWZQcm9wIiwibWF4Um93cyIsIm1pblJvd3MiLCJvbkNoYW5nZSIsIm9uQ2xpY2siLCJvbktleURvd24iLCJvbktleVVwIiwicmVhZE9ubHkiLCJyZW5kZXJTdWZmaXgiLCJyb3dzIiwidmFsdWVQcm9wIiwiY3VycmVudCIsImlzQ29udHJvbGxlZCIsImhhbmRsZUlucHV0UmVmV2FybmluZyIsImluc3RhbmNlIiwiaGFuZGxlSW5wdXRSZWYiLCJjaGVja0RpcnR5Iiwib2JqIiwiSW5wdXRDb21wb25lbnQiLCJCb29sZWFuIiwicm9vdFByb3BzIiwiZXZlbnQiLCJjdXJyZW50VGFyZ2V0IiwidGFyZ2V0IiwiZm9jdXMiLCJvbkFuaW1hdGlvblN0YXJ0IiwiYXJncyIsImVsZW1lbnQiLCJFcnJvciIsInN0b3BQcm9wYWdhdGlvbiIsImdldElucHV0QmFzZVV0aWxpdHlDbGFzcyIsImhhc1ZhbHVlIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwiaXNGaWxsZWQiLCJTU1IiLCJpc0Fkb3JuZWRTdGFydCIsImdldEZvcm1MYWJlbFV0aWxpdHlDbGFzc2VzIiwiRm9ybUxhYmVsUm9vdCIsImNvbG9yU2Vjb25kYXJ5IiwiQXN0ZXJpc2tDb21wb25lbnQiLCJhc3RlcmlzayIsImdldElucHV0TGFiZWxVdGlsaXR5Q2xhc3NlcyIsIklucHV0TGFiZWxSb290Iiwic2hyaW5rIiwiZGlzYWJsZUFuaW1hdGlvbiIsImFuaW1hdGVkIiwidHJhbnNmb3JtT3JpZ2luIiwid2hpdGVTcGFjZSIsIm92ZXJmbG93IiwidGV4dE92ZXJmbG93IiwidG9wIiwiekluZGV4IiwidXNlclNlbGVjdCIsInNocmlua1Byb3AiLCJnZXRMaW5rVXRpbGl0eUNsYXNzIiwiY29sb3JUcmFuc2Zvcm1hdGlvbnMiLCJ0ZXh0UHJpbWFyeSIsInRleHRTZWNvbmRhcnkiLCJ0cmFuc2Zvcm1lZENvbG9yIiwidHJhbnNmb3JtRGVwcmVjYXRlZENvbG9ycyIsImNoYW5uZWxDb2xvciIsIkxpbmtSb290IiwiVHlwb2dyYXBoeSIsImJ1dHRvbiIsInRleHREZWNvcmF0aW9uIiwidGV4dERlY29yYXRpb25Db2xvciIsImJvcmRlclN0eWxlIiwiZm9jdXNWaXNpYmxlIiwiVHlwb2dyYXBoeUNsYXNzZXMiLCJzeCIsImlzRm9jdXNWaXNpYmxlUmVmIiwiaGFuZGxlQmx1clZpc2libGUiLCJoYW5kbGVGb2N1c1Zpc2libGUiLCJmb2N1c1Zpc2libGVSZWYiLCJ1c2VJc0ZvY3VzVmlzaWJsZSIsInNldEZvY3VzVmlzaWJsZSIsImhhbmRsZXJSZWYiLCJ1c2VGb3JrUmVmIiwiZ2V0TGlzdFV0aWxpdHlDbGFzcyIsIkxpc3RSb290IiwiZGlzYWJsZVBhZGRpbmciLCJkZW5zZSIsInN1YmhlYWRlciIsImxpc3RTdHlsZSIsImNvbnRleHQiLCJMaXN0Q29udGV4dCIsImdldExpc3RJdGVtQnV0dG9uVXRpbGl0eUNsYXNzIiwiTGlzdEl0ZW1CdXR0b25Sb290IiwiQnV0dG9uQmFzZSIsImFsaWduSXRlbXNGbGV4U3RhcnQiLCJkaXZpZGVyIiwiZGlzYWJsZUd1dHRlcnMiLCJndXR0ZXJzIiwianVzdGlmeUNvbnRlbnQiLCJzaG9ydGVzdCIsImFjdGlvbiIsImhvdmVyIiwic2VsZWN0ZWQiLCJtYWluQ2hhbm5lbCIsInNlbGVjdGVkT3BhY2l0eSIsImZvY3VzT3BhY2l0eSIsImhvdmVyT3BhY2l0eSIsImRpc2FibGVkT3BhY2l0eSIsImJhY2tncm91bmRDbGlwIiwiZm9jdXNWaXNpYmxlQ2xhc3NOYW1lIiwibGlzdEl0ZW1SZWYiLCJ1c2VFbmhhbmNlZEVmZmVjdCIsImhhbmRsZVJlZiIsImhyZWYiLCJ0byIsIm5leHRJdGVtIiwibGlzdCIsImRpc2FibGVMaXN0V3JhcCIsImZpcnN0Q2hpbGQiLCJuZXh0RWxlbWVudFNpYmxpbmciLCJwcmV2aW91c0l0ZW0iLCJsYXN0Q2hpbGQiLCJwcmV2aW91c0VsZW1lbnRTaWJsaW5nIiwidGV4dENyaXRlcmlhTWF0Y2hlcyIsIm5leHRGb2N1cyIsInRleHRDcml0ZXJpYSIsImlubmVyVGV4dCIsInRleHRDb250ZW50IiwidHJpbSIsInRvTG93ZXJDYXNlIiwicmVwZWF0aW5nIiwiam9pbiIsIm1vdmVGb2N1cyIsImN1cnJlbnRGb2N1cyIsImRpc2FibGVkSXRlbXNGb2N1c2FibGUiLCJ0cmF2ZXJzYWxGdW5jdGlvbiIsIndyYXBwZWRPbmNlIiwibmV4dEZvY3VzRGlzYWJsZWQiLCJnZXRBdHRyaWJ1dGUiLCJoYXNBdHRyaWJ1dGUiLCJhY3Rpb25zIiwiYXV0b0ZvY3VzSXRlbSIsImxpc3RSZWYiLCJ0ZXh0Q3JpdGVyaWFSZWYiLCJwcmV2aW91c0tleU1hdGNoZWQiLCJsYXN0VGltZSIsImFkanVzdFN0eWxlRm9yU2Nyb2xsYmFyIiwiY29udGFpbmVyRWxlbWVudCIsIm5vRXhwbGljaXRXaWR0aCIsInN0eWxlIiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsYmFyU2l6ZSIsImdldFNjcm9sbGJhclNpemUiLCJvd25lckRvY3VtZW50IiwiYWN0aXZlSXRlbUluZGV4IiwiaW5kZXgiLCJtdWlTa2lwTGlzdEhpZ2hsaWdodCIsIml0ZW1zIiwibmV3Q2hpbGRQcm9wcyIsInRhYkluZGV4IiwiTGlzdCIsInJvbGUiLCJhY3RpdmVFbGVtZW50IiwicHJldmVudERlZmF1bHQiLCJjcml0ZXJpYSIsImxvd2VyS2V5IiwiY3VyclRpbWUiLCJwZXJmb3JtYW5jZSIsIm5vdyIsImtlZXBGb2N1c09uQ3VycmVudCIsImdldFNjYWxlIiwiZW50ZXJpbmciLCJlbnRlcmVkIiwiaXNXZWJLaXQxNTQiLCJuYXZpZ2F0b3IiLCJ0ZXN0IiwidXNlckFnZW50IiwiR3JvdyIsImFkZEVuZExpc3RlbmVyIiwiYXBwZWFyIiwiaW4iLCJpblByb3AiLCJvbkVudGVyIiwib25FbnRlcmVkIiwib25FbnRlcmluZyIsIm9uRXhpdCIsIm9uRXhpdGVkIiwib25FeGl0aW5nIiwidGltZW91dCIsIlRyYW5zaXRpb25Db21wb25lbnQiLCJUcmFuc2l0aW9uIiwidGltZXIiLCJhdXRvVGltZW91dCIsIm5vZGVSZWYiLCJub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrIiwiY2FsbGJhY2siLCJtYXliZUlzQXBwZWFyaW5nIiwibm9kZSIsImhhbmRsZUVudGVyaW5nIiwiaGFuZGxlRW50ZXIiLCJpc0FwcGVhcmluZyIsInRyYW5zaXRpb25EdXJhdGlvbiIsImRlbGF5IiwidHJhbnNpdGlvblRpbWluZ0Z1bmN0aW9uIiwiZ2V0QXV0b0hlaWdodER1cmF0aW9uIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXRpbmciLCJoYW5kbGVFeGl0IiwiaGFuZGxlRXhpdGVkIiwiY2xlYXJUaW1lb3V0IiwibmV4dCIsInNldFRpbWVvdXQiLCJjaGlsZFByb3BzIiwidmlzaWJpbGl0eSIsIm11aVN1cHBvcnRBdXRvIiwiZ2V0TW9kYWxVdGlsaXR5Q2xhc3MiLCJNb2RhbFJvb3QiLCJvcGVuIiwiZXhpdGVkIiwiaGlkZGVuIiwibW9kYWwiLCJNb2RhbEJhY2tkcm9wIiwiQmFja2Ryb3AiLCJiYWNrZHJvcCIsIl9zbG90cyRiYWNrZHJvcCIsIl9zbG90UHJvcHMkcm9vdCIsIl9zbG90UHJvcHMkYmFja2Ryb3AiLCJCYWNrZHJvcENvbXBvbmVudCIsIkJhY2tkcm9wUHJvcHMiLCJjbG9zZUFmdGVyVHJhbnNpdGlvbiIsImRpc2FibGVBdXRvRm9jdXMiLCJkaXNhYmxlRW5mb3JjZUZvY3VzIiwiZGlzYWJsZUVzY2FwZUtleURvd24iLCJkaXNhYmxlUG9ydGFsIiwiZGlzYWJsZVJlc3RvcmVGb2N1cyIsImRpc2FibGVTY3JvbGxMb2NrIiwiaGlkZUJhY2tkcm9wIiwia2VlcE1vdW50ZWQiLCJvbkJhY2tkcm9wQ2xpY2siLCJwcm9wc1dpdGhEZWZhdWx0cyIsImdldFJvb3RQcm9wcyIsImdldEJhY2tkcm9wUHJvcHMiLCJnZXRUcmFuc2l0aW9uUHJvcHMiLCJwb3J0YWxSZWYiLCJpc1RvcE1vZGFsIiwiaGFzVHJhbnNpdGlvbiIsInVzZU1vZGFsIiwicm9vdFJlZiIsIkJhY2tkcm9wU2xvdCIsInJvb3RTbG90UHJvcHMiLCJiYWNrZHJvcFNsb3RQcm9wcyIsInVzZVNsb3RQcm9wcyIsImVsZW1lbnRUeXBlIiwiZXh0ZXJuYWxTbG90UHJvcHMiLCJleHRlcm5hbEZvcndhcmRlZFByb3BzIiwiZ2V0U2xvdFByb3BzIiwiYWRkaXRpb25hbFByb3BzIiwiYmFja2Ryb3BQcm9wcyIsIm90aGVySGFuZGxlcnMiLCJlIiwiUG9ydGFsIiwiRm9jdXNUcmFwIiwiaXNFbmFibGVkIiwiZ2V0UG9wb3ZlclV0aWxpdHlDbGFzcyIsIl9leGNsdWRlZDIiLCJfZXhjbHVkZWQzIiwiZ2V0T2Zmc2V0VG9wIiwicmVjdCIsInZlcnRpY2FsIiwib2Zmc2V0IiwiZ2V0T2Zmc2V0TGVmdCIsImhvcml6b250YWwiLCJnZXRUcmFuc2Zvcm1PcmlnaW5WYWx1ZSIsIm4iLCJyZXNvbHZlQW5jaG9yRWwiLCJhbmNob3JFbCIsIlBvcG92ZXJSb290IiwiUG9wb3ZlclBhcGVyIiwiUGFwZXIiLCJwYXBlciIsIm92ZXJmbG93WSIsIm92ZXJmbG93WCIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsIl9zbG90UHJvcHMkcGFwZXIiLCJfc2xvdHMkcGFwZXIiLCJhbmNob3JPcmlnaW4iLCJhbmNob3JQb3NpdGlvbiIsImFuY2hvclJlZmVyZW5jZSIsImNvbnRhaW5lclByb3AiLCJlbGV2YXRpb24iLCJtYXJnaW5UaHJlc2hvbGQiLCJQYXBlclByb3BzIiwiUGFwZXJQcm9wc1Byb3AiLCJ0cmFuc2l0aW9uRHVyYXRpb25Qcm9wIiwiVHJhbnNpdGlvblByb3BzIiwiZXh0ZXJuYWxQYXBlclNsb3RQcm9wcyIsInBhcGVyUmVmIiwiaGFuZGxlUGFwZXJSZWYiLCJnZXRBbmNob3JPZmZzZXQiLCJyZXNvbHZlZEFuY2hvckVsIiwiYW5jaG9yUmVjdCIsIm5vZGVUeXBlIiwiYm9keSIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsImdldFRyYW5zZm9ybU9yaWdpbiIsImVsZW1SZWN0IiwiZ2V0UG9zaXRpb25pbmdTdHlsZSIsIm9mZnNldFdpZHRoIiwib2Zmc2V0SGVpZ2h0IiwiZWxlbVRyYW5zZm9ybU9yaWdpbiIsImFuY2hvck9mZnNldCIsImNvbnRhaW5lcldpbmRvdyIsIm93bmVyV2luZG93IiwiaGVpZ2h0VGhyZXNob2xkIiwiaW5uZXJIZWlnaHQiLCJ3aWR0aFRocmVzaG9sZCIsImlubmVyV2lkdGgiLCJkaWZmIiwiaXNQb3NpdGlvbmVkIiwic2V0SXNQb3NpdGlvbmVkIiwic2V0UG9zaXRpb25pbmdTdHlsZXMiLCJwb3NpdGlvbmluZyIsIndpbmRvdyIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwidXBkYXRlUG9zaXRpb24iLCJoYW5kbGVSZXNpemUiLCJkZWJvdW5jZSIsImNsZWFyIiwiUGFwZXJTbG90IiwicGFwZXJQcm9wcyIsIl91c2VTbG90UHJvcHMiLCJpbnZpc2libGUiLCJyb290U2xvdFByb3BzUHJvcCIsImlzSG9zdENvbXBvbmVudCIsImdldE1lbnVVdGlsaXR5Q2xhc3MiLCJSVExfT1JJR0lOIiwiTFRSX09SSUdJTiIsIk1lbnVSb290IiwiTWVudVBhcGVyIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJNZW51TWVudUxpc3QiLCJkaXNhYmxlQXV0b0ZvY3VzSXRlbSIsIk1lbnVMaXN0UHJvcHMiLCJvbkNsb3NlIiwiUG9wb3ZlckNsYXNzZXMiLCJpc1J0bCIsIm1lbnVMaXN0QWN0aW9uc1JlZiIsInBhcGVyRXh0ZXJuYWxTbG90UHJvcHMiLCJwYXBlclNsb3RQcm9wcyIsImdldE1lbnVJdGVtVXRpbGl0eUNsYXNzIiwiTWVudUl0ZW1Sb290IiwiZGl2aWRlckNsYXNzZXMiLCJpbnNldCIsImJvZHkyIiwiZm9udFNpemUiLCJ0YWJJbmRleFByb3AiLCJtZW51SXRlbVJlZiIsImdldE5hdGl2ZVNlbGVjdFV0aWxpdHlDbGFzc2VzIiwibmF0aXZlU2VsZWN0U2VsZWN0U3R5bGVzIiwiTmF0aXZlU2VsZWN0U2VsZWN0Iiwic2VsZWN0IiwibXVsdGlwbGUiLCJuYXRpdmVTZWxlY3RJY29uU3R5bGVzIiwiYWN0aXZlIiwiTmF0aXZlU2VsZWN0SWNvbiIsImljb24iLCJpY29uT3BlbiIsIkljb25Db21wb25lbnQiLCJOb3RjaGVkT3V0bGluZVJvb3QiLCJib3JkZXJXaWR0aCIsIk5vdGNoZWRPdXRsaW5lTGVnZW5kIiwiZmxvYXQiLCJ3aXRoTGFiZWwiLCJub3RjaGVkIiwiZ2V0T3V0bGluZWRJbnB1dFV0aWxpdHlDbGFzcyIsIk91dGxpbmVkSW5wdXRSb290IiwiYm9yZGVyQ29sb3IiLCJub3RjaGVkT3V0bGluZSIsImxhYmVsIiwiT3V0bGluZWRJbnB1dElucHV0IiwiT3V0bGluZWRJbnB1dCIsIl9SZWFjdCRGcmFnbWVudCIsImdldFBhcGVyVXRpbGl0eUNsYXNzIiwiUGFwZXJSb290Iiwic3F1YXJlIiwicm91bmRlZCIsIl90aGVtZSR2YXJzJG92ZXJsYXlzIiwic2hhZG93cyIsImJhY2tncm91bmRJbWFnZSIsImdldE92ZXJsYXlBbHBoYSIsIm92ZXJsYXlzIl0sInNvdXJjZVJvb3QiOiIifQ==