"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[456],{8161:(e,t,o)=>{o.d(t,{A:()=>c});var n=o(7413),r=o(9071),i=o(3478),a=o(8312);const s=(0,o(8413).A)("MuiBox",["root"]),l=(0,i.A)(),c=(0,n.A)({themeId:a.A,defaultTheme:l,defaultClassName:s.root,generateClassName:r.A.generate})},9226:(e,t,o)=>{o.d(t,{A:()=>_});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(7379),l=o(5659),c=o(771),d=o(1848),u=o(9770),p=o(5669),h=o(6852),m=o(3034),v=o(8851),b=o(2618),f=o(7437),g=o(3068),x=o(4848);var y=o(8413);const A=(0,y.A)("MuiTouchRipple",["root","ripple","rippleVisible","ripplePulsate","child","childLeaving","childPulsate"]),S=["center","classes","className"];let k,C,R,w,z=e=>e;const M=(0,f.i7)(k||(k=z` 0% { transform: scale(0); opacity: 0.1; } 100% { transform: scale(1); opacity: 0.3; } `)),$=(0,f.i7)(C||(C=z` 0% { opacity: 1; } 100% { opacity: 0; } `)),E=(0,f.i7)(R||(R=z` 0% { transform: scale(1); } 50% { transform: scale(0.92); } 100% { transform: scale(1); } `)),T=(0,d.Ay)("span",{name:"MuiTouchRipple",slot:"Root"})({overflow:"hidden",pointerEvents:"none",position:"absolute",zIndex:0,top:0,right:0,bottom:0,left:0,borderRadius:"inherit"}),I=(0,d.Ay)((function(e){const{className:t,classes:o,pulsate:n=!1,rippleX:r,rippleY:s,rippleSize:l,in:c,onExited:d,timeout:u}=e,[p,h]=i.useState(!1),m=(0,a.A)(t,o.ripple,o.rippleVisible,n&&o.ripplePulsate),v={width:l,height:l,top:-l/2+s,left:-l/2+r},b=(0,a.A)(o.child,p&&o.childLeaving,n&&o.childPulsate);return c||p||h(!0),i.useEffect((()=>{if(!c&&null!=d){const e=setTimeout(d,u);return()=>{clearTimeout(e)}}}),[d,c,u]),(0,x.jsx)("span",{className:m,style:v,children:(0,x.jsx)("span",{className:b})})}),{name:"MuiTouchRipple",slot:"Ripple"})(w||(w=z` opacity: 0; position: absolute; &.${0} { opacity: 0.3; transform: scale(1); animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } &.${0} { animation-duration: ${0}ms; } & .${0} { opacity: 1; display: block; width: 100%; height: 100%; border-radius: 50%; background-color: currentColor; } & .${0} { opacity: 0; animation-name: ${0}; animation-duration: ${0}ms; animation-timing-function: ${0}; } & .${0} { position: absolute; /* @noflip */ left: 0px; top: 0; animation-name: ${0}; animation-duration: 2500ms; animation-timing-function: ${0}; animation-iteration-count: infinite; animation-delay: 200ms; } `),A.rippleVisible,M,550,(({theme:e})=>e.transitions.easing.easeInOut),A.ripplePulsate,(({theme:e})=>e.transitions.duration.shorter),A.child,A.childLeaving,$,550,(({theme:e})=>e.transitions.easing.easeInOut),A.childPulsate,E,(({theme:e})=>e.transitions.easing.easeInOut)),B=i.forwardRef((function(e,t){const o=(0,p.b)({props:e,name:"MuiTouchRipple"}),{center:s=!1,classes:l={},className:c}=o,d=(0,n.A)(o,S),[u,h]=i.useState([]),m=i.useRef(0),v=i.useRef(null);i.useEffect((()=>{v.current&&(v.current(),v.current=null)}),[u]);const f=i.useRef(!1),y=(0,g.A)(),k=i.useRef(null),C=i.useRef(null),R=i.useCallback((e=>{const{pulsate:t,rippleX:o,rippleY:n,rippleSize:r,cb:i}=e;h((e=>[...e,(0,x.jsx)(I,{classes:{ripple:(0,a.A)(l.ripple,A.ripple),rippleVisible:(0,a.A)(l.rippleVisible,A.rippleVisible),ripplePulsate:(0,a.A)(l.ripplePulsate,A.ripplePulsate),child:(0,a.A)(l.child,A.child),childLeaving:(0,a.A)(l.childLeaving,A.childLeaving),childPulsate:(0,a.A)(l.childPulsate,A.childPulsate)},timeout:550,pulsate:t,rippleX:o,rippleY:n,rippleSize:r},m.current)])),m.current+=1,v.current=i}),[l]),w=i.useCallback(((e={},t={},o=()=>{})=>{const{pulsate:n=!1,center:r=s||t.pulsate,fakeElement:i=!1}=t;if("mousedown"===(null==e?void 0:e.type)&&f.current)return void(f.current=!1);"touchstart"===(null==e?void 0:e.type)&&(f.current=!0);const a=i?null:C.current,l=a?a.getBoundingClientRect():{width:0,height:0,left:0,top:0};let c,d,u;if(r||void 0===e||0===e.clientX&&0===e.clientY||!e.clientX&&!e.touches)c=Math.round(l.width/2),d=Math.round(l.height/2);else{const{clientX:t,clientY:o}=e.touches&&e.touches.length>0?e.touches[0]:e;c=Math.round(t-l.left),d=Math.round(o-l.top)}if(r)u=Math.sqrt((2*l.width**2+l.height**2)/3),u%2==0&&(u+=1);else{const e=2*Math.max(Math.abs((a?a.clientWidth:0)-c),c)+2,t=2*Math.max(Math.abs((a?a.clientHeight:0)-d),d)+2;u=Math.sqrt(e**2+t**2)}null!=e&&e.touches?null===k.current&&(k.current=()=>{R({pulsate:n,rippleX:c,rippleY:d,rippleSize:u,cb:o})},y.start(80,(()=>{k.current&&(k.current(),k.current=null)}))):R({pulsate:n,rippleX:c,rippleY:d,rippleSize:u,cb:o})}),[s,R,y]),z=i.useCallback((()=>{w({},{pulsate:!0})}),[w]),M=i.useCallback(((e,t)=>{if(y.clear(),"touchend"===(null==e?void 0:e.type)&&k.current)return k.current(),k.current=null,void y.start(0,(()=>{M(e,t)}));k.current=null,h((e=>e.length>0?e.slice(1):e)),v.current=t}),[y]);return i.useImperativeHandle(t,(()=>({pulsate:z,start:w,stop:M})),[z,w,M]),(0,x.jsx)(T,(0,r.A)({className:(0,a.A)(A.root,l.root,c),ref:C},d,{children:(0,x.jsx)(b.A,{component:null,exit:!0,children:u})}))}));var P=o(1609);function N(e){return(0,P.Ay)("MuiButtonBase",e)}const L=(0,y.A)("MuiButtonBase",["root","disabled","focusVisible"]),W=["action","centerRipple","children","className","component","disabled","disableRipple","disableTouchRipple","focusRipple","focusVisibleClassName","LinkComponent","onBlur","onClick","onContextMenu","onDragLeave","onFocus","onFocusVisible","onKeyDown","onKeyUp","onMouseDown","onMouseLeave","onMouseUp","onTouchEnd","onTouchMove","onTouchStart","tabIndex","TouchRippleProps","touchRippleRef","type"],V=(0,d.Ay)("button",{name:"MuiButtonBase",slot:"Root",overridesResolver:(e,t)=>t.root})({display:"inline-flex",alignItems:"center",justifyContent:"center",position:"relative",boxSizing:"border-box",WebkitTapHighlightColor:"transparent",backgroundColor:"transparent",outline:0,border:0,margin:0,borderRadius:0,padding:0,cursor:"pointer",userSelect:"none",verticalAlign:"middle",MozAppearance:"none",WebkitAppearance:"none",textDecoration:"none",color:"inherit","&::-moz-focus-inner":{borderStyle:"none"},[`&.${L.disabled}`]:{pointerEvents:"none",cursor:"default"},"@media print":{colorAdjust:"exact"}}),D=i.forwardRef((function(e,t){const o=(0,p.b)({props:e,name:"MuiButtonBase"}),{action:s,centerRipple:c=!1,children:d,className:u,component:b="button",disabled:f=!1,disableRipple:g=!1,disableTouchRipple:y=!1,focusRipple:A=!1,LinkComponent:S="a",onBlur:k,onClick:C,onContextMenu:R,onDragLeave:w,onFocus:z,onFocusVisible:M,onKeyDown:$,onKeyUp:E,onMouseDown:T,onMouseLeave:I,onMouseUp:P,onTouchEnd:L,onTouchMove:D,onTouchStart:j,tabIndex:F=0,TouchRippleProps:O,touchRippleRef:X,type:H}=o,Y=(0,n.A)(o,W),K=i.useRef(null),U=i.useRef(null),q=(0,h.A)(U,X),{isFocusVisibleRef:G,onFocus:_,onBlur:J,ref:Q}=(0,v.A)(),[Z,ee]=i.useState(!1);f&&Z&&ee(!1),i.useImperativeHandle(s,(()=>({focusVisible:()=>{ee(!0),K.current.focus()}})),[]);const[te,oe]=i.useState(!1);i.useEffect((()=>{oe(!0)}),[]);const ne=te&&!g&&!f;function re(e,t,o=y){return(0,m.A)((n=>(t&&t(n),!o&&U.current&&U.current[e](n),!0)))}i.useEffect((()=>{Z&&A&&!g&&te&&U.current.pulsate()}),[g,A,Z,te]);const ie=re("start",T),ae=re("stop",R),se=re("stop",w),le=re("stop",P),ce=re("stop",(e=>{Z&&e.preventDefault(),I&&I(e)})),de=re("start",j),ue=re("stop",L),pe=re("stop",D),he=re("stop",(e=>{J(e),!1===G.current&&ee(!1),k&&k(e)}),!1),me=(0,m.A)((e=>{K.current||(K.current=e.currentTarget),_(e),!0===G.current&&(ee(!0),M&&M(e)),z&&z(e)})),ve=()=>{const e=K.current;return b&&"button"!==b&&!("A"===e.tagName&&e.href)},be=i.useRef(!1),fe=(0,m.A)((e=>{A&&!be.current&&Z&&U.current&&" "===e.key&&(be.current=!0,U.current.stop(e,(()=>{U.current.start(e)}))),e.target===e.currentTarget&&ve()&&" "===e.key&&e.preventDefault(),$&&$(e),e.target===e.currentTarget&&ve()&&"Enter"===e.key&&!f&&(e.preventDefault(),C&&C(e))})),ge=(0,m.A)((e=>{A&&" "===e.key&&U.current&&Z&&!e.defaultPrevented&&(be.current=!1,U.current.stop(e,(()=>{U.current.pulsate(e)}))),E&&E(e),C&&e.target===e.currentTarget&&ve()&&" "===e.key&&!e.defaultPrevented&&C(e)}));let xe=b;"button"===xe&&(Y.href||Y.to)&&(xe=S);const ye={};"button"===xe?(ye.type=void 0===H?"button":H,ye.disabled=f):(Y.href||Y.to||(ye.role="button"),f&&(ye["aria-disabled"]=f));const Ae=(0,h.A)(t,Q,K),Se=(0,r.A)({},o,{centerRipple:c,component:b,disabled:f,disableRipple:g,disableTouchRipple:y,focusRipple:A,tabIndex:F,focusVisible:Z}),ke=(e=>{const{disabled:t,focusVisible:o,focusVisibleClassName:n,classes:r}=e,i={root:["root",t&&"disabled",o&&"focusVisible"]},a=(0,l.A)(i,N,r);return o&&n&&(a.root+=` ${n}`),a})(Se);return(0,x.jsxs)(V,(0,r.A)({as:xe,className:(0,a.A)(ke.root,u),ownerState:Se,onBlur:he,onClick:C,onContextMenu:ae,onFocus:me,onKeyDown:fe,onKeyUp:ge,onMouseDown:ie,onMouseLeave:ce,onMouseUp:le,onDragLeave:se,onTouchEnd:ue,onTouchMove:pe,onTouchStart:de,ref:Ae,tabIndex:f?-1:F,type:H},ye,Y,{children:[d,ne?(0,x.jsx)(B,(0,r.A)({ref:q,center:c},O)):null]}))}));var j=o(8466);function F(e){return(0,P.Ay)("MuiButton",e)}const O=(0,y.A)("MuiButton",["root","text","textInherit","textPrimary","textSecondary","textSuccess","textError","textInfo","textWarning","outlined","outlinedInherit","outlinedPrimary","outlinedSecondary","outlinedSuccess","outlinedError","outlinedInfo","outlinedWarning","contained","containedInherit","containedPrimary","containedSecondary","containedSuccess","containedError","containedInfo","containedWarning","disableElevation","focusVisible","disabled","colorInherit","colorPrimary","colorSecondary","colorSuccess","colorError","colorInfo","colorWarning","textSizeSmall","textSizeMedium","textSizeLarge","outlinedSizeSmall","outlinedSizeMedium","outlinedSizeLarge","containedSizeSmall","containedSizeMedium","containedSizeLarge","sizeMedium","sizeSmall","sizeLarge","fullWidth","startIcon","endIcon","icon","iconSizeSmall","iconSizeMedium","iconSizeLarge"]),X=i.createContext({}),H=i.createContext(void 0),Y=["children","color","component","className","disabled","disableElevation","disableFocusRipple","endIcon","focusVisibleClassName","fullWidth","size","startIcon","type","variant"],K=e=>(0,r.A)({},"small"===e.size&&{"& > *:nth-of-type(1)":{fontSize:18}},"medium"===e.size&&{"& > *:nth-of-type(1)":{fontSize:20}},"large"===e.size&&{"& > *:nth-of-type(1)":{fontSize:22}}),U=(0,d.Ay)(D,{shouldForwardProp:e=>(0,u.A)(e)||"classes"===e,name:"MuiButton",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`${o.variant}${(0,j.A)(o.color)}`],t[`size${(0,j.A)(o.size)}`],t[`${o.variant}Size${(0,j.A)(o.size)}`],"inherit"===o.color&&t.colorInherit,o.disableElevation&&t.disableElevation,o.fullWidth&&t.fullWidth]}})((({theme:e,ownerState:t})=>{var o,n;const i="light"===e.palette.mode?e.palette.grey[300]:e.palette.grey[800],a="light"===e.palette.mode?e.palette.grey.A100:e.palette.grey[700];return(0,r.A)({},e.typography.button,{minWidth:64,padding:"6px 16px",borderRadius:(e.vars||e).shape.borderRadius,transition:e.transitions.create(["background-color","box-shadow","border-color","color"],{duration:e.transitions.duration.short}),"&:hover":(0,r.A)({textDecoration:"none",backgroundColor:e.vars?`rgba(${e.vars.palette.text.primaryChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette.text.primary,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"text"===t.variant&&"inherit"!==t.color&&{backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"outlined"===t.variant&&"inherit"!==t.color&&{border:`1px solid ${(e.vars||e).palette[t.color].main}`,backgroundColor:e.vars?`rgba(${e.vars.palette[t.color].mainChannel} / ${e.vars.palette.action.hoverOpacity})`:(0,c.X4)(e.palette[t.color].main,e.palette.action.hoverOpacity),"@media (hover: none)":{backgroundColor:"transparent"}},"contained"===t.variant&&{backgroundColor:e.vars?e.vars.palette.Button.inheritContainedHoverBg:a,boxShadow:(e.vars||e).shadows[4],"@media (hover: none)":{boxShadow:(e.vars||e).shadows[2],backgroundColor:(e.vars||e).palette.grey[300]}},"contained"===t.variant&&"inherit"!==t.color&&{backgroundColor:(e.vars||e).palette[t.color].dark,"@media (hover: none)":{backgroundColor:(e.vars||e).palette[t.color].main}}),"&:active":(0,r.A)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[8]}),[`&.${O.focusVisible}`]:(0,r.A)({},"contained"===t.variant&&{boxShadow:(e.vars||e).shadows[6]}),[`&.${O.disabled}`]:(0,r.A)({color:(e.vars||e).palette.action.disabled},"outlined"===t.variant&&{border:`1px solid ${(e.vars||e).palette.action.disabledBackground}`},"contained"===t.variant&&{color:(e.vars||e).palette.action.disabled,boxShadow:(e.vars||e).shadows[0],backgroundColor:(e.vars||e).palette.action.disabledBackground})},"text"===t.variant&&{padding:"6px 8px"},"text"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main},"outlined"===t.variant&&{padding:"5px 15px",border:"1px solid currentColor"},"outlined"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].main,border:e.vars?`1px solid rgba(${e.vars.palette[t.color].mainChannel} / 0.5)`:`1px solid ${(0,c.X4)(e.palette[t.color].main,.5)}`},"contained"===t.variant&&{color:e.vars?e.vars.palette.text.primary:null==(o=(n=e.palette).getContrastText)?void 0:o.call(n,e.palette.grey[300]),backgroundColor:e.vars?e.vars.palette.Button.inheritContainedBg:i,boxShadow:(e.vars||e).shadows[2]},"contained"===t.variant&&"inherit"!==t.color&&{color:(e.vars||e).palette[t.color].contrastText,backgroundColor:(e.vars||e).palette[t.color].main},"inherit"===t.color&&{color:"inherit",borderColor:"currentColor"},"small"===t.size&&"text"===t.variant&&{padding:"4px 5px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"text"===t.variant&&{padding:"8px 11px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"outlined"===t.variant&&{padding:"3px 9px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"outlined"===t.variant&&{padding:"7px 21px",fontSize:e.typography.pxToRem(15)},"small"===t.size&&"contained"===t.variant&&{padding:"4px 10px",fontSize:e.typography.pxToRem(13)},"large"===t.size&&"contained"===t.variant&&{padding:"8px 22px",fontSize:e.typography.pxToRem(15)},t.fullWidth&&{width:"100%"})}),(({ownerState:e})=>e.disableElevation&&{boxShadow:"none","&:hover":{boxShadow:"none"},[`&.${O.focusVisible}`]:{boxShadow:"none"},"&:active":{boxShadow:"none"},[`&.${O.disabled}`]:{boxShadow:"none"}})),q=(0,d.Ay)("span",{name:"MuiButton",slot:"StartIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.startIcon,t[`iconSize${(0,j.A)(o.size)}`]]}})((({ownerState:e})=>(0,r.A)({display:"inherit",marginRight:8,marginLeft:-4},"small"===e.size&&{marginLeft:-2},K(e)))),G=(0,d.Ay)("span",{name:"MuiButton",slot:"EndIcon",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.endIcon,t[`iconSize${(0,j.A)(o.size)}`]]}})((({ownerState:e})=>(0,r.A)({display:"inherit",marginRight:-4,marginLeft:8},"small"===e.size&&{marginRight:-2},K(e)))),_=i.forwardRef((function(e,t){const o=i.useContext(X),c=i.useContext(H),d=(0,s.A)(o,e),u=(0,p.b)({props:d,name:"MuiButton"}),{children:h,color:m="primary",component:v="button",className:b,disabled:f=!1,disableElevation:g=!1,disableFocusRipple:y=!1,endIcon:A,focusVisibleClassName:S,fullWidth:k=!1,size:C="medium",startIcon:R,type:w,variant:z="text"}=u,M=(0,n.A)(u,Y),$=(0,r.A)({},u,{color:m,component:v,disabled:f,disableElevation:g,disableFocusRipple:y,fullWidth:k,size:C,type:w,variant:z}),E=(e=>{const{color:t,disableElevation:o,fullWidth:n,size:i,variant:a,classes:s}=e,c={root:["root",a,`${a}${(0,j.A)(t)}`,`size${(0,j.A)(i)}`,`${a}Size${(0,j.A)(i)}`,`color${(0,j.A)(t)}`,o&&"disableElevation",n&&"fullWidth"],label:["label"],startIcon:["icon","startIcon",`iconSize${(0,j.A)(i)}`],endIcon:["icon","endIcon",`iconSize${(0,j.A)(i)}`]},d=(0,l.A)(c,F,s);return(0,r.A)({},s,d)})($),T=R&&(0,x.jsx)(q,{className:E.startIcon,ownerState:$,children:R}),I=A&&(0,x.jsx)(G,{className:E.endIcon,ownerState:$,children:A}),B=c||"";return(0,x.jsxs)(U,(0,r.A)({ownerState:$,className:(0,a.A)(o.className,E.root,b,B),component:v,disabled:f,focusRipple:!y,focusVisibleClassName:(0,a.A)(E.focusVisible,S),ref:t,type:w},M,{classes:E,children:[T,h,I]}))}))},3357:(e,t,o)=>{o.d(t,{A:()=>z});var n=o(8587),r=o(8168),i=o(6540),a=o(4164),s=o(5659),l=o(7437),c=o(8466),d=o(5669),u=o(1848),p=o(8413),h=o(1609);function m(e){return(0,h.Ay)("MuiCircularProgress",e)}(0,p.A)("MuiCircularProgress",["root","determinate","indeterminate","colorPrimary","colorSecondary","svg","circle","circleDeterminate","circleIndeterminate","circleDisableShrink"]);var v=o(4848);const b=["className","color","disableShrink","size","style","thickness","value","variant"];let f,g,x,y,A=e=>e;const S=(0,l.i7)(f||(f=A` 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } `)),k=(0,l.i7)(g||(g=A` 0% { stroke-dasharray: 1px, 200px; stroke-dashoffset: 0; } 50% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -15px; } 100% { stroke-dasharray: 100px, 200px; stroke-dashoffset: -125px; } `)),C=(0,u.Ay)("span",{name:"MuiCircularProgress",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[o.variant],t[`color${(0,c.A)(o.color)}`]]}})((({ownerState:e,theme:t})=>(0,r.A)({display:"inline-block"},"determinate"===e.variant&&{transition:t.transitions.create("transform")},"inherit"!==e.color&&{color:(t.vars||t).palette[e.color].main})),(({ownerState:e})=>"indeterminate"===e.variant&&(0,l.AH)(x||(x=A` animation: ${0} 1.4s linear infinite; `),S))),R=(0,u.Ay)("svg",{name:"MuiCircularProgress",slot:"Svg",overridesResolver:(e,t)=>t.svg})({display:"block"}),w=(0,u.Ay)("circle",{name:"MuiCircularProgress",slot:"Circle",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.circle,t[`circle${(0,c.A)(o.variant)}`],o.disableShrink&&t.circleDisableShrink]}})((({ownerState:e,theme:t})=>(0,r.A)({stroke:"currentColor"},"determinate"===e.variant&&{transition:t.transitions.create("stroke-dashoffset")},"indeterminate"===e.variant&&{strokeDasharray:"80px, 200px",strokeDashoffset:0})),(({ownerState:e})=>"indeterminate"===e.variant&&!e.disableShrink&&(0,l.AH)(y||(y=A` animation: ${0} 1.4s ease-in-out infinite; `),k))),z=i.forwardRef((function(e,t){const o=(0,d.b)({props:e,name:"MuiCircularProgress"}),{className:i,color:l="primary",disableShrink:u=!1,size:p=40,style:h,thickness:f=3.6,value:g=0,variant:x="indeterminate"}=o,y=(0,n.A)(o,b),A=(0,r.A)({},o,{color:l,disableShrink:u,size:p,thickness:f,value:g,variant:x}),S=(e=>{const{classes:t,variant:o,color:n,disableShrink:r}=e,i={root:["root",o,`color${(0,c.A)(n)}`],svg:["svg"],circle:["circle",`circle${(0,c.A)(o)}`,r&&"circleDisableShrink"]};return(0,s.A)(i,m,t)})(A),k={},z={},M={};if("determinate"===x){const e=2*Math.PI*((44-f)/2);k.strokeDasharray=e.toFixed(3),M["aria-valuenow"]=Math.round(g),k.strokeDashoffset=`${((100-g)/100*e).toFixed(3)}px`,z.transform="rotate(-90deg)"}return(0,v.jsx)(C,(0,r.A)({className:(0,a.A)(S.root,i),style:(0,r.A)({width:p,height:p},z,h),ownerState:A,ref:t,role:"progressbar"},M,y,{children:(0,v.jsx)(R,{className:S.svg,ownerState:A,viewBox:"22 22 44 44",children:(0,v.jsx)(w,{className:S.circle,style:k,ownerState:A,cx:44,cy:44,r:(44-f)/2,fill:"none",strokeWidth:f})})}))}))},7951:(e,t,o)=>{o.d(t,{A:()=>s});var n=o(8261),r=o(8466),i=o(1848),a=o(5669);const s=(0,n.A)({createStyledComponent:(0,i.Ay)("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:o}=e;return[t.root,t[`maxWidth${(0,r.A)(String(o.maxWidth))}`],o.fixed&&t.fixed,o.disableGutters&&t.disableGutters]}}),useThemeProps:e=>(0,a.b)({props:e,name:"MuiContainer"})})},4519:(e,t,o)=>{o.d(t,{Ay:()=>d});var n=o(8168),r=o(6540),i=o(5669),a=o(5327),s=o(4848);const l=(e,t)=>(0,n.A)({WebkitFontSmoothing:"antialiased",MozOsxFontSmoothing:"grayscale",boxSizing:"border-box",WebkitTextSizeAdjust:"100%"},t&&!e.vars&&{colorScheme:e.palette.mode}),c=e=>(0,n.A)({color:(e.vars||e).palette.text.primary},e.typography.body1,{backgroundColor:(e.vars||e).palette.background.default,"@media print":{backgroundColor:(e.vars||e).palette.common.white}}),d=function(e){const t=(0,i.b)({props:e,name:"MuiCssBaseline"}),{children:o,enableColorScheme:d=!1}=t;return(0,s.jsxs)(r.Fragment,{children:[(0,s.jsx)(a.A,{styles:e=>((e,t=!1)=>{var o;const r={};t&&e.colorSchemes&&Object.entries(e.colorSchemes).forEach((([t,o])=>{var n;r[e.getColorSchemeSelector(t).replace(/\s*&/,"")]={colorScheme:null==(n=o.palette)?void 0:n.mode}}));let i=(0,n.A)({html:l(e,t),"*, *::before, *::after":{boxSizing:"inherit"},"strong, b":{fontWeight:e.typography.fontWeightBold},body:(0,n.A)({margin:0},c(e),{"&::backdrop":{backgroundColor:(e.vars||e).palette.background.default}})},r);const a=null==(o=e.components)||null==(o=o.MuiCssBaseline)?void 0:o.styleOverrides;return a&&(i=[i,a]),i})(e,d)}),o]})}},5669:(e,t,o)=>{o.d(t,{b:()=>r}),o(6540);var n=o(2221);function r(e){return(0,n.b)(e)}o(4848)},973:(e,t,o)=>{o.d(t,{A:()=>h});var n=o(8168),r=o(8587),i=o(6540),a=o(7353),s=o(4675),l=o(5186),c=o(6852),d=o(4848);const u=["addEndListener","appear","children","easing","in","onEnter","onEntered","onEntering","onExit","onExited","onExiting","style","timeout","TransitionComponent"],p={entering:{opacity:1},entered:{opacity:1}},h=i.forwardRef((function(e,t){const o=(0,s.A)(),h={enter:o.transitions.duration.enteringScreen,exit:o.transitions.duration.leavingScreen},{addEndListener:m,appear:v=!0,children:b,easing:f,in:g,onEnter:x,onEntered:y,onEntering:A,onExit:S,onExited:k,onExiting:C,style:R,timeout:w=h,TransitionComponent:z=a.Ay}=e,M=(0,r.A)(e,u),$=i.useRef(null),E=(0,c.A)($,b.ref,t),T=e=>t=>{if(e){const o=$.current;void 0===t?e(o):e(o,t)}},I=T(A),B=T(((e,t)=>{(0,l.q)(e);const n=(0,l.c)({style:R,timeout:w,easing:f},{mode:"enter"});e.style.webkitTransition=o.transitions.create("opacity",n),e.style.transition=o.transitions.create("opacity",n),x&&x(e,t)})),P=T(y),N=T(C),L=T((e=>{const t=(0,l.c)({style:R,timeout:w,easing:f},{mode:"exit"});e.style.webkitTransition=o.transitions.create("opacity",t),e.style.transition=o.transitions.create("opacity",t),S&&S(e)})),W=T(k);return(0,d.jsx)(z,(0,n.A)({appear:v,in:g,nodeRef:$,onEnter:B,onEntered:P,onEntering:I,onExit:L,onExited:W,onExiting:N,addEndListener:e=>{m&&m($.current,e)},timeout:w},M,{children:(e,t)=>i.cloneElement(b,(0,n.A)({style:(0,n.A)({opacity:0,visibility:"exited"!==e||g?void 0:"hidden"},p[e],R,b.props.style),ref:E},t))}))}))}}]); //# sourceMappingURL=data:application/json;charset=utf-8;base64,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UyxFQUNaUixPQUFRZSxFQUNSeFUsU0FBVXlVLEVBQ1ZmLFVBQVdhLEVBQ1huQixlQWhCMkJzQixJQUN2QnRCLEdBRUZBLEVBQWVRLEVBQVF4UixRQUFTc1MsRUFDbEMsRUFhQXpVLFFBQVNBLEdBQ1I4QixFQUFPLENBQ1JYLFNBQVUsQ0FBQ3VULEVBQU9DLElBQ0ksZUFBbUJ4VCxHQUFVLE9BQVMsQ0FDeERELE9BQU8sT0FBUyxDQUNkMlIsUUFBUyxFQUNUK0IsV0FBc0IsV0FBVkYsR0FBdUI1VSxPQUFvQnVELEVBQVgsVUFDM0N1QixFQUFPOFAsR0FBUXhULEVBQU9DLEVBQVM3QixNQUFNNEIsT0FDeENTLElBQUsySSxHQUNKcUssTUFHVCxHIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQm94L2JveENsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQm94L0JveC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL3RvdWNoUmlwcGxlQ2xhc3Nlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25CYXNlL1RvdWNoUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvUmlwcGxlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkJhc2UvYnV0dG9uQmFzZUNsYXNzZXMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uQmFzZS9CdXR0b25CYXNlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbi9idXR0b25DbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0J1dHRvbkdyb3VwL0J1dHRvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9CdXR0b25Hcm91cC9CdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvbWF0ZXJpYWwvQnV0dG9uL0J1dHRvbi5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9DaXJjdWxhclByb2dyZXNzL2NpcmN1bGFyUHJvZ3Jlc3NDbGFzc2VzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0NpcmN1bGFyUHJvZ3Jlc3MvQ2lyY3VsYXJQcm9ncmVzcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9tYXRlcmlhbC9Db250YWluZXIvQ29udGFpbmVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0Nzc0Jhc2VsaW5lL0Nzc0Jhc2VsaW5lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0RlZmF1bHRQcm9wc1Byb3ZpZGVyL0RlZmF1bHRQcm9wc1Byb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL21hdGVyaWFsL0ZhZGUvRmFkZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3NlcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzZXMnO1xuY29uc3QgYm94Q2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJveCcsIFsncm9vdCddKTtcbmV4cG9ydCBkZWZhdWx0IGJveENsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgeyBjcmVhdGVCb3ggfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgdW5zdGFibGVfQ2xhc3NOYW1lR2VuZXJhdG9yIGFzIENsYXNzTmFtZUdlbmVyYXRvciB9IGZyb20gJy4uL2NsYXNzTmFtZSc7XG5pbXBvcnQgeyBjcmVhdGVUaGVtZSB9IGZyb20gJy4uL3N0eWxlcyc7XG5pbXBvcnQgVEhFTUVfSUQgZnJvbSAnLi4vc3R5bGVzL2lkZW50aWZpZXInO1xuaW1wb3J0IGJveENsYXNzZXMgZnJvbSAnLi9ib3hDbGFzc2VzJztcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5jb25zdCBCb3ggPSBjcmVhdGVCb3goe1xuICB0aGVtZUlkOiBUSEVNRV9JRCxcbiAgZGVmYXVsdFRoZW1lLFxuICBkZWZhdWx0Q2xhc3NOYW1lOiBib3hDbGFzc2VzLnJvb3QsXG4gIGdlbmVyYXRlQ2xhc3NOYW1lOiBDbGFzc05hbWVHZW5lcmF0b3IuZ2VuZXJhdGVcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQm94LnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogVGhlIHN5c3RlbSBwcm9wIHRoYXQgYWxsb3dzIGRlZmluaW5nIHN5c3RlbSBvdmVycmlkZXMgYXMgd2VsbCBhcyBhZGRpdGlvbmFsIENTUyBzdHlsZXMuXG4gICAqL1xuICBzeDogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5T2YoUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5ib29sXSkpLCBQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQm94OyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0VG91Y2hSaXBwbGVVdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aVRvdWNoUmlwcGxlJywgc2xvdCk7XG59XG5jb25zdCB0b3VjaFJpcHBsZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlUb3VjaFJpcHBsZScsIFsncm9vdCcsICdyaXBwbGUnLCAncmlwcGxlVmlzaWJsZScsICdyaXBwbGVQdWxzYXRlJywgJ2NoaWxkJywgJ2NoaWxkTGVhdmluZycsICdjaGlsZFB1bHNhdGUnXSk7XG5leHBvcnQgZGVmYXVsdCB0b3VjaFJpcHBsZUNsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2VudGVyXCIsIFwiY2xhc3Nlc1wiLCBcImNsYXNzTmFtZVwiXTtcbmxldCBfID0gdCA9PiB0LFxuICBfdCxcbiAgX3QyLFxuICBfdDMsXG4gIF90NDtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUcmFuc2l0aW9uR3JvdXAgfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IHsga2V5ZnJhbWVzIH0gZnJvbSAnQG11aS9zeXN0ZW0nO1xuaW1wb3J0IHVzZVRpbWVvdXQgZnJvbSAnQG11aS91dGlscy91c2VUaW1lb3V0JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgUmlwcGxlIGZyb20gJy4vUmlwcGxlJztcbmltcG9ydCB0b3VjaFJpcHBsZUNsYXNzZXMgZnJvbSAnLi90b3VjaFJpcHBsZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IERVUkFUSU9OID0gNTUwO1xuZXhwb3J0IGNvbnN0IERFTEFZX1JJUFBMRSA9IDgwO1xuY29uc3QgZW50ZXJLZXlmcmFtZSA9IGtleWZyYW1lcyhfdCB8fCAoX3QgPSBfYFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwKTtcbiAgICBvcGFjaXR5OiAwLjE7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHNjYWxlKDEpO1xuICAgIG9wYWNpdHk6IDAuMztcbiAgfVxuYCkpO1xuY29uc3QgZXhpdEtleWZyYW1lID0ga2V5ZnJhbWVzKF90MiB8fCAoX3QyID0gX2BcbiAgMCUge1xuICAgIG9wYWNpdHk6IDE7XG4gIH1cblxuICAxMDAlIHtcbiAgICBvcGFjaXR5OiAwO1xuICB9XG5gKSk7XG5jb25zdCBwdWxzYXRlS2V5ZnJhbWUgPSBrZXlmcmFtZXMoX3QzIHx8IChfdDMgPSBfYFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgfVxuXG4gIDUwJSB7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgwLjkyKTtcbiAgfVxuXG4gIDEwMCUge1xuICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7XG4gIH1cbmApKTtcbmV4cG9ydCBjb25zdCBUb3VjaFJpcHBsZVJvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlUb3VjaFJpcHBsZScsXG4gIHNsb3Q6ICdSb290J1xufSkoe1xuICBvdmVyZmxvdzogJ2hpZGRlbicsXG4gIHBvaW50ZXJFdmVudHM6ICdub25lJyxcbiAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gIHpJbmRleDogMCxcbiAgdG9wOiAwLFxuICByaWdodDogMCxcbiAgYm90dG9tOiAwLFxuICBsZWZ0OiAwLFxuICBib3JkZXJSYWRpdXM6ICdpbmhlcml0J1xufSk7XG5cbi8vIFRoaXMgYHN0eWxlZCgpYCBmdW5jdGlvbiBpbnZva2VzIGtleWZyYW1lcy4gYHN0eWxlZC1jb21wb25lbnRzYCBvbmx5IHN1cHBvcnRzIGtleWZyYW1lc1xuLy8gaW4gc3RyaW5nIHRlbXBsYXRlcy4gRG8gbm90IGNvbnZlcnQgdGhlc2Ugc3R5bGVzIGluIEpTIG9iamVjdCBhcyBpdCB3aWxsIGJyZWFrLlxuZXhwb3J0IGNvbnN0IFRvdWNoUmlwcGxlUmlwcGxlID0gc3R5bGVkKFJpcHBsZSwge1xuICBuYW1lOiAnTXVpVG91Y2hSaXBwbGUnLFxuICBzbG90OiAnUmlwcGxlJ1xufSkoX3Q0IHx8IChfdDQgPSBfYFxuICBvcGFjaXR5OiAwO1xuICBwb3NpdGlvbjogYWJzb2x1dGU7XG5cbiAgJi4kezB9IHtcbiAgICBvcGFjaXR5OiAwLjM7XG4gICAgdHJhbnNmb3JtOiBzY2FsZSgxKTtcbiAgICBhbmltYXRpb24tbmFtZTogJHswfTtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiAkezB9O1xuICB9XG5cbiAgJi4kezB9IHtcbiAgICBhbmltYXRpb24tZHVyYXRpb246ICR7MH1tcztcbiAgfVxuXG4gICYgLiR7MH0ge1xuICAgIG9wYWNpdHk6IDE7XG4gICAgZGlzcGxheTogYmxvY2s7XG4gICAgd2lkdGg6IDEwMCU7XG4gICAgaGVpZ2h0OiAxMDAlO1xuICAgIGJvcmRlci1yYWRpdXM6IDUwJTtcbiAgICBiYWNrZ3JvdW5kLWNvbG9yOiBjdXJyZW50Q29sb3I7XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBvcGFjaXR5OiAwO1xuICAgIGFuaW1hdGlvbi1uYW1lOiAkezB9O1xuICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogJHswfW1zO1xuICAgIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246ICR7MH07XG4gIH1cblxuICAmIC4kezB9IHtcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XG4gICAgLyogQG5vZmxpcCAqL1xuICAgIGxlZnQ6IDBweDtcbiAgICB0b3A6IDA7XG4gICAgYW5pbWF0aW9uLW5hbWU6ICR7MH07XG4gICAgYW5pbWF0aW9uLWR1cmF0aW9uOiAyNTAwbXM7XG4gICAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogJHswfTtcbiAgICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiBpbmZpbml0ZTtcbiAgICBhbmltYXRpb24tZGVsYXk6IDIwMG1zO1xuICB9XG5gKSwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVZpc2libGUsIGVudGVyS2V5ZnJhbWUsIERVUkFUSU9OLCAoe1xuICB0aGVtZVxufSkgPT4gdGhlbWUudHJhbnNpdGlvbnMuZWFzaW5nLmVhc2VJbk91dCwgdG91Y2hSaXBwbGVDbGFzc2VzLnJpcHBsZVB1bHNhdGUsICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydGVyLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGQsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5jaGlsZExlYXZpbmcsIGV4aXRLZXlmcmFtZSwgRFVSQVRJT04sICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0LCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRQdWxzYXRlLCBwdWxzYXRlS2V5ZnJhbWUsICh7XG4gIHRoZW1lXG59KSA9PiB0aGVtZS50cmFuc2l0aW9ucy5lYXNpbmcuZWFzZUluT3V0KTtcblxuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICpcbiAqIFRPRE8gdjU6IE1ha2UgcHJpdmF0ZVxuICovXG5jb25zdCBUb3VjaFJpcHBsZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIFRvdWNoUmlwcGxlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aVRvdWNoUmlwcGxlJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2VudGVyOiBjZW50ZXJQcm9wID0gZmFsc2UsXG4gICAgICBjbGFzc2VzID0ge30sXG4gICAgICBjbGFzc05hbWVcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3QgW3JpcHBsZXMsIHNldFJpcHBsZXNdID0gUmVhY3QudXNlU3RhdGUoW10pO1xuICBjb25zdCBuZXh0S2V5ID0gUmVhY3QudXNlUmVmKDApO1xuICBjb25zdCByaXBwbGVDYWxsYmFjayA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAocmlwcGxlQ2FsbGJhY2suY3VycmVudCkge1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCgpO1xuICAgICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IG51bGw7XG4gICAgfVxuICB9LCBbcmlwcGxlc10pO1xuXG4gIC8vIFVzZWQgdG8gZmlsdGVyIG91dCBtb3VzZSBlbXVsYXRlZCBldmVudHMgb24gbW9iaWxlLlxuICBjb25zdCBpZ25vcmluZ01vdXNlRG93biA9IFJlYWN0LnVzZVJlZihmYWxzZSk7XG4gIC8vIFdlIHVzZSBhIHRpbWVyIGluIG9yZGVyIHRvIG9ubHkgc2hvdyB0aGUgcmlwcGxlcyBmb3IgdG91Y2ggXCJjbGlja1wiIGxpa2UgZXZlbnRzLlxuICAvLyBXZSBkb24ndCB3YW50IHRvIGRpc3BsYXkgdGhlIHJpcHBsZSBmb3IgdG91Y2ggc2Nyb2xsIGV2ZW50cy5cbiAgY29uc3Qgc3RhcnRUaW1lciA9IHVzZVRpbWVvdXQoKTtcblxuICAvLyBUaGlzIGlzIHRoZSBob29rIGNhbGxlZCBvbmNlIHRoZSBwcmV2aW91cyB0aW1lb3V0IGlzIHJlYWR5LlxuICBjb25zdCBzdGFydFRpbWVyQ29tbWl0ID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBjb250YWluZXIgPSBSZWFjdC51c2VSZWYobnVsbCk7XG4gIGNvbnN0IHN0YXJ0Q29tbWl0ID0gUmVhY3QudXNlQ2FsbGJhY2socGFyYW1zID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBwdWxzYXRlLFxuICAgICAgcmlwcGxlWCxcbiAgICAgIHJpcHBsZVksXG4gICAgICByaXBwbGVTaXplLFxuICAgICAgY2JcbiAgICB9ID0gcGFyYW1zO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiBbLi4ub2xkUmlwcGxlcywgLyojX19QVVJFX18qL19qc3goVG91Y2hSaXBwbGVSaXBwbGUsIHtcbiAgICAgIGNsYXNzZXM6IHtcbiAgICAgICAgcmlwcGxlOiBjbHN4KGNsYXNzZXMucmlwcGxlLCB0b3VjaFJpcHBsZUNsYXNzZXMucmlwcGxlKSxcbiAgICAgICAgcmlwcGxlVmlzaWJsZTogY2xzeChjbGFzc2VzLnJpcHBsZVZpc2libGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVWaXNpYmxlKSxcbiAgICAgICAgcmlwcGxlUHVsc2F0ZTogY2xzeChjbGFzc2VzLnJpcHBsZVB1bHNhdGUsIHRvdWNoUmlwcGxlQ2xhc3Nlcy5yaXBwbGVQdWxzYXRlKSxcbiAgICAgICAgY2hpbGQ6IGNsc3goY2xhc3Nlcy5jaGlsZCwgdG91Y2hSaXBwbGVDbGFzc2VzLmNoaWxkKSxcbiAgICAgICAgY2hpbGRMZWF2aW5nOiBjbHN4KGNsYXNzZXMuY2hpbGRMZWF2aW5nLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRMZWF2aW5nKSxcbiAgICAgICAgY2hpbGRQdWxzYXRlOiBjbHN4KGNsYXNzZXMuY2hpbGRQdWxzYXRlLCB0b3VjaFJpcHBsZUNsYXNzZXMuY2hpbGRQdWxzYXRlKVxuICAgICAgfSxcbiAgICAgIHRpbWVvdXQ6IERVUkFUSU9OLFxuICAgICAgcHVsc2F0ZTogcHVsc2F0ZSxcbiAgICAgIHJpcHBsZVg6IHJpcHBsZVgsXG4gICAgICByaXBwbGVZOiByaXBwbGVZLFxuICAgICAgcmlwcGxlU2l6ZTogcmlwcGxlU2l6ZVxuICAgIH0sIG5leHRLZXkuY3VycmVudCldKTtcbiAgICBuZXh0S2V5LmN1cnJlbnQgKz0gMTtcbiAgICByaXBwbGVDYWxsYmFjay5jdXJyZW50ID0gY2I7XG4gIH0sIFtjbGFzc2VzXSk7XG4gIGNvbnN0IHN0YXJ0ID0gUmVhY3QudXNlQ2FsbGJhY2soKGV2ZW50ID0ge30sIG9wdGlvbnMgPSB7fSwgY2IgPSAoKSA9PiB7fSkgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIHB1bHNhdGUgPSBmYWxzZSxcbiAgICAgIGNlbnRlciA9IGNlbnRlclByb3AgfHwgb3B0aW9ucy5wdWxzYXRlLFxuICAgICAgZmFrZUVsZW1lbnQgPSBmYWxzZSAvLyBGb3IgdGVzdCBwdXJwb3Nlc1xuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAnbW91c2Vkb3duJyAmJiBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50KSB7XG4gICAgICBpZ25vcmluZ01vdXNlRG93bi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hzdGFydCcpIHtcbiAgICAgIGlnbm9yaW5nTW91c2VEb3duLmN1cnJlbnQgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBlbGVtZW50ID0gZmFrZUVsZW1lbnQgPyBudWxsIDogY29udGFpbmVyLmN1cnJlbnQ7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQgPyBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDAsXG4gICAgICBsZWZ0OiAwLFxuICAgICAgdG9wOiAwXG4gICAgfTtcblxuICAgIC8vIEdldCB0aGUgc2l6ZSBvZiB0aGUgcmlwcGxlXG4gICAgbGV0IHJpcHBsZVg7XG4gICAgbGV0IHJpcHBsZVk7XG4gICAgbGV0IHJpcHBsZVNpemU7XG4gICAgaWYgKGNlbnRlciB8fCBldmVudCA9PT0gdW5kZWZpbmVkIHx8IGV2ZW50LmNsaWVudFggPT09IDAgJiYgZXZlbnQuY2xpZW50WSA9PT0gMCB8fCAhZXZlbnQuY2xpZW50WCAmJiAhZXZlbnQudG91Y2hlcykge1xuICAgICAgcmlwcGxlWCA9IE1hdGgucm91bmQocmVjdC53aWR0aCAvIDIpO1xuICAgICAgcmlwcGxlWSA9IE1hdGgucm91bmQocmVjdC5oZWlnaHQgLyAyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qge1xuICAgICAgICBjbGllbnRYLFxuICAgICAgICBjbGllbnRZXG4gICAgICB9ID0gZXZlbnQudG91Y2hlcyAmJiBldmVudC50b3VjaGVzLmxlbmd0aCA+IDAgPyBldmVudC50b3VjaGVzWzBdIDogZXZlbnQ7XG4gICAgICByaXBwbGVYID0gTWF0aC5yb3VuZChjbGllbnRYIC0gcmVjdC5sZWZ0KTtcbiAgICAgIHJpcHBsZVkgPSBNYXRoLnJvdW5kKGNsaWVudFkgLSByZWN0LnRvcCk7XG4gICAgfVxuICAgIGlmIChjZW50ZXIpIHtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoKDIgKiByZWN0LndpZHRoICoqIDIgKyByZWN0LmhlaWdodCAqKiAyKSAvIDMpO1xuXG4gICAgICAvLyBGb3Igc29tZSByZWFzb24gdGhlIGFuaW1hdGlvbiBpcyBicm9rZW4gb24gTW9iaWxlIENocm9tZSBpZiB0aGUgc2l6ZSBpcyBldmVuLlxuICAgICAgaWYgKHJpcHBsZVNpemUgJSAyID09PSAwKSB7XG4gICAgICAgIHJpcHBsZVNpemUgKz0gMTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc2l6ZVggPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50V2lkdGggOiAwKSAtIHJpcHBsZVgpLCByaXBwbGVYKSAqIDIgKyAyO1xuICAgICAgY29uc3Qgc2l6ZVkgPSBNYXRoLm1heChNYXRoLmFicygoZWxlbWVudCA/IGVsZW1lbnQuY2xpZW50SGVpZ2h0IDogMCkgLSByaXBwbGVZKSwgcmlwcGxlWSkgKiAyICsgMjtcbiAgICAgIHJpcHBsZVNpemUgPSBNYXRoLnNxcnQoc2l6ZVggKiogMiArIHNpemVZICoqIDIpO1xuICAgIH1cblxuICAgIC8vIFRvdWNoZSBkZXZpY2VzXG4gICAgaWYgKGV2ZW50ICE9IG51bGwgJiYgZXZlbnQudG91Y2hlcykge1xuICAgICAgLy8gY2hlY2sgdGhhdCB0aGlzIGlzbid0IGFub3RoZXIgdG91Y2hzdGFydCBkdWUgdG8gbXVsdGl0b3VjaFxuICAgICAgLy8gb3RoZXJ3aXNlIHdlIHdpbGwgb25seSBjbGVhciBhIHNpbmdsZSB0aW1lciB3aGVuIHVubW91bnRpbmcgd2hpbGUgdHdvXG4gICAgICAvLyBhcmUgcnVubmluZ1xuICAgICAgaWYgKHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9PT0gbnVsbCkge1xuICAgICAgICAvLyBQcmVwYXJlIHRoZSByaXBwbGUgZWZmZWN0LlxuICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSAoKSA9PiB7XG4gICAgICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICAgICAgcHVsc2F0ZSxcbiAgICAgICAgICAgIHJpcHBsZVgsXG4gICAgICAgICAgICByaXBwbGVZLFxuICAgICAgICAgICAgcmlwcGxlU2l6ZSxcbiAgICAgICAgICAgIGNiXG4gICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIERlbGF5IHRoZSBleGVjdXRpb24gb2YgdGhlIHJpcHBsZSBlZmZlY3QuXG4gICAgICAgIC8vIFdlIGhhdmUgdG8gbWFrZSBhIHRyYWRlb2ZmIHdpdGggdGhpcyBkZWxheSB2YWx1ZS5cbiAgICAgICAgc3RhcnRUaW1lci5zdGFydChERUxBWV9SSVBQTEUsICgpID0+IHtcbiAgICAgICAgICBpZiAoc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KSB7XG4gICAgICAgICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQoKTtcbiAgICAgICAgICAgIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCA9IG51bGw7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgc3RhcnRDb21taXQoe1xuICAgICAgICBwdWxzYXRlLFxuICAgICAgICByaXBwbGVYLFxuICAgICAgICByaXBwbGVZLFxuICAgICAgICByaXBwbGVTaXplLFxuICAgICAgICBjYlxuICAgICAgfSk7XG4gICAgfVxuICB9LCBbY2VudGVyUHJvcCwgc3RhcnRDb21taXQsIHN0YXJ0VGltZXJdKTtcbiAgY29uc3QgcHVsc2F0ZSA9IFJlYWN0LnVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzdGFydCh7fSwge1xuICAgICAgcHVsc2F0ZTogdHJ1ZVxuICAgIH0pO1xuICB9LCBbc3RhcnRdKTtcbiAgY29uc3Qgc3RvcCA9IFJlYWN0LnVzZUNhbGxiYWNrKChldmVudCwgY2IpID0+IHtcbiAgICBzdGFydFRpbWVyLmNsZWFyKCk7XG5cbiAgICAvLyBUaGUgdG91Y2ggaW50ZXJhY3Rpb24gb2NjdXJzIHRvbyBxdWlja2x5LlxuICAgIC8vIFdlIHN0aWxsIHdhbnQgdG8gc2hvdyByaXBwbGUgZWZmZWN0LlxuICAgIGlmICgoZXZlbnQgPT0gbnVsbCA/IHZvaWQgMCA6IGV2ZW50LnR5cGUpID09PSAndG91Y2hlbmQnICYmIHN0YXJ0VGltZXJDb21taXQuY3VycmVudCkge1xuICAgICAgc3RhcnRUaW1lckNvbW1pdC5jdXJyZW50KCk7XG4gICAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgICAgc3RhcnRUaW1lci5zdGFydCgwLCAoKSA9PiB7XG4gICAgICAgIHN0b3AoZXZlbnQsIGNiKTtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzdGFydFRpbWVyQ29tbWl0LmN1cnJlbnQgPSBudWxsO1xuICAgIHNldFJpcHBsZXMob2xkUmlwcGxlcyA9PiB7XG4gICAgICBpZiAob2xkUmlwcGxlcy5sZW5ndGggPiAwKSB7XG4gICAgICAgIHJldHVybiBvbGRSaXBwbGVzLnNsaWNlKDEpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIG9sZFJpcHBsZXM7XG4gICAgfSk7XG4gICAgcmlwcGxlQ2FsbGJhY2suY3VycmVudCA9IGNiO1xuICB9LCBbc3RhcnRUaW1lcl0pO1xuICBSZWFjdC51c2VJbXBlcmF0aXZlSGFuZGxlKHJlZiwgKCkgPT4gKHtcbiAgICBwdWxzYXRlLFxuICAgIHN0YXJ0LFxuICAgIHN0b3BcbiAgfSksIFtwdWxzYXRlLCBzdGFydCwgc3RvcF0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVG91Y2hSaXBwbGVSb290LCBfZXh0ZW5kcyh7XG4gICAgY2xhc3NOYW1lOiBjbHN4KHRvdWNoUmlwcGxlQ2xhc3Nlcy5yb290LCBjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSksXG4gICAgcmVmOiBjb250YWluZXJcbiAgfSwgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goVHJhbnNpdGlvbkdyb3VwLCB7XG4gICAgICBjb21wb25lbnQ6IG51bGwsXG4gICAgICBleGl0OiB0cnVlLFxuICAgICAgY2hpbGRyZW46IHJpcHBsZXNcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRvdWNoUmlwcGxlLnByb3BUeXBlcyA9IHtcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBzdGFydHMgYXQgdGhlIGNlbnRlciBvZiB0aGUgY29tcG9uZW50XG4gICAqIHJhdGhlciB0aGFuIGF0IHRoZSBwb2ludCBvZiBpbnRlcmFjdGlvbi5cbiAgICovXG4gIGNlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgVG91Y2hSaXBwbGU7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5cbi8qKlxuICogQGlnbm9yZSAtIGludGVybmFsIGNvbXBvbmVudC5cbiAqL1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmZ1bmN0aW9uIFJpcHBsZShwcm9wcykge1xuICBjb25zdCB7XG4gICAgY2xhc3NOYW1lLFxuICAgIGNsYXNzZXMsXG4gICAgcHVsc2F0ZSA9IGZhbHNlLFxuICAgIHJpcHBsZVgsXG4gICAgcmlwcGxlWSxcbiAgICByaXBwbGVTaXplLFxuICAgIGluOiBpblByb3AsXG4gICAgb25FeGl0ZWQsXG4gICAgdGltZW91dFxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IFtsZWF2aW5nLCBzZXRMZWF2aW5nXSA9IFJlYWN0LnVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmlwcGxlQ2xhc3NOYW1lID0gY2xzeChjbGFzc05hbWUsIGNsYXNzZXMucmlwcGxlLCBjbGFzc2VzLnJpcHBsZVZpc2libGUsIHB1bHNhdGUgJiYgY2xhc3Nlcy5yaXBwbGVQdWxzYXRlKTtcbiAgY29uc3QgcmlwcGxlU3R5bGVzID0ge1xuICAgIHdpZHRoOiByaXBwbGVTaXplLFxuICAgIGhlaWdodDogcmlwcGxlU2l6ZSxcbiAgICB0b3A6IC0ocmlwcGxlU2l6ZSAvIDIpICsgcmlwcGxlWSxcbiAgICBsZWZ0OiAtKHJpcHBsZVNpemUgLyAyKSArIHJpcHBsZVhcbiAgfTtcbiAgY29uc3QgY2hpbGRDbGFzc05hbWUgPSBjbHN4KGNsYXNzZXMuY2hpbGQsIGxlYXZpbmcgJiYgY2xhc3Nlcy5jaGlsZExlYXZpbmcsIHB1bHNhdGUgJiYgY2xhc3Nlcy5jaGlsZFB1bHNhdGUpO1xuICBpZiAoIWluUHJvcCAmJiAhbGVhdmluZykge1xuICAgIHNldExlYXZpbmcodHJ1ZSk7XG4gIH1cbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWluUHJvcCAmJiBvbkV4aXRlZCAhPSBudWxsKSB7XG4gICAgICAvLyByZWFjdC10cmFuc2l0aW9uLWdyb3VwI29uRXhpdGVkXG4gICAgICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KG9uRXhpdGVkLCB0aW1lb3V0KTtcbiAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpO1xuICAgICAgfTtcbiAgICB9XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSwgW29uRXhpdGVkLCBpblByb3AsIHRpbWVvdXRdKTtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KFwic3BhblwiLCB7XG4gICAgY2xhc3NOYW1lOiByaXBwbGVDbGFzc05hbWUsXG4gICAgc3R5bGU6IHJpcHBsZVN0eWxlcyxcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goXCJzcGFuXCIsIHtcbiAgICAgIGNsYXNzTmFtZTogY2hpbGRDbGFzc05hbWVcbiAgICB9KVxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJpcHBsZS5wcm9wVHlwZXMgPSB7XG4gIC8qKlxuICAgKiBPdmVycmlkZSBvciBleHRlbmQgdGhlIHN0eWxlcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQuXG4gICAqL1xuICBjbGFzc2VzOiBQcm9wVHlwZXMub2JqZWN0LmlzUmVxdWlyZWQsXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmUgLSBpbmplY3RlZCBmcm9tIFRyYW5zaXRpb25Hcm91cFxuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogQGlnbm9yZSAtIGluamVjdGVkIGZyb20gVHJhbnNpdGlvbkdyb3VwXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgcHVsc2F0ZXMsIHR5cGljYWxseSBpbmRpY2F0aW5nIHRoZSBrZXlib2FyZCBmb2N1cyBzdGF0ZSBvZiBhbiBlbGVtZW50LlxuICAgKi9cbiAgcHVsc2F0ZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEaWFtZXRlciBvZiB0aGUgcmlwcGxlLlxuICAgKi9cbiAgcmlwcGxlU2l6ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIEhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVYOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogVmVydGljYWwgcG9zaXRpb24gb2YgdGhlIHJpcHBsZSBjZW50ZXIuXG4gICAqL1xuICByaXBwbGVZOiBQcm9wVHlwZXMubnVtYmVyLFxuICAvKipcbiAgICogZXhpdCBkZWxheVxuICAgKi9cbiAgdGltZW91dDogUHJvcFR5cGVzLm51bWJlci5pc1JlcXVpcmVkXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgUmlwcGxlOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQnV0dG9uQmFzZScsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQmFzZUNsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlCdXR0b25CYXNlJywgWydyb290JywgJ2Rpc2FibGVkJywgJ2ZvY3VzVmlzaWJsZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkJhc2VDbGFzc2VzOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFjdGlvblwiLCBcImNlbnRlclJpcHBsZVwiLCBcImNoaWxkcmVuXCIsIFwiY2xhc3NOYW1lXCIsIFwiY29tcG9uZW50XCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlUmlwcGxlXCIsIFwiZGlzYWJsZVRvdWNoUmlwcGxlXCIsIFwiZm9jdXNSaXBwbGVcIiwgXCJmb2N1c1Zpc2libGVDbGFzc05hbWVcIiwgXCJMaW5rQ29tcG9uZW50XCIsIFwib25CbHVyXCIsIFwib25DbGlja1wiLCBcIm9uQ29udGV4dE1lbnVcIiwgXCJvbkRyYWdMZWF2ZVwiLCBcIm9uRm9jdXNcIiwgXCJvbkZvY3VzVmlzaWJsZVwiLCBcIm9uS2V5RG93blwiLCBcIm9uS2V5VXBcIiwgXCJvbk1vdXNlRG93blwiLCBcIm9uTW91c2VMZWF2ZVwiLCBcIm9uTW91c2VVcFwiLCBcIm9uVG91Y2hFbmRcIiwgXCJvblRvdWNoTW92ZVwiLCBcIm9uVG91Y2hTdGFydFwiLCBcInRhYkluZGV4XCIsIFwiVG91Y2hSaXBwbGVQcm9wc1wiLCBcInRvdWNoUmlwcGxlUmVmXCIsIFwidHlwZVwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZWZUeXBlIGZyb20gJ0BtdWkvdXRpbHMvcmVmVHlwZSc7XG5pbXBvcnQgZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYgZnJvbSAnQG11aS91dGlscy9lbGVtZW50VHlwZUFjY2VwdGluZ1JlZic7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgc3R5bGVkIGZyb20gJy4uL3N0eWxlcy9zdHlsZWQnO1xuaW1wb3J0IHsgdXNlRGVmYXVsdFByb3BzIH0gZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgdXNlRXZlbnRDYWxsYmFjayBmcm9tICcuLi91dGlscy91c2VFdmVudENhbGxiYWNrJztcbmltcG9ydCB1c2VJc0ZvY3VzVmlzaWJsZSBmcm9tICcuLi91dGlscy91c2VJc0ZvY3VzVmlzaWJsZSc7XG5pbXBvcnQgVG91Y2hSaXBwbGUgZnJvbSAnLi9Ub3VjaFJpcHBsZSc7XG5pbXBvcnQgYnV0dG9uQmFzZUNsYXNzZXMsIHsgZ2V0QnV0dG9uQmFzZVV0aWxpdHlDbGFzcyB9IGZyb20gJy4vYnV0dG9uQmFzZUNsYXNzZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmltcG9ydCB7IGpzeHMgYXMgX2pzeHMgfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBkaXNhYmxlZCxcbiAgICBmb2N1c1Zpc2libGUsXG4gICAgZm9jdXNWaXNpYmxlQ2xhc3NOYW1lLFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIGRpc2FibGVkICYmICdkaXNhYmxlZCcsIGZvY3VzVmlzaWJsZSAmJiAnZm9jdXNWaXNpYmxlJ11cbiAgfTtcbiAgY29uc3QgY29tcG9zZWRDbGFzc2VzID0gY29tcG9zZUNsYXNzZXMoc2xvdHMsIGdldEJ1dHRvbkJhc2VVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xuICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSkge1xuICAgIGNvbXBvc2VkQ2xhc3Nlcy5yb290ICs9IGAgJHtmb2N1c1Zpc2libGVDbGFzc05hbWV9YDtcbiAgfVxuICByZXR1cm4gY29tcG9zZWRDbGFzc2VzO1xufTtcbmV4cG9ydCBjb25zdCBCdXR0b25CYXNlUm9vdCA9IHN0eWxlZCgnYnV0dG9uJywge1xuICBuYW1lOiAnTXVpQnV0dG9uQmFzZScsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXMucm9vdFxufSkoe1xuICBkaXNwbGF5OiAnaW5saW5lLWZsZXgnLFxuICBhbGlnbkl0ZW1zOiAnY2VudGVyJyxcbiAganVzdGlmeUNvbnRlbnQ6ICdjZW50ZXInLFxuICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgYm94U2l6aW5nOiAnYm9yZGVyLWJveCcsXG4gIFdlYmtpdFRhcEhpZ2hsaWdodENvbG9yOiAndHJhbnNwYXJlbnQnLFxuICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gIC8vIFJlc2V0IGRlZmF1bHQgdmFsdWVcbiAgLy8gV2UgZGlzYWJsZSB0aGUgZm9jdXMgcmluZyBmb3IgbW91c2UsIHRvdWNoIGFuZCBrZXlib2FyZCB1c2Vycy5cbiAgb3V0bGluZTogMCxcbiAgYm9yZGVyOiAwLFxuICBtYXJnaW46IDAsXG4gIC8vIFJlbW92ZSB0aGUgbWFyZ2luIGluIFNhZmFyaVxuICBib3JkZXJSYWRpdXM6IDAsXG4gIHBhZGRpbmc6IDAsXG4gIC8vIFJlbW92ZSB0aGUgcGFkZGluZyBpbiBGaXJlZm94XG4gIGN1cnNvcjogJ3BvaW50ZXInLFxuICB1c2VyU2VsZWN0OiAnbm9uZScsXG4gIHZlcnRpY2FsQWxpZ246ICdtaWRkbGUnLFxuICBNb3pBcHBlYXJhbmNlOiAnbm9uZScsXG4gIC8vIFJlc2V0XG4gIFdlYmtpdEFwcGVhcmFuY2U6ICdub25lJyxcbiAgLy8gUmVzZXRcbiAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgLy8gU28gd2UgdGFrZSBwcmVjZWRlbnQgb3ZlciB0aGUgc3R5bGUgb2YgYSBuYXRpdmUgPGEgLz4gZWxlbWVudC5cbiAgY29sb3I6ICdpbmhlcml0JyxcbiAgJyY6Oi1tb3otZm9jdXMtaW5uZXInOiB7XG4gICAgYm9yZGVyU3R5bGU6ICdub25lJyAvLyBSZW1vdmUgRmlyZWZveCBkb3R0ZWQgb3V0bGluZS5cbiAgfSxcbiAgW2AmLiR7YnV0dG9uQmFzZUNsYXNzZXMuZGlzYWJsZWR9YF06IHtcbiAgICBwb2ludGVyRXZlbnRzOiAnbm9uZScsXG4gICAgLy8gRGlzYWJsZSBsaW5rIGludGVyYWN0aW9uc1xuICAgIGN1cnNvcjogJ2RlZmF1bHQnXG4gIH0sXG4gICdAbWVkaWEgcHJpbnQnOiB7XG4gICAgY29sb3JBZGp1c3Q6ICdleGFjdCdcbiAgfVxufSk7XG5cbi8qKlxuICogYEJ1dHRvbkJhc2VgIGNvbnRhaW5zIGFzIGZldyBzdHlsZXMgYXMgcG9zc2libGUuXG4gKiBJdCBhaW1zIHRvIGJlIGEgc2ltcGxlIGJ1aWxkaW5nIGJsb2NrIGZvciBjcmVhdGluZyBhIGJ1dHRvbi5cbiAqIEl0IGNvbnRhaW5zIGEgbG9hZCBvZiBzdHlsZSByZXNldCBhbmQgc29tZSBmb2N1cy9yaXBwbGUgbG9naWMuXG4gKi9cbmNvbnN0IEJ1dHRvbkJhc2UgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBCdXR0b25CYXNlKGluUHJvcHMsIHJlZikge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUJ1dHRvbkJhc2UnXG4gIH0pO1xuICBjb25zdCB7XG4gICAgICBhY3Rpb24sXG4gICAgICBjZW50ZXJSaXBwbGUgPSBmYWxzZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgY29tcG9uZW50ID0gJ2J1dHRvbicsXG4gICAgICBkaXNhYmxlZCA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVJpcHBsZSA9IGZhbHNlLFxuICAgICAgZGlzYWJsZVRvdWNoUmlwcGxlID0gZmFsc2UsXG4gICAgICBmb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgTGlua0NvbXBvbmVudCA9ICdhJyxcbiAgICAgIG9uQmx1cixcbiAgICAgIG9uQ2xpY2ssXG4gICAgICBvbkNvbnRleHRNZW51LFxuICAgICAgb25EcmFnTGVhdmUsXG4gICAgICBvbkZvY3VzLFxuICAgICAgb25Gb2N1c1Zpc2libGUsXG4gICAgICBvbktleURvd24sXG4gICAgICBvbktleVVwLFxuICAgICAgb25Nb3VzZURvd24sXG4gICAgICBvbk1vdXNlTGVhdmUsXG4gICAgICBvbk1vdXNlVXAsXG4gICAgICBvblRvdWNoRW5kLFxuICAgICAgb25Ub3VjaE1vdmUsXG4gICAgICBvblRvdWNoU3RhcnQsXG4gICAgICB0YWJJbmRleCA9IDAsXG4gICAgICBUb3VjaFJpcHBsZVByb3BzLFxuICAgICAgdG91Y2hSaXBwbGVSZWYsXG4gICAgICB0eXBlXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJ1dHRvblJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgcmlwcGxlUmVmID0gUmVhY3QudXNlUmVmKG51bGwpO1xuICBjb25zdCBoYW5kbGVSaXBwbGVSZWYgPSB1c2VGb3JrUmVmKHJpcHBsZVJlZiwgdG91Y2hSaXBwbGVSZWYpO1xuICBjb25zdCB7XG4gICAgaXNGb2N1c1Zpc2libGVSZWYsXG4gICAgb25Gb2N1czogaGFuZGxlRm9jdXNWaXNpYmxlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1clZpc2libGUsXG4gICAgcmVmOiBmb2N1c1Zpc2libGVSZWZcbiAgfSA9IHVzZUlzRm9jdXNWaXNpYmxlKCk7XG4gIGNvbnN0IFtmb2N1c1Zpc2libGUsIHNldEZvY3VzVmlzaWJsZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIGlmIChkaXNhYmxlZCAmJiBmb2N1c1Zpc2libGUpIHtcbiAgICBzZXRGb2N1c1Zpc2libGUoZmFsc2UpO1xuICB9XG4gIFJlYWN0LnVzZUltcGVyYXRpdmVIYW5kbGUoYWN0aW9uLCAoKSA9PiAoe1xuICAgIGZvY3VzVmlzaWJsZTogKCkgPT4ge1xuICAgICAgc2V0Rm9jdXNWaXNpYmxlKHRydWUpO1xuICAgICAgYnV0dG9uUmVmLmN1cnJlbnQuZm9jdXMoKTtcbiAgICB9XG4gIH0pLCBbXSk7XG4gIGNvbnN0IFttb3VudGVkU3RhdGUsIHNldE1vdW50ZWRTdGF0ZV0gPSBSZWFjdC51c2VTdGF0ZShmYWxzZSk7XG4gIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgc2V0TW91bnRlZFN0YXRlKHRydWUpO1xuICB9LCBbXSk7XG4gIGNvbnN0IGVuYWJsZVRvdWNoUmlwcGxlID0gbW91bnRlZFN0YXRlICYmICFkaXNhYmxlUmlwcGxlICYmICFkaXNhYmxlZDtcbiAgUmVhY3QudXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNWaXNpYmxlICYmIGZvY3VzUmlwcGxlICYmICFkaXNhYmxlUmlwcGxlICYmIG1vdW50ZWRTdGF0ZSkge1xuICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZSgpO1xuICAgIH1cbiAgfSwgW2Rpc2FibGVSaXBwbGUsIGZvY3VzUmlwcGxlLCBmb2N1c1Zpc2libGUsIG1vdW50ZWRTdGF0ZV0pO1xuICBmdW5jdGlvbiB1c2VSaXBwbGVIYW5kbGVyKHJpcHBsZUFjdGlvbiwgZXZlbnRDYWxsYmFjaywgc2tpcFJpcHBsZUFjdGlvbiA9IGRpc2FibGVUb3VjaFJpcHBsZSkge1xuICAgIHJldHVybiB1c2VFdmVudENhbGxiYWNrKGV2ZW50ID0+IHtcbiAgICAgIGlmIChldmVudENhbGxiYWNrKSB7XG4gICAgICAgIGV2ZW50Q2FsbGJhY2soZXZlbnQpO1xuICAgICAgfVxuICAgICAgY29uc3QgaWdub3JlID0gc2tpcFJpcHBsZUFjdGlvbjtcbiAgICAgIGlmICghaWdub3JlICYmIHJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50W3JpcHBsZUFjdGlvbl0oZXZlbnQpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbiAgY29uc3QgaGFuZGxlTW91c2VEb3duID0gdXNlUmlwcGxlSGFuZGxlcignc3RhcnQnLCBvbk1vdXNlRG93bik7XG4gIGNvbnN0IGhhbmRsZUNvbnRleHRNZW51ID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uQ29udGV4dE1lbnUpO1xuICBjb25zdCBoYW5kbGVEcmFnTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25EcmFnTGVhdmUpO1xuICBjb25zdCBoYW5kbGVNb3VzZVVwID0gdXNlUmlwcGxlSGFuZGxlcignc3RvcCcsIG9uTW91c2VVcCk7XG4gIGNvbnN0IGhhbmRsZU1vdXNlTGVhdmUgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGlmIChmb2N1c1Zpc2libGUpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbk1vdXNlTGVhdmUpIHtcbiAgICAgIG9uTW91c2VMZWF2ZShldmVudCk7XG4gICAgfVxuICB9KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hTdGFydCA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0YXJ0Jywgb25Ub3VjaFN0YXJ0KTtcbiAgY29uc3QgaGFuZGxlVG91Y2hFbmQgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgb25Ub3VjaEVuZCk7XG4gIGNvbnN0IGhhbmRsZVRvdWNoTW92ZSA9IHVzZVJpcHBsZUhhbmRsZXIoJ3N0b3AnLCBvblRvdWNoTW92ZSk7XG4gIGNvbnN0IGhhbmRsZUJsdXIgPSB1c2VSaXBwbGVIYW5kbGVyKCdzdG9wJywgZXZlbnQgPT4ge1xuICAgIGhhbmRsZUJsdXJWaXNpYmxlKGV2ZW50KTtcbiAgICBpZiAoaXNGb2N1c1Zpc2libGVSZWYuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZShmYWxzZSk7XG4gICAgfVxuICAgIGlmIChvbkJsdXIpIHtcbiAgICAgIG9uQmx1cihldmVudCk7XG4gICAgfVxuICB9LCBmYWxzZSk7XG4gIGNvbnN0IGhhbmRsZUZvY3VzID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gRml4IGZvciBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzc3NjlcbiAgICBpZiAoIWJ1dHRvblJlZi5jdXJyZW50KSB7XG4gICAgICBidXR0b25SZWYuY3VycmVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQ7XG4gICAgfVxuICAgIGhhbmRsZUZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgaWYgKGlzRm9jdXNWaXNpYmxlUmVmLmN1cnJlbnQgPT09IHRydWUpIHtcbiAgICAgIHNldEZvY3VzVmlzaWJsZSh0cnVlKTtcbiAgICAgIGlmIChvbkZvY3VzVmlzaWJsZSkge1xuICAgICAgICBvbkZvY3VzVmlzaWJsZShldmVudCk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvbkZvY3VzKSB7XG4gICAgICBvbkZvY3VzKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBpc05vbk5hdGl2ZUJ1dHRvbiA9ICgpID0+IHtcbiAgICBjb25zdCBidXR0b24gPSBidXR0b25SZWYuY3VycmVudDtcbiAgICByZXR1cm4gY29tcG9uZW50ICYmIGNvbXBvbmVudCAhPT0gJ2J1dHRvbicgJiYgIShidXR0b24udGFnTmFtZSA9PT0gJ0EnICYmIGJ1dHRvbi5ocmVmKTtcbiAgfTtcblxuICAvKipcbiAgICogSUUxMSBzaGltIGZvciBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvS2V5Ym9hcmRFdmVudC9yZXBlYXRcbiAgICovXG4gIGNvbnN0IGtleWRvd25SZWYgPSBSZWFjdC51c2VSZWYoZmFsc2UpO1xuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlRXZlbnRDYWxsYmFjayhldmVudCA9PiB7XG4gICAgLy8gQ2hlY2sgaWYga2V5IGlzIGFscmVhZHkgZG93biB0byBhdm9pZCByZXBlYXRzIGJlaW5nIGNvdW50ZWQgYXMgbXVsdGlwbGUgYWN0aXZhdGlvbnNcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgIWtleWRvd25SZWYuY3VycmVudCAmJiBmb2N1c1Zpc2libGUgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGtleWRvd25SZWYuY3VycmVudCA9IHRydWU7XG4gICAgICByaXBwbGVSZWYuY3VycmVudC5zdG9wKGV2ZW50LCAoKSA9PiB7XG4gICAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0YXJ0KGV2ZW50KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoZXZlbnQudGFyZ2V0ID09PSBldmVudC5jdXJyZW50VGFyZ2V0ICYmIGlzTm9uTmF0aXZlQnV0dG9uKCkgJiYgZXZlbnQua2V5ID09PSAnICcpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgfVxuICAgIGlmIChvbktleURvd24pIHtcbiAgICAgIG9uS2V5RG93bihldmVudCk7XG4gICAgfVxuXG4gICAgLy8gS2V5Ym9hcmQgYWNjZXNzaWJpbGl0eSBmb3Igbm9uIGludGVyYWN0aXZlIGVsZW1lbnRzXG4gICAgaWYgKGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJ0VudGVyJyAmJiAhZGlzYWJsZWQpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAob25DbGljaykge1xuICAgICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVLZXlVcCA9IHVzZUV2ZW50Q2FsbGJhY2soZXZlbnQgPT4ge1xuICAgIC8vIGNhbGxpbmcgcHJldmVudERlZmF1bHQgaW4ga2V5VXAgb24gYSA8YnV0dG9uPiB3aWxsIG5vdCBkaXNwYXRjaCBhIGNsaWNrIGV2ZW50IGlmIFNwYWNlIGlzIHByZXNzZWRcbiAgICAvLyBodHRwczovL2NvZGVzYW5kYm94LmlvL3Avc2FuZGJveC9idXR0b24ta2V5dXAtcHJldmVudGRlZmF1bHQtZG43ZjBcbiAgICBpZiAoZm9jdXNSaXBwbGUgJiYgZXZlbnQua2V5ID09PSAnICcgJiYgcmlwcGxlUmVmLmN1cnJlbnQgJiYgZm9jdXNWaXNpYmxlICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBrZXlkb3duUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgIHJpcHBsZVJlZi5jdXJyZW50LnN0b3AoZXZlbnQsICgpID0+IHtcbiAgICAgICAgcmlwcGxlUmVmLmN1cnJlbnQucHVsc2F0ZShldmVudCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKG9uS2V5VXApIHtcbiAgICAgIG9uS2V5VXAoZXZlbnQpO1xuICAgIH1cblxuICAgIC8vIEtleWJvYXJkIGFjY2Vzc2liaWxpdHkgZm9yIG5vbiBpbnRlcmFjdGl2ZSBlbGVtZW50c1xuICAgIGlmIChvbkNsaWNrICYmIGV2ZW50LnRhcmdldCA9PT0gZXZlbnQuY3VycmVudFRhcmdldCAmJiBpc05vbk5hdGl2ZUJ1dHRvbigpICYmIGV2ZW50LmtleSA9PT0gJyAnICYmICFldmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBvbkNsaWNrKGV2ZW50KTtcbiAgICB9XG4gIH0pO1xuICBsZXQgQ29tcG9uZW50UHJvcCA9IGNvbXBvbmVudDtcbiAgaWYgKENvbXBvbmVudFByb3AgPT09ICdidXR0b24nICYmIChvdGhlci5ocmVmIHx8IG90aGVyLnRvKSkge1xuICAgIENvbXBvbmVudFByb3AgPSBMaW5rQ29tcG9uZW50O1xuICB9XG4gIGNvbnN0IGJ1dHRvblByb3BzID0ge307XG4gIGlmIChDb21wb25lbnRQcm9wID09PSAnYnV0dG9uJykge1xuICAgIGJ1dHRvblByb3BzLnR5cGUgPSB0eXBlID09PSB1bmRlZmluZWQgPyAnYnV0dG9uJyA6IHR5cGU7XG4gICAgYnV0dG9uUHJvcHMuZGlzYWJsZWQgPSBkaXNhYmxlZDtcbiAgfSBlbHNlIHtcbiAgICBpZiAoIW90aGVyLmhyZWYgJiYgIW90aGVyLnRvKSB7XG4gICAgICBidXR0b25Qcm9wcy5yb2xlID0gJ2J1dHRvbic7XG4gICAgfVxuICAgIGlmIChkaXNhYmxlZCkge1xuICAgICAgYnV0dG9uUHJvcHNbJ2FyaWEtZGlzYWJsZWQnXSA9IGRpc2FibGVkO1xuICAgIH1cbiAgfVxuICBjb25zdCBoYW5kbGVSZWYgPSB1c2VGb3JrUmVmKHJlZiwgZm9jdXNWaXNpYmxlUmVmLCBidXR0b25SZWYpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZUVmZmVjdCgoKSA9PiB7XG4gICAgICBpZiAoZW5hYmxlVG91Y2hSaXBwbGUgJiYgIXJpcHBsZVJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoWydNVUk6IFRoZSBgY29tcG9uZW50YCBwcm9wIHByb3ZpZGVkIHRvIEJ1dHRvbkJhc2UgaXMgaW52YWxpZC4nLCAnUGxlYXNlIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gcHJvcCBpcyByZW5kZXJlZCBpbiB0aGlzIGN1c3RvbSBjb21wb25lbnQuJ10uam9pbignXFxuJykpO1xuICAgICAgfVxuICAgIH0sIFtlbmFibGVUb3VjaFJpcHBsZV0pO1xuICB9XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjZW50ZXJSaXBwbGUsXG4gICAgY29tcG9uZW50LFxuICAgIGRpc2FibGVkLFxuICAgIGRpc2FibGVSaXBwbGUsXG4gICAgZGlzYWJsZVRvdWNoUmlwcGxlLFxuICAgIGZvY3VzUmlwcGxlLFxuICAgIHRhYkluZGV4LFxuICAgIGZvY3VzVmlzaWJsZVxuICB9KTtcbiAgY29uc3QgY2xhc3NlcyA9IHVzZVV0aWxpdHlDbGFzc2VzKG93bmVyU3RhdGUpO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvbkJhc2VSb290LCBfZXh0ZW5kcyh7XG4gICAgYXM6IENvbXBvbmVudFByb3AsXG4gICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzZXMucm9vdCwgY2xhc3NOYW1lKSxcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIG9uQmx1cjogaGFuZGxlQmx1cixcbiAgICBvbkNsaWNrOiBvbkNsaWNrLFxuICAgIG9uQ29udGV4dE1lbnU6IGhhbmRsZUNvbnRleHRNZW51LFxuICAgIG9uRm9jdXM6IGhhbmRsZUZvY3VzLFxuICAgIG9uS2V5RG93bjogaGFuZGxlS2V5RG93bixcbiAgICBvbktleVVwOiBoYW5kbGVLZXlVcCxcbiAgICBvbk1vdXNlRG93bjogaGFuZGxlTW91c2VEb3duLFxuICAgIG9uTW91c2VMZWF2ZTogaGFuZGxlTW91c2VMZWF2ZSxcbiAgICBvbk1vdXNlVXA6IGhhbmRsZU1vdXNlVXAsXG4gICAgb25EcmFnTGVhdmU6IGhhbmRsZURyYWdMZWF2ZSxcbiAgICBvblRvdWNoRW5kOiBoYW5kbGVUb3VjaEVuZCxcbiAgICBvblRvdWNoTW92ZTogaGFuZGxlVG91Y2hNb3ZlLFxuICAgIG9uVG91Y2hTdGFydDogaGFuZGxlVG91Y2hTdGFydCxcbiAgICByZWY6IGhhbmRsZVJlZixcbiAgICB0YWJJbmRleDogZGlzYWJsZWQgPyAtMSA6IHRhYkluZGV4LFxuICAgIHR5cGU6IHR5cGVcbiAgfSwgYnV0dG9uUHJvcHMsIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IFtjaGlsZHJlbiwgZW5hYmxlVG91Y2hSaXBwbGUgP1xuICAgIC8qI19fUFVSRV9fKi9cbiAgICAvKiBUb3VjaFJpcHBsZSBpcyBvbmx5IG5lZWRlZCBjbGllbnQtc2lkZSwgeDIgYm9vc3Qgb24gdGhlIHNlcnZlci4gKi9cbiAgICBfanN4KFRvdWNoUmlwcGxlLCBfZXh0ZW5kcyh7XG4gICAgICByZWY6IGhhbmRsZVJpcHBsZVJlZixcbiAgICAgIGNlbnRlcjogY2VudGVyUmlwcGxlXG4gICAgfSwgVG91Y2hSaXBwbGVQcm9wcykpIDogbnVsbF1cbiAgfSkpO1xufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBCdXR0b25CYXNlLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEEgcmVmIGZvciBpbXBlcmF0aXZlIGFjdGlvbnMuXG4gICAqIEl0IGN1cnJlbnRseSBvbmx5IHN1cHBvcnRzIGBmb2N1c1Zpc2libGUoKWAgYWN0aW9uLlxuICAgKi9cbiAgYWN0aW9uOiByZWZUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgcmlwcGxlcyBhcmUgY2VudGVyZWQuXG4gICAqIFRoZXkgd29uJ3Qgc3RhcnQgYXQgdGhlIGN1cnNvciBpbnRlcmFjdGlvbiBwb3NpdGlvbi5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGNlbnRlclJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogZWxlbWVudFR5cGVBY2NlcHRpbmdSZWYsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSByaXBwbGUgZWZmZWN0IGlzIGRpc2FibGVkLlxuICAgKlxuICAgKiDimqDvuI8gV2l0aG91dCBhIHJpcHBsZSB0aGVyZSBpcyBubyBzdHlsaW5nIGZvciA6Zm9jdXMtdmlzaWJsZSBieSBkZWZhdWx0LiBCZSBzdXJlXG4gICAqIHRvIGhpZ2hsaWdodCB0aGUgZWxlbWVudCBieSBhcHBseWluZyBzZXBhcmF0ZSBzdHlsZXMgd2l0aCB0aGUgYC5NdWktZm9jdXNWaXNpYmxlYCBjbGFzcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVSaXBwbGU6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgdG91Y2ggcmlwcGxlIGVmZmVjdCBpcyBkaXNhYmxlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGRpc2FibGVUb3VjaFJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBiYXNlIGJ1dHRvbiB3aWxsIGhhdmUgYSBrZXlib2FyZCBmb2N1cyByaXBwbGUuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmb2N1c1JpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGlzIHByb3AgY2FuIGhlbHAgaWRlbnRpZnkgd2hpY2ggZWxlbWVudCBoYXMga2V5Ym9hcmQgZm9jdXMuXG4gICAqIFRoZSBjbGFzcyBuYW1lIHdpbGwgYmUgYXBwbGllZCB3aGVuIHRoZSBlbGVtZW50IGdhaW5zIHRoZSBmb2N1cyB0aHJvdWdoIGtleWJvYXJkIGludGVyYWN0aW9uLlxuICAgKiBJdCdzIGEgcG9seWZpbGwgZm9yIHRoZSBbQ1NTIDpmb2N1cy12aXNpYmxlIHNlbGVjdG9yXShodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvc2VsZWN0b3JzLTQvI3RoZS1mb2N1cy12aXNpYmxlLXBzZXVkbykuXG4gICAqIFRoZSByYXRpb25hbGUgZm9yIHVzaW5nIHRoaXMgZmVhdHVyZSBbaXMgZXhwbGFpbmVkIGhlcmVdKGh0dHBzOi8vZ2l0aHViLmNvbS9XSUNHL2ZvY3VzLXZpc2libGUvYmxvYi9IRUFEL2V4cGxhaW5lci5tZCkuXG4gICAqIEEgW3BvbHlmaWxsIGNhbiBiZSB1c2VkXShodHRwczovL2dpdGh1Yi5jb20vV0lDRy9mb2N1cy12aXNpYmxlKSB0byBhcHBseSBhIGBmb2N1cy12aXNpYmxlYCBjbGFzcyB0byBvdGhlciBjb21wb25lbnRzXG4gICAqIGlmIG5lZWRlZC5cbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGhyZWY6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLmFueSxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCB0byByZW5kZXIgYSBsaW5rIHdoZW4gdGhlIGBocmVmYCBwcm9wIGlzIHByb3ZpZGVkLlxuICAgKiBAZGVmYXVsdCAnYSdcbiAgICovXG4gIExpbmtDb21wb25lbnQ6IFByb3BUeXBlcy5lbGVtZW50VHlwZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQmx1cjogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkNsaWNrOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uQ29udGV4dE1lbnU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25EcmFnTGVhdmU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Gb2N1czogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCB3aGVuIHRoZSBjb21wb25lbnQgaXMgZm9jdXNlZCB3aXRoIGEga2V5Ym9hcmQuXG4gICAqIFdlIHRyaWdnZXIgYSBgb25Gb2N1c2AgY2FsbGJhY2sgdG9vLlxuICAgKi9cbiAgb25Gb2N1c1Zpc2libGU6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25LZXlEb3duOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uS2V5VXA6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZURvd246IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgb25Nb3VzZUxlYXZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uTW91c2VVcDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvblRvdWNoRW5kOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hNb3ZlOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uVG91Y2hTdGFydDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB0YWJJbmRleDogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFByb3BzIGFwcGxpZWQgdG8gdGhlIGBUb3VjaFJpcHBsZWAgZWxlbWVudC5cbiAgICovXG4gIFRvdWNoUmlwcGxlUHJvcHM6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBBIHJlZiB0aGF0IHBvaW50cyB0byB0aGUgYFRvdWNoUmlwcGxlYCBlbGVtZW50LlxuICAgKi9cbiAgdG91Y2hSaXBwbGVSZWY6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGN1cnJlbnQ6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgICBwdWxzYXRlOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkLFxuICAgICAgc3RhcnQ6IFByb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsXG4gICAgICBzdG9wOiBQcm9wVHlwZXMuZnVuYy5pc1JlcXVpcmVkXG4gICAgfSlcbiAgfSldKSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHR5cGU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ2J1dHRvbicsICdyZXNldCcsICdzdWJtaXQnXSksIFByb3BUeXBlcy5zdHJpbmddKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhc2U7IiwiaW1wb3J0IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzc2VzJztcbmltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzcyBmcm9tICdAbXVpL3V0aWxzL2dlbmVyYXRlVXRpbGl0eUNsYXNzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRCdXR0b25VdGlsaXR5Q2xhc3Moc2xvdCkge1xuICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoJ011aUJ1dHRvbicsIHNsb3QpO1xufVxuY29uc3QgYnV0dG9uQ2xhc3NlcyA9IGdlbmVyYXRlVXRpbGl0eUNsYXNzZXMoJ011aUJ1dHRvbicsIFsncm9vdCcsICd0ZXh0JywgJ3RleHRJbmhlcml0JywgJ3RleHRQcmltYXJ5JywgJ3RleHRTZWNvbmRhcnknLCAndGV4dFN1Y2Nlc3MnLCAndGV4dEVycm9yJywgJ3RleHRJbmZvJywgJ3RleHRXYXJuaW5nJywgJ291dGxpbmVkJywgJ291dGxpbmVkSW5oZXJpdCcsICdvdXRsaW5lZFByaW1hcnknLCAnb3V0bGluZWRTZWNvbmRhcnknLCAnb3V0bGluZWRTdWNjZXNzJywgJ291dGxpbmVkRXJyb3InLCAnb3V0bGluZWRJbmZvJywgJ291dGxpbmVkV2FybmluZycsICdjb250YWluZWQnLCAnY29udGFpbmVkSW5oZXJpdCcsICdjb250YWluZWRQcmltYXJ5JywgJ2NvbnRhaW5lZFNlY29uZGFyeScsICdjb250YWluZWRTdWNjZXNzJywgJ2NvbnRhaW5lZEVycm9yJywgJ2NvbnRhaW5lZEluZm8nLCAnY29udGFpbmVkV2FybmluZycsICdkaXNhYmxlRWxldmF0aW9uJywgJ2ZvY3VzVmlzaWJsZScsICdkaXNhYmxlZCcsICdjb2xvckluaGVyaXQnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ2NvbG9yU3VjY2VzcycsICdjb2xvckVycm9yJywgJ2NvbG9ySW5mbycsICdjb2xvcldhcm5pbmcnLCAndGV4dFNpemVTbWFsbCcsICd0ZXh0U2l6ZU1lZGl1bScsICd0ZXh0U2l6ZUxhcmdlJywgJ291dGxpbmVkU2l6ZVNtYWxsJywgJ291dGxpbmVkU2l6ZU1lZGl1bScsICdvdXRsaW5lZFNpemVMYXJnZScsICdjb250YWluZWRTaXplU21hbGwnLCAnY29udGFpbmVkU2l6ZU1lZGl1bScsICdjb250YWluZWRTaXplTGFyZ2UnLCAnc2l6ZU1lZGl1bScsICdzaXplU21hbGwnLCAnc2l6ZUxhcmdlJywgJ2Z1bGxXaWR0aCcsICdzdGFydEljb24nLCAnZW5kSWNvbicsICdpY29uJywgJ2ljb25TaXplU21hbGwnLCAnaWNvblNpemVNZWRpdW0nLCAnaWNvblNpemVMYXJnZSddKTtcbmV4cG9ydCBkZWZhdWx0IGJ1dHRvbkNsYXNzZXM7IiwiaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBAaWdub3JlIC0gaW50ZXJuYWwgY29tcG9uZW50LlxuICovXG5jb25zdCBCdXR0b25Hcm91cENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCh7fSk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cENvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBDb250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQ29udGV4dDsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG4vKipcbiAqIEBpZ25vcmUgLSBpbnRlcm5hbCBjb21wb25lbnQuXG4gKi9cbmNvbnN0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dCA9IC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVDb250ZXh0KHVuZGVmaW5lZCk7XG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQuZGlzcGxheU5hbWUgPSAnQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0Jztcbn1cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dDsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjaGlsZHJlblwiLCBcImNvbG9yXCIsIFwiY29tcG9uZW50XCIsIFwiY2xhc3NOYW1lXCIsIFwiZGlzYWJsZWRcIiwgXCJkaXNhYmxlRWxldmF0aW9uXCIsIFwiZGlzYWJsZUZvY3VzUmlwcGxlXCIsIFwiZW5kSWNvblwiLCBcImZvY3VzVmlzaWJsZUNsYXNzTmFtZVwiLCBcImZ1bGxXaWR0aFwiLCBcInNpemVcIiwgXCJzdGFydEljb25cIiwgXCJ0eXBlXCIsIFwidmFyaWFudFwiXTtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCByZXNvbHZlUHJvcHMgZnJvbSAnQG11aS91dGlscy9yZXNvbHZlUHJvcHMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsgYWxwaGEgfSBmcm9tICdAbXVpL3N5c3RlbS9jb2xvck1hbmlwdWxhdG9yJztcbmltcG9ydCBzdHlsZWQsIHsgcm9vdFNob3VsZEZvcndhcmRQcm9wIH0gZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5pbXBvcnQgQnV0dG9uQmFzZSBmcm9tICcuLi9CdXR0b25CYXNlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJy4uL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IGJ1dHRvbkNsYXNzZXMsIHsgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9idXR0b25DbGFzc2VzJztcbmltcG9ydCBCdXR0b25Hcm91cENvbnRleHQgZnJvbSAnLi4vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBDb250ZXh0JztcbmltcG9ydCBCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQgZnJvbSAnLi4vQnV0dG9uR3JvdXAvQnV0dG9uR3JvdXBCdXR0b25Db250ZXh0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5jb25zdCB1c2VVdGlsaXR5Q2xhc3NlcyA9IG93bmVyU3RhdGUgPT4ge1xuICBjb25zdCB7XG4gICAgY29sb3IsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBmdWxsV2lkdGgsXG4gICAgc2l6ZSxcbiAgICB2YXJpYW50LFxuICAgIGNsYXNzZXNcbiAgfSA9IG93bmVyU3RhdGU7XG4gIGNvbnN0IHNsb3RzID0ge1xuICAgIHJvb3Q6IFsncm9vdCcsIHZhcmlhbnQsIGAke3ZhcmlhbnR9JHtjYXBpdGFsaXplKGNvbG9yKX1gLCBgc2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gLCBgJHt2YXJpYW50fVNpemUke2NhcGl0YWxpemUoc2l6ZSl9YCwgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gLCBkaXNhYmxlRWxldmF0aW9uICYmICdkaXNhYmxlRWxldmF0aW9uJywgZnVsbFdpZHRoICYmICdmdWxsV2lkdGgnXSxcbiAgICBsYWJlbDogWydsYWJlbCddLFxuICAgIHN0YXJ0SWNvbjogWydpY29uJywgJ3N0YXJ0SWNvbicsIGBpY29uU2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXSxcbiAgICBlbmRJY29uOiBbJ2ljb24nLCAnZW5kSWNvbicsIGBpY29uU2l6ZSR7Y2FwaXRhbGl6ZShzaXplKX1gXVxuICB9O1xuICBjb25zdCBjb21wb3NlZENsYXNzZXMgPSBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0QnV0dG9uVXRpbGl0eUNsYXNzLCBjbGFzc2VzKTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCBjbGFzc2VzLCBjb21wb3NlZENsYXNzZXMpO1xufTtcbmNvbnN0IGNvbW1vbkljb25TdHlsZXMgPSBvd25lclN0YXRlID0+IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDE4XG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ21lZGl1bScgJiYge1xuICAnJiA+ICo6bnRoLW9mLXR5cGUoMSknOiB7XG4gICAgZm9udFNpemU6IDIwXG4gIH1cbn0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiB7XG4gICcmID4gKjpudGgtb2YtdHlwZSgxKSc6IHtcbiAgICBmb250U2l6ZTogMjJcbiAgfVxufSk7XG5jb25zdCBCdXR0b25Sb290ID0gc3R5bGVkKEJ1dHRvbkJhc2UsIHtcbiAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcm9vdFNob3VsZEZvcndhcmRQcm9wKHByb3ApIHx8IHByb3AgPT09ICdjbGFzc2VzJyxcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdSb290JyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5yb290LCBzdHlsZXNbb3duZXJTdGF0ZS52YXJpYW50XSwgc3R5bGVzW2Ake293bmVyU3RhdGUudmFyaWFudH0ke2NhcGl0YWxpemUob3duZXJTdGF0ZS5jb2xvcil9YF0sIHN0eWxlc1tgc2l6ZSR7Y2FwaXRhbGl6ZShvd25lclN0YXRlLnNpemUpfWBdLCBzdHlsZXNbYCR7b3duZXJTdGF0ZS52YXJpYW50fVNpemUke2NhcGl0YWxpemUob3duZXJTdGF0ZS5zaXplKX1gXSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHN0eWxlcy5jb2xvckluaGVyaXQsIG93bmVyU3RhdGUuZGlzYWJsZUVsZXZhdGlvbiAmJiBzdHlsZXMuZGlzYWJsZUVsZXZhdGlvbiwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYgc3R5bGVzLmZ1bGxXaWR0aF07XG4gIH1cbn0pKCh7XG4gIHRoZW1lLFxuICBvd25lclN0YXRlXG59KSA9PiB7XG4gIHZhciBfdGhlbWUkcGFsZXR0ZSRnZXRDb24sIF90aGVtZSRwYWxldHRlO1xuICBjb25zdCBpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5WzMwMF0gOiB0aGVtZS5wYWxldHRlLmdyZXlbODAwXTtcbiAgY29uc3QgaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yID0gdGhlbWUucGFsZXR0ZS5tb2RlID09PSAnbGlnaHQnID8gdGhlbWUucGFsZXR0ZS5ncmV5LkExMDAgOiB0aGVtZS5wYWxldHRlLmdyZXlbNzAwXTtcbiAgcmV0dXJuIF9leHRlbmRzKHt9LCB0aGVtZS50eXBvZ3JhcGh5LmJ1dHRvbiwge1xuICAgIG1pbldpZHRoOiA2NCxcbiAgICBwYWRkaW5nOiAnNnB4IDE2cHgnLFxuICAgIGJvcmRlclJhZGl1czogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYXBlLmJvcmRlclJhZGl1cyxcbiAgICB0cmFuc2l0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoWydiYWNrZ3JvdW5kLWNvbG9yJywgJ2JveC1zaGFkb3cnLCAnYm9yZGVyLWNvbG9yJywgJ2NvbG9yJ10sIHtcbiAgICAgIGR1cmF0aW9uOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5zaG9ydFxuICAgIH0pLFxuICAgICcmOmhvdmVyJzogX2V4dGVuZHMoe1xuICAgICAgdGV4dERlY29yYXRpb246ICdub25lJyxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlLnRleHQucHJpbWFyeUNoYW5uZWx9IC8gJHt0aGVtZS52YXJzLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eX0pYCA6IGFscGhhKHRoZW1lLnBhbGV0dGUudGV4dC5wcmltYXJ5LCB0aGVtZS5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHkpLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAndHJhbnNwYXJlbnQnXG4gICAgICB9XG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYgb3duZXJTdGF0ZS5jb2xvciAhPT0gJ2luaGVyaXQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW59YCxcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IGByZ2JhKCR7dGhlbWUudmFycy5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5DaGFubmVsfSAvICR7dGhlbWUudmFycy5wYWxldHRlLmFjdGlvbi5ob3Zlck9wYWNpdHl9KWAgOiBhbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIHRoZW1lLnBhbGV0dGUuYWN0aW9uLmhvdmVyT3BhY2l0eSksXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCdcbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJhY2tncm91bmRDb2xvcjogdGhlbWUudmFycyA/IHRoZW1lLnZhcnMucGFsZXR0ZS5CdXR0b24uaW5oZXJpdENvbnRhaW5lZEhvdmVyQmcgOiBpbmhlcml0Q29udGFpbmVkSG92ZXJCYWNrZ3JvdW5kQ29sb3IsXG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzRdLFxuICAgICAgLy8gUmVzZXQgb24gdG91Y2ggZGV2aWNlcywgaXQgZG9lc24ndCBhZGQgc3BlY2lmaWNpdHlcbiAgICAgICdAbWVkaWEgKGhvdmVyOiBub25lKSc6IHtcbiAgICAgICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXSxcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5ncmV5WzMwMF1cbiAgICAgIH1cbiAgICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmRhcmssXG4gICAgICAvLyBSZXNldCBvbiB0b3VjaCBkZXZpY2VzLCBpdCBkb2Vzbid0IGFkZCBzcGVjaWZpY2l0eVxuICAgICAgJ0BtZWRpYSAoaG92ZXI6IG5vbmUpJzoge1xuICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgICAgIH1cbiAgICB9KSxcbiAgICAnJjphY3RpdmUnOiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnY29udGFpbmVkJyAmJiB7XG4gICAgICBib3hTaGFkb3c6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5zaGFkb3dzWzhdXG4gICAgfSksXG4gICAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IF9leHRlbmRzKHt9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbNl1cbiAgICB9KSxcbiAgICBbYCYuJHtidXR0b25DbGFzc2VzLmRpc2FibGVkfWBdOiBfZXh0ZW5kcyh7XG4gICAgICBjb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuYWN0aW9uLmRpc2FibGVkXG4gICAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICAgIGJvcmRlcjogYDFweCBzb2xpZCAkeyh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmR9YFxuICAgIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZCxcbiAgICAgIGJveFNoYWRvdzogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnNoYWRvd3NbMF0sXG4gICAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmFjdGlvbi5kaXNhYmxlZEJhY2tncm91bmRcbiAgICB9KVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICd0ZXh0JyAmJiB7XG4gICAgcGFkZGluZzogJzZweCA4cHgnXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ3RleHQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnb3V0bGluZWQnICYmIHtcbiAgICBwYWRkaW5nOiAnNXB4IDE1cHgnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCBjdXJyZW50Q29sb3InXG4gIH0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiBvd25lclN0YXRlLmNvbG9yICE9PSAnaW5oZXJpdCcgJiYge1xuICAgIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluLFxuICAgIGJvcmRlcjogdGhlbWUudmFycyA/IGAxcHggc29saWQgcmdiYSgke3RoZW1lLnZhcnMucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluQ2hhbm5lbH0gLyAwLjUpYCA6IGAxcHggc29saWQgJHthbHBoYSh0aGVtZS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW4sIDAuNSl9YFxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIHtcbiAgICBjb2xvcjogdGhlbWUudmFycyA/XG4gICAgLy8gdGhpcyBpcyBzYWZlIGJlY2F1c2UgZ3JleSBkb2VzIG5vdCBjaGFuZ2UgYmV0d2VlbiBkZWZhdWx0IGxpZ2h0L2RhcmsgbW9kZVxuICAgIHRoZW1lLnZhcnMucGFsZXR0ZS50ZXh0LnByaW1hcnkgOiAoX3RoZW1lJHBhbGV0dGUkZ2V0Q29uID0gKF90aGVtZSRwYWxldHRlID0gdGhlbWUucGFsZXR0ZSkuZ2V0Q29udHJhc3RUZXh0KSA9PSBudWxsID8gdm9pZCAwIDogX3RoZW1lJHBhbGV0dGUkZ2V0Q29uLmNhbGwoX3RoZW1lJHBhbGV0dGUsIHRoZW1lLnBhbGV0dGUuZ3JleVszMDBdKSxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6IHRoZW1lLnZhcnMgPyB0aGVtZS52YXJzLnBhbGV0dGUuQnV0dG9uLmluaGVyaXRDb250YWluZWRCZyA6IGluaGVyaXRDb250YWluZWRCYWNrZ3JvdW5kQ29sb3IsXG4gICAgYm94U2hhZG93OiAodGhlbWUudmFycyB8fCB0aGVtZSkuc2hhZG93c1syXVxuICB9LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdjb250YWluZWQnICYmIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gICAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLmNvbnRyYXN0VGV4dCxcbiAgICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlW293bmVyU3RhdGUuY29sb3JdLm1haW5cbiAgfSwgb3duZXJTdGF0ZS5jb2xvciA9PT0gJ2luaGVyaXQnICYmIHtcbiAgICBjb2xvcjogJ2luaGVyaXQnLFxuICAgIGJvcmRlckNvbG9yOiAnY3VycmVudENvbG9yJ1xuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggNXB4JyxcbiAgICBmb250U2l6ZTogdGhlbWUudHlwb2dyYXBoeS5weFRvUmVtKDEzKVxuICB9LCBvd25lclN0YXRlLnNpemUgPT09ICdsYXJnZScgJiYgb3duZXJTdGF0ZS52YXJpYW50ID09PSAndGV4dCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMTFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ291dGxpbmVkJyAmJiB7XG4gICAgcGFkZGluZzogJzNweCA5cHgnLFxuICAgIGZvbnRTaXplOiB0aGVtZS50eXBvZ3JhcGh5LnB4VG9SZW0oMTMpXG4gIH0sIG93bmVyU3RhdGUuc2l6ZSA9PT0gJ2xhcmdlJyAmJiBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdvdXRsaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc3cHggMjFweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnc21hbGwnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc0cHggMTBweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxMylcbiAgfSwgb3duZXJTdGF0ZS5zaXplID09PSAnbGFyZ2UnICYmIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2NvbnRhaW5lZCcgJiYge1xuICAgIHBhZGRpbmc6ICc4cHggMjJweCcsXG4gICAgZm9udFNpemU6IHRoZW1lLnR5cG9ncmFwaHkucHhUb1JlbSgxNSlcbiAgfSwgb3duZXJTdGF0ZS5mdWxsV2lkdGggJiYge1xuICAgIHdpZHRoOiAnMTAwJSdcbiAgfSk7XG59LCAoe1xuICBvd25lclN0YXRlXG59KSA9PiBvd25lclN0YXRlLmRpc2FibGVFbGV2YXRpb24gJiYge1xuICBib3hTaGFkb3c6ICdub25lJyxcbiAgJyY6aG92ZXInOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5mb2N1c1Zpc2libGV9YF06IHtcbiAgICBib3hTaGFkb3c6ICdub25lJ1xuICB9LFxuICAnJjphY3RpdmUnOiB7XG4gICAgYm94U2hhZG93OiAnbm9uZSdcbiAgfSxcbiAgW2AmLiR7YnV0dG9uQ2xhc3Nlcy5kaXNhYmxlZH1gXToge1xuICAgIGJveFNoYWRvdzogJ25vbmUnXG4gIH1cbn0pO1xuY29uc3QgQnV0dG9uU3RhcnRJY29uID0gc3R5bGVkKCdzcGFuJywge1xuICBuYW1lOiAnTXVpQnV0dG9uJyxcbiAgc2xvdDogJ1N0YXJ0SWNvbicsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMuc3RhcnRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IDgsXG4gIG1hcmdpbkxlZnQ6IC00XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5MZWZ0OiAtMlxufSwgY29tbW9uSWNvblN0eWxlcyhvd25lclN0YXRlKSkpO1xuY29uc3QgQnV0dG9uRW5kSWNvbiA9IHN0eWxlZCgnc3BhbicsIHtcbiAgbmFtZTogJ011aUJ1dHRvbicsXG4gIHNsb3Q6ICdFbmRJY29uJyxcbiAgb3ZlcnJpZGVzUmVzb2x2ZXI6IChwcm9wcywgc3R5bGVzKSA9PiB7XG4gICAgY29uc3Qge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBwcm9wcztcbiAgICByZXR1cm4gW3N0eWxlcy5lbmRJY29uLCBzdHlsZXNbYGljb25TaXplJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuc2l6ZSl9YF1dO1xuICB9XG59KSgoe1xuICBvd25lclN0YXRlXG59KSA9PiBfZXh0ZW5kcyh7XG4gIGRpc3BsYXk6ICdpbmhlcml0JyxcbiAgbWFyZ2luUmlnaHQ6IC00LFxuICBtYXJnaW5MZWZ0OiA4XG59LCBvd25lclN0YXRlLnNpemUgPT09ICdzbWFsbCcgJiYge1xuICBtYXJnaW5SaWdodDogLTJcbn0sIGNvbW1vbkljb25TdHlsZXMob3duZXJTdGF0ZSkpKTtcbmNvbnN0IEJ1dHRvbiA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEJ1dHRvbihpblByb3BzLCByZWYpIHtcbiAgLy8gcHJvcHMgcHJpb3JpdHk6IGBpblByb3BzYCA+IGBjb250ZXh0UHJvcHNgID4gYHRoZW1lRGVmYXVsdFByb3BzYFxuICBjb25zdCBjb250ZXh0UHJvcHMgPSBSZWFjdC51c2VDb250ZXh0KEJ1dHRvbkdyb3VwQ29udGV4dCk7XG4gIGNvbnN0IGJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lID0gUmVhY3QudXNlQ29udGV4dChCdXR0b25Hcm91cEJ1dHRvbkNvbnRleHQpO1xuICBjb25zdCByZXNvbHZlZFByb3BzID0gcmVzb2x2ZVByb3BzKGNvbnRleHRQcm9wcywgaW5Qcm9wcyk7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogcmVzb2x2ZWRQcm9wcyxcbiAgICBuYW1lOiAnTXVpQnV0dG9uJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgICAgY2hpbGRyZW4sXG4gICAgICBjb2xvciA9ICdwcmltYXJ5JyxcbiAgICAgIGNvbXBvbmVudCA9ICdidXR0b24nLFxuICAgICAgY2xhc3NOYW1lLFxuICAgICAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgICAgIGRpc2FibGVFbGV2YXRpb24gPSBmYWxzZSxcbiAgICAgIGRpc2FibGVGb2N1c1JpcHBsZSA9IGZhbHNlLFxuICAgICAgZW5kSWNvbjogZW5kSWNvblByb3AsXG4gICAgICBmb2N1c1Zpc2libGVDbGFzc05hbWUsXG4gICAgICBmdWxsV2lkdGggPSBmYWxzZSxcbiAgICAgIHNpemUgPSAnbWVkaXVtJyxcbiAgICAgIHN0YXJ0SWNvbjogc3RhcnRJY29uUHJvcCxcbiAgICAgIHR5cGUsXG4gICAgICB2YXJpYW50ID0gJ3RleHQnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBjb21wb25lbnQsXG4gICAgZGlzYWJsZWQsXG4gICAgZGlzYWJsZUVsZXZhdGlvbixcbiAgICBkaXNhYmxlRm9jdXNSaXBwbGUsXG4gICAgZnVsbFdpZHRoLFxuICAgIHNpemUsXG4gICAgdHlwZSxcbiAgICB2YXJpYW50XG4gIH0pO1xuICBjb25zdCBjbGFzc2VzID0gdXNlVXRpbGl0eUNsYXNzZXMob3duZXJTdGF0ZSk7XG4gIGNvbnN0IHN0YXJ0SWNvbiA9IHN0YXJ0SWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uU3RhcnRJY29uLCB7XG4gICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN0YXJ0SWNvbixcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNoaWxkcmVuOiBzdGFydEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBlbmRJY29uID0gZW5kSWNvblByb3AgJiYgLyojX19QVVJFX18qL19qc3goQnV0dG9uRW5kSWNvbiwge1xuICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5lbmRJY29uLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgY2hpbGRyZW46IGVuZEljb25Qcm9wXG4gIH0pO1xuICBjb25zdCBwb3NpdGlvbkNsYXNzTmFtZSA9IGJ1dHRvbkdyb3VwQnV0dG9uQ29udGV4dFBvc2l0aW9uQ2xhc3NOYW1lIHx8ICcnO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKEJ1dHRvblJvb3QsIF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgIGNsYXNzTmFtZTogY2xzeChjb250ZXh0UHJvcHMuY2xhc3NOYW1lLCBjbGFzc2VzLnJvb3QsIGNsYXNzTmFtZSwgcG9zaXRpb25DbGFzc05hbWUpLFxuICAgIGNvbXBvbmVudDogY29tcG9uZW50LFxuICAgIGRpc2FibGVkOiBkaXNhYmxlZCxcbiAgICBmb2N1c1JpcHBsZTogIWRpc2FibGVGb2N1c1JpcHBsZSxcbiAgICBmb2N1c1Zpc2libGVDbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5mb2N1c1Zpc2libGUsIGZvY3VzVmlzaWJsZUNsYXNzTmFtZSksXG4gICAgcmVmOiByZWYsXG4gICAgdHlwZTogdHlwZVxuICB9LCBvdGhlciwge1xuICAgIGNsYXNzZXM6IGNsYXNzZXMsXG4gICAgY2hpbGRyZW46IFtzdGFydEljb24sIGNoaWxkcmVuLCBlbmRJY29uXVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IEJ1dHRvbi5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBUaGUgY29udGVudCBvZiB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdzdWNjZXNzJywgJ2Vycm9yJywgJ2luZm8nLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogVGhlIGNvbXBvbmVudCB1c2VkIGZvciB0aGUgcm9vdCBub2RlLlxuICAgKiBFaXRoZXIgYSBzdHJpbmcgdG8gdXNlIGEgSFRNTCBlbGVtZW50IG9yIGEgY29tcG9uZW50LlxuICAgKi9cbiAgY29tcG9uZW50OiBQcm9wVHlwZXMuZWxlbWVudFR5cGUsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSBjb21wb25lbnQgaXMgZGlzYWJsZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBkaXNhYmxlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIG5vIGVsZXZhdGlvbiBpcyB1c2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUVsZXZhdGlvbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBJZiBgdHJ1ZWAsIHRoZSAga2V5Ym9hcmQgZm9jdXMgcmlwcGxlIGlzIGRpc2FibGVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUZvY3VzUmlwcGxlOiBQcm9wVHlwZXMuYm9vbCxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIHJpcHBsZSBlZmZlY3QgaXMgZGlzYWJsZWQuXG4gICAqXG4gICAqIOKaoO+4jyBXaXRob3V0IGEgcmlwcGxlIHRoZXJlIGlzIG5vIHN0eWxpbmcgZm9yIDpmb2N1cy12aXNpYmxlIGJ5IGRlZmF1bHQuIEJlIHN1cmVcbiAgICogdG8gaGlnaGxpZ2h0IHRoZSBlbGVtZW50IGJ5IGFwcGx5aW5nIHNlcGFyYXRlIHN0eWxlcyB3aXRoIHRoZSBgLk11aS1mb2N1c1Zpc2libGVgIGNsYXNzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVJpcHBsZTogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBFbGVtZW50IHBsYWNlZCBhZnRlciB0aGUgY2hpbGRyZW4uXG4gICAqL1xuICBlbmRJY29uOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGZvY3VzVmlzaWJsZUNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGJ1dHRvbiB3aWxsIHRha2UgdXAgdGhlIGZ1bGwgd2lkdGggb2YgaXRzIGNvbnRhaW5lci5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIGZ1bGxXaWR0aDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBUaGUgVVJMIHRvIGxpbmsgdG8gd2hlbiB0aGUgYnV0dG9uIGlzIGNsaWNrZWQuXG4gICAqIElmIGRlZmluZWQsIGFuIGBhYCBlbGVtZW50IHdpbGwgYmUgdXNlZCBhcyB0aGUgcm9vdCBub2RlLlxuICAgKi9cbiAgaHJlZjogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBzaXplIG9mIHRoZSBjb21wb25lbnQuXG4gICAqIGBzbWFsbGAgaXMgZXF1aXZhbGVudCB0byB0aGUgZGVuc2UgYnV0dG9uIHN0eWxpbmcuXG4gICAqIEBkZWZhdWx0ICdtZWRpdW0nXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMgLyogQHR5cGVzY3JpcHQtdG8tcHJvcHR5cGVzLWlnbm9yZSAqLy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vbmVPZihbJ3NtYWxsJywgJ21lZGl1bScsICdsYXJnZSddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogRWxlbWVudCBwbGFjZWQgYmVmb3JlIHRoZSBjaGlsZHJlbi5cbiAgICovXG4gIHN0YXJ0SWNvbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBUaGUgc3lzdGVtIHByb3AgdGhhdCBhbGxvd3MgZGVmaW5pbmcgc3lzdGVtIG92ZXJyaWRlcyBhcyB3ZWxsIGFzIGFkZGl0aW9uYWwgQ1NTIHN0eWxlcy5cbiAgICovXG4gIHN4OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXlPZihQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdCwgUHJvcFR5cGVzLmJvb2xdKSksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0XSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB0eXBlOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydidXR0b24nLCAncmVzZXQnLCAnc3VibWl0J10pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBUaGUgdmFyaWFudCB0byB1c2UuXG4gICAqIEBkZWZhdWx0ICd0ZXh0J1xuICAgKi9cbiAgdmFyaWFudDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWydjb250YWluZWQnLCAnb3V0bGluZWQnLCAndGV4dCddKSwgUHJvcFR5cGVzLnN0cmluZ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQnV0dG9uOyIsImltcG9ydCBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvZ2VuZXJhdGVVdGlsaXR5Q2xhc3Nlcyc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcyhzbG90KSB7XG4gIHJldHVybiBnZW5lcmF0ZVV0aWxpdHlDbGFzcygnTXVpQ2lyY3VsYXJQcm9ncmVzcycsIHNsb3QpO1xufVxuY29uc3QgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXMgPSBnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzKCdNdWlDaXJjdWxhclByb2dyZXNzJywgWydyb290JywgJ2RldGVybWluYXRlJywgJ2luZGV0ZXJtaW5hdGUnLCAnY29sb3JQcmltYXJ5JywgJ2NvbG9yU2Vjb25kYXJ5JywgJ3N2ZycsICdjaXJjbGUnLCAnY2lyY2xlRGV0ZXJtaW5hdGUnLCAnY2lyY2xlSW5kZXRlcm1pbmF0ZScsICdjaXJjbGVEaXNhYmxlU2hyaW5rJ10pO1xuZXhwb3J0IGRlZmF1bHQgY2lyY3VsYXJQcm9ncmVzc0NsYXNzZXM7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1wiY2xhc3NOYW1lXCIsIFwiY29sb3JcIiwgXCJkaXNhYmxlU2hyaW5rXCIsIFwic2l6ZVwiLCBcInN0eWxlXCIsIFwidGhpY2tuZXNzXCIsIFwidmFsdWVcIiwgXCJ2YXJpYW50XCJdO1xubGV0IF8gPSB0ID0+IHQsXG4gIF90LFxuICBfdDIsXG4gIF90MyxcbiAgX3Q0O1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCBjbHN4IGZyb20gJ2Nsc3gnO1xuaW1wb3J0IGNoYWluUHJvcFR5cGVzIGZyb20gJ0BtdWkvdXRpbHMvY2hhaW5Qcm9wVHlwZXMnO1xuaW1wb3J0IGNvbXBvc2VDbGFzc2VzIGZyb20gJ0BtdWkvdXRpbHMvY29tcG9zZUNsYXNzZXMnO1xuaW1wb3J0IHsga2V5ZnJhbWVzLCBjc3MgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyBnZXRDaXJjdWxhclByb2dyZXNzVXRpbGl0eUNsYXNzIH0gZnJvbSAnLi9jaXJjdWxhclByb2dyZXNzQ2xhc3Nlcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgU0laRSA9IDQ0O1xuY29uc3QgY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSA9IGtleWZyYW1lcyhfdCB8fCAoX3QgPSBfYFxuICAwJSB7XG4gICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7XG4gIH1cblxuICAxMDAlIHtcbiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpO1xuICB9XG5gKSk7XG5jb25zdCBjaXJjdWxhckRhc2hLZXlmcmFtZSA9IGtleWZyYW1lcyhfdDIgfHwgKF90MiA9IF9gXG4gIDAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAwO1xuICB9XG5cbiAgNTAlIHtcbiAgICBzdHJva2UtZGFzaGFycmF5OiAxMDBweCwgMjAwcHg7XG4gICAgc3Ryb2tlLWRhc2hvZmZzZXQ6IC0xNXB4O1xuICB9XG5cbiAgMTAwJSB7XG4gICAgc3Ryb2tlLWRhc2hhcnJheTogMTAwcHgsIDIwMHB4O1xuICAgIHN0cm9rZS1kYXNob2Zmc2V0OiAtMTI1cHg7XG4gIH1cbmApKTtcbmNvbnN0IHVzZVV0aWxpdHlDbGFzc2VzID0gb3duZXJTdGF0ZSA9PiB7XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIHZhcmlhbnQsXG4gICAgY29sb3IsXG4gICAgZGlzYWJsZVNocmlua1xuICB9ID0gb3duZXJTdGF0ZTtcbiAgY29uc3Qgc2xvdHMgPSB7XG4gICAgcm9vdDogWydyb290JywgdmFyaWFudCwgYGNvbG9yJHtjYXBpdGFsaXplKGNvbG9yKX1gXSxcbiAgICBzdmc6IFsnc3ZnJ10sXG4gICAgY2lyY2xlOiBbJ2NpcmNsZScsIGBjaXJjbGUke2NhcGl0YWxpemUodmFyaWFudCl9YCwgZGlzYWJsZVNocmluayAmJiAnY2lyY2xlRGlzYWJsZVNocmluayddXG4gIH07XG4gIHJldHVybiBjb21wb3NlQ2xhc3NlcyhzbG90cywgZ2V0Q2lyY3VsYXJQcm9ncmVzc1V0aWxpdHlDbGFzcywgY2xhc3Nlcyk7XG59O1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc1Jvb3QgPSBzdHlsZWQoJ3NwYW4nLCB7XG4gIG5hbWU6ICdNdWlDaXJjdWxhclByb2dyZXNzJyxcbiAgc2xvdDogJ1Jvb3QnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLnJvb3QsIHN0eWxlc1tvd25lclN0YXRlLnZhcmlhbnRdLCBzdHlsZXNbYGNvbG9yJHtjYXBpdGFsaXplKG93bmVyU3RhdGUuY29sb3IpfWBdXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgZGlzcGxheTogJ2lubGluZS1ibG9jaydcbn0sIG93bmVyU3RhdGUudmFyaWFudCA9PT0gJ2RldGVybWluYXRlJyAmJiB7XG4gIHRyYW5zaXRpb246IHRoZW1lLnRyYW5zaXRpb25zLmNyZWF0ZSgndHJhbnNmb3JtJylcbn0sIG93bmVyU3RhdGUuY29sb3IgIT09ICdpbmhlcml0JyAmJiB7XG4gIGNvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZVtvd25lclN0YXRlLmNvbG9yXS5tYWluXG59KSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYgY3NzKF90MyB8fCAoX3QzID0gX2BcbiAgICAgIGFuaW1hdGlvbjogJHswfSAxLjRzIGxpbmVhciBpbmZpbml0ZTtcbiAgICBgKSwgY2lyY3VsYXJSb3RhdGVLZXlmcmFtZSkpO1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc1NWRyA9IHN0eWxlZCgnc3ZnJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdTdmcnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHN0eWxlcy5zdmdcbn0pKHtcbiAgZGlzcGxheTogJ2Jsb2NrJyAvLyBLZWVwcyB0aGUgcHJvZ3Jlc3MgY2VudGVyZWRcbn0pO1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzc0NpcmNsZSA9IHN0eWxlZCgnY2lyY2xlJywge1xuICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcycsXG4gIHNsb3Q6ICdDaXJjbGUnLFxuICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICBjb25zdCB7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSA9IHByb3BzO1xuICAgIHJldHVybiBbc3R5bGVzLmNpcmNsZSwgc3R5bGVzW2BjaXJjbGUke2NhcGl0YWxpemUob3duZXJTdGF0ZS52YXJpYW50KX1gXSwgb3duZXJTdGF0ZS5kaXNhYmxlU2hyaW5rICYmIHN0eWxlcy5jaXJjbGVEaXNhYmxlU2hyaW5rXTtcbiAgfVxufSkoKHtcbiAgb3duZXJTdGF0ZSxcbiAgdGhlbWVcbn0pID0+IF9leHRlbmRzKHtcbiAgc3Ryb2tlOiAnY3VycmVudENvbG9yJ1xufSwgb3duZXJTdGF0ZS52YXJpYW50ID09PSAnZGV0ZXJtaW5hdGUnICYmIHtcbiAgdHJhbnNpdGlvbjogdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdzdHJva2UtZGFzaG9mZnNldCcpXG59LCBvd25lclN0YXRlLnZhcmlhbnQgPT09ICdpbmRldGVybWluYXRlJyAmJiB7XG4gIC8vIFNvbWUgZGVmYXVsdCB2YWx1ZSB0aGF0IGxvb2tzIGZpbmUgd2FpdGluZyBmb3IgdGhlIGFuaW1hdGlvbiB0byBraWNrcyBpbi5cbiAgc3Ryb2tlRGFzaGFycmF5OiAnODBweCwgMjAwcHgnLFxuICBzdHJva2VEYXNob2Zmc2V0OiAwIC8vIEFkZCB0aGUgdW5pdCB0byBmaXggYSBFZGdlIDE2IGFuZCBiZWxvdyBidWcuXG59KSwgKHtcbiAgb3duZXJTdGF0ZVxufSkgPT4gb3duZXJTdGF0ZS52YXJpYW50ID09PSAnaW5kZXRlcm1pbmF0ZScgJiYgIW93bmVyU3RhdGUuZGlzYWJsZVNocmluayAmJiBjc3MoX3Q0IHx8IChfdDQgPSBfYFxuICAgICAgYW5pbWF0aW9uOiAkezB9IDEuNHMgZWFzZS1pbi1vdXQgaW5maW5pdGU7XG4gICAgYCksIGNpcmN1bGFyRGFzaEtleWZyYW1lKSk7XG5cbi8qKlxuICogIyMgQVJJQVxuICpcbiAqIElmIHRoZSBwcm9ncmVzcyBiYXIgaXMgZGVzY3JpYmluZyB0aGUgbG9hZGluZyBwcm9ncmVzcyBvZiBhIHBhcnRpY3VsYXIgcmVnaW9uIG9mIGEgcGFnZSxcbiAqIHlvdSBzaG91bGQgdXNlIGBhcmlhLWRlc2NyaWJlZGJ5YCB0byBwb2ludCB0byB0aGUgcHJvZ3Jlc3MgYmFyLCBhbmQgc2V0IHRoZSBgYXJpYS1idXN5YFxuICogYXR0cmlidXRlIHRvIGB0cnVlYCBvbiB0aGF0IHJlZ2lvbiB1bnRpbCBpdCBoYXMgZmluaXNoZWQgbG9hZGluZy5cbiAqL1xuY29uc3QgQ2lyY3VsYXJQcm9ncmVzcyA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIENpcmN1bGFyUHJvZ3Jlc3MoaW5Qcm9wcywgcmVmKSB7XG4gIGNvbnN0IHByb3BzID0gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ2lyY3VsYXJQcm9ncmVzcydcbiAgfSk7XG4gIGNvbnN0IHtcbiAgICAgIGNsYXNzTmFtZSxcbiAgICAgIGNvbG9yID0gJ3ByaW1hcnknLFxuICAgICAgZGlzYWJsZVNocmluayA9IGZhbHNlLFxuICAgICAgc2l6ZSA9IDQwLFxuICAgICAgc3R5bGUsXG4gICAgICB0aGlja25lc3MgPSAzLjYsXG4gICAgICB2YWx1ZSA9IDAsXG4gICAgICB2YXJpYW50ID0gJ2luZGV0ZXJtaW5hdGUnXG4gICAgfSA9IHByb3BzLFxuICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJvcHMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICBjb2xvcixcbiAgICBkaXNhYmxlU2hyaW5rLFxuICAgIHNpemUsXG4gICAgdGhpY2tuZXNzLFxuICAgIHZhbHVlLFxuICAgIHZhcmlhbnRcbiAgfSk7XG4gIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlKTtcbiAgY29uc3QgY2lyY2xlU3R5bGUgPSB7fTtcbiAgY29uc3Qgcm9vdFN0eWxlID0ge307XG4gIGNvbnN0IHJvb3RQcm9wcyA9IHt9O1xuICBpZiAodmFyaWFudCA9PT0gJ2RldGVybWluYXRlJykge1xuICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSAyICogTWF0aC5QSSAqICgoU0laRSAtIHRoaWNrbmVzcykgLyAyKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNoYXJyYXkgPSBjaXJjdW1mZXJlbmNlLnRvRml4ZWQoMyk7XG4gICAgcm9vdFByb3BzWydhcmlhLXZhbHVlbm93J10gPSBNYXRoLnJvdW5kKHZhbHVlKTtcbiAgICBjaXJjbGVTdHlsZS5zdHJva2VEYXNob2Zmc2V0ID0gYCR7KCgxMDAgLSB2YWx1ZSkgLyAxMDAgKiBjaXJjdW1mZXJlbmNlKS50b0ZpeGVkKDMpfXB4YDtcbiAgICByb290U3R5bGUudHJhbnNmb3JtID0gJ3JvdGF0ZSgtOTBkZWcpJztcbiAgfVxuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1Jvb3QsIF9leHRlbmRzKHtcbiAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICB3aWR0aDogc2l6ZSxcbiAgICAgIGhlaWdodDogc2l6ZVxuICAgIH0sIHJvb3RTdHlsZSwgc3R5bGUpLFxuICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgcmVmOiByZWYsXG4gICAgcm9sZTogXCJwcm9ncmVzc2JhclwiXG4gIH0sIHJvb3RQcm9wcywgb3RoZXIsIHtcbiAgICBjaGlsZHJlbjogLyojX19QVVJFX18qL19qc3goQ2lyY3VsYXJQcm9ncmVzc1NWRywge1xuICAgICAgY2xhc3NOYW1lOiBjbGFzc2VzLnN2ZyxcbiAgICAgIG93bmVyU3RhdGU6IG93bmVyU3RhdGUsXG4gICAgICB2aWV3Qm94OiBgJHtTSVpFIC8gMn0gJHtTSVpFIC8gMn0gJHtTSVpFfSAke1NJWkV9YCxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChDaXJjdWxhclByb2dyZXNzQ2lyY2xlLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3Nlcy5jaXJjbGUsXG4gICAgICAgIHN0eWxlOiBjaXJjbGVTdHlsZSxcbiAgICAgICAgb3duZXJTdGF0ZTogb3duZXJTdGF0ZSxcbiAgICAgICAgY3g6IFNJWkUsXG4gICAgICAgIGN5OiBTSVpFLFxuICAgICAgICByOiAoU0laRSAtIHRoaWNrbmVzcykgLyAyLFxuICAgICAgICBmaWxsOiBcIm5vbmVcIixcbiAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaWNrbmVzc1xuICAgICAgfSlcbiAgICB9KVxuICB9KSk7XG59KTtcbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IENpcmN1bGFyUHJvZ3Jlc3MucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGNsYXNzTmFtZTogUHJvcFR5cGVzLnN0cmluZyxcbiAgLyoqXG4gICAqIFRoZSBjb2xvciBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJdCBzdXBwb3J0cyBib3RoIGRlZmF1bHQgYW5kIGN1c3RvbSB0aGVtZSBjb2xvcnMsIHdoaWNoIGNhbiBiZSBhZGRlZCBhcyBzaG93biBpbiB0aGVcbiAgICogW3BhbGV0dGUgY3VzdG9taXphdGlvbiBndWlkZV0oaHR0cHM6Ly9tdWkuY29tL21hdGVyaWFsLXVpL2N1c3RvbWl6YXRpb24vcGFsZXR0ZS8jY3VzdG9tLWNvbG9ycykuXG4gICAqIEBkZWZhdWx0ICdwcmltYXJ5J1xuICAgKi9cbiAgY29sb3I6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsnaW5oZXJpdCcsICdwcmltYXJ5JywgJ3NlY29uZGFyeScsICdlcnJvcicsICdpbmZvJywgJ3N1Y2Nlc3MnLCAnd2FybmluZyddKSwgUHJvcFR5cGVzLnN0cmluZ10pLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgc2hyaW5rIGFuaW1hdGlvbiBpcyBkaXNhYmxlZC5cbiAgICogVGhpcyBvbmx5IHdvcmtzIGlmIHZhcmlhbnQgaXMgYGluZGV0ZXJtaW5hdGVgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZVNocmluazogY2hhaW5Qcm9wVHlwZXMoUHJvcFR5cGVzLmJvb2wsIHByb3BzID0+IHtcbiAgICBpZiAocHJvcHMuZGlzYWJsZVNocmluayAmJiBwcm9wcy52YXJpYW50ICYmIHByb3BzLnZhcmlhbnQgIT09ICdpbmRldGVybWluYXRlJykge1xuICAgICAgcmV0dXJuIG5ldyBFcnJvcignTVVJOiBZb3UgaGF2ZSBwcm92aWRlZCB0aGUgYGRpc2FibGVTaHJpbmtgIHByb3AgJyArICd3aXRoIGEgdmFyaWFudCBvdGhlciB0aGFuIGBpbmRldGVybWluYXRlYC4gVGhpcyB3aWxsIGhhdmUgbm8gZWZmZWN0LicpO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSksXG4gIC8qKlxuICAgKiBUaGUgc2l6ZSBvZiB0aGUgY29tcG9uZW50LlxuICAgKiBJZiB1c2luZyBhIG51bWJlciwgdGhlIHBpeGVsIHVuaXQgaXMgYXNzdW1lZC5cbiAgICogSWYgdXNpbmcgYSBzdHJpbmcsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIENTUyB1bml0LCBmb3IgZXhhbXBsZSAnM3JlbScuXG4gICAqIEBkZWZhdWx0IDQwXG4gICAqL1xuICBzaXplOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBzdHlsZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKSxcbiAgLyoqXG4gICAqIFRoZSB0aGlja25lc3Mgb2YgdGhlIGNpcmNsZS5cbiAgICogQGRlZmF1bHQgMy42XG4gICAqL1xuICB0aGlja25lc3M6IFByb3BUeXBlcy5udW1iZXIsXG4gIC8qKlxuICAgKiBUaGUgdmFsdWUgb2YgdGhlIHByb2dyZXNzIGluZGljYXRvciBmb3IgdGhlIGRldGVybWluYXRlIHZhcmlhbnQuXG4gICAqIFZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLlxuICAgKiBAZGVmYXVsdCAwXG4gICAqL1xuICB2YWx1ZTogUHJvcFR5cGVzLm51bWJlcixcbiAgLyoqXG4gICAqIFRoZSB2YXJpYW50IHRvIHVzZS5cbiAgICogVXNlIGluZGV0ZXJtaW5hdGUgd2hlbiB0aGVyZSBpcyBubyBwcm9ncmVzcyB2YWx1ZS5cbiAgICogQGRlZmF1bHQgJ2luZGV0ZXJtaW5hdGUnXG4gICAqL1xuICB2YXJpYW50OiBQcm9wVHlwZXMub25lT2YoWydkZXRlcm1pbmF0ZScsICdpbmRldGVybWluYXRlJ10pXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ2lyY3VsYXJQcm9ncmVzczsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBjcmVhdGVDb250YWluZXIgfSBmcm9tICdAbXVpL3N5c3RlbSc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICcuLi91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCBzdHlsZWQgZnJvbSAnLi4vc3R5bGVzL3N0eWxlZCc7XG5pbXBvcnQgeyB1c2VEZWZhdWx0UHJvcHMgfSBmcm9tICcuLi9EZWZhdWx0UHJvcHNQcm92aWRlcic7XG5jb25zdCBDb250YWluZXIgPSBjcmVhdGVDb250YWluZXIoe1xuICBjcmVhdGVTdHlsZWRDb21wb25lbnQ6IHN0eWxlZCgnZGl2Jywge1xuICAgIG5hbWU6ICdNdWlDb250YWluZXInLFxuICAgIHNsb3Q6ICdSb290JyxcbiAgICBvdmVycmlkZXNSZXNvbHZlcjogKHByb3BzLCBzdHlsZXMpID0+IHtcbiAgICAgIGNvbnN0IHtcbiAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgfSA9IHByb3BzO1xuICAgICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW2BtYXhXaWR0aCR7Y2FwaXRhbGl6ZShTdHJpbmcob3duZXJTdGF0ZS5tYXhXaWR0aCkpfWBdLCBvd25lclN0YXRlLmZpeGVkICYmIHN0eWxlcy5maXhlZCwgb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZGlzYWJsZUd1dHRlcnNdO1xuICAgIH1cbiAgfSksXG4gIHVzZVRoZW1lUHJvcHM6IGluUHJvcHMgPT4gdXNlRGVmYXVsdFByb3BzKHtcbiAgICBwcm9wczogaW5Qcm9wcyxcbiAgICBuYW1lOiAnTXVpQ29udGFpbmVyJ1xuICB9KVxufSk7XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDb250YWluZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogT3ZlcnJpZGUgb3IgZXh0ZW5kIHRoZSBzdHlsZXMgYXBwbGllZCB0byB0aGUgY29tcG9uZW50LlxuICAgKi9cbiAgY2xhc3NlczogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIFRoZSBjb21wb25lbnQgdXNlZCBmb3IgdGhlIHJvb3Qgbm9kZS5cbiAgICogRWl0aGVyIGEgc3RyaW5nIHRvIHVzZSBhIEhUTUwgZWxlbWVudCBvciBhIGNvbXBvbmVudC5cbiAgICovXG4gIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAvKipcbiAgICogSWYgYHRydWVgLCB0aGUgbGVmdCBhbmQgcmlnaHQgcGFkZGluZyBpcyByZW1vdmVkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZGlzYWJsZUd1dHRlcnM6IFByb3BUeXBlcy5ib29sLFxuICAvKipcbiAgICogU2V0IHRoZSBtYXgtd2lkdGggdG8gbWF0Y2ggdGhlIG1pbi13aWR0aCBvZiB0aGUgY3VycmVudCBicmVha3BvaW50LlxuICAgKiBUaGlzIGlzIHVzZWZ1bCBpZiB5b3UnZCBwcmVmZXIgdG8gZGVzaWduIGZvciBhIGZpeGVkIHNldCBvZiBzaXplc1xuICAgKiBpbnN0ZWFkIG9mIHRyeWluZyB0byBhY2NvbW1vZGF0ZSBhIGZ1bGx5IGZsdWlkIHZpZXdwb3J0LlxuICAgKiBJdCdzIGZsdWlkIGJ5IGRlZmF1bHQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICBmaXhlZDogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIG1heC13aWR0aCBvZiB0aGUgY29udGFpbmVyLlxuICAgKiBUaGUgY29udGFpbmVyIHdpZHRoIGdyb3dzIHdpdGggdGhlIHNpemUgb2YgdGhlIHNjcmVlbi5cbiAgICogU2V0IHRvIGBmYWxzZWAgdG8gZGlzYWJsZSBgbWF4V2lkdGhgLlxuICAgKiBAZGVmYXVsdCAnbGcnXG4gICAqL1xuICBtYXhXaWR0aDogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMub25lT2YoWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCcsIGZhbHNlXSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIFRoZSBzeXN0ZW0gcHJvcCB0aGF0IGFsbG93cyBkZWZpbmluZyBzeXN0ZW0gb3ZlcnJpZGVzIGFzIHdlbGwgYXMgYWRkaXRpb25hbCBDU1Mgc3R5bGVzLlxuICAgKi9cbiAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IENvbnRhaW5lcjsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IHVzZURlZmF1bHRQcm9wcyB9IGZyb20gJy4uL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCBHbG9iYWxTdHlsZXMgZnJvbSAnLi4vR2xvYmFsU3R5bGVzJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5pbXBvcnQgeyBqc3hzIGFzIF9qc3hzIH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5leHBvcnQgY29uc3QgaHRtbCA9ICh0aGVtZSwgZW5hYmxlQ29sb3JTY2hlbWUpID0+IF9leHRlbmRzKHtcbiAgV2Via2l0Rm9udFNtb290aGluZzogJ2FudGlhbGlhc2VkJyxcbiAgLy8gQW50aWFsaWFzaW5nLlxuICBNb3pPc3hGb250U21vb3RoaW5nOiAnZ3JheXNjYWxlJyxcbiAgLy8gQW50aWFsaWFzaW5nLlxuICAvLyBDaGFuZ2UgZnJvbSBgYm94LXNpemluZzogY29udGVudC1ib3hgIHNvIHRoYXQgYHdpZHRoYFxuICAvLyBpcyBub3QgYWZmZWN0ZWQgYnkgYHBhZGRpbmdgIG9yIGBib3JkZXJgLlxuICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgLy8gRml4IGZvbnQgcmVzaXplIHByb2JsZW0gaW4gaU9TXG4gIFdlYmtpdFRleHRTaXplQWRqdXN0OiAnMTAwJSdcbn0sIGVuYWJsZUNvbG9yU2NoZW1lICYmICF0aGVtZS52YXJzICYmIHtcbiAgY29sb3JTY2hlbWU6IHRoZW1lLnBhbGV0dGUubW9kZVxufSk7XG5leHBvcnQgY29uc3QgYm9keSA9IHRoZW1lID0+IF9leHRlbmRzKHtcbiAgY29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLnRleHQucHJpbWFyeVxufSwgdGhlbWUudHlwb2dyYXBoeS5ib2R5MSwge1xuICBiYWNrZ3JvdW5kQ29sb3I6ICh0aGVtZS52YXJzIHx8IHRoZW1lKS5wYWxldHRlLmJhY2tncm91bmQuZGVmYXVsdCxcbiAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICAvLyBTYXZlIHByaW50ZXIgaW5rLlxuICAgIGJhY2tncm91bmRDb2xvcjogKHRoZW1lLnZhcnMgfHwgdGhlbWUpLnBhbGV0dGUuY29tbW9uLndoaXRlXG4gIH1cbn0pO1xuZXhwb3J0IGNvbnN0IHN0eWxlcyA9ICh0aGVtZSwgZW5hYmxlQ29sb3JTY2hlbWUgPSBmYWxzZSkgPT4ge1xuICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gIGNvbnN0IGNvbG9yU2NoZW1lU3R5bGVzID0ge307XG4gIGlmIChlbmFibGVDb2xvclNjaGVtZSAmJiB0aGVtZS5jb2xvclNjaGVtZXMpIHtcbiAgICBPYmplY3QuZW50cmllcyh0aGVtZS5jb2xvclNjaGVtZXMpLmZvckVhY2goKFtrZXksIHNjaGVtZV0pID0+IHtcbiAgICAgIHZhciBfc2NoZW1lJHBhbGV0dGU7XG4gICAgICBjb2xvclNjaGVtZVN0eWxlc1t0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvXFxzKiYvLCAnJyldID0ge1xuICAgICAgICBjb2xvclNjaGVtZTogKF9zY2hlbWUkcGFsZXR0ZSA9IHNjaGVtZS5wYWxldHRlKSA9PSBudWxsID8gdm9pZCAwIDogX3NjaGVtZSRwYWxldHRlLm1vZGVcbiAgICAgIH07XG4gICAgfSk7XG4gIH1cbiAgbGV0IGRlZmF1bHRTdHlsZXMgPSBfZXh0ZW5kcyh7XG4gICAgaHRtbDogaHRtbCh0aGVtZSwgZW5hYmxlQ29sb3JTY2hlbWUpLFxuICAgICcqLCAqOjpiZWZvcmUsICo6OmFmdGVyJzoge1xuICAgICAgYm94U2l6aW5nOiAnaW5oZXJpdCdcbiAgICB9LFxuICAgICdzdHJvbmcsIGInOiB7XG4gICAgICBmb250V2VpZ2h0OiB0aGVtZS50eXBvZ3JhcGh5LmZvbnRXZWlnaHRCb2xkXG4gICAgfSxcbiAgICBib2R5OiBfZXh0ZW5kcyh7XG4gICAgICBtYXJnaW46IDBcbiAgICB9LCBib2R5KHRoZW1lKSwge1xuICAgICAgLy8gQWRkIHN1cHBvcnQgZm9yIGRvY3VtZW50LmJvZHkucmVxdWVzdEZ1bGxTY3JlZW4oKS5cbiAgICAgIC8vIE90aGVyIGVsZW1lbnRzLCBpZiBiYWNrZ3JvdW5kIHRyYW5zcGFyZW50LCBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICAgICcmOjpiYWNrZHJvcCc6IHtcbiAgICAgICAgYmFja2dyb3VuZENvbG9yOiAodGhlbWUudmFycyB8fCB0aGVtZSkucGFsZXR0ZS5iYWNrZ3JvdW5kLmRlZmF1bHRcbiAgICAgIH1cbiAgICB9KVxuICB9LCBjb2xvclNjaGVtZVN0eWxlcyk7XG4gIGNvbnN0IHRoZW1lT3ZlcnJpZGVzID0gKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50cy5NdWlDc3NCYXNlbGluZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnN0eWxlT3ZlcnJpZGVzO1xuICBpZiAodGhlbWVPdmVycmlkZXMpIHtcbiAgICBkZWZhdWx0U3R5bGVzID0gW2RlZmF1bHRTdHlsZXMsIHRoZW1lT3ZlcnJpZGVzXTtcbiAgfVxuICByZXR1cm4gZGVmYXVsdFN0eWxlcztcbn07XG5cbi8qKlxuICogS2lja3N0YXJ0IGFuIGVsZWdhbnQsIGNvbnNpc3RlbnQsIGFuZCBzaW1wbGUgYmFzZWxpbmUgdG8gYnVpbGQgdXBvbi5cbiAqL1xuZnVuY3Rpb24gQ3NzQmFzZWxpbmUoaW5Qcm9wcykge1xuICBjb25zdCBwcm9wcyA9IHVzZURlZmF1bHRQcm9wcyh7XG4gICAgcHJvcHM6IGluUHJvcHMsXG4gICAgbmFtZTogJ011aUNzc0Jhc2VsaW5lJ1xuICB9KTtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIGVuYWJsZUNvbG9yU2NoZW1lID0gZmFsc2VcbiAgfSA9IHByb3BzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3hzKFJlYWN0LkZyYWdtZW50LCB7XG4gICAgY2hpbGRyZW46IFsvKiNfX1BVUkVfXyovX2pzeChHbG9iYWxTdHlsZXMsIHtcbiAgICAgIHN0eWxlczogdGhlbWUgPT4gc3R5bGVzKHRoZW1lLCBlbmFibGVDb2xvclNjaGVtZSlcbiAgICB9KSwgY2hpbGRyZW5dXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gQ3NzQmFzZWxpbmUucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCICAgIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBkLnRzIGZpbGUgYW5kIHJ1biBgcG5wbSBwcm9wdHlwZXNgLiAgICAg4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogWW91IGNhbiB3cmFwIGEgbm9kZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEVuYWJsZSBgY29sb3Itc2NoZW1lYCBDU1MgcHJvcGVydHkgdG8gdXNlIGB0aGVtZS5wYWxldHRlLm1vZGVgLlxuICAgKiBGb3IgbW9yZSBkZXRhaWxzLCBjaGVjayBvdXQgaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL2NvbG9yLXNjaGVtZVxuICAgKiBGb3IgYnJvd3NlciBzdXBwb3J0LCBjaGVjayBvdXQgaHR0cHM6Ly9jYW5pdXNlLmNvbS8/c2VhcmNoPWNvbG9yLXNjaGVtZVxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgZW5hYmxlQ29sb3JTY2hlbWU6IFByb3BUeXBlcy5ib29sXG59IDogdm9pZCAwO1xuZXhwb3J0IGRlZmF1bHQgQ3NzQmFzZWxpbmU7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgU3lzdGVtRGVmYXVsdFByb3BzUHJvdmlkZXIsIHsgdXNlRGVmYXVsdFByb3BzIGFzIHVzZVN5c3RlbURlZmF1bHRQcm9wcyB9IGZyb20gJ0BtdWkvc3lzdGVtL0RlZmF1bHRQcm9wc1Byb3ZpZGVyJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBEZWZhdWx0UHJvcHNQcm92aWRlcihwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goU3lzdGVtRGVmYXVsdFByb3BzUHJvdmlkZXIsIF9leHRlbmRzKHt9LCBwcm9wcykpO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGVmYXVsdFByb3BzUHJvdmlkZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vYmplY3QuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRQcm9wc1Byb3ZpZGVyO1xuZXhwb3J0IGZ1bmN0aW9uIHVzZURlZmF1bHRQcm9wcyhwYXJhbXMpIHtcbiAgcmV0dXJuIHVzZVN5c3RlbURlZmF1bHRQcm9wcyhwYXJhbXMpO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImFkZEVuZExpc3RlbmVyXCIsIFwiYXBwZWFyXCIsIFwiY2hpbGRyZW5cIiwgXCJlYXNpbmdcIiwgXCJpblwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyZWRcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FeGl0XCIsIFwib25FeGl0ZWRcIiwgXCJvbkV4aXRpbmdcIiwgXCJzdHlsZVwiLCBcInRpbWVvdXRcIiwgXCJUcmFuc2l0aW9uQ29tcG9uZW50XCJdO1xuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbmltcG9ydCBlbGVtZW50QWNjZXB0aW5nUmVmIGZyb20gJ0BtdWkvdXRpbHMvZWxlbWVudEFjY2VwdGluZ1JlZic7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vc3R5bGVzL3VzZVRoZW1lJztcbmltcG9ydCB7IHJlZmxvdywgZ2V0VHJhbnNpdGlvblByb3BzIH0gZnJvbSAnLi4vdHJhbnNpdGlvbnMvdXRpbHMnO1xuaW1wb3J0IHVzZUZvcmtSZWYgZnJvbSAnLi4vdXRpbHMvdXNlRm9ya1JlZic7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3Qgc3R5bGVzID0ge1xuICBlbnRlcmluZzoge1xuICAgIG9wYWNpdHk6IDFcbiAgfSxcbiAgZW50ZXJlZDoge1xuICAgIG9wYWNpdHk6IDFcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgRmFkZSB0cmFuc2l0aW9uIGlzIHVzZWQgYnkgdGhlIFtNb2RhbF0oL21hdGVyaWFsLXVpL3JlYWN0LW1vZGFsLykgY29tcG9uZW50LlxuICogSXQgdXNlcyBbcmVhY3QtdHJhbnNpdGlvbi1ncm91cF0oaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0anMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cCkgaW50ZXJuYWxseS5cbiAqL1xuY29uc3QgRmFkZSA9IC8qI19fUFVSRV9fKi9SZWFjdC5mb3J3YXJkUmVmKGZ1bmN0aW9uIEZhZGUocHJvcHMsIHJlZikge1xuICBjb25zdCB0aGVtZSA9IHVzZVRoZW1lKCk7XG4gIGNvbnN0IGRlZmF1bHRUaW1lb3V0ID0ge1xuICAgIGVudGVyOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5lbnRlcmluZ1NjcmVlbixcbiAgICBleGl0OiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5sZWF2aW5nU2NyZWVuXG4gIH07XG4gIGNvbnN0IHtcbiAgICAgIGFkZEVuZExpc3RlbmVyLFxuICAgICAgYXBwZWFyID0gdHJ1ZSxcbiAgICAgIGNoaWxkcmVuLFxuICAgICAgZWFzaW5nLFxuICAgICAgaW46IGluUHJvcCxcbiAgICAgIG9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQsXG4gICAgICBvbkVudGVyaW5nLFxuICAgICAgb25FeGl0LFxuICAgICAgb25FeGl0ZWQsXG4gICAgICBvbkV4aXRpbmcsXG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQgPSBkZWZhdWx0VGltZW91dCxcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9wcm9wLXR5cGVzXG4gICAgICBUcmFuc2l0aW9uQ29tcG9uZW50ID0gVHJhbnNpdGlvblxuICAgIH0gPSBwcm9wcyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICBjb25zdCBlbmFibGVTdHJpY3RNb2RlQ29tcGF0ID0gdHJ1ZTtcbiAgY29uc3Qgbm9kZVJlZiA9IFJlYWN0LnVzZVJlZihudWxsKTtcbiAgY29uc3QgaGFuZGxlUmVmID0gdXNlRm9ya1JlZihub2RlUmVmLCBjaGlsZHJlbi5yZWYsIHJlZik7XG4gIGNvbnN0IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2sgPSBjYWxsYmFjayA9PiBtYXliZUlzQXBwZWFyaW5nID0+IHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IG5vZGUgPSBub2RlUmVmLmN1cnJlbnQ7XG5cbiAgICAgIC8vIG9uRW50ZXJYeHggYW5kIG9uRXhpdFh4eCBjYWxsYmFja3MgaGF2ZSBhIGRpZmZlcmVudCBhcmd1bWVudHMubGVuZ3RoIHZhbHVlLlxuICAgICAgaWYgKG1heWJlSXNBcHBlYXJpbmcgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjYWxsYmFjayhub2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKG5vZGUsIG1heWJlSXNBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH1cbiAgfTtcbiAgY29uc3QgaGFuZGxlRW50ZXJpbmcgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRW50ZXJpbmcpO1xuICBjb25zdCBoYW5kbGVFbnRlciA9IG5vcm1hbGl6ZWRUcmFuc2l0aW9uQ2FsbGJhY2soKG5vZGUsIGlzQXBwZWFyaW5nKSA9PiB7XG4gICAgcmVmbG93KG5vZGUpOyAvLyBTbyB0aGUgYW5pbWF0aW9uIGFsd2F5cyBzdGFydCBmcm9tIHRoZSBzdGFydC5cblxuICAgIGNvbnN0IHRyYW5zaXRpb25Qcm9wcyA9IGdldFRyYW5zaXRpb25Qcm9wcyh7XG4gICAgICBzdHlsZSxcbiAgICAgIHRpbWVvdXQsXG4gICAgICBlYXNpbmdcbiAgICB9LCB7XG4gICAgICBtb2RlOiAnZW50ZXInXG4gICAgfSk7XG4gICAgbm9kZS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIGlmIChvbkVudGVyKSB7XG4gICAgICBvbkVudGVyKG5vZGUsIGlzQXBwZWFyaW5nKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFbnRlcmVkID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkVudGVyZWQpO1xuICBjb25zdCBoYW5kbGVFeGl0aW5nID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhvbkV4aXRpbmcpO1xuICBjb25zdCBoYW5kbGVFeGl0ID0gbm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayhub2RlID0+IHtcbiAgICBjb25zdCB0cmFuc2l0aW9uUHJvcHMgPSBnZXRUcmFuc2l0aW9uUHJvcHMoe1xuICAgICAgc3R5bGUsXG4gICAgICB0aW1lb3V0LFxuICAgICAgZWFzaW5nXG4gICAgfSwge1xuICAgICAgbW9kZTogJ2V4aXQnXG4gICAgfSk7XG4gICAgbm9kZS5zdHlsZS53ZWJraXRUcmFuc2l0aW9uID0gdGhlbWUudHJhbnNpdGlvbnMuY3JlYXRlKCdvcGFjaXR5JywgdHJhbnNpdGlvblByb3BzKTtcbiAgICBub2RlLnN0eWxlLnRyYW5zaXRpb24gPSB0aGVtZS50cmFuc2l0aW9ucy5jcmVhdGUoJ29wYWNpdHknLCB0cmFuc2l0aW9uUHJvcHMpO1xuICAgIGlmIChvbkV4aXQpIHtcbiAgICAgIG9uRXhpdChub2RlKTtcbiAgICB9XG4gIH0pO1xuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSBub3JtYWxpemVkVHJhbnNpdGlvbkNhbGxiYWNrKG9uRXhpdGVkKTtcbiAgY29uc3QgaGFuZGxlQWRkRW5kTGlzdGVuZXIgPSBuZXh0ID0+IHtcbiAgICBpZiAoYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIC8vIE9sZCBjYWxsIHNpZ25hdHVyZSBiZWZvcmUgYHJlYWN0LXRyYW5zaXRpb24tZ3JvdXBgIGltcGxlbWVudGVkIGBub2RlUmVmYFxuICAgICAgYWRkRW5kTGlzdGVuZXIobm9kZVJlZi5jdXJyZW50LCBuZXh0KTtcbiAgICB9XG4gIH07XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChUcmFuc2l0aW9uQ29tcG9uZW50LCBfZXh0ZW5kcyh7XG4gICAgYXBwZWFyOiBhcHBlYXIsXG4gICAgaW46IGluUHJvcCxcbiAgICBub2RlUmVmOiBlbmFibGVTdHJpY3RNb2RlQ29tcGF0ID8gbm9kZVJlZiA6IHVuZGVmaW5lZCxcbiAgICBvbkVudGVyOiBoYW5kbGVFbnRlcixcbiAgICBvbkVudGVyZWQ6IGhhbmRsZUVudGVyZWQsXG4gICAgb25FbnRlcmluZzogaGFuZGxlRW50ZXJpbmcsXG4gICAgb25FeGl0OiBoYW5kbGVFeGl0LFxuICAgIG9uRXhpdGVkOiBoYW5kbGVFeGl0ZWQsXG4gICAgb25FeGl0aW5nOiBoYW5kbGVFeGl0aW5nLFxuICAgIGFkZEVuZExpc3RlbmVyOiBoYW5kbGVBZGRFbmRMaXN0ZW5lcixcbiAgICB0aW1lb3V0OiB0aW1lb3V0XG4gIH0sIG90aGVyLCB7XG4gICAgY2hpbGRyZW46IChzdGF0ZSwgY2hpbGRQcm9wcykgPT4ge1xuICAgICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIF9leHRlbmRzKHtcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBvcGFjaXR5OiAwLFxuICAgICAgICAgIHZpc2liaWxpdHk6IHN0YXRlID09PSAnZXhpdGVkJyAmJiAhaW5Qcm9wID8gJ2hpZGRlbicgOiB1bmRlZmluZWRcbiAgICAgICAgfSwgc3R5bGVzW3N0YXRlXSwgc3R5bGUsIGNoaWxkcmVuLnByb3BzLnN0eWxlKSxcbiAgICAgICAgcmVmOiBoYW5kbGVSZWZcbiAgICAgIH0sIGNoaWxkUHJvcHMpKTtcbiAgICB9XG4gIH0pKTtcbn0pO1xucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRmFkZS5wcm9wVHlwZXMgLyogcmVtb3ZlLXByb3B0eXBlcyAqLyA9IHtcbiAgLy8g4pSM4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAIFdhcm5pbmcg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSQXG4gIC8vIOKUgiBUaGVzZSBQcm9wVHlwZXMgYXJlIGdlbmVyYXRlZCBmcm9tIHRoZSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuIOKUglxuICAvLyDilIIgICAgVG8gdXBkYXRlIHRoZW0sIGVkaXQgdGhlIGQudHMgZmlsZSBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuICAgICDilIJcbiAgLy8g4pSU4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSYXG4gIC8qKlxuICAgKiBBZGQgYSBjdXN0b20gdHJhbnNpdGlvbiBlbmQgdHJpZ2dlci4gQ2FsbGVkIHdpdGggdGhlIHRyYW5zaXRpb25pbmcgRE9NXG4gICAqIG5vZGUgYW5kIGEgZG9uZSBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gTm90ZTogVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICovXG4gIGFkZEVuZExpc3RlbmVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIFBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlbiBpdCBmaXJzdCBtb3VudHMgaWYgYGluYCBpcyBhbHNvIGB0cnVlYC5cbiAgICogU2V0IHRoaXMgdG8gYGZhbHNlYCB0byBkaXNhYmxlIHRoaXMgYmVoYXZpb3IuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIGFwcGVhcjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBBIHNpbmdsZSBjaGlsZCBjb250ZW50IGVsZW1lbnQuXG4gICAqL1xuICBjaGlsZHJlbjogZWxlbWVudEFjY2VwdGluZ1JlZi5pc1JlcXVpcmVkLFxuICAvKipcbiAgICogVGhlIHRyYW5zaXRpb24gdGltaW5nIGZ1bmN0aW9uLlxuICAgKiBZb3UgbWF5IHNwZWNpZnkgYSBzaW5nbGUgZWFzaW5nIG9yIGEgb2JqZWN0IGNvbnRhaW5pbmcgZW50ZXIgYW5kIGV4aXQgdmFsdWVzLlxuICAgKi9cbiAgZWFzaW5nOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGVudGVyOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGV4aXQ6IFByb3BUeXBlcy5zdHJpbmdcbiAgfSksIFByb3BUeXBlcy5zdHJpbmddKSxcbiAgLyoqXG4gICAqIElmIGB0cnVlYCwgdGhlIGNvbXBvbmVudCB3aWxsIHRyYW5zaXRpb24gaW4uXG4gICAqL1xuICBpbjogUHJvcFR5cGVzLmJvb2wsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkVudGVyaW5nOiBQcm9wVHlwZXMuZnVuYyxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRlZDogUHJvcFR5cGVzLmZ1bmMsXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgc3R5bGU6IFByb3BUeXBlcy5vYmplY3QsXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gZm9yIHRoZSB0cmFuc2l0aW9uLCBpbiBtaWxsaXNlY29uZHMuXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnMsIG9yIGluZGl2aWR1YWxseSB3aXRoIGFuIG9iamVjdC5cbiAgICogQGRlZmF1bHQge1xuICAgKiAgIGVudGVyOiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5lbnRlcmluZ1NjcmVlbixcbiAgICogICBleGl0OiB0aGVtZS50cmFuc2l0aW9ucy5kdXJhdGlvbi5sZWF2aW5nU2NyZWVuLFxuICAgKiB9XG4gICAqL1xuICB0aW1lb3V0OiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMuc2hhcGUoe1xuICAgIGFwcGVhcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBlbnRlcjogUHJvcFR5cGVzLm51bWJlcixcbiAgICBleGl0OiBQcm9wVHlwZXMubnVtYmVyXG4gIH0pXSlcbn0gOiB2b2lkIDA7XG5leHBvcnQgZGVmYXVsdCBGYWRlOyJdLCJuYW1lcyI6WyJkZWZhdWx0VGhlbWUiLCJjcmVhdGVUaGVtZSIsImNyZWF0ZUJveCIsInRoZW1lSWQiLCJkZWZhdWx0Q2xhc3NOYW1lIiwicm9vdCIsImdlbmVyYXRlQ2xhc3NOYW1lIiwiQ2xhc3NOYW1lR2VuZXJhdG9yIiwiZ2VuZXJhdGUiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzc2VzIiwiX2V4Y2x1ZGVkIiwiX3QiLCJfdDIiLCJfdDMiLCJfdDQiLCJfIiwidCIsImVudGVyS2V5ZnJhbWUiLCJleGl0S2V5ZnJhbWUiLCJwdWxzYXRlS2V5ZnJhbWUiLCJUb3VjaFJpcHBsZVJvb3QiLCJzdHlsZWQiLCJuYW1lIiwic2xvdCIsIm92ZXJmbG93IiwicG9pbnRlckV2ZW50cyIsInBvc2l0aW9uIiwiekluZGV4IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiYm9yZGVyUmFkaXVzIiwiVG91Y2hSaXBwbGVSaXBwbGUiLCJwcm9wcyIsImNsYXNzTmFtZSIsImNsYXNzZXMiLCJwdWxzYXRlIiwicmlwcGxlWCIsInJpcHBsZVkiLCJyaXBwbGVTaXplIiwiaW4iLCJpblByb3AiLCJvbkV4aXRlZCIsInRpbWVvdXQiLCJsZWF2aW5nIiwic2V0TGVhdmluZyIsInJpcHBsZUNsYXNzTmFtZSIsImNsc3giLCJyaXBwbGUiLCJyaXBwbGVWaXNpYmxlIiwicmlwcGxlUHVsc2F0ZSIsInJpcHBsZVN0eWxlcyIsIndpZHRoIiwiaGVpZ2h0IiwiY2hpbGRDbGFzc05hbWUiLCJjaGlsZCIsImNoaWxkTGVhdmluZyIsImNoaWxkUHVsc2F0ZSIsInRpbWVvdXRJZCIsInNldFRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJzdHlsZSIsImNoaWxkcmVuIiwidGhlbWUiLCJ0cmFuc2l0aW9ucyIsImVhc2luZyIsImVhc2VJbk91dCIsImR1cmF0aW9uIiwic2hvcnRlciIsImluUHJvcHMiLCJyZWYiLCJjZW50ZXIiLCJjZW50ZXJQcm9wIiwib3RoZXIiLCJyaXBwbGVzIiwic2V0UmlwcGxlcyIsIm5leHRLZXkiLCJyaXBwbGVDYWxsYmFjayIsImN1cnJlbnQiLCJpZ25vcmluZ01vdXNlRG93biIsInN0YXJ0VGltZXIiLCJ1c2VUaW1lb3V0Iiwic3RhcnRUaW1lckNvbW1pdCIsImNvbnRhaW5lciIsInN0YXJ0Q29tbWl0IiwicGFyYW1zIiwiY2IiLCJvbGRSaXBwbGVzIiwic3RhcnQiLCJldmVudCIsIm9wdGlvbnMiLCJmYWtlRWxlbWVudCIsInR5cGUiLCJlbGVtZW50IiwicmVjdCIsImdldEJvdW5kaW5nQ2xpZW50UmVjdCIsInVuZGVmaW5lZCIsImNsaWVudFgiLCJjbGllbnRZIiwidG91Y2hlcyIsIk1hdGgiLCJyb3VuZCIsImxlbmd0aCIsInNxcnQiLCJzaXplWCIsIm1heCIsImFicyIsImNsaWVudFdpZHRoIiwic2l6ZVkiLCJjbGllbnRIZWlnaHQiLCJzdG9wIiwiY2xlYXIiLCJzbGljZSIsIlRyYW5zaXRpb25Hcm91cCIsImNvbXBvbmVudCIsImV4aXQiLCJnZXRCdXR0b25CYXNlVXRpbGl0eUNsYXNzIiwiQnV0dG9uQmFzZVJvb3QiLCJvdmVycmlkZXNSZXNvbHZlciIsInN0eWxlcyIsImRpc3BsYXkiLCJhbGlnbkl0ZW1zIiwianVzdGlmeUNvbnRlbnQiLCJib3hTaXppbmciLCJXZWJraXRUYXBIaWdobGlnaHRDb2xvciIsImJhY2tncm91bmRDb2xvciIsIm91dGxpbmUiLCJib3JkZXIiLCJtYXJnaW4iLCJwYWRkaW5nIiwiY3Vyc29yIiwidXNlclNlbGVjdCIsInZlcnRpY2FsQWxpZ24iLCJNb3pBcHBlYXJhbmNlIiwiV2Via2l0QXBwZWFyYW5jZSIsInRleHREZWNvcmF0aW9uIiwiY29sb3IiLCJib3JkZXJTdHlsZSIsImRpc2FibGVkIiwiY29sb3JBZGp1c3QiLCJhY3Rpb24iLCJjZW50ZXJSaXBwbGUiLCJkaXNhYmxlUmlwcGxlIiwiZGlzYWJsZVRvdWNoUmlwcGxlIiwiZm9jdXNSaXBwbGUiLCJMaW5rQ29tcG9uZW50Iiwib25CbHVyIiwib25DbGljayIsIm9uQ29udGV4dE1lbnUiLCJvbkRyYWdMZWF2ZSIsIm9uRm9jdXMiLCJvbkZvY3VzVmlzaWJsZSIsIm9uS2V5RG93biIsIm9uS2V5VXAiLCJvbk1vdXNlRG93biIsIm9uTW91c2VMZWF2ZSIsIm9uTW91c2VVcCIsIm9uVG91Y2hFbmQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCIsInRhYkluZGV4IiwiVG91Y2hSaXBwbGVQcm9wcyIsInRvdWNoUmlwcGxlUmVmIiwiYnV0dG9uUmVmIiwicmlwcGxlUmVmIiwiaGFuZGxlUmlwcGxlUmVmIiwidXNlRm9ya1JlZiIsImlzRm9jdXNWaXNpYmxlUmVmIiwiaGFuZGxlRm9jdXNWaXNpYmxlIiwiaGFuZGxlQmx1clZpc2libGUiLCJmb2N1c1Zpc2libGVSZWYiLCJ1c2VJc0ZvY3VzVmlzaWJsZSIsImZvY3VzVmlzaWJsZSIsInNldEZvY3VzVmlzaWJsZSIsImZvY3VzIiwibW91bnRlZFN0YXRlIiwic2V0TW91bnRlZFN0YXRlIiwiZW5hYmxlVG91Y2hSaXBwbGUiLCJ1c2VSaXBwbGVIYW5kbGVyIiwicmlwcGxlQWN0aW9uIiwiZXZlbnRDYWxsYmFjayIsInNraXBSaXBwbGVBY3Rpb24iLCJ1c2VFdmVudENhbGxiYWNrIiwiaGFuZGxlTW91c2VEb3duIiwiaGFuZGxlQ29udGV4dE1lbnUiLCJoYW5kbGVEcmFnTGVhdmUiLCJoYW5kbGVNb3VzZVVwIiwiaGFuZGxlTW91c2VMZWF2ZSIsInByZXZlbnREZWZhdWx0IiwiaGFuZGxlVG91Y2hTdGFydCIsImhhbmRsZVRvdWNoRW5kIiwiaGFuZGxlVG91Y2hNb3ZlIiwiaGFuZGxlQmx1ciIsImhhbmRsZUZvY3VzIiwiY3VycmVudFRhcmdldCIsImlzTm9uTmF0aXZlQnV0dG9uIiwiYnV0dG9uIiwidGFnTmFtZSIsImhyZWYiLCJrZXlkb3duUmVmIiwiaGFuZGxlS2V5RG93biIsImtleSIsInRhcmdldCIsImhhbmRsZUtleVVwIiwiZGVmYXVsdFByZXZlbnRlZCIsIkNvbXBvbmVudFByb3AiLCJ0byIsImJ1dHRvblByb3BzIiwicm9sZSIsImhhbmRsZVJlZiIsIm93bmVyU3RhdGUiLCJmb2N1c1Zpc2libGVDbGFzc05hbWUiLCJzbG90cyIsImNvbXBvc2VkQ2xhc3NlcyIsImNvbXBvc2VDbGFzc2VzIiwidXNlVXRpbGl0eUNsYXNzZXMiLCJhcyIsImdldEJ1dHRvblV0aWxpdHlDbGFzcyIsImNvbW1vbkljb25TdHlsZXMiLCJzaXplIiwiZm9udFNpemUiLCJCdXR0b25Sb290Iiwic2hvdWxkRm9yd2FyZFByb3AiLCJwcm9wIiwicm9vdFNob3VsZEZvcndhcmRQcm9wIiwidmFyaWFudCIsImNhcGl0YWxpemUiLCJjb2xvckluaGVyaXQiLCJkaXNhYmxlRWxldmF0aW9uIiwiZnVsbFdpZHRoIiwiX3RoZW1lJHBhbGV0dGUkZ2V0Q29uIiwiX3RoZW1lJHBhbGV0dGUiLCJpbmhlcml0Q29udGFpbmVkQmFja2dyb3VuZENvbG9yIiwicGFsZXR0ZSIsIm1vZGUiLCJncmV5IiwiaW5oZXJpdENvbnRhaW5lZEhvdmVyQmFja2dyb3VuZENvbG9yIiwiQTEwMCIsInR5cG9ncmFwaHkiLCJtaW5XaWR0aCIsInZhcnMiLCJzaGFwZSIsInRyYW5zaXRpb24iLCJjcmVhdGUiLCJzaG9ydCIsInRleHQiLCJwcmltYXJ5Q2hhbm5lbCIsImhvdmVyT3BhY2l0eSIsInByaW1hcnkiLCJtYWluQ2hhbm5lbCIsIm1haW4iLCJCdXR0b24iLCJpbmhlcml0Q29udGFpbmVkSG92ZXJCZyIsImJveFNoYWRvdyIsInNoYWRvd3MiLCJkYXJrIiwiZGlzYWJsZWRCYWNrZ3JvdW5kIiwiZ2V0Q29udHJhc3RUZXh0IiwiY2FsbCIsImluaGVyaXRDb250YWluZWRCZyIsImNvbnRyYXN0VGV4dCIsImJvcmRlckNvbG9yIiwicHhUb1JlbSIsIkJ1dHRvblN0YXJ0SWNvbiIsInN0YXJ0SWNvbiIsIm1hcmdpblJpZ2h0IiwibWFyZ2luTGVmdCIsIkJ1dHRvbkVuZEljb24iLCJlbmRJY29uIiwiY29udGV4dFByb3BzIiwiYnV0dG9uR3JvdXBCdXR0b25Db250ZXh0UG9zaXRpb25DbGFzc05hbWUiLCJyZXNvbHZlZFByb3BzIiwicmVzb2x2ZVByb3BzIiwiZGlzYWJsZUZvY3VzUmlwcGxlIiwiZW5kSWNvblByb3AiLCJzdGFydEljb25Qcm9wIiwibGFiZWwiLCJwb3NpdGlvbkNsYXNzTmFtZSIsImdldENpcmN1bGFyUHJvZ3Jlc3NVdGlsaXR5Q2xhc3MiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImNpcmN1bGFyUm90YXRlS2V5ZnJhbWUiLCJjaXJjdWxhckRhc2hLZXlmcmFtZSIsIkNpcmN1bGFyUHJvZ3Jlc3NSb290IiwiQ2lyY3VsYXJQcm9ncmVzc1NWRyIsInN2ZyIsIkNpcmN1bGFyUHJvZ3Jlc3NDaXJjbGUiLCJjaXJjbGUiLCJkaXNhYmxlU2hyaW5rIiwiY2lyY2xlRGlzYWJsZVNocmluayIsInN0cm9rZSIsInN0cm9rZURhc2hhcnJheSIsInN0cm9rZURhc2hvZmZzZXQiLCJ0aGlja25lc3MiLCJ2YWx1ZSIsImNpcmNsZVN0eWxlIiwicm9vdFN0eWxlIiwicm9vdFByb3BzIiwiY2lyY3VtZmVyZW5jZSIsIlBJIiwidG9GaXhlZCIsInRyYW5zZm9ybSIsInZpZXdCb3giLCJjeCIsImN5IiwiciIsImZpbGwiLCJzdHJva2VXaWR0aCIsImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsIlN0cmluZyIsIm1heFdpZHRoIiwiZml4ZWQiLCJkaXNhYmxlR3V0dGVycyIsInVzZVRoZW1lUHJvcHMiLCJodG1sIiwiZW5hYmxlQ29sb3JTY2hlbWUiLCJXZWJraXRGb250U21vb3RoaW5nIiwiTW96T3N4Rm9udFNtb290aGluZyIsIldlYmtpdFRleHRTaXplQWRqdXN0IiwiY29sb3JTY2hlbWUiLCJib2R5IiwiYm9keTEiLCJiYWNrZ3JvdW5kIiwiZGVmYXVsdCIsImNvbW1vbiIsIndoaXRlIiwiX3RoZW1lJGNvbXBvbmVudHMiLCJjb2xvclNjaGVtZVN0eWxlcyIsImNvbG9yU2NoZW1lcyIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwic2NoZW1lIiwiX3NjaGVtZSRwYWxldHRlIiwiZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciIsInJlcGxhY2UiLCJkZWZhdWx0U3R5bGVzIiwiZm9udFdlaWdodCIsImZvbnRXZWlnaHRCb2xkIiwidGhlbWVPdmVycmlkZXMiLCJjb21wb25lbnRzIiwiTXVpQ3NzQmFzZWxpbmUiLCJzdHlsZU92ZXJyaWRlcyIsInVzZURlZmF1bHRQcm9wcyIsImVudGVyaW5nIiwib3BhY2l0eSIsImVudGVyZWQiLCJkZWZhdWx0VGltZW91dCIsImVudGVyIiwiZW50ZXJpbmdTY3JlZW4iLCJsZWF2aW5nU2NyZWVuIiwiYWRkRW5kTGlzdGVuZXIiLCJhcHBlYXIiLCJvbkVudGVyIiwib25FbnRlcmVkIiwib25FbnRlcmluZyIsIm9uRXhpdCIsIm9uRXhpdGluZyIsIlRyYW5zaXRpb25Db21wb25lbnQiLCJub2RlUmVmIiwibm9ybWFsaXplZFRyYW5zaXRpb25DYWxsYmFjayIsImNhbGxiYWNrIiwibWF5YmVJc0FwcGVhcmluZyIsIm5vZGUiLCJoYW5kbGVFbnRlcmluZyIsImhhbmRsZUVudGVyIiwiaXNBcHBlYXJpbmciLCJ0cmFuc2l0aW9uUHJvcHMiLCJ3ZWJraXRUcmFuc2l0aW9uIiwiaGFuZGxlRW50ZXJlZCIsImhhbmRsZUV4aXRpbmciLCJoYW5kbGVFeGl0IiwiaGFuZGxlRXhpdGVkIiwibmV4dCIsInN0YXRlIiwiY2hpbGRQcm9wcyIsInZpc2liaWxpdHkiXSwic291cmNlUm9vdCI6IiJ9