"use strict";(self.webpackChunksrsrfl_react=self.webpackChunksrsrfl_react||[]).push([[472],{9940:(e,t,r)=>{r.d(t,{A:()=>s}),r(6540);var n=r(7437),o=r(4848);function s(e){const{styles:t,defaultTheme:r={}}=e,s="function"==typeof t?e=>{return t(null==(n=e)||0===Object.keys(n).length?r:e);var n}:t;return(0,o.jsx)(n.mL,{styles:s})}},9495:(e,t,r)=>{r.r(t),r.d(t,{GlobalStyles:()=>p.A,StyledEngineProvider:()=>u,ThemeContext:()=>s.T,css:()=>o.AH,default:()=>c,internal_processStyles:()=>d,keyframes:()=>o.i7});var n=r(1479),o=r(7437),s=r(9214),a=(r(6540),r(1893)),i=r(4848);let l;function u(e){const{injectFirst:t,children:r}=e;return t&&l?(0,i.jsx)(s.C,{value:l,children:r}):r}"object"==typeof document&&(l=(0,a.A)({key:"css",prepend:!0}));var p=r(9940);function c(e,t){return(0,n.A)(e,t)}const d=(e,t)=>{Array.isArray(e.__emotion_styles)&&(e.__emotion_styles=t(e.__emotion_styles))}},771:(e,t,r)=>{var n=r(4994);t.X4=function(e,t){return e=i(e),t=a(t),"rgb"!==e.type&&"hsl"!==e.type||(e.type+="a"),"color"===e.type?e.values[3]=`/${t}`:e.values[3]=t,l(e)},t.e$=p,t.eM=function(e,t){const r=u(e),n=u(t);return(Math.max(r,n)+.05)/(Math.min(r,n)+.05)},t.a=c;var o=n(r(8944)),s=n(r(7535));function a(e,t=0,r=1){return(0,s.default)(e,t,r)}function i(e){if(e.type)return e;if("#"===e.charAt(0))return i(function(e){e=e.slice(1);const t=new RegExp(`.{1,${e.length>=6?2:1}}`,"g");let r=e.match(t);return r&&1===r[0].length&&(r=r.map((e=>e+e))),r?`rgb${4===r.length?"a":""}(${r.map(((e,t)=>t<3?parseInt(e,16):Math.round(parseInt(e,16)/255*1e3)/1e3)).join(", ")})`:""}(e));const t=e.indexOf("("),r=e.substring(0,t);if(-1===["rgb","rgba","hsl","hsla","color"].indexOf(r))throw new Error((0,o.default)(9,e));let n,s=e.substring(t+1,e.length-1);if("color"===r){if(s=s.split(" "),n=s.shift(),4===s.length&&"/"===s[3].charAt(0)&&(s[3]=s[3].slice(1)),-1===["srgb","display-p3","a98-rgb","prophoto-rgb","rec-2020"].indexOf(n))throw new Error((0,o.default)(10,n))}else s=s.split(",");return s=s.map((e=>parseFloat(e))),{type:r,values:s,colorSpace:n}}function l(e){const{type:t,colorSpace:r}=e;let{values:n}=e;return-1!==t.indexOf("rgb")?n=n.map(((e,t)=>t<3?parseInt(e,10):e)):-1!==t.indexOf("hsl")&&(n[1]=`${n[1]}%`,n[2]=`${n[2]}%`),n=-1!==t.indexOf("color")?`${r} ${n.join(" ")}`:`${n.join(", ")}`,`${t}(${n})`}function u(e){let t="hsl"===(e=i(e)).type||"hsla"===e.type?i(function(e){e=i(e);const{values:t}=e,r=t[0],n=t[1]/100,o=t[2]/100,s=n*Math.min(o,1-o),a=(e,t=(e+r/30)%12)=>o-s*Math.max(Math.min(t-3,9-t,1),-1);let u="rgb";const p=[Math.round(255*a(0)),Math.round(255*a(8)),Math.round(255*a(4))];return"hsla"===e.type&&(u+="a",p.push(t[3])),l({type:u,values:p})}(e)).values:e.values;return t=t.map((t=>("color"!==e.type&&(t/=255),t<=.03928?t/12.92:((t+.055)/1.055)**2.4))),Number((.2126*t[0]+.7152*t[1]+.0722*t[2]).toFixed(3))}function p(e,t){if(e=i(e),t=a(t),-1!==e.type.indexOf("hsl"))e.values[2]*=1-t;else if(-1!==e.type.indexOf("rgb")||-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]*=1-t;return l(e)}function c(e,t){if(e=i(e),t=a(t),-1!==e.type.indexOf("hsl"))e.values[2]+=(100-e.values[2])*t;else if(-1!==e.type.indexOf("rgb"))for(let r=0;r<3;r+=1)e.values[r]+=(255-e.values[r])*t;else if(-1!==e.type.indexOf("color"))for(let r=0;r<3;r+=1)e.values[r]+=(1-e.values[r])*t;return l(e)}},6461:(e,t,r)=>{var n=r(4994);t.Ay=function(e={}){const{themeId:t,defaultTheme:r=y,rootShouldForwardProp:n=m,slotShouldForwardProp:l=m}=e,p=e=>(0,u.default)((0,o.default)({},e,{theme:g((0,o.default)({},e,{defaultTheme:r,themeId:t}))}));return p.__mui_systemSx=!0,(e,u={})=>{(0,a.internal_processStyles)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:c,slot:f,skipVariantsResolver:y,skipSx:v,overridesResolver:x=A(h(f))}=u,w=(0,s.default)(u,d),k=void 0!==y?y:f&&"Root"!==f&&"root"!==f||!1,S=v||!1;let O=m;"Root"===f||"root"===f?O=n:f?O=l:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(O=void 0);const j=(0,a.default)(e,(0,o.default)({shouldForwardProp:O,label:void 0},w)),C=e=>"function"==typeof e&&e.__emotion_real!==e||(0,i.isPlainObject)(e)?n=>b(e,(0,o.default)({},n,{theme:g({theme:n.theme,defaultTheme:r,themeId:t})})):e,_=(n,...s)=>{let a=C(n);const i=s?s.map(C):[];c&&x&&i.push((e=>{const n=g((0,o.default)({},e,{defaultTheme:r,themeId:t}));if(!n.components||!n.components[c]||!n.components[c].styleOverrides)return null;const s=n.components[c].styleOverrides,a={};return Object.entries(s).forEach((([t,r])=>{a[t]=b(r,(0,o.default)({},e,{theme:n}))})),x(e,a)})),c&&!k&&i.push((e=>{var n;const s=g((0,o.default)({},e,{defaultTheme:r,themeId:t}));return b({variants:null==s||null==(n=s.components)||null==(n=n[c])?void 0:n.variants},(0,o.default)({},e,{theme:s}))})),S||i.push(p);const l=i.length-s.length;if(Array.isArray(n)&&l>0){const e=new Array(l).fill("");a=[...n,...e],a.raw=[...n.raw,...e]}const u=j(a,...i);return e.muiName&&(u.muiName=e.muiName),u};return j.withConfig&&(_.withConfig=j.withConfig),_}};var o=n(r(4634)),s=n(r(4893)),a=function(e,t){if(e&&e.__esModule)return e;if(null===e||"object"!=typeof e&&"function"!=typeof e)return{default:e};var r=f(t);if(r&&r.has(e))return r.get(e);var n={__proto__:null},o=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var s in e)if("default"!==s&&Object.prototype.hasOwnProperty.call(e,s)){var a=o?Object.getOwnPropertyDescriptor(e,s):null;a&&(a.get||a.set)?Object.defineProperty(n,s,a):n[s]=e[s]}return n.default=e,r&&r.set(e,n),n}(r(9495)),i=r(4239),l=(n(r(7149)),n(r(7320)),n(r(3142))),u=n(r(3857));const p=["ownerState"],c=["variants"],d=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function f(e){if("function"!=typeof WeakMap)return null;var t=new WeakMap,r=new WeakMap;return(f=function(e){return e?r:t})(e)}function m(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const y=(0,l.default)(),h=e=>e?e.charAt(0).toLowerCase()+e.slice(1):e;function g({defaultTheme:e,theme:t,themeId:r}){return n=t,0===Object.keys(n).length?e:t[r]||t;var n}function A(e){return e?(t,r)=>r[e]:null}function b(e,t){let{ownerState:r}=t,n=(0,s.default)(t,p);const a="function"==typeof e?e((0,o.default)({ownerState:r},n)):e;if(Array.isArray(a))return a.flatMap((e=>b(e,(0,o.default)({ownerState:r},n))));if(a&&"object"==typeof a&&Array.isArray(a.variants)){const{variants:e=[]}=a;let t=(0,s.default)(a,c);return e.forEach((e=>{let s=!0;"function"==typeof e.props?s=e.props((0,o.default)({ownerState:r},n,r)):Object.keys(e.props).forEach((t=>{(null==r?void 0:r[t])!==e.props[t]&&n[t]!==e.props[t]&&(s=!1)})),s&&(Array.isArray(t)||(t=[t]),t.push("function"==typeof e.style?e.style((0,o.default)({ownerState:r},n,r)):e.style))})),t}return a}},8261:(e,t,r)=>{r.d(t,{A:()=>R});var n=r(8587),o=r(8168),s=r(6540),a=r(4164),i=r(1609),l=r(5659),u=r(3967),p=r(7379),c=r(2858);var d=r(9495),f=r(1317),m=r(8749),y=r(3571);const h=["ownerState"],g=["variants"],A=["name","slot","skipVariantsResolver","skipSx","overridesResolver"];function b(e){return"ownerState"!==e&&"theme"!==e&&"sx"!==e&&"as"!==e}const v=(0,m.A)(),x=e=>e?e.charAt(0).toLowerCase()+e.slice(1):e;function w({defaultTheme:e,theme:t,themeId:r}){return n=t,0===Object.keys(n).length?e:t[r]||t;var n}function k(e){return e?(t,r)=>r[e]:null}function S(e,t){let{ownerState:r}=t,s=(0,n.A)(t,h);const a="function"==typeof e?e((0,o.A)({ownerState:r},s)):e;if(Array.isArray(a))return a.flatMap((e=>S(e,(0,o.A)({ownerState:r},s))));if(a&&"object"==typeof a&&Array.isArray(a.variants)){const{variants:e=[]}=a;let t=(0,n.A)(a,g);return e.forEach((e=>{let n=!0;"function"==typeof e.props?n=e.props((0,o.A)({ownerState:r},s,r)):Object.keys(e.props).forEach((t=>{(null==r?void 0:r[t])!==e.props[t]&&s[t]!==e.props[t]&&(n=!1)})),n&&(Array.isArray(t)||(t=[t]),t.push("function"==typeof e.style?e.style((0,o.A)({ownerState:r},s,r)):e.style))})),t}return a}const O=function(e={}){const{themeId:t,defaultTheme:r=v,rootShouldForwardProp:s=b,slotShouldForwardProp:a=b}=e,i=e=>(0,y.A)((0,o.A)({},e,{theme:w((0,o.A)({},e,{defaultTheme:r,themeId:t}))}));return i.__mui_systemSx=!0,(e,l={})=>{(0,d.internal_processStyles)(e,(e=>e.filter((e=>!(null!=e&&e.__mui_systemSx)))));const{name:u,slot:p,skipVariantsResolver:c,skipSx:m,overridesResolver:y=k(x(p))}=l,h=(0,n.A)(l,A),g=void 0!==c?c:p&&"Root"!==p&&"root"!==p||!1,v=m||!1;let O=b;"Root"===p||"root"===p?O=s:p?O=a:function(e){return"string"==typeof e&&e.charCodeAt(0)>96}(e)&&(O=void 0);const j=(0,d.default)(e,(0,o.A)({shouldForwardProp:O,label:void 0},h)),C=e=>"function"==typeof e&&e.__emotion_real!==e||(0,f.Q)(e)?n=>S(e,(0,o.A)({},n,{theme:w({theme:n.theme,defaultTheme:r,themeId:t})})):e,_=(n,...s)=>{let a=C(n);const l=s?s.map(C):[];u&&y&&l.push((e=>{const n=w((0,o.A)({},e,{defaultTheme:r,themeId:t}));if(!n.components||!n.components[u]||!n.components[u].styleOverrides)return null;const s=n.components[u].styleOverrides,a={};return Object.entries(s).forEach((([t,r])=>{a[t]=S(r,(0,o.A)({},e,{theme:n}))})),y(e,a)})),u&&!g&&l.push((e=>{var n;const s=w((0,o.A)({},e,{defaultTheme:r,themeId:t}));return S({variants:null==s||null==(n=s.components)||null==(n=n[u])?void 0:n.variants},(0,o.A)({},e,{theme:s}))})),v||l.push(i);const p=l.length-s.length;if(Array.isArray(n)&&p>0){const e=new Array(p).fill("");a=[...n,...e],a.raw=[...n.raw,...e]}const c=j(a,...l);return e.muiName&&(c.muiName=e.muiName),c};return j.withConfig&&(_.withConfig=j.withConfig),_}}(),j=O;var C=r(4848);const _=["className","component","disableGutters","fixed","maxWidth","classes"],P=(0,m.A)(),M=j("div",{name:"MuiContainer",slot:"Root",overridesResolver:(e,t)=>{const{ownerState:r}=e;return[t.root,t[`maxWidth${(0,u.A)(String(r.maxWidth))}`],r.fixed&&t.fixed,r.disableGutters&&t.disableGutters]}}),T=e=>function({props:e,name:t,defaultTheme:r,themeId:n}){let o=(0,c.A)(r);n&&(o=o[n]||o);return function(e){const{theme:t,name:r,props:n}=e;return t&&t.components&&t.components[r]&&t.components[r].defaultProps?(0,p.A)(t.components[r].defaultProps,n):n}({theme:o,name:t,props:e})}({props:e,name:"MuiContainer",defaultTheme:P}),I=(e,t)=>{const{classes:r,fixed:n,disableGutters:o,maxWidth:s}=e,a={root:["root",s&&`maxWidth${(0,u.A)(String(s))}`,n&&"fixed",o&&"disableGutters"]};return(0,l.A)(a,(e=>(0,i.Ay)(t,e)),r)};function R(e={}){const{createStyledComponent:t=M,useThemeProps:r=T,componentName:i="MuiContainer"}=e,l=t((({theme:e,ownerState:t})=>(0,o.A)({width:"100%",marginLeft:"auto",boxSizing:"border-box",marginRight:"auto",display:"block"},!t.disableGutters&&{paddingLeft:e.spacing(2),paddingRight:e.spacing(2),[e.breakpoints.up("sm")]:{paddingLeft:e.spacing(3),paddingRight:e.spacing(3)}})),(({theme:e,ownerState:t})=>t.fixed&&Object.keys(e.breakpoints.values).reduce(((t,r)=>{const n=r,o=e.breakpoints.values[n];return 0!==o&&(t[e.breakpoints.up(n)]={maxWidth:`${o}${e.breakpoints.unit}`}),t}),{})),(({theme:e,ownerState:t})=>(0,o.A)({},"xs"===t.maxWidth&&{[e.breakpoints.up("xs")]:{maxWidth:Math.max(e.breakpoints.values.xs,444)}},t.maxWidth&&"xs"!==t.maxWidth&&{[e.breakpoints.up(t.maxWidth)]:{maxWidth:`${e.breakpoints.values[t.maxWidth]}${e.breakpoints.unit}`}})));return s.forwardRef((function(e,t){const s=r(e),{className:u,component:p="div",disableGutters:c=!1,fixed:d=!1,maxWidth:f="lg"}=s,m=(0,n.A)(s,_),y=(0,o.A)({},s,{component:p,disableGutters:c,fixed:d,maxWidth:f}),h=I(y,i);return(0,C.jsx)(l,(0,o.A)({as:p,ownerState:y,className:(0,a.A)(h.root,u),ref:t},m))}))}},2221:(e,t,r)=>{r.d(t,{A:()=>l,b:()=>i});var n=r(6540),o=r(7379),s=r(4848);const a=n.createContext(void 0);function i({props:e,name:t}){return function(e){const{theme:t,name:r,props:n}=e;if(!t||!t.components||!t.components[r])return n;const s=t.components[r];return s.defaultProps?(0,o.A)(s.defaultProps,n):s.styleOverrides||s.variants?n:(0,o.A)(s,n)}({props:e,name:t,theme:{components:n.useContext(a)}})}const l=function({value:e,children:t}){return(0,s.jsx)(a.Provider,{value:e,children:t})}},2967:(e,t,r)=>{r.d(t,{A:()=>a}),r(6540);var n=r(9940),o=r(2858),s=r(4848);const a=function({styles:e,themeId:t,defaultTheme:r={}}){const a=(0,o.A)(r),i="function"==typeof e?e(t&&a[t]||a):e;return(0,s.jsx)(n.A,{styles:i})}},3788:(e,t,r)=>{r.d(t,{A:()=>p,I:()=>u});var n=r(8168),o=r(8587),s=r(6540),a=r(4848);const i=["value"],l=s.createContext(),u=()=>{const e=s.useContext(l);return null!=e&&e},p=function(e){let{value:t}=e,r=(0,o.A)(e,i);return(0,a.jsx)(l.Provider,(0,n.A)({value:null==t||t},r))}},4572:(e,t,r)=>{r.d(t,{A:()=>h});var n=r(8168),o=r(6540);const s=o.createContext(null);function a(){return o.useContext(s)}const i="function"==typeof Symbol&&Symbol.for?Symbol.for("mui.nested"):"__THEME_NESTED__";var l=r(4848);const u=function(e){const{children:t,theme:r}=e,u=a(),p=o.useMemo((()=>{const e=null===u?r:function(e,t){return"function"==typeof t?t(e):(0,n.A)({},e,t)}(u,r);return null!=e&&(e[i]=null!==u),e}),[r,u]);return(0,l.jsx)(s.Provider,{value:p,children:t})};var p=r(9214),c=r(3951),d=r(3788),f=r(2221);const m={};function y(e,t,r,s=!1){return o.useMemo((()=>{const o=e&&t[e]||t;if("function"==typeof r){const a=r(o),i=e?(0,n.A)({},t,{[e]:a}):a;return s?()=>i:i}return e?(0,n.A)({},t,{[e]:r}):(0,n.A)({},t,r)}),[e,t,r,s])}const h=function(e){const{children:t,theme:r,themeId:n}=e,o=(0,c.A)(m),s=a()||m,i=y(n,o,r),h=y(n,s,r,!0),g="rtl"===i.direction;return(0,l.jsx)(u,{theme:h,children:(0,l.jsx)(p.T.Provider,{value:i,children:(0,l.jsx)(d.A,{value:g,children:(0,l.jsx)(f.A,{value:null==i?void 0:i.components,children:t})})})})}},9452:(e,t,r)=>{r.d(t,{EU:()=>a,NI:()=>s,kW:()=>l,vf:()=>i,zu:()=>n});const n={xs:0,sm:600,md:900,lg:1200,xl:1536},o={keys:["xs","sm","md","lg","xl"],up:e=>`@media (min-width:${n[e]}px)`};function s(e,t,r){const s=e.theme||{};if(Array.isArray(t)){const e=s.breakpoints||o;return t.reduce(((n,o,s)=>(n[e.up(e.keys[s])]=r(t[s]),n)),{})}if("object"==typeof t){const e=s.breakpoints||o;return Object.keys(t).reduce(((o,s)=>{if(-1!==Object.keys(e.values||n).indexOf(s))o[e.up(s)]=r(t[s],s);else{const e=s;o[e]=t[e]}return o}),{})}return r(t)}function a(e={}){var t;return(null==(t=e.keys)?void 0:t.reduce(((t,r)=>(t[e.up(r)]={},t)),{}))||{}}function i(e,t){return e.reduce(((e,t)=>{const r=e[t];return(!r||0===Object.keys(r).length)&&delete e[t],e}),t)}function l({values:e,breakpoints:t,base:r}){const n=r||function(e,t){if("object"!=typeof e)return{};const r={},n=Object.keys(t);return Array.isArray(e)?n.forEach(((t,n)=>{n<e.length&&(r[t]=!0)})):n.forEach((t=>{null!=e[t]&&(r[t]=!0)})),r}(e,t),o=Object.keys(n);if(0===o.length)return e;let s;return o.reduce(((t,r,n)=>(Array.isArray(e)?(t[r]=null!=e[n]?e[n]:e[s],s=n):"object"==typeof e?(t[r]=null!=e[r]?e[r]:e[s],s=r):t[r]=e,t)),{})}},7413:(e,t,r)=>{r.d(t,{A:()=>f});var n=r(8168),o=r(8587),s=r(6540),a=r(4164),i=r(9495),l=r(3571),u=r(9599),p=r(2858),c=r(4848);const d=["className","component"];function f(e={}){const{themeId:t,defaultTheme:r,defaultClassName:f="MuiBox-root",generateClassName:m}=e,y=(0,i.default)("div",{shouldForwardProp:e=>"theme"!==e&&"sx"!==e&&"as"!==e})(l.A);return s.forwardRef((function(e,s){const i=(0,p.A)(r),l=(0,u.A)(e),{className:h,component:g="div"}=l,A=(0,o.A)(l,d);return(0,c.jsx)(y,(0,n.A)({as:g,ref:s,className:(0,a.A)(h,m?m(f):f),theme:t&&i[t]||i},A))}))}},8336:(e,t,r)=>{function n(e,t){const r=this;if(r.vars&&"function"==typeof r.getColorSchemeSelector){const n=r.getColorSchemeSelector(e).replace(/(\[[^\]]+\])/,"*:where($1)");return{[n]:t}}return r.palette.mode===e?t:{}}r.d(t,{A:()=>n})},8094:(e,t,r)=>{r.d(t,{A:()=>i});var n=r(8587),o=r(8168);const s=["values","unit","step"],a=e=>{const t=Object.keys(e).map((t=>({key:t,val:e[t]})))||[];return t.sort(((e,t)=>e.val-t.val)),t.reduce(((e,t)=>(0,o.A)({},e,{[t.key]:t.val})),{})};function i(e){const{values:t={xs:0,sm:600,md:900,lg:1200,xl:1536},unit:r="px",step:i=5}=e,l=(0,n.A)(e,s),u=a(t),p=Object.keys(u);function c(e){return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${r})`}function d(e){return`@media (max-width:${("number"==typeof t[e]?t[e]:e)-i/100}${r})`}function f(e,n){const o=p.indexOf(n);return`@media (min-width:${"number"==typeof t[e]?t[e]:e}${r}) and (max-width:${(-1!==o&&"number"==typeof t[p[o]]?t[p[o]]:n)-i/100}${r})`}return(0,o.A)({keys:p,values:u,up:c,down:d,between:f,only:function(e){return p.indexOf(e)+1<p.length?f(e,p[p.indexOf(e)+1]):c(e)},not:function(e){const t=p.indexOf(e);return 0===t?c(p[1]):t===p.length-1?d(p[t]):f(e,p[p.indexOf(e)+1]).replace("@media","@media not all and")},unit:r},l)}},8749:(e,t,r)=>{r.d(t,{A:()=>f});var n=r(8168),o=r(8587),s=r(1317),a=r(8094);const i={borderRadius:4};var l=r(8248),u=r(3571),p=r(4188),c=r(8336);const d=["breakpoints","palette","spacing","shape"],f=function(e={},...t){const{breakpoints:r={},palette:f={},spacing:m,shape:y={}}=e,h=(0,o.A)(e,d),g=(0,a.A)(r),A=function(e=8){if(e.mui)return e;const t=(0,l.LX)({spacing:e}),r=(...e)=>(0===e.length?[1]:e).map((e=>{const r=t(e);return"number"==typeof r?`${r}px`:r})).join(" ");return r.mui=!0,r}(m);let b=(0,s.A)({breakpoints:g,direction:"ltr",components:{},palette:(0,n.A)({mode:"light"},f),spacing:A,shape:(0,n.A)({},i,y)},h);return b.applyStyles=c.A,b=t.reduce(((e,t)=>(0,s.A)(e,t)),b),b.unstable_sxConfig=(0,n.A)({},p.A,null==h?void 0:h.unstable_sxConfig),b.unstable_sx=function(e){return(0,u.A)({sx:e,theme:this})},b}},3142:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n.A,private_createBreakpoints:()=>o.A,unstable_applyStyles:()=>s.A});var n=r(8749),o=r(8094),s=r(8336)},4620:(e,t,r)=>{r.d(t,{A:()=>o});var n=r(1317);const o=function(e,t){return t?(0,n.A)(e,t,{clone:!1}):e}},8248:(e,t,r)=>{r.d(t,{LX:()=>m,MA:()=>f,_W:()=>y,Lc:()=>g,Ms:()=>A});var n=r(9452),o=r(6481),s=r(4620);const a={m:"margin",p:"padding"},i={t:"Top",r:"Right",b:"Bottom",l:"Left",x:["Left","Right"],y:["Top","Bottom"]},l={marginX:"mx",marginY:"my",paddingX:"px",paddingY:"py"},u=function(){const e={};return t=>(void 0===e[t]&&(e[t]=(e=>{if(e.length>2){if(!l[e])return[e];e=l[e]}const[t,r]=e.split(""),n=a[t],o=i[r]||"";return Array.isArray(o)?o.map((e=>n+e)):[n+o]})(t)),e[t])}(),p=["m","mt","mr","mb","ml","mx","my","margin","marginTop","marginRight","marginBottom","marginLeft","marginX","marginY","marginInline","marginInlineStart","marginInlineEnd","marginBlock","marginBlockStart","marginBlockEnd"],c=["p","pt","pr","pb","pl","px","py","padding","paddingTop","paddingRight","paddingBottom","paddingLeft","paddingX","paddingY","paddingInline","paddingInlineStart","paddingInlineEnd","paddingBlock","paddingBlockStart","paddingBlockEnd"],d=[...p,...c];function f(e,t,r,n){var s;const a=null!=(s=(0,o.Yn)(e,t,!1))?s:r;return"number"==typeof a?e=>"string"==typeof e?e:a*e:Array.isArray(a)?e=>"string"==typeof e?e:a[e]:"function"==typeof a?a:()=>{}}function m(e){return f(e,"spacing",8)}function y(e,t){if("string"==typeof t||null==t)return t;const r=e(Math.abs(t));return t>=0?r:"number"==typeof r?-r:`-${r}`}function h(e,t){const r=m(e.theme);return Object.keys(e).map((o=>function(e,t,r,o){if(-1===t.indexOf(r))return null;const s=function(e,t){return r=>e.reduce(((e,n)=>(e[n]=y(t,r),e)),{})}(u(r),o),a=e[r];return(0,n.NI)(e,a,s)}(e,t,o,r))).reduce(s.A,{})}function g(e){return h(e,p)}function A(e){return h(e,c)}function b(e){return h(e,d)}g.propTypes={},g.filterProps=p,A.propTypes={},A.filterProps=c,b.propTypes={},b.filterProps=d},6481:(e,t,r)=>{r.d(t,{Ay:()=>i,BO:()=>a,Yn:()=>s});var n=r(3967),o=r(9452);function s(e,t,r=!0){if(!t||"string"!=typeof t)return null;if(e&&e.vars&&r){const r=`vars.${t}`.split(".").reduce(((e,t)=>e&&e[t]?e[t]:null),e);if(null!=r)return r}return t.split(".").reduce(((e,t)=>e&&null!=e[t]?e[t]:null),e)}function a(e,t,r,n=r){let o;return o="function"==typeof e?e(r):Array.isArray(e)?e[r]||n:s(e,r)||n,t&&(o=t(o,n,e)),o}const i=function(e){const{prop:t,cssProperty:r=e.prop,themeKey:i,transform:l}=e,u=e=>{if(null==e[t])return null;const u=e[t],p=s(e.theme,i)||{};return(0,o.NI)(e,u,(e=>{let o=a(p,l,e);return e===o&&"string"==typeof e&&(o=a(p,l,`${t}${"default"===e?"":(0,n.A)(e)}`,e)),!1===r?o:{[r]:o}}))};return u.propTypes={},u.filterProps=[t],u}},4188:(e,t,r)=>{r.d(t,{A:()=>L});var n=r(8248),o=r(6481),s=r(4620);const a=function(...e){const t=e.reduce(((e,t)=>(t.filterProps.forEach((r=>{e[r]=t})),e)),{}),r=e=>Object.keys(e).reduce(((r,n)=>t[n]?(0,s.A)(r,t[n](e)):r),{});return r.propTypes={},r.filterProps=e.reduce(((e,t)=>e.concat(t.filterProps)),[]),r};var i=r(9452);function l(e){return"number"!=typeof e?e:`${e}px solid`}function u(e,t){return(0,o.Ay)({prop:e,themeKey:"borders",transform:t})}const p=u("border",l),c=u("borderTop",l),d=u("borderRight",l),f=u("borderBottom",l),m=u("borderLeft",l),y=u("borderColor"),h=u("borderTopColor"),g=u("borderRightColor"),A=u("borderBottomColor"),b=u("borderLeftColor"),v=u("outline",l),x=u("outlineColor"),w=e=>{if(void 0!==e.borderRadius&&null!==e.borderRadius){const t=(0,n.MA)(e.theme,"shape.borderRadius",4,"borderRadius"),r=e=>({borderRadius:(0,n._W)(t,e)});return(0,i.NI)(e,e.borderRadius,r)}return null};w.propTypes={},w.filterProps=["borderRadius"],a(p,c,d,f,m,y,h,g,A,b,w,v,x);const k=e=>{if(void 0!==e.gap&&null!==e.gap){const t=(0,n.MA)(e.theme,"spacing",8,"gap"),r=e=>({gap:(0,n._W)(t,e)});return(0,i.NI)(e,e.gap,r)}return null};k.propTypes={},k.filterProps=["gap"];const S=e=>{if(void 0!==e.columnGap&&null!==e.columnGap){const t=(0,n.MA)(e.theme,"spacing",8,"columnGap"),r=e=>({columnGap:(0,n._W)(t,e)});return(0,i.NI)(e,e.columnGap,r)}return null};S.propTypes={},S.filterProps=["columnGap"];const O=e=>{if(void 0!==e.rowGap&&null!==e.rowGap){const t=(0,n.MA)(e.theme,"spacing",8,"rowGap"),r=e=>({rowGap:(0,n._W)(t,e)});return(0,i.NI)(e,e.rowGap,r)}return null};function j(e,t){return"grey"===t?t:e}function C(e){return e<=1&&0!==e?100*e+"%":e}O.propTypes={},O.filterProps=["rowGap"],a(k,S,O,(0,o.Ay)({prop:"gridColumn"}),(0,o.Ay)({prop:"gridRow"}),(0,o.Ay)({prop:"gridAutoFlow"}),(0,o.Ay)({prop:"gridAutoColumns"}),(0,o.Ay)({prop:"gridAutoRows"}),(0,o.Ay)({prop:"gridTemplateColumns"}),(0,o.Ay)({prop:"gridTemplateRows"}),(0,o.Ay)({prop:"gridTemplateAreas"}),(0,o.Ay)({prop:"gridArea"})),a((0,o.Ay)({prop:"color",themeKey:"palette",transform:j}),(0,o.Ay)({prop:"bgcolor",cssProperty:"backgroundColor",themeKey:"palette",transform:j}),(0,o.Ay)({prop:"backgroundColor",themeKey:"palette",transform:j}));const _=(0,o.Ay)({prop:"width",transform:C}),P=e=>{if(void 0!==e.maxWidth&&null!==e.maxWidth){const t=t=>{var r,n;const o=(null==(r=e.theme)||null==(r=r.breakpoints)||null==(r=r.values)?void 0:r[t])||i.zu[t];return o?"px"!==(null==(n=e.theme)||null==(n=n.breakpoints)?void 0:n.unit)?{maxWidth:`${o}${e.theme.breakpoints.unit}`}:{maxWidth:o}:{maxWidth:C(t)}};return(0,i.NI)(e,e.maxWidth,t)}return null};P.filterProps=["maxWidth"];const M=(0,o.Ay)({prop:"minWidth",transform:C}),T=(0,o.Ay)({prop:"height",transform:C}),I=(0,o.Ay)({prop:"maxHeight",transform:C}),R=(0,o.Ay)({prop:"minHeight",transform:C}),L=((0,o.Ay)({prop:"size",cssProperty:"width",transform:C}),(0,o.Ay)({prop:"size",cssProperty:"height",transform:C}),a(_,P,M,T,I,R,(0,o.Ay)({prop:"boxSizing"})),{border:{themeKey:"borders",transform:l},borderTop:{themeKey:"borders",transform:l},borderRight:{themeKey:"borders",transform:l},borderBottom:{themeKey:"borders",transform:l},borderLeft:{themeKey:"borders",transform:l},borderColor:{themeKey:"palette"},borderTopColor:{themeKey:"palette"},borderRightColor:{themeKey:"palette"},borderBottomColor:{themeKey:"palette"},borderLeftColor:{themeKey:"palette"},outline:{themeKey:"borders",transform:l},outlineColor:{themeKey:"palette"},borderRadius:{themeKey:"shape.borderRadius",style:w},color:{themeKey:"palette",transform:j},bgcolor:{themeKey:"palette",cssProperty:"backgroundColor",transform:j},backgroundColor:{themeKey:"palette",transform:j},p:{style:n.Ms},pt:{style:n.Ms},pr:{style:n.Ms},pb:{style:n.Ms},pl:{style:n.Ms},px:{style:n.Ms},py:{style:n.Ms},padding:{style:n.Ms},paddingTop:{style:n.Ms},paddingRight:{style:n.Ms},paddingBottom:{style:n.Ms},paddingLeft:{style:n.Ms},paddingX:{style:n.Ms},paddingY:{style:n.Ms},paddingInline:{style:n.Ms},paddingInlineStart:{style:n.Ms},paddingInlineEnd:{style:n.Ms},paddingBlock:{style:n.Ms},paddingBlockStart:{style:n.Ms},paddingBlockEnd:{style:n.Ms},m:{style:n.Lc},mt:{style:n.Lc},mr:{style:n.Lc},mb:{style:n.Lc},ml:{style:n.Lc},mx:{style:n.Lc},my:{style:n.Lc},margin:{style:n.Lc},marginTop:{style:n.Lc},marginRight:{style:n.Lc},marginBottom:{style:n.Lc},marginLeft:{style:n.Lc},marginX:{style:n.Lc},marginY:{style:n.Lc},marginInline:{style:n.Lc},marginInlineStart:{style:n.Lc},marginInlineEnd:{style:n.Lc},marginBlock:{style:n.Lc},marginBlockStart:{style:n.Lc},marginBlockEnd:{style:n.Lc},displayPrint:{cssProperty:!1,transform:e=>({"@media print":{display:e}})},display:{},overflow:{},textOverflow:{},visibility:{},whiteSpace:{},flexBasis:{},flexDirection:{},flexWrap:{},justifyContent:{},alignItems:{},alignContent:{},order:{},flex:{},flexGrow:{},flexShrink:{},alignSelf:{},justifyItems:{},justifySelf:{},gap:{style:k},rowGap:{style:O},columnGap:{style:S},gridColumn:{},gridRow:{},gridAutoFlow:{},gridAutoColumns:{},gridAutoRows:{},gridTemplateColumns:{},gridTemplateRows:{},gridTemplateAreas:{},gridArea:{},position:{},zIndex:{themeKey:"zIndex"},top:{},right:{},bottom:{},left:{},boxShadow:{themeKey:"shadows"},width:{transform:C},maxWidth:{style:P},minWidth:{transform:C},height:{transform:C},maxHeight:{transform:C},minHeight:{transform:C},boxSizing:{},fontFamily:{themeKey:"typography"},fontSize:{themeKey:"typography"},fontStyle:{themeKey:"typography"},fontWeight:{themeKey:"typography"},letterSpacing:{},textTransform:{},lineHeight:{},textAlign:{},typography:{cssProperty:!1,themeKey:"typography"}})},9599:(e,t,r)=>{r.d(t,{A:()=>u});var n=r(8168),o=r(8587),s=r(1317),a=r(4188);const i=["sx"],l=e=>{var t,r;const n={systemProps:{},otherProps:{}},o=null!=(t=null==e||null==(r=e.theme)?void 0:r.unstable_sxConfig)?t:a.A;return Object.keys(e).forEach((t=>{o[t]?n.systemProps[t]=e[t]:n.otherProps[t]=e[t]})),n};function u(e){const{sx:t}=e,r=(0,o.A)(e,i),{systemProps:a,otherProps:u}=l(r);let p;return p=Array.isArray(t)?[a,...t]:"function"==typeof t?(...e)=>{const r=t(...e);return(0,s.Q)(r)?(0,n.A)({},a,r):a}:(0,n.A)({},a,t),(0,n.A)({},u,{sx:p})}},3857:(e,t,r)=>{r.r(t),r.d(t,{default:()=>n.A,extendSxProp:()=>o.A,unstable_createStyleFunctionSx:()=>n.k,unstable_defaultSxConfig:()=>s.A});var n=r(3571),o=r(9599),s=r(4188)},3571:(e,t,r)=>{r.d(t,{A:()=>p,k:()=>l});var n=r(3967),o=r(4620),s=r(6481),a=r(9452),i=r(4188);function l(){function e(e,t,r,o){const i={[e]:t,theme:r},l=o[e];if(!l)return{[e]:t};const{cssProperty:u=e,themeKey:p,transform:c,style:d}=l;if(null==t)return null;if("typography"===p&&"inherit"===t)return{[e]:t};const f=(0,s.Yn)(r,p)||{};return d?d(i):(0,a.NI)(i,t,(t=>{let r=(0,s.BO)(f,c,t);return t===r&&"string"==typeof t&&(r=(0,s.BO)(f,c,`${e}${"default"===t?"":(0,n.A)(t)}`,t)),!1===u?r:{[u]:r}}))}return function t(r){var n;const{sx:s,theme:l={}}=r||{};if(!s)return null;const u=null!=(n=l.unstable_sxConfig)?n:i.A;function p(r){let n=r;if("function"==typeof r)n=r(l);else if("object"!=typeof r)return r;if(!n)return null;const s=(0,a.EU)(l.breakpoints),i=Object.keys(s);let p=s;return Object.keys(n).forEach((r=>{const s="function"==typeof(i=n[r])?i(l):i;var i;if(null!=s)if("object"==typeof s)if(u[r])p=(0,o.A)(p,e(r,s,l,u));else{const e=(0,a.NI)({theme:l},s,(e=>({[r]:e})));!function(...e){const t=e.reduce(((e,t)=>e.concat(Object.keys(t))),[]),r=new Set(t);return e.every((e=>r.size===Object.keys(e).length))}(e,s)?p=(0,o.A)(p,e):p[r]=t({sx:s,theme:l})}else p=(0,o.A)(p,e(r,s,l,u))})),(0,a.vf)(i,p)}return Array.isArray(s)?s.map(p):p(s)}}const u=l();u.filterProps=["sx"];const p=u},2858:(e,t,r)=>{r.d(t,{A:()=>a});var n=r(8749),o=r(3951);const s=(0,n.A)(),a=function(e=s){return(0,o.A)(e)}},3951:(e,t,r)=>{r.d(t,{A:()=>s});var n=r(6540),o=r(9214);const s=function(e=null){const t=n.useContext(o.T);return t&&(r=t,0!==Object.keys(r).length)?t:e;var r}}}]);
//# sourceMappingURL=data:application/json;charset=utf-8;base64,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N0UsR0FBT3lULElBQUssQ0FDYixDQUFDOEosR0FBVzlKLE9Bakc1QixZQUFnQ2lLLEdBQzlCLE1BQU1DLEVBQVVELEVBQVFwUixRQUFPLENBQUM3TSxFQUFNbWUsSUFBV25lLEVBQUs0VyxPQUFPN1csT0FBT0MsS0FBS21lLEtBQVUsSUFDN0VDLEVBQVEsSUFBSUMsSUFBSUgsR0FDdEIsT0FBT0QsRUFBUUssT0FBTUgsR0FBVUMsRUFBTUcsT0FBU3hlLE9BQU9DLEtBQUttZSxHQUFRbGUsUUFDcEUsQ0ErRmtCdWUsQ0FBb0JSLEVBQW1CemQsR0FNekNzZCxHQUFNLE9BQU1BLEVBQUtHLEdBTGpCSCxFQUFJQyxHQUFZcFQsRUFBZ0IsQ0FDOUIrSSxHQUFJbFQsRUFDSjZFLFNBS04sTUFFQXlZLEdBQU0sT0FBTUEsRUFBS04sRUFBY08sRUFBVXZkLEVBQU82RSxFQUFPdUksR0FFM0QsS0FFSyxRQUF3QjhDLEVBQWlCb04sRUFDbEQsQ0FDQSxPQUFPN2MsTUFBTUMsUUFBUXdTLEdBQU1BLEVBQUczUSxJQUFJMmEsR0FBWUEsRUFBU2hLLEVBQ3pELENBRUYsQ0FDQSxNQUFNL0ksRUFBa0I0UyxJQUN4QjVTLEVBQWdCeUwsWUFBYyxDQUFDLE1BQy9CLFMsMERDMUhPLE1BQU10UixHQUFxQixTQUlsQyxFQUhBLFNBQWtCbEYsRUFBZWtGLEdBQy9CLE9BQU8sT0FBdUJsRixFQUNoQyxDLDBEQ0lBLFFBSkEsU0FBa0JBLEVBQWUsTUFDL0IsTUFBTThlLEVBQWUsYUFBaUIsRUFBQUMsR0FDdEMsT0FBUUQsSUFMYTNlLEVBS2lCMmUsRUFKSCxJQUE1QjFlLE9BQU9DLEtBQUtGLEdBQUtHLFFBSTZDd2UsRUFBZjllLEVBTHhELElBQXVCRyxDQU12QixDIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9HbG9iYWxTdHlsZXMvR2xvYmFsU3R5bGVzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N0eWxlZC1lbmdpbmUvU3R5bGVkRW5naW5lUHJvdmlkZXIvU3R5bGVkRW5naW5lUHJvdmlkZXIuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3R5bGVkLWVuZ2luZS9pbmRleC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY29sb3JNYW5pcHVsYXRvci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vY3JlYXRlU3R5bGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlU3R5bGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVkLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vQ29udGFpbmVyL2NyZWF0ZUNvbnRhaW5lci5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvdXNlVGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3VzZVRoZW1lUHJvcHMvZ2V0VGhlbWVQcm9wcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL0RlZmF1bHRQcm9wc1Byb3ZpZGVyL0RlZmF1bHRQcm9wc1Byb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vR2xvYmFsU3R5bGVzL0dsb2JhbFN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL1J0bFByb3ZpZGVyL2luZGV4LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy91c2VUaGVtZS9UaGVtZUNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvcHJpdmF0ZS10aGVtaW5nL3VzZVRoZW1lL3VzZVRoZW1lLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3ByaXZhdGUtdGhlbWluZy9UaGVtZVByb3ZpZGVyL25lc3RlZC5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9wcml2YXRlLXRoZW1pbmcvVGhlbWVQcm92aWRlci9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vVGhlbWVQcm92aWRlci9UaGVtZVByb3ZpZGVyLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYnJlYWtwb2ludHMuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVCb3guanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9hcHBseVN0eWxlcy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZUJyZWFrcG9pbnRzLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vY3JlYXRlVGhlbWUvc2hhcGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jcmVhdGVUaGVtZS9jcmVhdGVUaGVtZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2NyZWF0ZVRoZW1lL2NyZWF0ZVNwYWNpbmcuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZXJnZS5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3NwYWNpbmcuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9tZW1vaXplLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9jb21wb3NlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vYm9yZGVycy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL2Nzc0dyaWQuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9wYWxldHRlLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc2l6aW5nLmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vc3R5bGVGdW5jdGlvblN4L2RlZmF1bHRTeENvbmZpZy5qcyIsIndlYnBhY2s6Ly9zcnNyZmwtcmVhY3QvLi9ub2RlX21vZHVsZXMvQG11aS9zeXN0ZW0vZXNtL3N0eWxlRnVuY3Rpb25TeC9leHRlbmRTeFByb3AuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS9zdHlsZUZ1bmN0aW9uU3gvc3R5bGVGdW5jdGlvblN4LmpzIiwid2VicGFjazovL3Nyc3JmbC1yZWFjdC8uL25vZGVfbW9kdWxlcy9AbXVpL3N5c3RlbS9lc20vdXNlVGhlbWUuanMiLCJ3ZWJwYWNrOi8vc3JzcmZsLXJlYWN0Ly4vbm9kZV9tb2R1bGVzL0BtdWkvc3lzdGVtL2VzbS91c2VUaGVtZVdpdGhvdXREZWZhdWx0LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbCB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBpc0VtcHR5KG9iaikge1xuICByZXR1cm4gb2JqID09PSB1bmRlZmluZWQgfHwgb2JqID09PSBudWxsIHx8IE9iamVjdC5rZXlzKG9iaikubGVuZ3RoID09PSAwO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gR2xvYmFsU3R5bGVzKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBzdHlsZXMsXG4gICAgZGVmYXVsdFRoZW1lID0ge31cbiAgfSA9IHByb3BzO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gdGhlbWVJbnB1dCA9PiBzdHlsZXMoaXNFbXB0eSh0aGVtZUlucHV0KSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lSW5wdXQpIDogc3R5bGVzO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goR2xvYmFsLCB7XG4gICAgc3R5bGVzOiBnbG9iYWxTdHlsZXNcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBHbG9iYWxTdHlsZXMucHJvcFR5cGVzID0ge1xuICBkZWZhdWx0VGhlbWU6IFByb3BUeXBlcy5vYmplY3QsXG4gIHN0eWxlczogUHJvcFR5cGVzLm9uZU9mVHlwZShbUHJvcFR5cGVzLmFycmF5LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuZnVuY10pXG59IDogdm9pZCAwOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IENhY2hlUHJvdmlkZXIgfSBmcm9tICdAZW1vdGlvbi9yZWFjdCc7XG5pbXBvcnQgY3JlYXRlQ2FjaGUgZnJvbSAnQGVtb3Rpb24vY2FjaGUnO1xuXG4vLyBwcmVwZW5kOiB0cnVlIG1vdmVzIE1VSSBzdHlsZXMgdG8gdGhlIHRvcCBvZiB0aGUgPGhlYWQ+IHNvIHRoZXkncmUgbG9hZGVkIGZpcnN0LlxuLy8gSXQgYWxsb3dzIGRldmVsb3BlcnMgdG8gZWFzaWx5IG92ZXJyaWRlIE1VSSBzdHlsZXMgd2l0aCBvdGhlciBzdHlsaW5nIHNvbHV0aW9ucywgbGlrZSBDU1MgbW9kdWxlcy5cbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5sZXQgY2FjaGU7XG5pZiAodHlwZW9mIGRvY3VtZW50ID09PSAnb2JqZWN0Jykge1xuICBjYWNoZSA9IGNyZWF0ZUNhY2hlKHtcbiAgICBrZXk6ICdjc3MnLFxuICAgIHByZXBlbmQ6IHRydWVcbiAgfSk7XG59XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBTdHlsZWRFbmdpbmVQcm92aWRlcihwcm9wcykge1xuICBjb25zdCB7XG4gICAgaW5qZWN0Rmlyc3QsXG4gICAgY2hpbGRyZW5cbiAgfSA9IHByb3BzO1xuICByZXR1cm4gaW5qZWN0Rmlyc3QgJiYgY2FjaGUgPyAvKiNfX1BVUkVfXyovX2pzeChDYWNoZVByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IGNhY2hlLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KSA6IGNoaWxkcmVuO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gU3R5bGVkRW5naW5lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIHRoZSBzdHlsZXMgYXJlIGluamVjdGVkIGxhc3QgaW4gdGhlIDxoZWFkPiBlbGVtZW50IG9mIHRoZSBwYWdlLlxuICAgKiBBcyBhIHJlc3VsdCwgdGhleSBnYWluIG1vcmUgc3BlY2lmaWNpdHkgdGhhbiBhbnkgb3RoZXIgc3R5bGUgc2hlZXQuXG4gICAqIElmIHlvdSB3YW50IHRvIG92ZXJyaWRlIE1VSSdzIHN0eWxlcywgc2V0IHRoaXMgcHJvcC5cbiAgICovXG4gIGluamVjdEZpcnN0OiBQcm9wVHlwZXMuYm9vbFxufSA6IHZvaWQgMDsiLCIvKipcbiAqIEBtdWkvc3R5bGVkLWVuZ2luZSB2NS4xNi42XG4gKlxuICogQGxpY2Vuc2UgTUlUXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuJ3VzZSBjbGllbnQnO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IGVtU3R5bGVkIGZyb20gJ0BlbW90aW9uL3N0eWxlZCc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHlsZWQodGFnLCBvcHRpb25zKSB7XG4gIGNvbnN0IHN0eWxlc0ZhY3RvcnkgPSBlbVN0eWxlZCh0YWcsIG9wdGlvbnMpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIHJldHVybiAoLi4uc3R5bGVzKSA9PiB7XG4gICAgICBjb25zdCBjb21wb25lbnQgPSB0eXBlb2YgdGFnID09PSAnc3RyaW5nJyA/IGBcIiR7dGFnfVwiYCA6ICdjb21wb25lbnQnO1xuICAgICAgaWYgKHN0eWxlcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogU2VlbXMgbGlrZSB5b3UgY2FsbGVkIFxcYHN0eWxlZCgke2NvbXBvbmVudH0pKClcXGAgd2l0aG91dCBhIFxcYHN0eWxlXFxgIGFyZ3VtZW50LmAsICdZb3UgbXVzdCBwcm92aWRlIGEgYHN0eWxlc2AgYXJndW1lbnQ6IGBzdHlsZWQoXCJkaXZcIikoc3R5bGVZb3VGb3Jnb3RUb1Bhc3MpYC4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9IGVsc2UgaWYgKHN0eWxlcy5zb21lKHN0eWxlID0+IHN0eWxlID09PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYE1VSTogdGhlIHN0eWxlZCgke2NvbXBvbmVudH0pKC4uLmFyZ3MpIEFQSSByZXF1aXJlcyBhbGwgaXRzIGFyZ3MgdG8gYmUgZGVmaW5lZC5gKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBzdHlsZXNGYWN0b3J5KC4uLnN0eWxlcyk7XG4gICAgfTtcbiAgfVxuICByZXR1cm4gc3R5bGVzRmFjdG9yeTtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGNvbnN0IGludGVybmFsX3Byb2Nlc3NTdHlsZXMgPSAodGFnLCBwcm9jZXNzb3IpID0+IHtcbiAgLy8gRW1vdGlvbiBhdHRhY2hlcyBhbGwgdGhlIHN0eWxlcyBhcyBgX19lbW90aW9uX3N0eWxlc2AuXG4gIC8vIFJlZjogaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzE2ZDk3MWQwZGEyMjk1OTZkNmJjYzM5ZDI4MmJhOTc1M2M5ZWU3Y2YvcGFja2FnZXMvc3R5bGVkL3NyYy9iYXNlLmpzI0wxODZcbiAgaWYgKEFycmF5LmlzQXJyYXkodGFnLl9fZW1vdGlvbl9zdHlsZXMpKSB7XG4gICAgdGFnLl9fZW1vdGlvbl9zdHlsZXMgPSBwcm9jZXNzb3IodGFnLl9fZW1vdGlvbl9zdHlsZXMpO1xuICB9XG59O1xuZXhwb3J0IHsgVGhlbWVDb250ZXh0LCBrZXlmcmFtZXMsIGNzcyB9IGZyb20gJ0BlbW90aW9uL3JlYWN0JztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgU3R5bGVkRW5naW5lUHJvdmlkZXIgfSBmcm9tICcuL1N0eWxlZEVuZ2luZVByb3ZpZGVyJztcbmV4cG9ydCB7IGRlZmF1bHQgYXMgR2xvYmFsU3R5bGVzIH0gZnJvbSAnLi9HbG9iYWxTdHlsZXMnOyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgX2ludGVyb3BSZXF1aXJlRGVmYXVsdCA9IHJlcXVpcmUoXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2ludGVyb3BSZXF1aXJlRGVmYXVsdFwiKTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmFscGhhID0gYWxwaGE7XG5leHBvcnRzLmJsZW5kID0gYmxlbmQ7XG5leHBvcnRzLmNvbG9yQ2hhbm5lbCA9IHZvaWQgMDtcbmV4cG9ydHMuZGFya2VuID0gZGFya2VuO1xuZXhwb3J0cy5kZWNvbXBvc2VDb2xvciA9IGRlY29tcG9zZUNvbG9yO1xuZXhwb3J0cy5lbXBoYXNpemUgPSBlbXBoYXNpemU7XG5leHBvcnRzLmdldENvbnRyYXN0UmF0aW8gPSBnZXRDb250cmFzdFJhdGlvO1xuZXhwb3J0cy5nZXRMdW1pbmFuY2UgPSBnZXRMdW1pbmFuY2U7XG5leHBvcnRzLmhleFRvUmdiID0gaGV4VG9SZ2I7XG5leHBvcnRzLmhzbFRvUmdiID0gaHNsVG9SZ2I7XG5leHBvcnRzLmxpZ2h0ZW4gPSBsaWdodGVuO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVBbHBoYSA9IHByaXZhdGVfc2FmZUFscGhhO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVDb2xvckNoYW5uZWwgPSB2b2lkIDA7XG5leHBvcnRzLnByaXZhdGVfc2FmZURhcmtlbiA9IHByaXZhdGVfc2FmZURhcmtlbjtcbmV4cG9ydHMucHJpdmF0ZV9zYWZlRW1waGFzaXplID0gcHJpdmF0ZV9zYWZlRW1waGFzaXplO1xuZXhwb3J0cy5wcml2YXRlX3NhZmVMaWdodGVuID0gcHJpdmF0ZV9zYWZlTGlnaHRlbjtcbmV4cG9ydHMucmVjb21wb3NlQ29sb3IgPSByZWNvbXBvc2VDb2xvcjtcbmV4cG9ydHMucmdiVG9IZXggPSByZ2JUb0hleDtcbnZhciBfZm9ybWF0TXVpRXJyb3JNZXNzYWdlMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvZm9ybWF0TXVpRXJyb3JNZXNzYWdlXCIpKTtcbnZhciBfY2xhbXAgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCJAbXVpL3V0aWxzL2NsYW1wXCIpKTtcbi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiAqL1xuXG4vKipcbiAqIFJldHVybnMgYSBudW1iZXIgd2hvc2UgdmFsdWUgaXMgbGltaXRlZCB0byB0aGUgZ2l2ZW4gcmFuZ2UuXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgVGhlIHZhbHVlIHRvIGJlIGNsYW1wZWRcbiAqIEBwYXJhbSB7bnVtYmVyfSBtaW4gVGhlIGxvd2VyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEBwYXJhbSB7bnVtYmVyfSBtYXggVGhlIHVwcGVyIGJvdW5kYXJ5IG9mIHRoZSBvdXRwdXQgcmFuZ2VcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgbnVtYmVyIGluIHRoZSByYW5nZSBbbWluLCBtYXhdXG4gKi9cbmZ1bmN0aW9uIGNsYW1wV3JhcHBlcih2YWx1ZSwgbWluID0gMCwgbWF4ID0gMSkge1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh2YWx1ZSA8IG1pbiB8fCB2YWx1ZSA+IG1heCkge1xuICAgICAgY29uc29sZS5lcnJvcihgTVVJOiBUaGUgdmFsdWUgcHJvdmlkZWQgJHt2YWx1ZX0gaXMgb3V0IG9mIHJhbmdlIFske21pbn0sICR7bWF4fV0uYCk7XG4gICAgfVxuICB9XG4gIHJldHVybiAoMCwgX2NsYW1wLmRlZmF1bHQpKHZhbHVlLCBtaW4sIG1heCk7XG59XG5cbi8qKlxuICogQ29udmVydHMgYSBjb2xvciBmcm9tIENTUyBoZXggZm9ybWF0IHRvIENTUyByZ2IgZm9ybWF0LlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gSGV4IGNvbG9yLCBpLmUuICNubm4gb3IgI25ubm5ublxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgcmdiIGNvbG9yIHN0cmluZ1xuICovXG5mdW5jdGlvbiBoZXhUb1JnYihjb2xvcikge1xuICBjb2xvciA9IGNvbG9yLnNsaWNlKDEpO1xuICBjb25zdCByZSA9IG5ldyBSZWdFeHAoYC57MSwke2NvbG9yLmxlbmd0aCA+PSA2ID8gMiA6IDF9fWAsICdnJyk7XG4gIGxldCBjb2xvcnMgPSBjb2xvci5tYXRjaChyZSk7XG4gIGlmIChjb2xvcnMgJiYgY29sb3JzWzBdLmxlbmd0aCA9PT0gMSkge1xuICAgIGNvbG9ycyA9IGNvbG9ycy5tYXAobiA9PiBuICsgbik7XG4gIH1cbiAgcmV0dXJuIGNvbG9ycyA/IGByZ2Ike2NvbG9ycy5sZW5ndGggPT09IDQgPyAnYScgOiAnJ30oJHtjb2xvcnMubWFwKChuLCBpbmRleCkgPT4ge1xuICAgIHJldHVybiBpbmRleCA8IDMgPyBwYXJzZUludChuLCAxNikgOiBNYXRoLnJvdW5kKHBhcnNlSW50KG4sIDE2KSAvIDI1NSAqIDEwMDApIC8gMTAwMDtcbiAgfSkuam9pbignLCAnKX0pYCA6ICcnO1xufVxuZnVuY3Rpb24gaW50VG9IZXgoaW50KSB7XG4gIGNvbnN0IGhleCA9IGludC50b1N0cmluZygxNik7XG4gIHJldHVybiBoZXgubGVuZ3RoID09PSAxID8gYDAke2hleH1gIDogaGV4O1xufVxuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHdpdGggdGhlIHR5cGUgYW5kIHZhbHVlcyBvZiBhIGNvbG9yLlxuICpcbiAqIE5vdGU6IERvZXMgbm90IHN1cHBvcnQgcmdiICUgdmFsdWVzLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge29iamVjdH0gLSBBIE1VSSBjb2xvciBvYmplY3Q6IHt0eXBlOiBzdHJpbmcsIHZhbHVlczogbnVtYmVyW119XG4gKi9cbmZ1bmN0aW9uIGRlY29tcG9zZUNvbG9yKGNvbG9yKSB7XG4gIC8vIElkZW1wb3RlbnRcbiAgaWYgKGNvbG9yLnR5cGUpIHtcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgaWYgKGNvbG9yLmNoYXJBdCgwKSA9PT0gJyMnKSB7XG4gICAgcmV0dXJuIGRlY29tcG9zZUNvbG9yKGhleFRvUmdiKGNvbG9yKSk7XG4gIH1cbiAgY29uc3QgbWFya2VyID0gY29sb3IuaW5kZXhPZignKCcpO1xuICBjb25zdCB0eXBlID0gY29sb3Iuc3Vic3RyaW5nKDAsIG1hcmtlcik7XG4gIGlmIChbJ3JnYicsICdyZ2JhJywgJ2hzbCcsICdoc2xhJywgJ2NvbG9yJ10uaW5kZXhPZih0eXBlKSA9PT0gLTEpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gYE1VSTogVW5zdXBwb3J0ZWQgXFxgJHtjb2xvcn1cXGAgY29sb3IuXG5UaGUgZm9sbG93aW5nIGZvcm1hdHMgYXJlIHN1cHBvcnRlZDogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKS5gIDogKDAsIF9mb3JtYXRNdWlFcnJvck1lc3NhZ2UyLmRlZmF1bHQpKDksIGNvbG9yKSk7XG4gIH1cbiAgbGV0IHZhbHVlcyA9IGNvbG9yLnN1YnN0cmluZyhtYXJrZXIgKyAxLCBjb2xvci5sZW5ndGggLSAxKTtcbiAgbGV0IGNvbG9yU3BhY2U7XG4gIGlmICh0eXBlID09PSAnY29sb3InKSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcgJyk7XG4gICAgY29sb3JTcGFjZSA9IHZhbHVlcy5zaGlmdCgpO1xuICAgIGlmICh2YWx1ZXMubGVuZ3RoID09PSA0ICYmIHZhbHVlc1szXS5jaGFyQXQoMCkgPT09ICcvJykge1xuICAgICAgdmFsdWVzWzNdID0gdmFsdWVzWzNdLnNsaWNlKDEpO1xuICAgIH1cbiAgICBpZiAoWydzcmdiJywgJ2Rpc3BsYXktcDMnLCAnYTk4LXJnYicsICdwcm9waG90by1yZ2InLCAncmVjLTIwMjAnXS5pbmRleE9mKGNvbG9yU3BhY2UpID09PSAtMSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IGBNVUk6IHVuc3VwcG9ydGVkIFxcYCR7Y29sb3JTcGFjZX1cXGAgY29sb3Igc3BhY2UuXG5UaGUgZm9sbG93aW5nIGNvbG9yIHNwYWNlcyBhcmUgc3VwcG9ydGVkOiBzcmdiLCBkaXNwbGF5LXAzLCBhOTgtcmdiLCBwcm9waG90by1yZ2IsIHJlYy0yMDIwLmAgOiAoMCwgX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIuZGVmYXVsdCkoMTAsIGNvbG9yU3BhY2UpKTtcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFsdWVzID0gdmFsdWVzLnNwbGl0KCcsJyk7XG4gIH1cbiAgdmFsdWVzID0gdmFsdWVzLm1hcCh2YWx1ZSA9PiBwYXJzZUZsb2F0KHZhbHVlKSk7XG4gIHJldHVybiB7XG4gICAgdHlwZSxcbiAgICB2YWx1ZXMsXG4gICAgY29sb3JTcGFjZVxuICB9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBjaGFubmVsIGNyZWF0ZWQgZnJvbSB0aGUgaW5wdXQgY29sb3IuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge3N0cmluZ30gLSBUaGUgY2hhbm5lbCBmb3IgdGhlIGNvbG9yLCB0aGF0IGNhbiBiZSB1c2VkIGluIHJnYmEgb3IgaHNsYSBjb2xvcnNcbiAqL1xuY29uc3QgY29sb3JDaGFubmVsID0gY29sb3IgPT4ge1xuICBjb25zdCBkZWNvbXBvc2VkQ29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHJldHVybiBkZWNvbXBvc2VkQ29sb3IudmFsdWVzLnNsaWNlKDAsIDMpLm1hcCgodmFsLCBpZHgpID0+IGRlY29tcG9zZWRDb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSAmJiBpZHggIT09IDAgPyBgJHt2YWx9JWAgOiB2YWwpLmpvaW4oJyAnKTtcbn07XG5leHBvcnRzLmNvbG9yQ2hhbm5lbCA9IGNvbG9yQ2hhbm5lbDtcbmNvbnN0IHByaXZhdGVfc2FmZUNvbG9yQ2hhbm5lbCA9IChjb2xvciwgd2FybmluZykgPT4ge1xuICB0cnkge1xuICAgIHJldHVybiBjb2xvckNoYW5uZWwoY29sb3IpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59O1xuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3Igb2JqZWN0IHdpdGggdHlwZSBhbmQgdmFsdWVzIHRvIGEgc3RyaW5nLlxuICogQHBhcmFtIHtvYmplY3R9IGNvbG9yIC0gRGVjb21wb3NlZCBjb2xvclxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yLnR5cGUgLSBPbmUgb2Y6ICdyZ2InLCAncmdiYScsICdoc2wnLCAnaHNsYScsICdjb2xvcidcbiAqIEBwYXJhbSB7YXJyYXl9IGNvbG9yLnZhbHVlcyAtIFtuLG4sbl0gb3IgW24sbixuLG5dXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmdcbiAqL1xuZXhwb3J0cy5wcml2YXRlX3NhZmVDb2xvckNoYW5uZWwgPSBwcml2YXRlX3NhZmVDb2xvckNoYW5uZWw7XG5mdW5jdGlvbiByZWNvbXBvc2VDb2xvcihjb2xvcikge1xuICBjb25zdCB7XG4gICAgdHlwZSxcbiAgICBjb2xvclNwYWNlXG4gIH0gPSBjb2xvcjtcbiAgbGV0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGNvbG9yO1xuICBpZiAodHlwZS5pbmRleE9mKCdyZ2InKSAhPT0gLTEpIHtcbiAgICAvLyBPbmx5IGNvbnZlcnQgdGhlIGZpcnN0IDMgdmFsdWVzIHRvIGludCAoaS5lLiBub3QgYWxwaGEpXG4gICAgdmFsdWVzID0gdmFsdWVzLm1hcCgobiwgaSkgPT4gaSA8IDMgPyBwYXJzZUludChuLCAxMCkgOiBuKTtcbiAgfSBlbHNlIGlmICh0eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIHZhbHVlc1sxXSA9IGAke3ZhbHVlc1sxXX0lYDtcbiAgICB2YWx1ZXNbMl0gPSBgJHt2YWx1ZXNbMl19JWA7XG4gIH1cbiAgaWYgKHR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICB2YWx1ZXMgPSBgJHtjb2xvclNwYWNlfSAke3ZhbHVlcy5qb2luKCcgJyl9YDtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZXMgPSBgJHt2YWx1ZXMuam9pbignLCAnKX1gO1xuICB9XG4gIHJldHVybiBgJHt0eXBlfSgke3ZhbHVlc30pYDtcbn1cblxuLyoqXG4gKiBDb252ZXJ0cyBhIGNvbG9yIGZyb20gQ1NTIHJnYiBmb3JtYXQgdG8gQ1NTIGhleCBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBSR0IgY29sb3IsIGkuZS4gcmdiKG4sIG4sIG4pXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyByZ2IgY29sb3Igc3RyaW5nLCBpLmUuICNubm5ubm5cbiAqL1xuZnVuY3Rpb24gcmdiVG9IZXgoY29sb3IpIHtcbiAgLy8gSWRlbXBvdGVudFxuICBpZiAoY29sb3IuaW5kZXhPZignIycpID09PSAwKSB7XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG4gIGNvbnN0IHtcbiAgICB2YWx1ZXNcbiAgfSA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgcmV0dXJuIGAjJHt2YWx1ZXMubWFwKChuLCBpKSA9PiBpbnRUb0hleChpID09PSAzID8gTWF0aC5yb3VuZCgyNTUgKiBuKSA6IG4pKS5qb2luKCcnKX1gO1xufVxuXG4vKipcbiAqIENvbnZlcnRzIGEgY29sb3IgZnJvbSBoc2wgZm9ybWF0IHRvIHJnYiBmb3JtYXQuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBIU0wgY29sb3IgdmFsdWVzXG4gKiBAcmV0dXJucyB7c3RyaW5nfSByZ2IgY29sb3IgdmFsdWVzXG4gKi9cbmZ1bmN0aW9uIGhzbFRvUmdiKGNvbG9yKSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb25zdCB7XG4gICAgdmFsdWVzXG4gIH0gPSBjb2xvcjtcbiAgY29uc3QgaCA9IHZhbHVlc1swXTtcbiAgY29uc3QgcyA9IHZhbHVlc1sxXSAvIDEwMDtcbiAgY29uc3QgbCA9IHZhbHVlc1syXSAvIDEwMDtcbiAgY29uc3QgYSA9IHMgKiBNYXRoLm1pbihsLCAxIC0gbCk7XG4gIGNvbnN0IGYgPSAobiwgayA9IChuICsgaCAvIDMwKSAlIDEyKSA9PiBsIC0gYSAqIE1hdGgubWF4KE1hdGgubWluKGsgLSAzLCA5IC0gaywgMSksIC0xKTtcbiAgbGV0IHR5cGUgPSAncmdiJztcbiAgY29uc3QgcmdiID0gW01hdGgucm91bmQoZigwKSAqIDI1NSksIE1hdGgucm91bmQoZig4KSAqIDI1NSksIE1hdGgucm91bmQoZig0KSAqIDI1NSldO1xuICBpZiAoY29sb3IudHlwZSA9PT0gJ2hzbGEnKSB7XG4gICAgdHlwZSArPSAnYSc7XG4gICAgcmdiLnB1c2godmFsdWVzWzNdKTtcbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3Ioe1xuICAgIHR5cGUsXG4gICAgdmFsdWVzOiByZ2JcbiAgfSk7XG59XG4vKipcbiAqIFRoZSByZWxhdGl2ZSBicmlnaHRuZXNzIG9mIGFueSBwb2ludCBpbiBhIGNvbG9yIHNwYWNlLFxuICogbm9ybWFsaXplZCB0byAwIGZvciBkYXJrZXN0IGJsYWNrIGFuZCAxIGZvciBsaWdodGVzdCB3aGl0ZS5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHJldHVybnMge251bWJlcn0gVGhlIHJlbGF0aXZlIGJyaWdodG5lc3Mgb2YgdGhlIGNvbG9yIGluIHRoZSByYW5nZSAwIC0gMVxuICovXG5mdW5jdGlvbiBnZXRMdW1pbmFuY2UoY29sb3IpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIGxldCByZ2IgPSBjb2xvci50eXBlID09PSAnaHNsJyB8fCBjb2xvci50eXBlID09PSAnaHNsYScgPyBkZWNvbXBvc2VDb2xvcihoc2xUb1JnYihjb2xvcikpLnZhbHVlcyA6IGNvbG9yLnZhbHVlcztcbiAgcmdiID0gcmdiLm1hcCh2YWwgPT4ge1xuICAgIGlmIChjb2xvci50eXBlICE9PSAnY29sb3InKSB7XG4gICAgICB2YWwgLz0gMjU1OyAvLyBub3JtYWxpemVkXG4gICAgfVxuICAgIHJldHVybiB2YWwgPD0gMC4wMzkyOCA/IHZhbCAvIDEyLjkyIDogKCh2YWwgKyAwLjA1NSkgLyAxLjA1NSkgKiogMi40O1xuICB9KTtcblxuICAvLyBUcnVuY2F0ZSBhdCAzIGRpZ2l0c1xuICByZXR1cm4gTnVtYmVyKCgwLjIxMjYgKiByZ2JbMF0gKyAwLjcxNTIgKiByZ2JbMV0gKyAwLjA3MjIgKiByZ2JbMl0pLnRvRml4ZWQoMykpO1xufVxuXG4vKipcbiAqIENhbGN1bGF0ZXMgdGhlIGNvbnRyYXN0IHJhdGlvIGJldHdlZW4gdHdvIGNvbG9ycy5cbiAqXG4gKiBGb3JtdWxhOiBodHRwczovL3d3dy53My5vcmcvVFIvV0NBRzIwLVRFQ0hTL0cxNy5odG1sI0cxNy10ZXN0c1xuICogQHBhcmFtIHtzdHJpbmd9IGZvcmVncm91bmQgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpXG4gKiBAcGFyYW0ge3N0cmluZ30gYmFja2dyb3VuZCAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKClcbiAqIEByZXR1cm5zIHtudW1iZXJ9IEEgY29udHJhc3QgcmF0aW8gdmFsdWUgaW4gdGhlIHJhbmdlIDAgLSAyMS5cbiAqL1xuZnVuY3Rpb24gZ2V0Q29udHJhc3RSYXRpbyhmb3JlZ3JvdW5kLCBiYWNrZ3JvdW5kKSB7XG4gIGNvbnN0IGx1bUEgPSBnZXRMdW1pbmFuY2UoZm9yZWdyb3VuZCk7XG4gIGNvbnN0IGx1bUIgPSBnZXRMdW1pbmFuY2UoYmFja2dyb3VuZCk7XG4gIHJldHVybiAoTWF0aC5tYXgobHVtQSwgbHVtQikgKyAwLjA1KSAvIChNYXRoLm1pbihsdW1BLCBsdW1CKSArIDAuMDUpO1xufVxuXG4vKipcbiAqIFNldHMgdGhlIGFic29sdXRlIHRyYW5zcGFyZW5jeSBvZiBhIGNvbG9yLlxuICogQW55IGV4aXN0aW5nIGFscGhhIHZhbHVlcyBhcmUgb3ZlcndyaXR0ZW4uXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gdmFsdWUgLSB2YWx1ZSB0byBzZXQgdGhlIGFscGhhIGNoYW5uZWwgdG8gaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcmV0dXJucyB7c3RyaW5nfSBBIENTUyBjb2xvciBzdHJpbmcuIEhleCBpbnB1dCB2YWx1ZXMgYXJlIHJldHVybmVkIGFzIHJnYlxuICovXG5mdW5jdGlvbiBhbHBoYShjb2xvciwgdmFsdWUpIHtcbiAgY29sb3IgPSBkZWNvbXBvc2VDb2xvcihjb2xvcik7XG4gIHZhbHVlID0gY2xhbXBXcmFwcGVyKHZhbHVlKTtcbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdyZ2InIHx8IGNvbG9yLnR5cGUgPT09ICdoc2wnKSB7XG4gICAgY29sb3IudHlwZSArPSAnYSc7XG4gIH1cbiAgaWYgKGNvbG9yLnR5cGUgPT09ICdjb2xvcicpIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSBgLyR7dmFsdWV9YDtcbiAgfSBlbHNlIHtcbiAgICBjb2xvci52YWx1ZXNbM10gPSB2YWx1ZTtcbiAgfVxuICByZXR1cm4gcmVjb21wb3NlQ29sb3IoY29sb3IpO1xufVxuZnVuY3Rpb24gcHJpdmF0ZV9zYWZlQWxwaGEoY29sb3IsIHZhbHVlLCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGFscGhhKGNvbG9yLCB2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBEYXJrZW5zIGEgY29sb3IuXG4gKiBAcGFyYW0ge3N0cmluZ30gY29sb3IgLSBDU1MgY29sb3IsIGkuZS4gb25lIG9mOiAjbm5uLCAjbm5ubm5uLCByZ2IoKSwgcmdiYSgpLCBoc2woKSwgaHNsYSgpLCBjb2xvcigpXG4gKiBAcGFyYW0ge251bWJlcn0gY29lZmZpY2llbnQgLSBtdWx0aXBsaWVyIGluIHRoZSByYW5nZSAwIC0gMVxuICogQHJldHVybnMge3N0cmluZ30gQSBDU1MgY29sb3Igc3RyaW5nLiBIZXggaW5wdXQgdmFsdWVzIGFyZSByZXR1cm5lZCBhcyByZ2JcbiAqL1xuZnVuY3Rpb24gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkge1xuICBjb2xvciA9IGRlY29tcG9zZUNvbG9yKGNvbG9yKTtcbiAgY29lZmZpY2llbnQgPSBjbGFtcFdyYXBwZXIoY29lZmZpY2llbnQpO1xuICBpZiAoY29sb3IudHlwZS5pbmRleE9mKCdoc2wnKSAhPT0gLTEpIHtcbiAgICBjb2xvci52YWx1ZXNbMl0gKj0gMSAtIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xIHx8IGNvbG9yLnR5cGUuaW5kZXhPZignY29sb3InKSAhPT0gLTEpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDM7IGkgKz0gMSkge1xuICAgICAgY29sb3IudmFsdWVzW2ldICo9IDEgLSBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZURhcmtlbihjb2xvciwgY29lZmZpY2llbnQsIHdhcm5pbmcpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKHdhcm5pbmcgJiYgcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgY29uc29sZS53YXJuKHdhcm5pbmcpO1xuICAgIH1cbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbn1cblxuLyoqXG4gKiBMaWdodGVucyBhIGNvbG9yLlxuICogQHBhcmFtIHtzdHJpbmd9IGNvbG9yIC0gQ1NTIGNvbG9yLCBpLmUuIG9uZSBvZjogI25ubiwgI25ubm5ubiwgcmdiKCksIHJnYmEoKSwgaHNsKCksIGhzbGEoKSwgY29sb3IoKVxuICogQHBhcmFtIHtudW1iZXJ9IGNvZWZmaWNpZW50IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KSB7XG4gIGNvbG9yID0gZGVjb21wb3NlQ29sb3IoY29sb3IpO1xuICBjb2VmZmljaWVudCA9IGNsYW1wV3JhcHBlcihjb2VmZmljaWVudCk7XG4gIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2hzbCcpICE9PSAtMSkge1xuICAgIGNvbG9yLnZhbHVlc1syXSArPSAoMTAwIC0gY29sb3IudmFsdWVzWzJdKSAqIGNvZWZmaWNpZW50O1xuICB9IGVsc2UgaWYgKGNvbG9yLnR5cGUuaW5kZXhPZigncmdiJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMjU1IC0gY29sb3IudmFsdWVzW2ldKSAqIGNvZWZmaWNpZW50O1xuICAgIH1cbiAgfSBlbHNlIGlmIChjb2xvci50eXBlLmluZGV4T2YoJ2NvbG9yJykgIT09IC0xKSB7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAzOyBpICs9IDEpIHtcbiAgICAgIGNvbG9yLnZhbHVlc1tpXSArPSAoMSAtIGNvbG9yLnZhbHVlc1tpXSkgKiBjb2VmZmljaWVudDtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlY29tcG9zZUNvbG9yKGNvbG9yKTtcbn1cbmZ1bmN0aW9uIHByaXZhdGVfc2FmZUxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50LCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGxpZ2h0ZW4oY29sb3IsIGNvZWZmaWNpZW50KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAod2FybmluZyAmJiBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBjb25zb2xlLndhcm4od2FybmluZyk7XG4gICAgfVxuICAgIHJldHVybiBjb2xvcjtcbiAgfVxufVxuXG4vKipcbiAqIERhcmtlbiBvciBsaWdodGVuIGEgY29sb3IsIGRlcGVuZGluZyBvbiBpdHMgbHVtaW5hbmNlLlxuICogTGlnaHQgY29sb3JzIGFyZSBkYXJrZW5lZCwgZGFyayBjb2xvcnMgYXJlIGxpZ2h0ZW5lZC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBjb2xvciAtIENTUyBjb2xvciwgaS5lLiBvbmUgb2Y6ICNubm4sICNubm5ubm4sIHJnYigpLCByZ2JhKCksIGhzbCgpLCBoc2xhKCksIGNvbG9yKClcbiAqIEBwYXJhbSB7bnVtYmVyfSBjb2VmZmljaWVudD0wLjE1IC0gbXVsdGlwbGllciBpbiB0aGUgcmFuZ2UgMCAtIDFcbiAqIEByZXR1cm5zIHtzdHJpbmd9IEEgQ1NTIGNvbG9yIHN0cmluZy4gSGV4IGlucHV0IHZhbHVlcyBhcmUgcmV0dXJuZWQgYXMgcmdiXG4gKi9cbmZ1bmN0aW9uIGVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQgPSAwLjE1KSB7XG4gIHJldHVybiBnZXRMdW1pbmFuY2UoY29sb3IpID4gMC41ID8gZGFya2VuKGNvbG9yLCBjb2VmZmljaWVudCkgOiBsaWdodGVuKGNvbG9yLCBjb2VmZmljaWVudCk7XG59XG5mdW5jdGlvbiBwcml2YXRlX3NhZmVFbXBoYXNpemUoY29sb3IsIGNvZWZmaWNpZW50LCB3YXJuaW5nKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGVtcGhhc2l6ZShjb2xvciwgY29lZmZpY2llbnQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmICh3YXJuaW5nICYmIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGNvbnNvbGUud2Fybih3YXJuaW5nKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbG9yO1xuICB9XG59XG5cbi8qKlxuICogQmxlbmQgYSB0cmFuc3BhcmVudCBvdmVybGF5IGNvbG9yIHdpdGggYSBiYWNrZ3JvdW5kIGNvbG9yLCByZXN1bHRpbmcgaW4gYSBzaW5nbGVcbiAqIFJHQiBjb2xvci5cbiAqIEBwYXJhbSB7c3RyaW5nfSBiYWNrZ3JvdW5kIC0gQ1NTIGNvbG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gb3ZlcmxheSAtIENTUyBjb2xvclxuICogQHBhcmFtIHtudW1iZXJ9IG9wYWNpdHkgLSBPcGFjaXR5IG11bHRpcGxpZXIgaW4gdGhlIHJhbmdlIDAgLSAxXG4gKiBAcGFyYW0ge251bWJlcn0gW2dhbW1hPTEuMF0gLSBHYW1tYSBjb3JyZWN0aW9uIGZhY3Rvci4gRm9yIGdhbW1hLWNvcnJlY3QgYmxlbmRpbmcsIDIuMiBpcyB1c3VhbC5cbiAqL1xuZnVuY3Rpb24gYmxlbmQoYmFja2dyb3VuZCwgb3ZlcmxheSwgb3BhY2l0eSwgZ2FtbWEgPSAxLjApIHtcbiAgY29uc3QgYmxlbmRDaGFubmVsID0gKGIsIG8pID0+IE1hdGgucm91bmQoKGIgKiogKDEgLyBnYW1tYSkgKiAoMSAtIG9wYWNpdHkpICsgbyAqKiAoMSAvIGdhbW1hKSAqIG9wYWNpdHkpICoqIGdhbW1hKTtcbiAgY29uc3QgYmFja2dyb3VuZENvbG9yID0gZGVjb21wb3NlQ29sb3IoYmFja2dyb3VuZCk7XG4gIGNvbnN0IG92ZXJsYXlDb2xvciA9IGRlY29tcG9zZUNvbG9yKG92ZXJsYXkpO1xuICBjb25zdCByZ2IgPSBbYmxlbmRDaGFubmVsKGJhY2tncm91bmRDb2xvci52YWx1ZXNbMF0sIG92ZXJsYXlDb2xvci52YWx1ZXNbMF0pLCBibGVuZENoYW5uZWwoYmFja2dyb3VuZENvbG9yLnZhbHVlc1sxXSwgb3ZlcmxheUNvbG9yLnZhbHVlc1sxXSksIGJsZW5kQ2hhbm5lbChiYWNrZ3JvdW5kQ29sb3IudmFsdWVzWzJdLCBvdmVybGF5Q29sb3IudmFsdWVzWzJdKV07XG4gIHJldHVybiByZWNvbXBvc2VDb2xvcih7XG4gICAgdHlwZTogJ3JnYicsXG4gICAgdmFsdWVzOiByZ2JcbiAgfSk7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0ID0gcmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvaW50ZXJvcFJlcXVpcmVEZWZhdWx0XCIpO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IGNyZWF0ZVN0eWxlZDtcbmV4cG9ydHMuc2hvdWxkRm9yd2FyZFByb3AgPSBzaG91bGRGb3J3YXJkUHJvcDtcbmV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gdm9pZCAwO1xudmFyIF9leHRlbmRzMiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXh0ZW5kc1wiKSk7XG52YXIgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCIpKTtcbnZhciBfc3R5bGVkRW5naW5lID0gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQocmVxdWlyZShcIkBtdWkvc3R5bGVkLWVuZ2luZVwiKSk7XG52YXIgX2RlZXBtZXJnZSA9IHJlcXVpcmUoXCJAbXVpL3V0aWxzL2RlZXBtZXJnZVwiKTtcbnZhciBfY2FwaXRhbGl6ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIkBtdWkvdXRpbHMvY2FwaXRhbGl6ZVwiKSk7XG52YXIgX2dldERpc3BsYXlOYW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiQG11aS91dGlscy9nZXREaXNwbGF5TmFtZVwiKSk7XG52YXIgX2NyZWF0ZVRoZW1lID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9jcmVhdGVUaGVtZVwiKSk7XG52YXIgX3N0eWxlRnVuY3Rpb25TeCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3R5bGVGdW5jdGlvblN4XCIpKTtcbmNvbnN0IF9leGNsdWRlZCA9IFtcIm93bmVyU3RhdGVcIl0sXG4gIF9leGNsdWRlZDIgPSBbXCJ2YXJpYW50c1wiXSxcbiAgX2V4Y2x1ZGVkMyA9IFtcIm5hbWVcIiwgXCJzbG90XCIsIFwic2tpcFZhcmlhbnRzUmVzb2x2ZXJcIiwgXCJza2lwU3hcIiwgXCJvdmVycmlkZXNSZXNvbHZlclwiXTtcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVuZGVyc2NvcmUtZGFuZ2xlICovXG5mdW5jdGlvbiBfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUoZSkgeyBpZiAoXCJmdW5jdGlvblwiICE9IHR5cGVvZiBXZWFrTWFwKSByZXR1cm4gbnVsbDsgdmFyIHIgPSBuZXcgV2Vha01hcCgpLCB0ID0gbmV3IFdlYWtNYXAoKTsgcmV0dXJuIChfZ2V0UmVxdWlyZVdpbGRjYXJkQ2FjaGUgPSBmdW5jdGlvbiAoZSkgeyByZXR1cm4gZSA/IHQgOiByOyB9KShlKTsgfVxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQoZSwgcikgeyBpZiAoIXIgJiYgZSAmJiBlLl9fZXNNb2R1bGUpIHJldHVybiBlOyBpZiAobnVsbCA9PT0gZSB8fCBcIm9iamVjdFwiICE9IHR5cGVvZiBlICYmIFwiZnVuY3Rpb25cIiAhPSB0eXBlb2YgZSkgcmV0dXJuIHsgZGVmYXVsdDogZSB9OyB2YXIgdCA9IF9nZXRSZXF1aXJlV2lsZGNhcmRDYWNoZShyKTsgaWYgKHQgJiYgdC5oYXMoZSkpIHJldHVybiB0LmdldChlKTsgdmFyIG4gPSB7IF9fcHJvdG9fXzogbnVsbCB9LCBhID0gT2JqZWN0LmRlZmluZVByb3BlcnR5ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7IGZvciAodmFyIHUgaW4gZSkgaWYgKFwiZGVmYXVsdFwiICE9PSB1ICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCB1KSkgeyB2YXIgaSA9IGEgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsIHUpIDogbnVsbDsgaSAmJiAoaS5nZXQgfHwgaS5zZXQpID8gT2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIHUsIGkpIDogblt1XSA9IGVbdV07IH0gcmV0dXJuIG4uZGVmYXVsdCA9IGUsIHQgJiYgdC5zZXQoZSwgbiksIG47IH1cbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmZ1bmN0aW9uIHNob3VsZEZvcndhcmRQcm9wKHByb3ApIHtcbiAgcmV0dXJuIHByb3AgIT09ICdvd25lclN0YXRlJyAmJiBwcm9wICE9PSAndGhlbWUnICYmIHByb3AgIT09ICdzeCcgJiYgcHJvcCAhPT0gJ2FzJztcbn1cbmNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGV4cG9ydHMuc3lzdGVtRGVmYXVsdFRoZW1lID0gKDAsIF9jcmVhdGVUaGVtZS5kZWZhdWx0KSgpO1xuY29uc3QgbG93ZXJjYXNlRmlyc3RMZXR0ZXIgPSBzdHJpbmcgPT4ge1xuICBpZiAoIXN0cmluZykge1xuICAgIHJldHVybiBzdHJpbmc7XG4gIH1cbiAgcmV0dXJuIHN0cmluZy5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHN0cmluZy5zbGljZSgxKTtcbn07XG5mdW5jdGlvbiByZXNvbHZlVGhlbWUoe1xuICBkZWZhdWx0VGhlbWUsXG4gIHRoZW1lLFxuICB0aGVtZUlkXG59KSB7XG4gIHJldHVybiBpc0VtcHR5KHRoZW1lKSA/IGRlZmF1bHRUaGVtZSA6IHRoZW1lW3RoZW1lSWRdIHx8IHRoZW1lO1xufVxuZnVuY3Rpb24gZGVmYXVsdE92ZXJyaWRlc1Jlc29sdmVyKHNsb3QpIHtcbiAgaWYgKCFzbG90KSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgcmV0dXJuIChwcm9wcywgc3R5bGVzKSA9PiBzdHlsZXNbc2xvdF07XG59XG5mdW5jdGlvbiBwcm9jZXNzU3R5bGVBcmcoY2FsbGFibGVTdHlsZSwgX3JlZikge1xuICBsZXQge1xuICAgICAgb3duZXJTdGF0ZVxuICAgIH0gPSBfcmVmLFxuICAgIHByb3BzID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShfcmVmLCBfZXhjbHVkZWQpO1xuICBjb25zdCByZXNvbHZlZFN0eWxlc0FyZyA9IHR5cGVvZiBjYWxsYWJsZVN0eWxlID09PSAnZnVuY3Rpb24nID8gY2FsbGFibGVTdHlsZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9LCBwcm9wcykpKTtcbiAgfVxuICBpZiAoISFyZXNvbHZlZFN0eWxlc0FyZyAmJiB0eXBlb2YgcmVzb2x2ZWRTdHlsZXNBcmcgPT09ICdvYmplY3QnICYmIEFycmF5LmlzQXJyYXkocmVzb2x2ZWRTdHlsZXNBcmcudmFyaWFudHMpKSB7XG4gICAgY29uc3Qge1xuICAgICAgICB2YXJpYW50cyA9IFtdXG4gICAgICB9ID0gcmVzb2x2ZWRTdHlsZXNBcmcsXG4gICAgICBvdGhlclN0eWxlcyA9ICgwLCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZTIuZGVmYXVsdCkocmVzb2x2ZWRTdHlsZXNBcmcsIF9leGNsdWRlZDIpO1xuICAgIGxldCByZXN1bHQgPSBvdGhlclN0eWxlcztcbiAgICB2YXJpYW50cy5mb3JFYWNoKHZhcmlhbnQgPT4ge1xuICAgICAgbGV0IGlzTWF0Y2ggPSB0cnVlO1xuICAgICAgaWYgKHR5cGVvZiB2YXJpYW50LnByb3BzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlzTWF0Y2ggPSB2YXJpYW50LnByb3BzKCgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7XG4gICAgICAgICAgb3duZXJTdGF0ZVxuICAgICAgICB9LCBwcm9wcywgb3duZXJTdGF0ZSkpIDogdmFyaWFudC5zdHlsZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmc7XG59XG5mdW5jdGlvbiBjcmVhdGVTdHlsZWQoaW5wdXQgPSB7fSkge1xuICBjb25zdCB7XG4gICAgdGhlbWVJZCxcbiAgICBkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUsXG4gICAgcm9vdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3AsXG4gICAgc2xvdFNob3VsZEZvcndhcmRQcm9wID0gc2hvdWxkRm9yd2FyZFByb3BcbiAgfSA9IGlucHV0O1xuICBjb25zdCBzeXN0ZW1TeCA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gKDAsIF9zdHlsZUZ1bmN0aW9uU3guZGVmYXVsdCkoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICB0aGVtZUlkXG4gICAgICB9KSlcbiAgICB9KSk7XG4gIH07XG4gIHN5c3RlbVN4Ll9fbXVpX3N5c3RlbVN4ID0gdHJ1ZTtcbiAgcmV0dXJuICh0YWcsIGlucHV0T3B0aW9ucyA9IHt9KSA9PiB7XG4gICAgLy8gRmlsdGVyIG91dCB0aGUgYHN4YCBzdHlsZSBmdW5jdGlvbiBmcm9tIHRoZSBwcmV2aW91cyBzdHlsZWQgY29tcG9uZW50IHRvIHByZXZlbnQgdW5uZWNlc3Nhcnkgc3R5bGVzIGdlbmVyYXRlZCBieSB0aGUgY29tcG9zaXRlIGNvbXBvbmVudHMuXG4gICAgKDAsIF9zdHlsZWRFbmdpbmUuaW50ZXJuYWxfcHJvY2Vzc1N0eWxlcykodGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gKDAsIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlMi5kZWZhdWx0KShpbnB1dE9wdGlvbnMsIF9leGNsdWRlZDMpO1xuXG4gICAgLy8gaWYgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgb3B0aW9uIGlzIGRlZmluZWQsIHRha2UgdGhlIHZhbHVlLCBvdGhlcndpc2UsIHRydWUgZm9yIHJvb3QgYW5kIGZhbHNlIGZvciBvdGhlciBzbG90cy5cbiAgICBjb25zdCBza2lwVmFyaWFudHNSZXNvbHZlciA9IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgIT09IHVuZGVmaW5lZCA/IGlucHV0U2tpcFZhcmlhbnRzUmVzb2x2ZXIgOlxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGNvbXBvbmVudFNsb3QgJiYgY29tcG9uZW50U2xvdCAhPT0gJ1Jvb3QnICYmIGNvbXBvbmVudFNsb3QgIT09ICdyb290JyB8fCBmYWxzZTtcbiAgICBjb25zdCBza2lwU3ggPSBpbnB1dFNraXBTeCB8fCBmYWxzZTtcbiAgICBsZXQgbGFiZWw7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgbG93ZXJjYXNlRmlyc3RMZXR0ZXIoKWAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgICAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICAgICAgbGFiZWwgPSBgJHtjb21wb25lbnROYW1lfS0ke2xvd2VyY2FzZUZpcnN0TGV0dGVyKGNvbXBvbmVudFNsb3QgfHwgJ1Jvb3QnKX1gO1xuICAgICAgfVxuICAgIH1cbiAgICBsZXQgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzaG91bGRGb3J3YXJkUHJvcDtcblxuICAgIC8vIFRPRE8gdjY6IHJlbW92ZSBgUm9vdGAgaW4gdGhlIG5leHQgbWFqb3IgcmVsZWFzZVxuICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgIGlmIChjb21wb25lbnRTbG90ID09PSAnUm9vdCcgfHwgY29tcG9uZW50U2xvdCA9PT0gJ3Jvb3QnKSB7XG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHJvb3RTaG91bGRGb3J3YXJkUHJvcDtcbiAgICB9IGVsc2UgaWYgKGNvbXBvbmVudFNsb3QpIHtcbiAgICAgIC8vIGFueSBvdGhlciBzbG90IHNwZWNpZmllZFxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSBzbG90U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChpc1N0cmluZ1RhZyh0YWcpKSB7XG4gICAgICAvLyBmb3Igc3RyaW5nIChodG1sKSB0YWcsIHByZXNlcnZlIHRoZSBiZWhhdmlvciBpbiBlbW90aW9uICYgc3R5bGVkLWNvbXBvbmVudHMuXG4gICAgICBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbiA9IHVuZGVmaW5lZDtcbiAgICB9XG4gICAgY29uc3QgZGVmYXVsdFN0eWxlZFJlc29sdmVyID0gKDAsIF9zdHlsZWRFbmdpbmUuZGVmYXVsdCkodGFnLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8ICgwLCBfZGVlcG1lcmdlLmlzUGxhaW5PYmplY3QpKHN0eWxlc0FyZykpIHtcbiAgICAgICAgcmV0dXJuIHByb3BzID0+IHByb2Nlc3NTdHlsZUFyZyhzdHlsZXNBcmcsICgwLCBfZXh0ZW5kczIuZGVmYXVsdCkoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZSgoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgZGVmYXVsdFRoZW1lLFxuICAgICAgICAgICAgdGhlbWVJZFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBpZiAoIXRoZW1lLmNvbXBvbmVudHMgfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0gfHwgIXRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXMpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb25zdCBzdHlsZU92ZXJyaWRlcyA9IHRoZW1lLmNvbXBvbmVudHNbY29tcG9uZW50TmFtZV0uc3R5bGVPdmVycmlkZXM7XG4gICAgICAgICAgY29uc3QgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyA9IHt9O1xuICAgICAgICAgIC8vIFRPRE86IHY3IHJlbW92ZSBpdGVyYXRpb24gYW5kIHVzZSBgcmVzb2x2ZVN0eWxlQXJnKHN0eWxlT3ZlcnJpZGVzW3Nsb3RdKWAgZGlyZWN0bHlcbiAgICAgICAgICBPYmplY3QuZW50cmllcyhzdHlsZU92ZXJyaWRlcykuZm9yRWFjaCgoW3Nsb3RLZXksIHNsb3RTdHlsZV0pID0+IHtcbiAgICAgICAgICAgIHJlc29sdmVkU3R5bGVPdmVycmlkZXNbc2xvdEtleV0gPSBwcm9jZXNzU3R5bGVBcmcoc2xvdFN0eWxlLCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHJldHVybiBvdmVycmlkZXNSZXNvbHZlcihwcm9wcywgcmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGNvbXBvbmVudE5hbWUgJiYgIXNraXBWYXJpYW50c1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICB2YXIgX3RoZW1lJGNvbXBvbmVudHM7XG4gICAgICAgICAgY29uc3QgdGhlbWUgPSByZXNvbHZlVGhlbWUoKDAsIF9leHRlbmRzMi5kZWZhdWx0KSh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCAoMCwgX2V4dGVuZHMyLmRlZmF1bHQpKHt9LCBwcm9wcywge1xuICAgICAgICAgICAgdGhlbWVcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKCFza2lwU3gpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2goc3lzdGVtU3gpO1xuICAgICAgfVxuICAgICAgY29uc3QgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID0gZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLmxlbmd0aCAtIGV4cHJlc3Npb25zLmxlbmd0aDtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHN0eWxlQXJnKSAmJiBudW1PZkN1c3RvbUZuc0FwcGxpZWQgPiAwKSB7XG4gICAgICAgIGNvbnN0IHBsYWNlaG9sZGVycyA9IG5ldyBBcnJheShudW1PZkN1c3RvbUZuc0FwcGxpZWQpLmZpbGwoJycpO1xuICAgICAgICAvLyBJZiB0aGUgdHlwZSBpcyBhcnJheSwgdGhhbiB3ZSBuZWVkIHRvIGFkZCBwbGFjZWhvbGRlcnMgaW4gdGhlIHRlbXBsYXRlIGZvciB0aGUgb3ZlcnJpZGVzLCB2YXJpYW50cyBhbmQgdGhlIHN4IHN0eWxlcy5cbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZyA9IFsuLi5zdHlsZUFyZywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgICAgdHJhbnNmb3JtZWRTdHlsZUFyZy5yYXcgPSBbLi4uc3R5bGVBcmcucmF3LCAuLi5wbGFjZWhvbGRlcnNdO1xuICAgICAgfVxuICAgICAgY29uc3QgQ29tcG9uZW50ID0gZGVmYXVsdFN0eWxlZFJlc29sdmVyKHRyYW5zZm9ybWVkU3R5bGVBcmcsIC4uLmV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZSk7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBsZXQgZGlzcGxheU5hbWU7XG4gICAgICAgIGlmIChjb21wb25lbnROYW1lKSB7XG4gICAgICAgICAgZGlzcGxheU5hbWUgPSBgJHtjb21wb25lbnROYW1lfSR7KDAsIF9jYXBpdGFsaXplLmRlZmF1bHQpKGNvbXBvbmVudFNsb3QgfHwgJycpfWA7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGRpc3BsYXlOYW1lID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBkaXNwbGF5TmFtZSA9IGBTdHlsZWQoJHsoMCwgX2dldERpc3BsYXlOYW1lLmRlZmF1bHQpKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJvd25lclN0YXRlXCJdLFxuICBfZXhjbHVkZWQyID0gW1widmFyaWFudHNcIl0sXG4gIF9leGNsdWRlZDMgPSBbXCJuYW1lXCIsIFwic2xvdFwiLCBcInNraXBWYXJpYW50c1Jlc29sdmVyXCIsIFwic2tpcFN4XCIsIFwib3ZlcnJpZGVzUmVzb2x2ZXJcIl07XG4vKiBlc2xpbnQtZGlzYWJsZSBuby11bmRlcnNjb3JlLWRhbmdsZSAqL1xuaW1wb3J0IHN0eWxlZEVuZ2luZVN0eWxlZCwgeyBpbnRlcm5hbF9wcm9jZXNzU3R5bGVzIGFzIHByb2Nlc3NTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBjYXBpdGFsaXplIGZyb20gJ0BtdWkvdXRpbHMvY2FwaXRhbGl6ZSc7XG5pbXBvcnQgZ2V0RGlzcGxheU5hbWUgZnJvbSAnQG11aS91dGlscy9nZXREaXNwbGF5TmFtZSc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgc3R5bGVGdW5jdGlvblN4IGZyb20gJy4vc3R5bGVGdW5jdGlvblN4JztcbmZ1bmN0aW9uIGlzRW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cblxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2Vtb3Rpb24tanMvZW1vdGlvbi9ibG9iLzI2ZGVkNjEwOWZjZDhjYTk4NzVjYzJjZTQ1NjRmZWU2NzhhM2YzYzUvcGFja2FnZXMvc3R5bGVkL3NyYy91dGlscy5qcyNMNDBcbmZ1bmN0aW9uIGlzU3RyaW5nVGFnKHRhZykge1xuICByZXR1cm4gdHlwZW9mIHRhZyA9PT0gJ3N0cmluZycgJiZcbiAgLy8gOTYgaXMgb25lIGxlc3MgdGhhbiB0aGUgY2hhciBjb2RlXG4gIC8vIGZvciBcImFcIiBzbyB0aGlzIGlzIGNoZWNraW5nIHRoYXRcbiAgLy8gaXQncyBhIGxvd2VyY2FzZSBjaGFyYWN0ZXJcbiAgdGFnLmNoYXJDb2RlQXQoMCkgPiA5Njtcbn1cblxuLy8gVXBkYXRlIC9zeXN0ZW0vc3R5bGVkLyNhcGkgaW4gY2FzZSBpZiB0aGlzIGNoYW5nZXNcbmV4cG9ydCBmdW5jdGlvbiBzaG91bGRGb3J3YXJkUHJvcChwcm9wKSB7XG4gIHJldHVybiBwcm9wICE9PSAnb3duZXJTdGF0ZScgJiYgcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcyc7XG59XG5leHBvcnQgY29uc3Qgc3lzdGVtRGVmYXVsdFRoZW1lID0gY3JlYXRlVGhlbWUoKTtcbmNvbnN0IGxvd2VyY2FzZUZpcnN0TGV0dGVyID0gc3RyaW5nID0+IHtcbiAgaWYgKCFzdHJpbmcpIHtcbiAgICByZXR1cm4gc3RyaW5nO1xuICB9XG4gIHJldHVybiBzdHJpbmcuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBzdHJpbmcuc2xpY2UoMSk7XG59O1xuZnVuY3Rpb24gcmVzb2x2ZVRoZW1lKHtcbiAgZGVmYXVsdFRoZW1lLFxuICB0aGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICByZXR1cm4gaXNFbXB0eSh0aGVtZSkgPyBkZWZhdWx0VGhlbWUgOiB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZTtcbn1cbmZ1bmN0aW9uIGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihzbG90KSB7XG4gIGlmICghc2xvdCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG4gIHJldHVybiAocHJvcHMsIHN0eWxlcykgPT4gc3R5bGVzW3Nsb3RdO1xufVxuZnVuY3Rpb24gcHJvY2Vzc1N0eWxlQXJnKGNhbGxhYmxlU3R5bGUsIF9yZWYpIHtcbiAgbGV0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIGNvbnN0IHJlc29sdmVkU3R5bGVzQXJnID0gdHlwZW9mIGNhbGxhYmxlU3R5bGUgPT09ICdmdW5jdGlvbicgPyBjYWxsYWJsZVN0eWxlKF9leHRlbmRzKHtcbiAgICBvd25lclN0YXRlXG4gIH0sIHByb3BzKSkgOiBjYWxsYWJsZVN0eWxlO1xuICBpZiAoQXJyYXkuaXNBcnJheShyZXNvbHZlZFN0eWxlc0FyZykpIHtcbiAgICByZXR1cm4gcmVzb2x2ZWRTdHlsZXNBcmcuZmxhdE1hcChyZXNvbHZlZFN0eWxlID0+IHByb2Nlc3NTdHlsZUFyZyhyZXNvbHZlZFN0eWxlLCBfZXh0ZW5kcyh7XG4gICAgICBvd25lclN0YXRlXG4gICAgfSwgcHJvcHMpKSk7XG4gIH1cbiAgaWYgKCEhcmVzb2x2ZWRTdHlsZXNBcmcgJiYgdHlwZW9mIHJlc29sdmVkU3R5bGVzQXJnID09PSAnb2JqZWN0JyAmJiBBcnJheS5pc0FycmF5KHJlc29sdmVkU3R5bGVzQXJnLnZhcmlhbnRzKSkge1xuICAgIGNvbnN0IHtcbiAgICAgICAgdmFyaWFudHMgPSBbXVxuICAgICAgfSA9IHJlc29sdmVkU3R5bGVzQXJnLFxuICAgICAgb3RoZXJTdHlsZXMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShyZXNvbHZlZFN0eWxlc0FyZywgX2V4Y2x1ZGVkMik7XG4gICAgbGV0IHJlc3VsdCA9IG90aGVyU3R5bGVzO1xuICAgIHZhcmlhbnRzLmZvckVhY2godmFyaWFudCA9PiB7XG4gICAgICBsZXQgaXNNYXRjaCA9IHRydWU7XG4gICAgICBpZiAodHlwZW9mIHZhcmlhbnQucHJvcHMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaXNNYXRjaCA9IHZhcmlhbnQucHJvcHMoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIE9iamVjdC5rZXlzKHZhcmlhbnQucHJvcHMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBpZiAoKG93bmVyU3RhdGUgPT0gbnVsbCA/IHZvaWQgMCA6IG93bmVyU3RhdGVba2V5XSkgIT09IHZhcmlhbnQucHJvcHNba2V5XSAmJiBwcm9wc1trZXldICE9PSB2YXJpYW50LnByb3BzW2tleV0pIHtcbiAgICAgICAgICAgIGlzTWF0Y2ggPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgaWYgKGlzTWF0Y2gpIHtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdCkpIHtcbiAgICAgICAgICByZXN1bHQgPSBbcmVzdWx0XTtcbiAgICAgICAgfVxuICAgICAgICByZXN1bHQucHVzaCh0eXBlb2YgdmFyaWFudC5zdHlsZSA9PT0gJ2Z1bmN0aW9uJyA/IHZhcmlhbnQuc3R5bGUoX2V4dGVuZHMoe1xuICAgICAgICAgIG93bmVyU3RhdGVcbiAgICAgICAgfSwgcHJvcHMsIG93bmVyU3RhdGUpKSA6IHZhcmlhbnQuc3R5bGUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbiAgcmV0dXJuIHJlc29sdmVkU3R5bGVzQXJnO1xufVxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlU3R5bGVkKGlucHV0ID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lID0gc3lzdGVtRGVmYXVsdFRoZW1lLFxuICAgIHJvb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wLFxuICAgIHNsb3RTaG91bGRGb3J3YXJkUHJvcCA9IHNob3VsZEZvcndhcmRQcm9wXG4gIH0gPSBpbnB1dDtcbiAgY29uc3Qgc3lzdGVtU3ggPSBwcm9wcyA9PiB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeChfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIHRoZW1lOiByZXNvbHZlVGhlbWUoX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgdGhlbWVJZFxuICAgICAgfSkpXG4gICAgfSkpO1xuICB9O1xuICBzeXN0ZW1TeC5fX211aV9zeXN0ZW1TeCA9IHRydWU7XG4gIHJldHVybiAodGFnLCBpbnB1dE9wdGlvbnMgPSB7fSkgPT4ge1xuICAgIC8vIEZpbHRlciBvdXQgdGhlIGBzeGAgc3R5bGUgZnVuY3Rpb24gZnJvbSB0aGUgcHJldmlvdXMgc3R5bGVkIGNvbXBvbmVudCB0byBwcmV2ZW50IHVubmVjZXNzYXJ5IHN0eWxlcyBnZW5lcmF0ZWQgYnkgdGhlIGNvbXBvc2l0ZSBjb21wb25lbnRzLlxuICAgIHByb2Nlc3NTdHlsZXModGFnLCBzdHlsZXMgPT4gc3R5bGVzLmZpbHRlcihzdHlsZSA9PiAhKHN0eWxlICE9IG51bGwgJiYgc3R5bGUuX19tdWlfc3lzdGVtU3gpKSk7XG4gICAgY29uc3Qge1xuICAgICAgICBuYW1lOiBjb21wb25lbnROYW1lLFxuICAgICAgICBzbG90OiBjb21wb25lbnRTbG90LFxuICAgICAgICBza2lwVmFyaWFudHNSZXNvbHZlcjogaW5wdXRTa2lwVmFyaWFudHNSZXNvbHZlcixcbiAgICAgICAgc2tpcFN4OiBpbnB1dFNraXBTeCxcbiAgICAgICAgLy8gVE9ETyB2NjogcmVtb3ZlIGBsb3dlcmNhc2VGaXJzdExldHRlcigpYCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlXG4gICAgICAgIC8vIEZvciBtb3JlIGRldGFpbHM6IGh0dHBzOi8vZ2l0aHViLmNvbS9tdWkvbWF0ZXJpYWwtdWkvcHVsbC8zNzkwOFxuICAgICAgICBvdmVycmlkZXNSZXNvbHZlciA9IGRlZmF1bHRPdmVycmlkZXNSZXNvbHZlcihsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90KSlcbiAgICAgIH0gPSBpbnB1dE9wdGlvbnMsXG4gICAgICBvcHRpb25zID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoaW5wdXRPcHRpb25zLCBfZXhjbHVkZWQzKTtcblxuICAgIC8vIGlmIHNraXBWYXJpYW50c1Jlc29sdmVyIG9wdGlvbiBpcyBkZWZpbmVkLCB0YWtlIHRoZSB2YWx1ZSwgb3RoZXJ3aXNlLCB0cnVlIGZvciByb290IGFuZCBmYWxzZSBmb3Igb3RoZXIgc2xvdHMuXG4gICAgY29uc3Qgc2tpcFZhcmlhbnRzUmVzb2x2ZXIgPSBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyICE9PSB1bmRlZmluZWQgPyBpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIDpcbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBjb21wb25lbnRTbG90ICYmIGNvbXBvbmVudFNsb3QgIT09ICdSb290JyAmJiBjb21wb25lbnRTbG90ICE9PSAncm9vdCcgfHwgZmFsc2U7XG4gICAgY29uc3Qgc2tpcFN4ID0gaW5wdXRTa2lwU3ggfHwgZmFsc2U7XG4gICAgbGV0IGxhYmVsO1xuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAvLyBUT0RPIHY2OiByZW1vdmUgYGxvd2VyY2FzZUZpcnN0TGV0dGVyKClgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAgICAgLy8gRm9yIG1vcmUgZGV0YWlsczogaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM3OTA4XG4gICAgICAgIGxhYmVsID0gYCR7Y29tcG9uZW50TmFtZX0tJHtsb3dlcmNhc2VGaXJzdExldHRlcihjb21wb25lbnRTbG90IHx8ICdSb290Jyl9YDtcbiAgICAgIH1cbiAgICB9XG4gICAgbGV0IHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2hvdWxkRm9yd2FyZFByb3A7XG5cbiAgICAvLyBUT0RPIHY2OiByZW1vdmUgYFJvb3RgIGluIHRoZSBuZXh0IG1ham9yIHJlbGVhc2VcbiAgICAvLyBGb3IgbW9yZSBkZXRhaWxzOiBodHRwczovL2dpdGh1Yi5jb20vbXVpL21hdGVyaWFsLXVpL3B1bGwvMzc5MDhcbiAgICBpZiAoY29tcG9uZW50U2xvdCA9PT0gJ1Jvb3QnIHx8IGNvbXBvbmVudFNsb3QgPT09ICdyb290Jykge1xuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSByb290U2hvdWxkRm9yd2FyZFByb3A7XG4gICAgfSBlbHNlIGlmIChjb21wb25lbnRTbG90KSB7XG4gICAgICAvLyBhbnkgb3RoZXIgc2xvdCBzcGVjaWZpZWRcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wT3B0aW9uID0gc2xvdFNob3VsZEZvcndhcmRQcm9wO1xuICAgIH0gZWxzZSBpZiAoaXNTdHJpbmdUYWcodGFnKSkge1xuICAgICAgLy8gZm9yIHN0cmluZyAoaHRtbCkgdGFnLCBwcmVzZXJ2ZSB0aGUgYmVoYXZpb3IgaW4gZW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzLlxuICAgICAgc2hvdWxkRm9yd2FyZFByb3BPcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgfVxuICAgIGNvbnN0IGRlZmF1bHRTdHlsZWRSZXNvbHZlciA9IHN0eWxlZEVuZ2luZVN0eWxlZCh0YWcsIF9leHRlbmRzKHtcbiAgICAgIHNob3VsZEZvcndhcmRQcm9wOiBzaG91bGRGb3J3YXJkUHJvcE9wdGlvbixcbiAgICAgIGxhYmVsXG4gICAgfSwgb3B0aW9ucykpO1xuICAgIGNvbnN0IHRyYW5zZm9ybVN0eWxlQXJnID0gc3R5bGVzQXJnID0+IHtcbiAgICAgIC8vIE9uIHRoZSBzZXJ2ZXIgRW1vdGlvbiBkb2Vzbid0IHVzZSBSZWFjdC5mb3J3YXJkUmVmIGZvciBjcmVhdGluZyBjb21wb25lbnRzLCBzbyB0aGUgY3JlYXRlZFxuICAgICAgLy8gY29tcG9uZW50IHN0YXlzIGFzIGEgZnVuY3Rpb24uIFRoaXMgY29uZGl0aW9uIG1ha2VzIHN1cmUgdGhhdCB3ZSBkbyBub3QgaW50ZXJwb2xhdGUgZnVuY3Rpb25zXG4gICAgICAvLyB3aGljaCBhcmUgYmFzaWNhbGx5IGNvbXBvbmVudHMgdXNlZCBhcyBhIHNlbGVjdG9ycy5cbiAgICAgIGlmICh0eXBlb2Ygc3R5bGVzQXJnID09PSAnZnVuY3Rpb24nICYmIHN0eWxlc0FyZy5fX2Vtb3Rpb25fcmVhbCAhPT0gc3R5bGVzQXJnIHx8IGlzUGxhaW5PYmplY3Qoc3R5bGVzQXJnKSkge1xuICAgICAgICByZXR1cm4gcHJvcHMgPT4gcHJvY2Vzc1N0eWxlQXJnKHN0eWxlc0FyZywgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgdGhlbWU6IHJlc29sdmVUaGVtZSh7XG4gICAgICAgICAgICB0aGVtZTogcHJvcHMudGhlbWUsXG4gICAgICAgICAgICBkZWZhdWx0VGhlbWUsXG4gICAgICAgICAgICB0aGVtZUlkXG4gICAgICAgICAgfSlcbiAgICAgICAgfSkpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHN0eWxlc0FyZztcbiAgICB9O1xuICAgIGNvbnN0IG11aVN0eWxlZFJlc29sdmVyID0gKHN0eWxlQXJnLCAuLi5leHByZXNzaW9ucykgPT4ge1xuICAgICAgbGV0IHRyYW5zZm9ybWVkU3R5bGVBcmcgPSB0cmFuc2Zvcm1TdHlsZUFyZyhzdHlsZUFyZyk7XG4gICAgICBjb25zdCBleHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUgPSBleHByZXNzaW9ucyA/IGV4cHJlc3Npb25zLm1hcCh0cmFuc2Zvcm1TdHlsZUFyZykgOiBbXTtcbiAgICAgIGlmIChjb21wb25lbnROYW1lICYmIG92ZXJyaWRlc1Jlc29sdmVyKSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHByb3BzID0+IHtcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgaWYgKCF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG4gICAgICAgICAgY29uc3Qgc3R5bGVPdmVycmlkZXMgPSB0aGVtZS5jb21wb25lbnRzW2NvbXBvbmVudE5hbWVdLnN0eWxlT3ZlcnJpZGVzO1xuICAgICAgICAgIGNvbnN0IHJlc29sdmVkU3R5bGVPdmVycmlkZXMgPSB7fTtcbiAgICAgICAgICAvLyBUT0RPOiB2NyByZW1vdmUgaXRlcmF0aW9uIGFuZCB1c2UgYHJlc29sdmVTdHlsZUFyZyhzdHlsZU92ZXJyaWRlc1tzbG90XSlgIGRpcmVjdGx5XG4gICAgICAgICAgT2JqZWN0LmVudHJpZXMoc3R5bGVPdmVycmlkZXMpLmZvckVhY2goKFtzbG90S2V5LCBzbG90U3R5bGVdKSA9PiB7XG4gICAgICAgICAgICByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzW3Nsb3RLZXldID0gcHJvY2Vzc1N0eWxlQXJnKHNsb3RTdHlsZSwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIG92ZXJyaWRlc1Jlc29sdmVyKHByb3BzLCByZXNvbHZlZFN0eWxlT3ZlcnJpZGVzKTtcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBpZiAoY29tcG9uZW50TmFtZSAmJiAhc2tpcFZhcmlhbnRzUmVzb2x2ZXIpIHtcbiAgICAgICAgZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lLnB1c2gocHJvcHMgPT4ge1xuICAgICAgICAgIHZhciBfdGhlbWUkY29tcG9uZW50cztcbiAgICAgICAgICBjb25zdCB0aGVtZSA9IHJlc29sdmVUaGVtZShfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIGRlZmF1bHRUaGVtZSxcbiAgICAgICAgICAgIHRoZW1lSWRcbiAgICAgICAgICB9KSk7XG4gICAgICAgICAgY29uc3QgdGhlbWVWYXJpYW50cyA9IHRoZW1lID09IG51bGwgfHwgKF90aGVtZSRjb21wb25lbnRzID0gdGhlbWUuY29tcG9uZW50cykgPT0gbnVsbCB8fCAoX3RoZW1lJGNvbXBvbmVudHMgPSBfdGhlbWUkY29tcG9uZW50c1tjb21wb25lbnROYW1lXSkgPT0gbnVsbCA/IHZvaWQgMCA6IF90aGVtZSRjb21wb25lbnRzLnZhcmlhbnRzO1xuICAgICAgICAgIHJldHVybiBwcm9jZXNzU3R5bGVBcmcoe1xuICAgICAgICAgICAgdmFyaWFudHM6IHRoZW1lVmFyaWFudHNcbiAgICAgICAgICB9LCBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgICAgICAgIHRoZW1lXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICghc2tpcFN4KSB7XG4gICAgICAgIGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5wdXNoKHN5c3RlbVN4KTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IG51bU9mQ3VzdG9tRm5zQXBwbGllZCA9IGV4cHJlc3Npb25zV2l0aERlZmF1bHRUaGVtZS5sZW5ndGggLSBleHByZXNzaW9ucy5sZW5ndGg7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShzdHlsZUFyZykgJiYgbnVtT2ZDdXN0b21GbnNBcHBsaWVkID4gMCkge1xuICAgICAgICBjb25zdCBwbGFjZWhvbGRlcnMgPSBuZXcgQXJyYXkobnVtT2ZDdXN0b21GbnNBcHBsaWVkKS5maWxsKCcnKTtcbiAgICAgICAgLy8gSWYgdGhlIHR5cGUgaXMgYXJyYXksIHRoYW4gd2UgbmVlZCB0byBhZGQgcGxhY2Vob2xkZXJzIGluIHRoZSB0ZW1wbGF0ZSBmb3IgdGhlIG92ZXJyaWRlcywgdmFyaWFudHMgYW5kIHRoZSBzeCBzdHlsZXMuXG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcgPSBbLi4uc3R5bGVBcmcsIC4uLnBsYWNlaG9sZGVyc107XG4gICAgICAgIHRyYW5zZm9ybWVkU3R5bGVBcmcucmF3ID0gWy4uLnN0eWxlQXJnLnJhdywgLi4ucGxhY2Vob2xkZXJzXTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IENvbXBvbmVudCA9IGRlZmF1bHRTdHlsZWRSZXNvbHZlcih0cmFuc2Zvcm1lZFN0eWxlQXJnLCAuLi5leHByZXNzaW9uc1dpdGhEZWZhdWx0VGhlbWUpO1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgbGV0IGRpc3BsYXlOYW1lO1xuICAgICAgICBpZiAoY29tcG9uZW50TmFtZSkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYCR7Y29tcG9uZW50TmFtZX0ke2NhcGl0YWxpemUoY29tcG9uZW50U2xvdCB8fCAnJyl9YDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZGlzcGxheU5hbWUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGRpc3BsYXlOYW1lID0gYFN0eWxlZCgke2dldERpc3BsYXlOYW1lKHRhZyl9KWA7XG4gICAgICAgIH1cbiAgICAgICAgQ29tcG9uZW50LmRpc3BsYXlOYW1lID0gZGlzcGxheU5hbWU7XG4gICAgICB9XG4gICAgICBpZiAodGFnLm11aU5hbWUpIHtcbiAgICAgICAgQ29tcG9uZW50Lm11aU5hbWUgPSB0YWcubXVpTmFtZTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBDb21wb25lbnQ7XG4gICAgfTtcbiAgICBpZiAoZGVmYXVsdFN0eWxlZFJlc29sdmVyLndpdGhDb25maWcpIHtcbiAgICAgIG11aVN0eWxlZFJlc29sdmVyLndpdGhDb25maWcgPSBkZWZhdWx0U3R5bGVkUmVzb2x2ZXIud2l0aENvbmZpZztcbiAgICB9XG4gICAgcmV0dXJuIG11aVN0eWxlZFJlc29sdmVyO1xuICB9O1xufSIsImltcG9ydCBjcmVhdGVTdHlsZWQgZnJvbSAnLi9jcmVhdGVTdHlsZWQnO1xuY29uc3Qgc3R5bGVkID0gY3JlYXRlU3R5bGVkKCk7XG5leHBvcnQgZGVmYXVsdCBzdHlsZWQ7IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImNsYXNzTmFtZVwiLCBcImNvbXBvbmVudFwiLCBcImRpc2FibGVHdXR0ZXJzXCIsIFwiZml4ZWRcIiwgXCJtYXhXaWR0aFwiLCBcImNsYXNzZXNcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGNsc3ggZnJvbSAnY2xzeCc7XG5pbXBvcnQgZ2VuZXJhdGVVdGlsaXR5Q2xhc3MgZnJvbSAnQG11aS91dGlscy9nZW5lcmF0ZVV0aWxpdHlDbGFzcyc7XG5pbXBvcnQgY29tcG9zZUNsYXNzZXMgZnJvbSAnQG11aS91dGlscy9jb21wb3NlQ2xhc3Nlcyc7XG5pbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IHVzZVRoZW1lUHJvcHNTeXN0ZW0gZnJvbSAnLi4vdXNlVGhlbWVQcm9wcyc7XG5pbXBvcnQgc3lzdGVtU3R5bGVkIGZyb20gJy4uL3N0eWxlZCc7XG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi4vY3JlYXRlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IGRlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5jb25zdCBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50ID0gc3lzdGVtU3R5bGVkKCdkaXYnLCB7XG4gIG5hbWU6ICdNdWlDb250YWluZXInLFxuICBzbG90OiAnUm9vdCcsXG4gIG92ZXJyaWRlc1Jlc29sdmVyOiAocHJvcHMsIHN0eWxlcykgPT4ge1xuICAgIGNvbnN0IHtcbiAgICAgIG93bmVyU3RhdGVcbiAgICB9ID0gcHJvcHM7XG4gICAgcmV0dXJuIFtzdHlsZXMucm9vdCwgc3R5bGVzW2BtYXhXaWR0aCR7Y2FwaXRhbGl6ZShTdHJpbmcob3duZXJTdGF0ZS5tYXhXaWR0aCkpfWBdLCBvd25lclN0YXRlLmZpeGVkICYmIHN0eWxlcy5maXhlZCwgb3duZXJTdGF0ZS5kaXNhYmxlR3V0dGVycyAmJiBzdHlsZXMuZGlzYWJsZUd1dHRlcnNdO1xuICB9XG59KTtcbmNvbnN0IHVzZVRoZW1lUHJvcHNEZWZhdWx0ID0gaW5Qcm9wcyA9PiB1c2VUaGVtZVByb3BzU3lzdGVtKHtcbiAgcHJvcHM6IGluUHJvcHMsXG4gIG5hbWU6ICdNdWlDb250YWluZXInLFxuICBkZWZhdWx0VGhlbWVcbn0pO1xuY29uc3QgdXNlVXRpbGl0eUNsYXNzZXMgPSAob3duZXJTdGF0ZSwgY29tcG9uZW50TmFtZSkgPT4ge1xuICBjb25zdCBnZXRDb250YWluZXJVdGlsaXR5Q2xhc3MgPSBzbG90ID0+IHtcbiAgICByZXR1cm4gZ2VuZXJhdGVVdGlsaXR5Q2xhc3MoY29tcG9uZW50TmFtZSwgc2xvdCk7XG4gIH07XG4gIGNvbnN0IHtcbiAgICBjbGFzc2VzLFxuICAgIGZpeGVkLFxuICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgIG1heFdpZHRoXG4gIH0gPSBvd25lclN0YXRlO1xuICBjb25zdCBzbG90cyA9IHtcbiAgICByb290OiBbJ3Jvb3QnLCBtYXhXaWR0aCAmJiBgbWF4V2lkdGgke2NhcGl0YWxpemUoU3RyaW5nKG1heFdpZHRoKSl9YCwgZml4ZWQgJiYgJ2ZpeGVkJywgZGlzYWJsZUd1dHRlcnMgJiYgJ2Rpc2FibGVHdXR0ZXJzJ11cbiAgfTtcbiAgcmV0dXJuIGNvbXBvc2VDbGFzc2VzKHNsb3RzLCBnZXRDb250YWluZXJVdGlsaXR5Q2xhc3MsIGNsYXNzZXMpO1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUNvbnRhaW5lcihvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIC8vIFRoaXMgd2lsbCBhbGxvdyBhZGRpbmcgY3VzdG9tIHN0eWxlZCBmbiAoZm9yIGV4YW1wbGUgZm9yIGN1c3RvbSBzeCBzdHlsZSBmdW5jdGlvbilcbiAgICBjcmVhdGVTdHlsZWRDb21wb25lbnQgPSBkZWZhdWx0Q3JlYXRlU3R5bGVkQ29tcG9uZW50LFxuICAgIHVzZVRoZW1lUHJvcHMgPSB1c2VUaGVtZVByb3BzRGVmYXVsdCxcbiAgICBjb21wb25lbnROYW1lID0gJ011aUNvbnRhaW5lcidcbiAgfSA9IG9wdGlvbnM7XG4gIGNvbnN0IENvbnRhaW5lclJvb3QgPSBjcmVhdGVTdHlsZWRDb21wb25lbnQoKHtcbiAgICB0aGVtZSxcbiAgICBvd25lclN0YXRlXG4gIH0pID0+IF9leHRlbmRzKHtcbiAgICB3aWR0aDogJzEwMCUnLFxuICAgIG1hcmdpbkxlZnQ6ICdhdXRvJyxcbiAgICBib3hTaXppbmc6ICdib3JkZXItYm94JyxcbiAgICBtYXJnaW5SaWdodDogJ2F1dG8nLFxuICAgIGRpc3BsYXk6ICdibG9jaydcbiAgfSwgIW93bmVyU3RhdGUuZGlzYWJsZUd1dHRlcnMgJiYge1xuICAgIHBhZGRpbmdMZWZ0OiB0aGVtZS5zcGFjaW5nKDIpLFxuICAgIHBhZGRpbmdSaWdodDogdGhlbWUuc3BhY2luZygyKSxcbiAgICAvLyBAdHMtaWdub3JlIG1vZHVsZSBhdWdtZW50YXRpb24gZmFpbHMgaWYgY3VzdG9tIGJyZWFrcG9pbnRzIGFyZSB1c2VkXG4gICAgW3RoZW1lLmJyZWFrcG9pbnRzLnVwKCdzbScpXToge1xuICAgICAgcGFkZGluZ0xlZnQ6IHRoZW1lLnNwYWNpbmcoMyksXG4gICAgICBwYWRkaW5nUmlnaHQ6IHRoZW1lLnNwYWNpbmcoMylcbiAgICB9XG4gIH0pLCAoe1xuICAgIHRoZW1lLFxuICAgIG93bmVyU3RhdGVcbiAgfSkgPT4gb3duZXJTdGF0ZS5maXhlZCAmJiBPYmplY3Qua2V5cyh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50VmFsdWVLZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50ID0gYnJlYWtwb2ludFZhbHVlS2V5O1xuICAgIGNvbnN0IHZhbHVlID0gdGhlbWUuYnJlYWtwb2ludHMudmFsdWVzW2JyZWFrcG9pbnRdO1xuICAgIGlmICh2YWx1ZSAhPT0gMCkge1xuICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgYWNjW3RoZW1lLmJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpXSA9IHtcbiAgICAgICAgbWF4V2lkdGg6IGAke3ZhbHVlfSR7dGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICB9O1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSksICh7XG4gICAgdGhlbWUsXG4gICAgb3duZXJTdGF0ZVxuICB9KSA9PiBfZXh0ZW5kcyh7fSwgb3duZXJTdGF0ZS5tYXhXaWR0aCA9PT0gJ3hzJyAmJiB7XG4gICAgLy8gQHRzLWlnbm9yZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZhaWxzIGlmIGN1c3RvbSBicmVha3BvaW50cyBhcmUgdXNlZFxuICAgIFt0aGVtZS5icmVha3BvaW50cy51cCgneHMnKV06IHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmYWlscyBpZiBjdXN0b20gYnJlYWtwb2ludHMgYXJlIHVzZWRcbiAgICAgIG1heFdpZHRoOiBNYXRoLm1heCh0aGVtZS5icmVha3BvaW50cy52YWx1ZXMueHMsIDQ0NClcbiAgICB9XG4gIH0sIG93bmVyU3RhdGUubWF4V2lkdGggJiZcbiAgLy8gQHRzLWlnbm9yZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZhaWxzIGlmIGN1c3RvbSBicmVha3BvaW50cyBhcmUgdXNlZFxuICBvd25lclN0YXRlLm1heFdpZHRoICE9PSAneHMnICYmIHtcbiAgICAvLyBAdHMtaWdub3JlIG1vZHVsZSBhdWdtZW50YXRpb24gZmFpbHMgaWYgY3VzdG9tIGJyZWFrcG9pbnRzIGFyZSB1c2VkXG4gICAgW3RoZW1lLmJyZWFrcG9pbnRzLnVwKG93bmVyU3RhdGUubWF4V2lkdGgpXToge1xuICAgICAgLy8gQHRzLWlnbm9yZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZhaWxzIGlmIGN1c3RvbSBicmVha3BvaW50cyBhcmUgdXNlZFxuICAgICAgbWF4V2lkdGg6IGAke3RoZW1lLmJyZWFrcG9pbnRzLnZhbHVlc1tvd25lclN0YXRlLm1heFdpZHRoXX0ke3RoZW1lLmJyZWFrcG9pbnRzLnVuaXR9YFxuICAgIH1cbiAgfSkpO1xuICBjb25zdCBDb250YWluZXIgPSAvKiNfX1BVUkVfXyovUmVhY3QuZm9yd2FyZFJlZihmdW5jdGlvbiBDb250YWluZXIoaW5Qcm9wcywgcmVmKSB7XG4gICAgY29uc3QgcHJvcHMgPSB1c2VUaGVtZVByb3BzKGluUHJvcHMpO1xuICAgIGNvbnN0IHtcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBjb21wb25lbnQgPSAnZGl2JyxcbiAgICAgICAgZGlzYWJsZUd1dHRlcnMgPSBmYWxzZSxcbiAgICAgICAgZml4ZWQgPSBmYWxzZSxcbiAgICAgICAgbWF4V2lkdGggPSAnbGcnXG4gICAgICB9ID0gcHJvcHMsXG4gICAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByb3BzLCBfZXhjbHVkZWQpO1xuICAgIGNvbnN0IG93bmVyU3RhdGUgPSBfZXh0ZW5kcyh7fSwgcHJvcHMsIHtcbiAgICAgIGNvbXBvbmVudCxcbiAgICAgIGRpc2FibGVHdXR0ZXJzLFxuICAgICAgZml4ZWQsXG4gICAgICBtYXhXaWR0aFxuICAgIH0pO1xuXG4gICAgLy8gQHRzLWlnbm9yZSBtb2R1bGUgYXVnbWVudGF0aW9uIGZhaWxzIGlmIGN1c3RvbSBicmVha3BvaW50cyBhcmUgdXNlZFxuICAgIGNvbnN0IGNsYXNzZXMgPSB1c2VVdGlsaXR5Q2xhc3Nlcyhvd25lclN0YXRlLCBjb21wb25lbnROYW1lKTtcbiAgICByZXR1cm4gKFxuICAgICAgLyojX19QVVJFX18qL1xuICAgICAgLy8gQHRzLWlnbm9yZSB0aGVtZSBpcyBpbmplY3RlZCBieSB0aGUgc3R5bGVkIHV0aWxcbiAgICAgIF9qc3goQ29udGFpbmVyUm9vdCwgX2V4dGVuZHMoe1xuICAgICAgICBhczogY29tcG9uZW50XG4gICAgICAgIC8vIEB0cy1pZ25vcmUgbW9kdWxlIGF1Z21lbnRhdGlvbiBmYWlscyBpZiBjdXN0b20gYnJlYWtwb2ludHMgYXJlIHVzZWRcbiAgICAgICAgLFxuICAgICAgICBvd25lclN0YXRlOiBvd25lclN0YXRlLFxuICAgICAgICBjbGFzc05hbWU6IGNsc3goY2xhc3Nlcy5yb290LCBjbGFzc05hbWUpLFxuICAgICAgICByZWY6IHJlZlxuICAgICAgfSwgb3RoZXIpKVxuICAgICk7XG4gIH0pO1xuICBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBDb250YWluZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gICAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAgIGNsYXNzZXM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgY2xhc3NOYW1lOiBQcm9wVHlwZXMuc3RyaW5nLFxuICAgIGNvbXBvbmVudDogUHJvcFR5cGVzLmVsZW1lbnRUeXBlLFxuICAgIGRpc2FibGVHdXR0ZXJzOiBQcm9wVHlwZXMuYm9vbCxcbiAgICBmaXhlZDogUHJvcFR5cGVzLmJvb2wsXG4gICAgbWF4V2lkdGg6IFByb3BUeXBlcyAvKiBAdHlwZXNjcmlwdC10by1wcm9wdHlwZXMtaWdub3JlICovLm9uZU9mVHlwZShbUHJvcFR5cGVzLm9uZU9mKFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCBmYWxzZV0pLCBQcm9wVHlwZXMuc3RyaW5nXSksXG4gICAgc3g6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5hcnJheU9mKFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuYm9vbF0pKSwgUHJvcFR5cGVzLmZ1bmMsIFByb3BUeXBlcy5vYmplY3RdKVxuICB9IDogdm9pZCAwO1xuICByZXR1cm4gQ29udGFpbmVyO1xufSIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0IGdldFRoZW1lUHJvcHMgZnJvbSAnLi9nZXRUaGVtZVByb3BzJztcbmltcG9ydCB1c2VUaGVtZSBmcm9tICcuLi91c2VUaGVtZSc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUaGVtZVByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWUsXG4gIGRlZmF1bHRUaGVtZSxcbiAgdGhlbWVJZFxufSkge1xuICBsZXQgdGhlbWUgPSB1c2VUaGVtZShkZWZhdWx0VGhlbWUpO1xuICBpZiAodGhlbWVJZCkge1xuICAgIHRoZW1lID0gdGhlbWVbdGhlbWVJZF0gfHwgdGhlbWU7XG4gIH1cbiAgY29uc3QgbWVyZ2VkUHJvcHMgPSBnZXRUaGVtZVByb3BzKHtcbiAgICB0aGVtZSxcbiAgICBuYW1lLFxuICAgIHByb3BzXG4gIH0pO1xuICByZXR1cm4gbWVyZ2VkUHJvcHM7XG59IiwiaW1wb3J0IHJlc29sdmVQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVQcm9wcyc7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUaGVtZVByb3BzKHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIXRoZW1lIHx8ICF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdLmRlZmF1bHRQcm9wcykge1xuICAgIHJldHVybiBwcm9wcztcbiAgfVxuICByZXR1cm4gcmVzb2x2ZVByb3BzKHRoZW1lLmNvbXBvbmVudHNbbmFtZV0uZGVmYXVsdFByb3BzLCBwcm9wcyk7XG59IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHJlc29sdmVQcm9wcyBmcm9tICdAbXVpL3V0aWxzL3Jlc29sdmVQcm9wcyc7XG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuY29uc3QgUHJvcHNDb250ZXh0ID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUNvbnRleHQodW5kZWZpbmVkKTtcbmZ1bmN0aW9uIERlZmF1bHRQcm9wc1Byb3ZpZGVyKHtcbiAgdmFsdWUsXG4gIGNoaWxkcmVuXG59KSB7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChQcm9wc0NvbnRleHQuUHJvdmlkZXIsIHtcbiAgICB2YWx1ZTogdmFsdWUsXG4gICAgY2hpbGRyZW46IGNoaWxkcmVuXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gRGVmYXVsdFByb3BzUHJvdmlkZXIucHJvcFR5cGVzIC8qIHJlbW92ZS1wcm9wdHlwZXMgKi8gPSB7XG4gIC8vIOKUjOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCBXYXJuaW5nIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUkFxuICAvLyDilIIgVGhlc2UgUHJvcFR5cGVzIGFyZSBnZW5lcmF0ZWQgZnJvbSB0aGUgVHlwZVNjcmlwdCB0eXBlIGRlZmluaXRpb25zLiDilIJcbiAgLy8g4pSCIFRvIHVwZGF0ZSB0aGVtLCBlZGl0IHRoZSBUeXBlU2NyaXB0IHR5cGVzIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4g4pSCXG4gIC8vIOKUlOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUmFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdmFsdWU6IFByb3BUeXBlcy5vYmplY3Rcbn0gOiB2b2lkIDA7XG5mdW5jdGlvbiBnZXRUaGVtZVByb3BzKHBhcmFtcykge1xuICBjb25zdCB7XG4gICAgdGhlbWUsXG4gICAgbmFtZSxcbiAgICBwcm9wc1xuICB9ID0gcGFyYW1zO1xuICBpZiAoIXRoZW1lIHx8ICF0aGVtZS5jb21wb25lbnRzIHx8ICF0aGVtZS5jb21wb25lbnRzW25hbWVdKSB7XG4gICAgcmV0dXJuIHByb3BzO1xuICB9XG4gIGNvbnN0IGNvbmZpZyA9IHRoZW1lLmNvbXBvbmVudHNbbmFtZV07XG4gIGlmIChjb25maWcuZGVmYXVsdFByb3BzKSB7XG4gICAgLy8gY29tcGF0aWJsZSB3aXRoIHY1IHNpZ25hdHVyZVxuICAgIHJldHVybiByZXNvbHZlUHJvcHMoY29uZmlnLmRlZmF1bHRQcm9wcywgcHJvcHMpO1xuICB9XG4gIGlmICghY29uZmlnLnN0eWxlT3ZlcnJpZGVzICYmICFjb25maWcudmFyaWFudHMpIHtcbiAgICAvLyB2NiBzaWduYXR1cmUsIG5vIHByb3BlcnR5ICdkZWZhdWx0UHJvcHMnXG4gICAgcmV0dXJuIHJlc29sdmVQcm9wcyhjb25maWcsIHByb3BzKTtcbiAgfVxuICByZXR1cm4gcHJvcHM7XG59XG5leHBvcnQgZnVuY3Rpb24gdXNlRGVmYXVsdFByb3BzKHtcbiAgcHJvcHMsXG4gIG5hbWVcbn0pIHtcbiAgY29uc3QgY3R4ID0gUmVhY3QudXNlQ29udGV4dChQcm9wc0NvbnRleHQpO1xuICByZXR1cm4gZ2V0VGhlbWVQcm9wcyh7XG4gICAgcHJvcHMsXG4gICAgbmFtZSxcbiAgICB0aGVtZToge1xuICAgICAgY29tcG9uZW50czogY3R4XG4gICAgfVxuICB9KTtcbn1cbmV4cG9ydCBkZWZhdWx0IERlZmF1bHRQcm9wc1Byb3ZpZGVyOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEdsb2JhbFN0eWxlcyBhcyBNdWlHbG9iYWxTdHlsZXMgfSBmcm9tICdAbXVpL3N0eWxlZC1lbmdpbmUnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4uL3VzZVRoZW1lJztcbmltcG9ydCB7IGpzeCBhcyBfanN4IH0gZnJvbSBcInJlYWN0L2pzeC1ydW50aW1lXCI7XG5mdW5jdGlvbiBHbG9iYWxTdHlsZXMoe1xuICBzdHlsZXMsXG4gIHRoZW1lSWQsXG4gIGRlZmF1bHRUaGVtZSA9IHt9XG59KSB7XG4gIGNvbnN0IHVwcGVyVGhlbWUgPSB1c2VUaGVtZShkZWZhdWx0VGhlbWUpO1xuICBjb25zdCBnbG9iYWxTdHlsZXMgPSB0eXBlb2Ygc3R5bGVzID09PSAnZnVuY3Rpb24nID8gc3R5bGVzKHRoZW1lSWQgPyB1cHBlclRoZW1lW3RoZW1lSWRdIHx8IHVwcGVyVGhlbWUgOiB1cHBlclRoZW1lKSA6IHN0eWxlcztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE11aUdsb2JhbFN0eWxlcywge1xuICAgIHN0eWxlczogZ2xvYmFsU3R5bGVzXG4gIH0pO1xufVxucHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8gR2xvYmFsU3R5bGVzLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgVHlwZVNjcmlwdCB0eXBlcyBhbmQgcnVuIGBwbnBtIHByb3B0eXBlc2AuIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIGRlZmF1bHRUaGVtZTogUHJvcFR5cGVzLm9iamVjdCxcbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHN0eWxlczogUHJvcFR5cGVzIC8qIEB0eXBlc2NyaXB0LXRvLXByb3B0eXBlcy1pZ25vcmUgKi8ub25lT2ZUeXBlKFtQcm9wVHlwZXMuYXJyYXksIFByb3BUeXBlcy5mdW5jLCBQcm9wVHlwZXMubnVtYmVyLCBQcm9wVHlwZXMub2JqZWN0LCBQcm9wVHlwZXMuc3RyaW5nLCBQcm9wVHlwZXMuYm9vbF0pLFxuICAvKipcbiAgICogQGlnbm9yZVxuICAgKi9cbiAgdGhlbWVJZDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmV4cG9ydCBkZWZhdWx0IEdsb2JhbFN0eWxlczsiLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuY29uc3QgX2V4Y2x1ZGVkID0gW1widmFsdWVcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IFJ0bENvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dCgpO1xuZnVuY3Rpb24gUnRsUHJvdmlkZXIoX3JlZikge1xuICBsZXQge1xuICAgICAgdmFsdWVcbiAgICB9ID0gX3JlZixcbiAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF9yZWYsIF9leGNsdWRlZCk7XG4gIHJldHVybiAvKiNfX1BVUkVfXyovX2pzeChSdGxDb250ZXh0LlByb3ZpZGVyLCBfZXh0ZW5kcyh7XG4gICAgdmFsdWU6IHZhbHVlICE9IG51bGwgPyB2YWx1ZSA6IHRydWVcbiAgfSwgcHJvcHMpKTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFJ0bFByb3ZpZGVyLnByb3BUeXBlcyA9IHtcbiAgY2hpbGRyZW46IFByb3BUeXBlcy5ub2RlLFxuICB2YWx1ZTogUHJvcFR5cGVzLmJvb2xcbn0gOiB2b2lkIDA7XG5leHBvcnQgY29uc3QgdXNlUnRsID0gKCkgPT4ge1xuICBjb25zdCB2YWx1ZSA9IFJlYWN0LnVzZUNvbnRleHQoUnRsQ29udGV4dCk7XG4gIHJldHVybiB2YWx1ZSAhPSBudWxsID8gdmFsdWUgOiBmYWxzZTtcbn07XG5leHBvcnQgZGVmYXVsdCBSdGxQcm92aWRlcjsiLCJpbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5jb25zdCBUaGVtZUNvbnRleHQgPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlQ29udGV4dChudWxsKTtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIFRoZW1lQ29udGV4dC5kaXNwbGF5TmFtZSA9ICdUaGVtZUNvbnRleHQnO1xufVxuZXhwb3J0IGRlZmF1bHQgVGhlbWVDb250ZXh0OyIsImltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUaGVtZUNvbnRleHQgZnJvbSAnLi9UaGVtZUNvbnRleHQnO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVGhlbWUoKSB7XG4gIGNvbnN0IHRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9ydWxlcy1vZi1ob29rc1xuICAgIFJlYWN0LnVzZURlYnVnVmFsdWUodGhlbWUpO1xuICB9XG4gIHJldHVybiB0aGVtZTtcbn0iLCJjb25zdCBoYXNTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSAnZnVuY3Rpb24nICYmIFN5bWJvbC5mb3I7XG5leHBvcnQgZGVmYXVsdCBoYXNTeW1ib2wgPyBTeW1ib2wuZm9yKCdtdWkubmVzdGVkJykgOiAnX19USEVNRV9ORVNURURfXyc7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IHsgZXhhY3RQcm9wIH0gZnJvbSAnQG11aS91dGlscyc7XG5pbXBvcnQgVGhlbWVDb250ZXh0IGZyb20gJy4uL3VzZVRoZW1lL1RoZW1lQ29udGV4dCc7XG5pbXBvcnQgdXNlVGhlbWUgZnJvbSAnLi4vdXNlVGhlbWUnO1xuaW1wb3J0IG5lc3RlZCBmcm9tICcuL25lc3RlZCc7XG5cbi8vIFRvIHN1cHBvcnQgY29tcG9zaXRpb24gb2YgdGhlbWUuXG5pbXBvcnQgeyBqc3ggYXMgX2pzeCB9IGZyb20gXCJyZWFjdC9qc3gtcnVudGltZVwiO1xuZnVuY3Rpb24gbWVyZ2VPdXRlckxvY2FsVGhlbWUob3V0ZXJUaGVtZSwgbG9jYWxUaGVtZSkge1xuICBpZiAodHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCBtZXJnZWRUaGVtZSA9IGxvY2FsVGhlbWUob3V0ZXJUaGVtZSk7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICghbWVyZ2VkVGhlbWUpIHtcbiAgICAgICAgY29uc29sZS5lcnJvcihbJ01VSTogWW91IHNob3VsZCByZXR1cm4gYW4gb2JqZWN0IGZyb20geW91ciB0aGVtZSBmdW5jdGlvbiwgaS5lLicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17KCkgPT4gKHt9KX0gLz4nXS5qb2luKCdcXG4nKSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtZXJnZWRUaGVtZTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xufVxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IHRha2VzIGEgYHRoZW1lYCBwcm9wLlxuICogSXQgbWFrZXMgdGhlIGB0aGVtZWAgYXZhaWxhYmxlIGRvd24gdGhlIFJlYWN0IHRyZWUgdGhhbmtzIHRvIFJlYWN0IGNvbnRleHQuXG4gKiBUaGlzIGNvbXBvbmVudCBzaG91bGQgcHJlZmVyYWJseSBiZSB1c2VkIGF0ICoqdGhlIHJvb3Qgb2YgeW91ciBjb21wb25lbnQgdHJlZSoqLlxuICovXG5mdW5jdGlvbiBUaGVtZVByb3ZpZGVyKHByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBjaGlsZHJlbixcbiAgICB0aGVtZTogbG9jYWxUaGVtZVxuICB9ID0gcHJvcHM7XG4gIGNvbnN0IG91dGVyVGhlbWUgPSB1c2VUaGVtZSgpO1xuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChvdXRlclRoZW1lID09PSBudWxsICYmIHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgYXJlIHByb3ZpZGluZyBhIHRoZW1lIGZ1bmN0aW9uIHByb3AgdG8gdGhlIFRoZW1lUHJvdmlkZXIgY29tcG9uZW50OicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17b3V0ZXJUaGVtZSA9PiBvdXRlclRoZW1lfSAvPicsICcnLCAnSG93ZXZlciwgbm8gb3V0ZXIgdGhlbWUgaXMgcHJlc2VudC4nLCAnTWFrZSBzdXJlIGEgdGhlbWUgaXMgYWxyZWFkeSBpbmplY3RlZCBoaWdoZXIgaW4gdGhlIFJlYWN0IHRyZWUgJyArICdvciBwcm92aWRlIGEgdGhlbWUgb2JqZWN0LiddLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgdGhlbWUgPSBSZWFjdC51c2VNZW1vKCgpID0+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBvdXRlclRoZW1lID09PSBudWxsID8gbG9jYWxUaGVtZSA6IG1lcmdlT3V0ZXJMb2NhbFRoZW1lKG91dGVyVGhlbWUsIGxvY2FsVGhlbWUpO1xuICAgIGlmIChvdXRwdXQgIT0gbnVsbCkge1xuICAgICAgb3V0cHV0W25lc3RlZF0gPSBvdXRlclRoZW1lICE9PSBudWxsO1xuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9LCBbbG9jYWxUaGVtZSwgb3V0ZXJUaGVtZV0pO1xuICByZXR1cm4gLyojX19QVVJFX18qL19qc3goVGhlbWVDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgdmFsdWU6IHRoZW1lLFxuICAgIGNoaWxkcmVuOiBjaGlsZHJlblxuICB9KTtcbn1cbnByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0ge1xuICAvKipcbiAgICogWW91ciBjb21wb25lbnQgdHJlZS5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcbiAgLyoqXG4gICAqIEEgdGhlbWUgb2JqZWN0LiBZb3UgY2FuIHByb3ZpZGUgYSBmdW5jdGlvbiB0byBleHRlbmQgdGhlIG91dGVyIHRoZW1lLlxuICAgKi9cbiAgdGhlbWU6IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5vYmplY3QsIFByb3BUeXBlcy5mdW5jXSkuaXNSZXF1aXJlZFxufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0gZXhhY3RQcm9wKFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzKSA6IHZvaWQgMDtcbn1cbmV4cG9ydCBkZWZhdWx0IFRoZW1lUHJvdmlkZXI7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgeyBUaGVtZVByb3ZpZGVyIGFzIE11aVRoZW1lUHJvdmlkZXIsIHVzZVRoZW1lIGFzIHVzZVByaXZhdGVUaGVtZSB9IGZyb20gJ0BtdWkvcHJpdmF0ZS10aGVtaW5nJztcbmltcG9ydCBleGFjdFByb3AgZnJvbSAnQG11aS91dGlscy9leGFjdFByb3AnO1xuaW1wb3J0IHsgVGhlbWVDb250ZXh0IGFzIFN0eWxlZEVuZ2luZVRoZW1lQ29udGV4dCB9IGZyb20gJ0BtdWkvc3R5bGVkLWVuZ2luZSc7XG5pbXBvcnQgdXNlVGhlbWVXaXRob3V0RGVmYXVsdCBmcm9tICcuLi91c2VUaGVtZVdpdGhvdXREZWZhdWx0JztcbmltcG9ydCBSdGxQcm92aWRlciBmcm9tICcuLi9SdGxQcm92aWRlcic7XG5pbXBvcnQgRGVmYXVsdFByb3BzUHJvdmlkZXIgZnJvbSAnLi4vRGVmYXVsdFByb3BzUHJvdmlkZXInO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmNvbnN0IEVNUFRZX1RIRU1FID0ge307XG5mdW5jdGlvbiB1c2VUaGVtZVNjb3BpbmcodGhlbWVJZCwgdXBwZXJUaGVtZSwgbG9jYWxUaGVtZSwgaXNQcml2YXRlID0gZmFsc2UpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZU1lbW8oKCkgPT4ge1xuICAgIGNvbnN0IHJlc29sdmVkVGhlbWUgPSB0aGVtZUlkID8gdXBwZXJUaGVtZVt0aGVtZUlkXSB8fCB1cHBlclRoZW1lIDogdXBwZXJUaGVtZTtcbiAgICBpZiAodHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbnN0IG1lcmdlZFRoZW1lID0gbG9jYWxUaGVtZShyZXNvbHZlZFRoZW1lKTtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoZW1lSWQgPyBfZXh0ZW5kcyh7fSwgdXBwZXJUaGVtZSwge1xuICAgICAgICBbdGhlbWVJZF06IG1lcmdlZFRoZW1lXG4gICAgICB9KSA6IG1lcmdlZFRoZW1lO1xuICAgICAgLy8gbXVzdCByZXR1cm4gYSBmdW5jdGlvbiBmb3IgdGhlIHByaXZhdGUgdGhlbWUgdG8gTk9UIG1lcmdlIHdpdGggdGhlIHVwcGVyIHRoZW1lLlxuICAgICAgLy8gc2VlIHRoZSB0ZXN0IGNhc2UgXCJ1c2UgcHJvdmlkZWQgdGhlbWUgZnJvbSBhIGNhbGxiYWNrXCIgaW4gVGhlbWVQcm92aWRlci50ZXN0LmpzXG4gICAgICBpZiAoaXNQcml2YXRlKSB7XG4gICAgICAgIHJldHVybiAoKSA9PiByZXN1bHQ7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gdGhlbWVJZCA/IF9leHRlbmRzKHt9LCB1cHBlclRoZW1lLCB7XG4gICAgICBbdGhlbWVJZF06IGxvY2FsVGhlbWVcbiAgICB9KSA6IF9leHRlbmRzKHt9LCB1cHBlclRoZW1lLCBsb2NhbFRoZW1lKTtcbiAgfSwgW3RoZW1lSWQsIHVwcGVyVGhlbWUsIGxvY2FsVGhlbWUsIGlzUHJpdmF0ZV0pO1xufVxuXG4vKipcbiAqIFRoaXMgY29tcG9uZW50IG1ha2VzIHRoZSBgdGhlbWVgIGF2YWlsYWJsZSBkb3duIHRoZSBSZWFjdCB0cmVlLlxuICogSXQgc2hvdWxkIHByZWZlcmFibHkgYmUgdXNlZCBhdCAqKnRoZSByb290IG9mIHlvdXIgY29tcG9uZW50IHRyZWUqKi5cbiAqXG4gKiA8VGhlbWVQcm92aWRlciB0aGVtZT17dGhlbWV9PiAvLyBleGlzdGluZyB1c2UgY2FzZVxuICogPFRoZW1lUHJvdmlkZXIgdGhlbWU9e3sgaWQ6IHRoZW1lIH19PiAvLyB0aGVtZSBzY29waW5nXG4gKi9cbmZ1bmN0aW9uIFRoZW1lUHJvdmlkZXIocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIGNoaWxkcmVuLFxuICAgIHRoZW1lOiBsb2NhbFRoZW1lLFxuICAgIHRoZW1lSWRcbiAgfSA9IHByb3BzO1xuICBjb25zdCB1cHBlclRoZW1lID0gdXNlVGhlbWVXaXRob3V0RGVmYXVsdChFTVBUWV9USEVNRSk7XG4gIGNvbnN0IHVwcGVyUHJpdmF0ZVRoZW1lID0gdXNlUHJpdmF0ZVRoZW1lKCkgfHwgRU1QVFlfVEhFTUU7XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHVwcGVyVGhlbWUgPT09IG51bGwgJiYgdHlwZW9mIGxvY2FsVGhlbWUgPT09ICdmdW5jdGlvbicgfHwgdGhlbWVJZCAmJiB1cHBlclRoZW1lICYmICF1cHBlclRoZW1lW3RoZW1lSWRdICYmIHR5cGVvZiBsb2NhbFRoZW1lID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnTVVJOiBZb3UgYXJlIHByb3ZpZGluZyBhIHRoZW1lIGZ1bmN0aW9uIHByb3AgdG8gdGhlIFRoZW1lUHJvdmlkZXIgY29tcG9uZW50OicsICc8VGhlbWVQcm92aWRlciB0aGVtZT17b3V0ZXJUaGVtZSA9PiBvdXRlclRoZW1lfSAvPicsICcnLCAnSG93ZXZlciwgbm8gb3V0ZXIgdGhlbWUgaXMgcHJlc2VudC4nLCAnTWFrZSBzdXJlIGEgdGhlbWUgaXMgYWxyZWFkeSBpbmplY3RlZCBoaWdoZXIgaW4gdGhlIFJlYWN0IHRyZWUgJyArICdvciBwcm92aWRlIGEgdGhlbWUgb2JqZWN0LiddLmpvaW4oJ1xcbicpKTtcbiAgICB9XG4gIH1cbiAgY29uc3QgZW5naW5lVGhlbWUgPSB1c2VUaGVtZVNjb3BpbmcodGhlbWVJZCwgdXBwZXJUaGVtZSwgbG9jYWxUaGVtZSk7XG4gIGNvbnN0IHByaXZhdGVUaGVtZSA9IHVzZVRoZW1lU2NvcGluZyh0aGVtZUlkLCB1cHBlclByaXZhdGVUaGVtZSwgbG9jYWxUaGVtZSwgdHJ1ZSk7XG4gIGNvbnN0IHJ0bFZhbHVlID0gZW5naW5lVGhlbWUuZGlyZWN0aW9uID09PSAncnRsJztcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9fanN4KE11aVRoZW1lUHJvdmlkZXIsIHtcbiAgICB0aGVtZTogcHJpdmF0ZVRoZW1lLFxuICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChTdHlsZWRFbmdpbmVUaGVtZUNvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiBlbmdpbmVUaGVtZSxcbiAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChSdGxQcm92aWRlciwge1xuICAgICAgICB2YWx1ZTogcnRsVmFsdWUsXG4gICAgICAgIGNoaWxkcmVuOiAvKiNfX1BVUkVfXyovX2pzeChEZWZhdWx0UHJvcHNQcm92aWRlciwge1xuICAgICAgICAgIHZhbHVlOiBlbmdpbmVUaGVtZSA9PSBudWxsID8gdm9pZCAwIDogZW5naW5lVGhlbWUuY29tcG9uZW50cyxcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfSk7XG59XG5wcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBUaGVtZVByb3ZpZGVyLnByb3BUeXBlcyAvKiByZW1vdmUtcHJvcHR5cGVzICovID0ge1xuICAvLyDilIzilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgV2FybmluZyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJBcbiAgLy8g4pSCIFRoZXNlIFByb3BUeXBlcyBhcmUgZ2VuZXJhdGVkIGZyb20gdGhlIFR5cGVTY3JpcHQgdHlwZSBkZWZpbml0aW9ucy4g4pSCXG4gIC8vIOKUgiAgICBUbyB1cGRhdGUgdGhlbSwgZWRpdCB0aGUgZC50cyBmaWxlIGFuZCBydW4gYHBucG0gcHJvcHR5cGVzYC4gICAgIOKUglxuICAvLyDilJTilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilJhcbiAgLyoqXG4gICAqIFlvdXIgY29tcG9uZW50IHRyZWUuXG4gICAqL1xuICBjaGlsZHJlbjogUHJvcFR5cGVzLm5vZGUsXG4gIC8qKlxuICAgKiBBIHRoZW1lIG9iamVjdC4gWW91IGNhbiBwcm92aWRlIGEgZnVuY3Rpb24gdG8gZXh0ZW5kIHRoZSBvdXRlciB0aGVtZS5cbiAgICovXG4gIHRoZW1lOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZnVuYywgUHJvcFR5cGVzLm9iamVjdF0pLmlzUmVxdWlyZWQsXG4gIC8qKlxuICAgKiBUaGUgZGVzaWduIHN5c3RlbSdzIHVuaXF1ZSBpZCBmb3IgZ2V0dGluZyB0aGUgY29ycmVzcG9uZGVkIHRoZW1lIHdoZW4gdGhlcmUgYXJlIG11bHRpcGxlIGRlc2lnbiBzeXN0ZW1zLlxuICAgKi9cbiAgdGhlbWVJZDogUHJvcFR5cGVzLnN0cmluZ1xufSA6IHZvaWQgMDtcbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzID0gZXhhY3RQcm9wKFRoZW1lUHJvdmlkZXIucHJvcFR5cGVzKSA6IHZvaWQgMDtcbn1cbmV4cG9ydCBkZWZhdWx0IFRoZW1lUHJvdmlkZXI7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IGRlZXBtZXJnZSBmcm9tICdAbXVpL3V0aWxzL2RlZXBtZXJnZSc7XG5pbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5cbi8vIFRoZSBicmVha3BvaW50ICoqc3RhcnQqKiBhdCB0aGlzIHZhbHVlLlxuLy8gRm9yIGluc3RhbmNlIHdpdGggdGhlIGZpcnN0IGJyZWFrcG9pbnQgeHM6IFt4cywgc21bLlxuZXhwb3J0IGNvbnN0IHZhbHVlcyA9IHtcbiAgeHM6IDAsXG4gIC8vIHBob25lXG4gIHNtOiA2MDAsXG4gIC8vIHRhYmxldFxuICBtZDogOTAwLFxuICAvLyBzbWFsbCBsYXB0b3BcbiAgbGc6IDEyMDAsXG4gIC8vIGRlc2t0b3BcbiAgeGw6IDE1MzYgLy8gbGFyZ2Ugc2NyZWVuXG59O1xuY29uc3QgZGVmYXVsdEJyZWFrcG9pbnRzID0ge1xuICAvLyBTb3J0ZWQgQVNDIGJ5IHNpemUuIFRoYXQncyBpbXBvcnRhbnQuXG4gIC8vIEl0IGNhbid0IGJlIGNvbmZpZ3VyZWQgYXMgaXQncyB1c2VkIHN0YXRpY2FsbHkgZm9yIHByb3BUeXBlcy5cbiAga2V5czogWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddLFxuICB1cDoga2V5ID0+IGBAbWVkaWEgKG1pbi13aWR0aDoke3ZhbHVlc1trZXldfXB4KWBcbn07XG5leHBvcnQgZnVuY3Rpb24gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKSB7XG4gIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gIGlmIChBcnJheS5pc0FycmF5KHByb3BWYWx1ZSkpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBwcm9wVmFsdWUucmVkdWNlKChhY2MsIGl0ZW0sIGluZGV4KSA9PiB7XG4gICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cCh0aGVtZUJyZWFrcG9pbnRzLmtleXNbaW5kZXhdKV0gPSBzdHlsZUZyb21Qcm9wVmFsdWUocHJvcFZhbHVlW2luZGV4XSk7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH0sIHt9KTtcbiAgfVxuICBpZiAodHlwZW9mIHByb3BWYWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICBjb25zdCB0aGVtZUJyZWFrcG9pbnRzID0gdGhlbWUuYnJlYWtwb2ludHMgfHwgZGVmYXVsdEJyZWFrcG9pbnRzO1xuICAgIHJldHVybiBPYmplY3Qua2V5cyhwcm9wVmFsdWUpLnJlZHVjZSgoYWNjLCBicmVha3BvaW50KSA9PiB7XG4gICAgICAvLyBrZXkgaXMgYnJlYWtwb2ludFxuICAgICAgaWYgKE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMudmFsdWVzIHx8IHZhbHVlcykuaW5kZXhPZihicmVha3BvaW50KSAhPT0gLTEpIHtcbiAgICAgICAgY29uc3QgbWVkaWFLZXkgPSB0aGVtZUJyZWFrcG9pbnRzLnVwKGJyZWFrcG9pbnQpO1xuICAgICAgICBhY2NbbWVkaWFLZXldID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZVticmVha3BvaW50XSwgYnJlYWtwb2ludCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBjc3NLZXkgPSBicmVha3BvaW50O1xuICAgICAgICBhY2NbY3NzS2V5XSA9IHByb3BWYWx1ZVtjc3NLZXldO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGFjYztcbiAgICB9LCB7fSk7XG4gIH1cbiAgY29uc3Qgb3V0cHV0ID0gc3R5bGVGcm9tUHJvcFZhbHVlKHByb3BWYWx1ZSk7XG4gIHJldHVybiBvdXRwdXQ7XG59XG5mdW5jdGlvbiBicmVha3BvaW50cyhzdHlsZUZ1bmN0aW9uKSB7XG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBuZXdTdHlsZUZ1bmN0aW9uID0gcHJvcHMgPT4ge1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWUgfHwge307XG4gICAgY29uc3QgYmFzZSA9IHN0eWxlRnVuY3Rpb24ocHJvcHMpO1xuICAgIGNvbnN0IHRoZW1lQnJlYWtwb2ludHMgPSB0aGVtZS5icmVha3BvaW50cyB8fCBkZWZhdWx0QnJlYWtwb2ludHM7XG4gICAgY29uc3QgZXh0ZW5kZWQgPSB0aGVtZUJyZWFrcG9pbnRzLmtleXMucmVkdWNlKChhY2MsIGtleSkgPT4ge1xuICAgICAgaWYgKHByb3BzW2tleV0pIHtcbiAgICAgICAgYWNjID0gYWNjIHx8IHt9O1xuICAgICAgICBhY2NbdGhlbWVCcmVha3BvaW50cy51cChrZXkpXSA9IHN0eWxlRnVuY3Rpb24oX2V4dGVuZHMoe1xuICAgICAgICAgIHRoZW1lXG4gICAgICAgIH0sIHByb3BzW2tleV0pKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwgbnVsbCk7XG4gICAgcmV0dXJuIG1lcmdlKGJhc2UsIGV4dGVuZGVkKTtcbiAgfTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gX2V4dGVuZHMoe30sIHN0eWxlRnVuY3Rpb24ucHJvcFR5cGVzLCB7XG4gICAgeHM6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgc206IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbWQ6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgbGc6IFByb3BUeXBlcy5vYmplY3QsXG4gICAgeGw6IFByb3BUeXBlcy5vYmplY3RcbiAgfSkgOiB7fTtcbiAgbmV3U3R5bGVGdW5jdGlvbi5maWx0ZXJQcm9wcyA9IFsneHMnLCAnc20nLCAnbWQnLCAnbGcnLCAneGwnLCAuLi5zdHlsZUZ1bmN0aW9uLmZpbHRlclByb3BzXTtcbiAgcmV0dXJuIG5ld1N0eWxlRnVuY3Rpb247XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0KGJyZWFrcG9pbnRzSW5wdXQgPSB7fSkge1xuICB2YXIgX2JyZWFrcG9pbnRzSW5wdXQka2V5O1xuICBjb25zdCBicmVha3BvaW50c0luT3JkZXIgPSAoX2JyZWFrcG9pbnRzSW5wdXQka2V5ID0gYnJlYWtwb2ludHNJbnB1dC5rZXlzKSA9PSBudWxsID8gdm9pZCAwIDogX2JyZWFrcG9pbnRzSW5wdXQka2V5LnJlZHVjZSgoYWNjLCBrZXkpID0+IHtcbiAgICBjb25zdCBicmVha3BvaW50U3R5bGVLZXkgPSBicmVha3BvaW50c0lucHV0LnVwKGtleSk7XG4gICAgYWNjW2JyZWFrcG9pbnRTdHlsZUtleV0gPSB7fTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBicmVha3BvaW50c0luT3JkZXIgfHwge307XG59XG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVW51c2VkQnJlYWtwb2ludHMoYnJlYWtwb2ludEtleXMsIHN0eWxlKSB7XG4gIHJldHVybiBicmVha3BvaW50S2V5cy5yZWR1Y2UoKGFjYywga2V5KSA9PiB7XG4gICAgY29uc3QgYnJlYWtwb2ludE91dHB1dCA9IGFjY1trZXldO1xuICAgIGNvbnN0IGlzQnJlYWtwb2ludFVudXNlZCA9ICFicmVha3BvaW50T3V0cHV0IHx8IE9iamVjdC5rZXlzKGJyZWFrcG9pbnRPdXRwdXQpLmxlbmd0aCA9PT0gMDtcbiAgICBpZiAoaXNCcmVha3BvaW50VW51c2VkKSB7XG4gICAgICBkZWxldGUgYWNjW2tleV07XG4gICAgfVxuICAgIHJldHVybiBhY2M7XG4gIH0sIHN0eWxlKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUJyZWFrcG9pbnRzSW5PcmRlcihicmVha3BvaW50c0lucHV0LCAuLi5zdHlsZXMpIHtcbiAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdChicmVha3BvaW50c0lucHV0KTtcbiAgY29uc3QgbWVyZ2VkT3V0cHV0ID0gW2VtcHR5QnJlYWtwb2ludHMsIC4uLnN0eWxlc10ucmVkdWNlKChwcmV2LCBuZXh0KSA9PiBkZWVwbWVyZ2UocHJldiwgbmV4dCksIHt9KTtcbiAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKE9iamVjdC5rZXlzKGVtcHR5QnJlYWtwb2ludHMpLCBtZXJnZWRPdXRwdXQpO1xufVxuXG4vLyBjb21wdXRlIGJhc2UgZm9yIHJlc3BvbnNpdmUgdmFsdWVzOyBlLmcuLFxuLy8gWzEsMiwzXSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbi8vIHt4czogMSwgc206IDIsIG1kOiAzfSA9PiB7eHM6IHRydWUsIHNtOiB0cnVlLCBtZDogdHJ1ZX1cbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlQnJlYWtwb2ludHNCYXNlKGJyZWFrcG9pbnRWYWx1ZXMsIHRoZW1lQnJlYWtwb2ludHMpIHtcbiAgLy8gZml4ZWQgdmFsdWVcbiAgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiB7fTtcbiAgfVxuICBjb25zdCBiYXNlID0ge307XG4gIGNvbnN0IGJyZWFrcG9pbnRzS2V5cyA9IE9iamVjdC5rZXlzKHRoZW1lQnJlYWtwb2ludHMpO1xuICBpZiAoQXJyYXkuaXNBcnJheShicmVha3BvaW50VmFsdWVzKSkge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKChicmVha3BvaW50LCBpKSA9PiB7XG4gICAgICBpZiAoaSA8IGJyZWFrcG9pbnRWYWx1ZXMubGVuZ3RoKSB7XG4gICAgICAgIGJhc2VbYnJlYWtwb2ludF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH0pO1xuICB9IGVsc2Uge1xuICAgIGJyZWFrcG9pbnRzS2V5cy5mb3JFYWNoKGJyZWFrcG9pbnQgPT4ge1xuICAgICAgaWYgKGJyZWFrcG9pbnRWYWx1ZXNbYnJlYWtwb2ludF0gIT0gbnVsbCkge1xuICAgICAgICBiYXNlW2JyZWFrcG9pbnRdID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuICByZXR1cm4gYmFzZTtcbn1cbmV4cG9ydCBmdW5jdGlvbiByZXNvbHZlQnJlYWtwb2ludFZhbHVlcyh7XG4gIHZhbHVlczogYnJlYWtwb2ludFZhbHVlcyxcbiAgYnJlYWtwb2ludHM6IHRoZW1lQnJlYWtwb2ludHMsXG4gIGJhc2U6IGN1c3RvbUJhc2Vcbn0pIHtcbiAgY29uc3QgYmFzZSA9IGN1c3RvbUJhc2UgfHwgY29tcHV0ZUJyZWFrcG9pbnRzQmFzZShicmVha3BvaW50VmFsdWVzLCB0aGVtZUJyZWFrcG9pbnRzKTtcbiAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGJhc2UpO1xuICBpZiAoa2V5cy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gYnJlYWtwb2ludFZhbHVlcztcbiAgfVxuICBsZXQgcHJldmlvdXM7XG4gIHJldHVybiBrZXlzLnJlZHVjZSgoYWNjLCBicmVha3BvaW50LCBpKSA9PiB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoYnJlYWtwb2ludFZhbHVlcykpIHtcbiAgICAgIGFjY1ticmVha3BvaW50XSA9IGJyZWFrcG9pbnRWYWx1ZXNbaV0gIT0gbnVsbCA/IGJyZWFrcG9pbnRWYWx1ZXNbaV0gOiBicmVha3BvaW50VmFsdWVzW3ByZXZpb3VzXTtcbiAgICAgIHByZXZpb3VzID0gaTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBicmVha3BvaW50VmFsdWVzID09PSAnb2JqZWN0Jykge1xuICAgICAgYWNjW2JyZWFrcG9pbnRdID0gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSAhPSBudWxsID8gYnJlYWtwb2ludFZhbHVlc1ticmVha3BvaW50XSA6IGJyZWFrcG9pbnRWYWx1ZXNbcHJldmlvdXNdO1xuICAgICAgcHJldmlvdXMgPSBicmVha3BvaW50O1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2NbYnJlYWtwb2ludF0gPSBicmVha3BvaW50VmFsdWVzO1xuICAgIH1cbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5leHBvcnQgZGVmYXVsdCBicmVha3BvaW50czsiLCIndXNlIGNsaWVudCc7XG5cbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5jb25zdCBfZXhjbHVkZWQgPSBbXCJjbGFzc05hbWVcIiwgXCJjb21wb25lbnRcIl07XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgY2xzeCBmcm9tICdjbHN4JztcbmltcG9ydCBzdHlsZWQgZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3gsIHsgZXh0ZW5kU3hQcm9wIH0gZnJvbSAnLi9zdHlsZUZ1bmN0aW9uU3gnO1xuaW1wb3J0IHVzZVRoZW1lIGZyb20gJy4vdXNlVGhlbWUnO1xuaW1wb3J0IHsganN4IGFzIF9qc3ggfSBmcm9tIFwicmVhY3QvanN4LXJ1bnRpbWVcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNyZWF0ZUJveChvcHRpb25zID0ge30pIHtcbiAgY29uc3Qge1xuICAgIHRoZW1lSWQsXG4gICAgZGVmYXVsdFRoZW1lLFxuICAgIGRlZmF1bHRDbGFzc05hbWUgPSAnTXVpQm94LXJvb3QnLFxuICAgIGdlbmVyYXRlQ2xhc3NOYW1lXG4gIH0gPSBvcHRpb25zO1xuICBjb25zdCBCb3hSb290ID0gc3R5bGVkKCdkaXYnLCB7XG4gICAgc2hvdWxkRm9yd2FyZFByb3A6IHByb3AgPT4gcHJvcCAhPT0gJ3RoZW1lJyAmJiBwcm9wICE9PSAnc3gnICYmIHByb3AgIT09ICdhcydcbiAgfSkoc3R5bGVGdW5jdGlvblN4KTtcbiAgY29uc3QgQm94ID0gLyojX19QVVJFX18qL1JlYWN0LmZvcndhcmRSZWYoZnVuY3Rpb24gQm94KGluUHJvcHMsIHJlZikge1xuICAgIGNvbnN0IHRoZW1lID0gdXNlVGhlbWUoZGVmYXVsdFRoZW1lKTtcbiAgICBjb25zdCBfZXh0ZW5kU3hQcm9wID0gZXh0ZW5kU3hQcm9wKGluUHJvcHMpLFxuICAgICAge1xuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIGNvbXBvbmVudCA9ICdkaXYnXG4gICAgICB9ID0gX2V4dGVuZFN4UHJvcCxcbiAgICAgIG90aGVyID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UoX2V4dGVuZFN4UHJvcCwgX2V4Y2x1ZGVkKTtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL19qc3goQm94Um9vdCwgX2V4dGVuZHMoe1xuICAgICAgYXM6IGNvbXBvbmVudCxcbiAgICAgIHJlZjogcmVmLFxuICAgICAgY2xhc3NOYW1lOiBjbHN4KGNsYXNzTmFtZSwgZ2VuZXJhdGVDbGFzc05hbWUgPyBnZW5lcmF0ZUNsYXNzTmFtZShkZWZhdWx0Q2xhc3NOYW1lKSA6IGRlZmF1bHRDbGFzc05hbWUpLFxuICAgICAgdGhlbWU6IHRoZW1lSWQgPyB0aGVtZVt0aGVtZUlkXSB8fCB0aGVtZSA6IHRoZW1lXG4gICAgfSwgb3RoZXIpKTtcbiAgfSk7XG4gIHJldHVybiBCb3g7XG59IiwiLyoqXG4gKiBBIHVuaXZlcnNhbCB1dGlsaXR5IHRvIHN0eWxlIGNvbXBvbmVudHMgd2l0aCBtdWx0aXBsZSBjb2xvciBtb2Rlcy4gQWx3YXlzIHVzZSBpdCBmcm9tIHRoZSB0aGVtZSBvYmplY3QuXG4gKiBJdCB3b3JrcyB3aXRoOlxuICogIC0gW0Jhc2ljIHRoZW1lXShodHRwczovL211aS5jb20vbWF0ZXJpYWwtdWkvY3VzdG9taXphdGlvbi9kYXJrLW1vZGUvKVxuICogIC0gW0NTUyB0aGVtZSB2YXJpYWJsZXNdKGh0dHBzOi8vbXVpLmNvbS9tYXRlcmlhbC11aS9leHBlcmltZW50YWwtYXBpL2Nzcy10aGVtZS12YXJpYWJsZXMvb3ZlcnZpZXcvKVxuICogIC0gWmVyby1ydW50aW1lIGVuZ2luZVxuICpcbiAqIFRpcHM6IFVzZSBhbiBhcnJheSBvdmVyIG9iamVjdCBzcHJlYWQgYW5kIHBsYWNlIGB0aGVtZS5hcHBseVN0eWxlcygpYCBsYXN0LlxuICpcbiAqIOKchSBbeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSwgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7IGJhY2tncm91bmQ6ICcjMWMxYzFjJyB9KV1cbiAqXG4gKiDwn5qrIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnLCAuLi50aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHsgYmFja2dyb3VuZDogJyMxYzFjMWMnIH0pfVxuICpcbiAqIEBleGFtcGxlXG4gKiAxLiB1c2luZyB3aXRoIGBzdHlsZWRgOlxuICogYGBganN4XG4gKiAgIGNvbnN0IENvbXBvbmVudCA9IHN0eWxlZCgnZGl2JykoKHsgdGhlbWUgfSkgPT4gW1xuICogICAgIHsgYmFja2dyb3VuZDogJyNlNWU1ZTUnIH0sXG4gKiAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICBjb2xvcjogJyNmZmYnLFxuICogICAgIH0pLFxuICogICBdKTtcbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAyLiB1c2luZyB3aXRoIGBzeGAgcHJvcDpcbiAqIGBgYGpzeFxuICogICA8Qm94IHN4PXt0aGVtZSA9PiBbXG4gKiAgICAgeyBiYWNrZ3JvdW5kOiAnI2U1ZTVlNScgfSxcbiAqICAgICB0aGVtZS5hcHBseVN0eWxlcygnZGFyaycsIHtcbiAqICAgICAgICBiYWNrZ3JvdW5kOiAnIzFjMWMxYycsXG4gKiAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgfSksXG4gKiAgICAgXX1cbiAqICAgLz5cbiAqIGBgYFxuICpcbiAqIEBleGFtcGxlXG4gKiAzLiB0aGVtaW5nIGEgY29tcG9uZW50OlxuICogYGBganN4XG4gKiAgIGV4dGVuZFRoZW1lKHtcbiAqICAgICBjb21wb25lbnRzOiB7XG4gKiAgICAgICBNdWlCdXR0b246IHtcbiAqICAgICAgICAgc3R5bGVPdmVycmlkZXM6IHtcbiAqICAgICAgICAgICByb290OiAoeyB0aGVtZSB9KSA9PiBbXG4gKiAgICAgICAgICAgICB7IGJhY2tncm91bmQ6ICcjZTVlNWU1JyB9LFxuICogICAgICAgICAgICAgdGhlbWUuYXBwbHlTdHlsZXMoJ2RhcmsnLCB7XG4gKiAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICcjMWMxYzFjJyxcbiAqICAgICAgICAgICAgICAgY29sb3I6ICcjZmZmJyxcbiAqICAgICAgICAgICAgIH0pLFxuICogICAgICAgICAgIF0sXG4gKiAgICAgICAgIH0sXG4gKiAgICAgICB9XG4gKiAgICAgfVxuICogICB9KVxuICpgYGBcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYXBwbHlTdHlsZXMoa2V5LCBzdHlsZXMpIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0aGlzIGlzICdhbnknIHR5cGVcbiAgY29uc3QgdGhlbWUgPSB0aGlzO1xuICBpZiAodGhlbWUudmFycyAmJiB0eXBlb2YgdGhlbWUuZ2V0Q29sb3JTY2hlbWVTZWxlY3RvciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIENzc1ZhcnNQcm92aWRlciBpcyB1c2VkIGFzIGEgcHJvdmlkZXIsXG4gICAgLy8gcmV0dXJucyAnKiA6d2hlcmUoW2RhdGEtbXVpLWNvbG9yLXNjaGVtZT1cImxpZ2h0fGRhcmtcIl0pICYnXG4gICAgY29uc3Qgc2VsZWN0b3IgPSB0aGVtZS5nZXRDb2xvclNjaGVtZVNlbGVjdG9yKGtleSkucmVwbGFjZSgvKFxcW1teXFxdXStcXF0pLywgJyo6d2hlcmUoJDEpJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIFtzZWxlY3Rvcl06IHN0eWxlc1xuICAgIH07XG4gIH1cbiAgaWYgKHRoZW1lLnBhbGV0dGUubW9kZSA9PT0ga2V5KSB7XG4gICAgcmV0dXJuIHN0eWxlcztcbiAgfVxuICByZXR1cm4ge307XG59IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2V4dGVuZHMgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHNcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInZhbHVlc1wiLCBcInVuaXRcIiwgXCJzdGVwXCJdO1xuLy8gU29ydGVkIEFTQyBieSBzaXplLiBUaGF0J3MgaW1wb3J0YW50LlxuLy8gSXQgY2FuJ3QgYmUgY29uZmlndXJlZCBhcyBpdCdzIHVzZWQgc3RhdGljYWxseSBmb3IgcHJvcFR5cGVzLlxuZXhwb3J0IGNvbnN0IGJyZWFrcG9pbnRLZXlzID0gWyd4cycsICdzbScsICdtZCcsICdsZycsICd4bCddO1xuY29uc3Qgc29ydEJyZWFrcG9pbnRzVmFsdWVzID0gdmFsdWVzID0+IHtcbiAgY29uc3QgYnJlYWtwb2ludHNBc0FycmF5ID0gT2JqZWN0LmtleXModmFsdWVzKS5tYXAoa2V5ID0+ICh7XG4gICAga2V5LFxuICAgIHZhbDogdmFsdWVzW2tleV1cbiAgfSkpIHx8IFtdO1xuICAvLyBTb3J0IGluIGFzY2VuZGluZyBvcmRlclxuICBicmVha3BvaW50c0FzQXJyYXkuc29ydCgoYnJlYWtwb2ludDEsIGJyZWFrcG9pbnQyKSA9PiBicmVha3BvaW50MS52YWwgLSBicmVha3BvaW50Mi52YWwpO1xuICByZXR1cm4gYnJlYWtwb2ludHNBc0FycmF5LnJlZHVjZSgoYWNjLCBvYmopID0+IHtcbiAgICByZXR1cm4gX2V4dGVuZHMoe30sIGFjYywge1xuICAgICAgW29iai5rZXldOiBvYmoudmFsXG4gICAgfSk7XG4gIH0sIHt9KTtcbn07XG5cbi8vIEtlZXAgaW4gbWluZCB0aGF0IEBtZWRpYSBpcyBpbmNsdXNpdmUgYnkgdGhlIENTUyBzcGVjaWZpY2F0aW9uLlxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHMpIHtcbiAgY29uc3Qge1xuICAgICAgLy8gVGhlIGJyZWFrcG9pbnQgKipzdGFydCoqIGF0IHRoaXMgdmFsdWUuXG4gICAgICAvLyBGb3IgaW5zdGFuY2Ugd2l0aCB0aGUgZmlyc3QgYnJlYWtwb2ludCB4czogW3hzLCBzbSkuXG4gICAgICB2YWx1ZXMgPSB7XG4gICAgICAgIHhzOiAwLFxuICAgICAgICAvLyBwaG9uZVxuICAgICAgICBzbTogNjAwLFxuICAgICAgICAvLyB0YWJsZXRcbiAgICAgICAgbWQ6IDkwMCxcbiAgICAgICAgLy8gc21hbGwgbGFwdG9wXG4gICAgICAgIGxnOiAxMjAwLFxuICAgICAgICAvLyBkZXNrdG9wXG4gICAgICAgIHhsOiAxNTM2IC8vIGxhcmdlIHNjcmVlblxuICAgICAgfSxcbiAgICAgIHVuaXQgPSAncHgnLFxuICAgICAgc3RlcCA9IDVcbiAgICB9ID0gYnJlYWtwb2ludHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShicmVha3BvaW50cywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qgc29ydGVkVmFsdWVzID0gc29ydEJyZWFrcG9pbnRzVmFsdWVzKHZhbHVlcyk7XG4gIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzb3J0ZWRWYWx1ZXMpO1xuICBmdW5jdGlvbiB1cChrZXkpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHR5cGVvZiB2YWx1ZXNba2V5XSA9PT0gJ251bWJlcicgPyB2YWx1ZXNba2V5XSA6IGtleTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dmFsdWV9JHt1bml0fSlgO1xuICB9XG4gIGZ1bmN0aW9uIGRvd24oa2V5KSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsdWVzW2tleV0gPT09ICdudW1iZXInID8gdmFsdWVzW2tleV0gOiBrZXk7XG4gICAgcmV0dXJuIGBAbWVkaWEgKG1heC13aWR0aDoke3ZhbHVlIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gYmV0d2VlbihzdGFydCwgZW5kKSB7XG4gICAgY29uc3QgZW5kSW5kZXggPSBrZXlzLmluZGV4T2YoZW5kKTtcbiAgICByZXR1cm4gYEBtZWRpYSAobWluLXdpZHRoOiR7dHlwZW9mIHZhbHVlc1tzdGFydF0gPT09ICdudW1iZXInID8gdmFsdWVzW3N0YXJ0XSA6IHN0YXJ0fSR7dW5pdH0pIGFuZCBgICsgYChtYXgtd2lkdGg6JHsoZW5kSW5kZXggIT09IC0xICYmIHR5cGVvZiB2YWx1ZXNba2V5c1tlbmRJbmRleF1dID09PSAnbnVtYmVyJyA/IHZhbHVlc1trZXlzW2VuZEluZGV4XV0gOiBlbmQpIC0gc3RlcCAvIDEwMH0ke3VuaXR9KWA7XG4gIH1cbiAgZnVuY3Rpb24gb25seShrZXkpIHtcbiAgICBpZiAoa2V5cy5pbmRleE9mKGtleSkgKyAxIDwga2V5cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKTtcbiAgICB9XG4gICAgcmV0dXJuIHVwKGtleSk7XG4gIH1cbiAgZnVuY3Rpb24gbm90KGtleSkge1xuICAgIC8vIGhhbmRsZSBmaXJzdCBhbmQgbGFzdCBrZXkgc2VwYXJhdGVseSwgZm9yIGJldHRlciByZWFkYWJpbGl0eVxuICAgIGNvbnN0IGtleUluZGV4ID0ga2V5cy5pbmRleE9mKGtleSk7XG4gICAgaWYgKGtleUluZGV4ID09PSAwKSB7XG4gICAgICByZXR1cm4gdXAoa2V5c1sxXSk7XG4gICAgfVxuICAgIGlmIChrZXlJbmRleCA9PT0ga2V5cy5sZW5ndGggLSAxKSB7XG4gICAgICByZXR1cm4gZG93bihrZXlzW2tleUluZGV4XSk7XG4gICAgfVxuICAgIHJldHVybiBiZXR3ZWVuKGtleSwga2V5c1trZXlzLmluZGV4T2Yoa2V5KSArIDFdKS5yZXBsYWNlKCdAbWVkaWEnLCAnQG1lZGlhIG5vdCBhbGwgYW5kJyk7XG4gIH1cbiAgcmV0dXJuIF9leHRlbmRzKHtcbiAgICBrZXlzLFxuICAgIHZhbHVlczogc29ydGVkVmFsdWVzLFxuICAgIHVwLFxuICAgIGRvd24sXG4gICAgYmV0d2VlbixcbiAgICBvbmx5LFxuICAgIG5vdCxcbiAgICB1bml0XG4gIH0sIG90aGVyKTtcbn0iLCJjb25zdCBzaGFwZSA9IHtcbiAgYm9yZGVyUmFkaXVzOiA0XG59O1xuZXhwb3J0IGRlZmF1bHQgc2hhcGU7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcImJyZWFrcG9pbnRzXCIsIFwicGFsZXR0ZVwiLCBcInNwYWNpbmdcIiwgXCJzaGFwZVwiXTtcbmltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuaW1wb3J0IGNyZWF0ZUJyZWFrcG9pbnRzIGZyb20gJy4vY3JlYXRlQnJlYWtwb2ludHMnO1xuaW1wb3J0IHNoYXBlIGZyb20gJy4vc2hhcGUnO1xuaW1wb3J0IGNyZWF0ZVNwYWNpbmcgZnJvbSAnLi9jcmVhdGVTcGFjaW5nJztcbmltcG9ydCBzdHlsZUZ1bmN0aW9uU3ggZnJvbSAnLi4vc3R5bGVGdW5jdGlvblN4L3N0eWxlRnVuY3Rpb25TeCc7XG5pbXBvcnQgZGVmYXVsdFN4Q29uZmlnIGZyb20gJy4uL3N0eWxlRnVuY3Rpb25TeC9kZWZhdWx0U3hDb25maWcnO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gJy4vYXBwbHlTdHlsZXMnO1xuZnVuY3Rpb24gY3JlYXRlVGhlbWUob3B0aW9ucyA9IHt9LCAuLi5hcmdzKSB7XG4gIGNvbnN0IHtcbiAgICAgIGJyZWFrcG9pbnRzOiBicmVha3BvaW50c0lucHV0ID0ge30sXG4gICAgICBwYWxldHRlOiBwYWxldHRlSW5wdXQgPSB7fSxcbiAgICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dCxcbiAgICAgIHNoYXBlOiBzaGFwZUlucHV0ID0ge31cbiAgICB9ID0gb3B0aW9ucyxcbiAgICBvdGhlciA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG9wdGlvbnMsIF9leGNsdWRlZCk7XG4gIGNvbnN0IGJyZWFrcG9pbnRzID0gY3JlYXRlQnJlYWtwb2ludHMoYnJlYWtwb2ludHNJbnB1dCk7XG4gIGNvbnN0IHNwYWNpbmcgPSBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCk7XG4gIGxldCBtdWlUaGVtZSA9IGRlZXBtZXJnZSh7XG4gICAgYnJlYWtwb2ludHMsXG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBjb21wb25lbnRzOiB7fSxcbiAgICAvLyBJbmplY3QgY29tcG9uZW50IGRlZmluaXRpb25zLlxuICAgIHBhbGV0dGU6IF9leHRlbmRzKHtcbiAgICAgIG1vZGU6ICdsaWdodCdcbiAgICB9LCBwYWxldHRlSW5wdXQpLFxuICAgIHNwYWNpbmcsXG4gICAgc2hhcGU6IF9leHRlbmRzKHt9LCBzaGFwZSwgc2hhcGVJbnB1dClcbiAgfSwgb3RoZXIpO1xuICBtdWlUaGVtZS5hcHBseVN0eWxlcyA9IGFwcGx5U3R5bGVzO1xuICBtdWlUaGVtZSA9IGFyZ3MucmVkdWNlKChhY2MsIGFyZ3VtZW50KSA9PiBkZWVwbWVyZ2UoYWNjLCBhcmd1bWVudCksIG11aVRoZW1lKTtcbiAgbXVpVGhlbWUudW5zdGFibGVfc3hDb25maWcgPSBfZXh0ZW5kcyh7fSwgZGVmYXVsdFN4Q29uZmlnLCBvdGhlciA9PSBudWxsID8gdm9pZCAwIDogb3RoZXIudW5zdGFibGVfc3hDb25maWcpO1xuICBtdWlUaGVtZS51bnN0YWJsZV9zeCA9IGZ1bmN0aW9uIHN4KHByb3BzKSB7XG4gICAgcmV0dXJuIHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICBzeDogcHJvcHMsXG4gICAgICB0aGVtZTogdGhpc1xuICAgIH0pO1xuICB9O1xuICByZXR1cm4gbXVpVGhlbWU7XG59XG5leHBvcnQgZGVmYXVsdCBjcmVhdGVUaGVtZTsiLCJpbXBvcnQgeyBjcmVhdGVVbmFyeVNwYWNpbmcgfSBmcm9tICcuLi9zcGFjaW5nJztcblxuLy8gVGhlIGRpZmZlcmVudCBzaWduYXR1cmVzIGltcGx5IGRpZmZlcmVudCBtZWFuaW5nIGZvciB0aGVpciBhcmd1bWVudHMgdGhhdCBjYW4ndCBiZSBleHByZXNzZWQgc3RydWN0dXJhbGx5LlxuLy8gV2UgZXhwcmVzcyB0aGUgZGlmZmVyZW5jZSB3aXRoIHZhcmlhYmxlIG5hbWVzLlxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjcmVhdGVTcGFjaW5nKHNwYWNpbmdJbnB1dCA9IDgpIHtcbiAgLy8gQWxyZWFkeSB0cmFuc2Zvcm1lZC5cbiAgaWYgKHNwYWNpbmdJbnB1dC5tdWkpIHtcbiAgICByZXR1cm4gc3BhY2luZ0lucHV0O1xuICB9XG5cbiAgLy8gTWF0ZXJpYWwgRGVzaWduIGxheW91dHMgYXJlIHZpc3VhbGx5IGJhbGFuY2VkLiBNb3N0IG1lYXN1cmVtZW50cyBhbGlnbiB0byBhbiA4ZHAgZ3JpZCwgd2hpY2ggYWxpZ25zIGJvdGggc3BhY2luZyBhbmQgdGhlIG92ZXJhbGwgbGF5b3V0LlxuICAvLyBTbWFsbGVyIGNvbXBvbmVudHMsIHN1Y2ggYXMgaWNvbnMsIGNhbiBhbGlnbiB0byBhIDRkcCBncmlkLlxuICAvLyBodHRwczovL20yLm1hdGVyaWFsLmlvL2Rlc2lnbi9sYXlvdXQvdW5kZXJzdGFuZGluZy1sYXlvdXQuaHRtbFxuICBjb25zdCB0cmFuc2Zvcm0gPSBjcmVhdGVVbmFyeVNwYWNpbmcoe1xuICAgIHNwYWNpbmc6IHNwYWNpbmdJbnB1dFxuICB9KTtcbiAgY29uc3Qgc3BhY2luZyA9ICguLi5hcmdzSW5wdXQpID0+IHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKCEoYXJnc0lucHV0Lmxlbmd0aCA8PSA0KSkge1xuICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IFRvbyBtYW55IGFyZ3VtZW50cyBwcm92aWRlZCwgZXhwZWN0ZWQgYmV0d2VlbiAwIGFuZCA0LCBnb3QgJHthcmdzSW5wdXQubGVuZ3RofWApO1xuICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBhcmdzID0gYXJnc0lucHV0Lmxlbmd0aCA9PT0gMCA/IFsxXSA6IGFyZ3NJbnB1dDtcbiAgICByZXR1cm4gYXJncy5tYXAoYXJndW1lbnQgPT4ge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdHJhbnNmb3JtKGFyZ3VtZW50KTtcbiAgICAgIHJldHVybiB0eXBlb2Ygb3V0cHV0ID09PSAnbnVtYmVyJyA/IGAke291dHB1dH1weGAgOiBvdXRwdXQ7XG4gICAgfSkuam9pbignICcpO1xuICB9O1xuICBzcGFjaW5nLm11aSA9IHRydWU7XG4gIHJldHVybiBzcGFjaW5nO1xufSIsImltcG9ydCBkZWVwbWVyZ2UgZnJvbSAnQG11aS91dGlscy9kZWVwbWVyZ2UnO1xuZnVuY3Rpb24gbWVyZ2UoYWNjLCBpdGVtKSB7XG4gIGlmICghaXRlbSkge1xuICAgIHJldHVybiBhY2M7XG4gIH1cbiAgcmV0dXJuIGRlZXBtZXJnZShhY2MsIGl0ZW0sIHtcbiAgICBjbG9uZTogZmFsc2UgLy8gTm8gbmVlZCB0byBjbG9uZSBkZWVwLCBpdCdzIHdheSBmYXN0ZXIuXG4gIH0pO1xufVxuZXhwb3J0IGRlZmF1bHQgbWVyZ2U7IiwiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuaW1wb3J0IHsgZ2V0UGF0aCB9IGZyb20gJy4vc3R5bGUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4vbWVyZ2UnO1xuaW1wb3J0IG1lbW9pemUgZnJvbSAnLi9tZW1vaXplJztcbmNvbnN0IHByb3BlcnRpZXMgPSB7XG4gIG06ICdtYXJnaW4nLFxuICBwOiAncGFkZGluZydcbn07XG5jb25zdCBkaXJlY3Rpb25zID0ge1xuICB0OiAnVG9wJyxcbiAgcjogJ1JpZ2h0JyxcbiAgYjogJ0JvdHRvbScsXG4gIGw6ICdMZWZ0JyxcbiAgeDogWydMZWZ0JywgJ1JpZ2h0J10sXG4gIHk6IFsnVG9wJywgJ0JvdHRvbSddXG59O1xuY29uc3QgYWxpYXNlcyA9IHtcbiAgbWFyZ2luWDogJ214JyxcbiAgbWFyZ2luWTogJ215JyxcbiAgcGFkZGluZ1g6ICdweCcsXG4gIHBhZGRpbmdZOiAncHknXG59O1xuXG4vLyBtZW1vaXplKCkgaW1wYWN0OlxuLy8gRnJvbSAzMDAsMDAwIG9wcy9zZWNcbi8vIFRvIDM1MCwwMDAgb3BzL3NlY1xuY29uc3QgZ2V0Q3NzUHJvcGVydGllcyA9IG1lbW9pemUocHJvcCA9PiB7XG4gIC8vIEl0J3Mgbm90IGEgc2hvcnRoYW5kIG5vdGF0aW9uLlxuICBpZiAocHJvcC5sZW5ndGggPiAyKSB7XG4gICAgaWYgKGFsaWFzZXNbcHJvcF0pIHtcbiAgICAgIHByb3AgPSBhbGlhc2VzW3Byb3BdO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gW3Byb3BdO1xuICAgIH1cbiAgfVxuICBjb25zdCBbYSwgYl0gPSBwcm9wLnNwbGl0KCcnKTtcbiAgY29uc3QgcHJvcGVydHkgPSBwcm9wZXJ0aWVzW2FdO1xuICBjb25zdCBkaXJlY3Rpb24gPSBkaXJlY3Rpb25zW2JdIHx8ICcnO1xuICByZXR1cm4gQXJyYXkuaXNBcnJheShkaXJlY3Rpb24pID8gZGlyZWN0aW9uLm1hcChkaXIgPT4gcHJvcGVydHkgKyBkaXIpIDogW3Byb3BlcnR5ICsgZGlyZWN0aW9uXTtcbn0pO1xuZXhwb3J0IGNvbnN0IG1hcmdpbktleXMgPSBbJ20nLCAnbXQnLCAnbXInLCAnbWInLCAnbWwnLCAnbXgnLCAnbXknLCAnbWFyZ2luJywgJ21hcmdpblRvcCcsICdtYXJnaW5SaWdodCcsICdtYXJnaW5Cb3R0b20nLCAnbWFyZ2luTGVmdCcsICdtYXJnaW5YJywgJ21hcmdpblknLCAnbWFyZ2luSW5saW5lJywgJ21hcmdpbklubGluZVN0YXJ0JywgJ21hcmdpbklubGluZUVuZCcsICdtYXJnaW5CbG9jaycsICdtYXJnaW5CbG9ja1N0YXJ0JywgJ21hcmdpbkJsb2NrRW5kJ107XG5leHBvcnQgY29uc3QgcGFkZGluZ0tleXMgPSBbJ3AnLCAncHQnLCAncHInLCAncGInLCAncGwnLCAncHgnLCAncHknLCAncGFkZGluZycsICdwYWRkaW5nVG9wJywgJ3BhZGRpbmdSaWdodCcsICdwYWRkaW5nQm90dG9tJywgJ3BhZGRpbmdMZWZ0JywgJ3BhZGRpbmdYJywgJ3BhZGRpbmdZJywgJ3BhZGRpbmdJbmxpbmUnLCAncGFkZGluZ0lubGluZVN0YXJ0JywgJ3BhZGRpbmdJbmxpbmVFbmQnLCAncGFkZGluZ0Jsb2NrJywgJ3BhZGRpbmdCbG9ja1N0YXJ0JywgJ3BhZGRpbmdCbG9ja0VuZCddO1xuY29uc3Qgc3BhY2luZ0tleXMgPSBbLi4ubWFyZ2luS2V5cywgLi4ucGFkZGluZ0tleXNdO1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVVuYXJ5VW5pdCh0aGVtZSwgdGhlbWVLZXksIGRlZmF1bHRWYWx1ZSwgcHJvcE5hbWUpIHtcbiAgdmFyIF9nZXRQYXRoO1xuICBjb25zdCB0aGVtZVNwYWNpbmcgPSAoX2dldFBhdGggPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSwgZmFsc2UpKSAhPSBudWxsID8gX2dldFBhdGggOiBkZWZhdWx0VmFsdWU7XG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnbnVtYmVyJykge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodHlwZW9mIGFicyAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGBNVUk6IEV4cGVjdGVkICR7cHJvcE5hbWV9IGFyZ3VtZW50IHRvIGJlIGEgbnVtYmVyIG9yIGEgc3RyaW5nLCBnb3QgJHthYnN9LmApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhlbWVTcGFjaW5nICogYWJzO1xuICAgIH07XG4gIH1cbiAgaWYgKEFycmF5LmlzQXJyYXkodGhlbWVTcGFjaW5nKSkge1xuICAgIHJldHVybiBhYnMgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBhYnMgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVybiBhYnM7XG4gICAgICB9XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIU51bWJlci5pc0ludGVnZXIoYWJzKSkge1xuICAgICAgICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCBhcnJheSB0eXBlIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIG5vbiBpbnRlZ2VyIHZhbHVlcy5gICsgYFlvdSBzaG91bGQgZWl0aGVyIHVzZSBhbiBpbnRlZ2VyIHZhbHVlIHRoYXQgY2FuIGJlIHVzZWQgYXMgaW5kZXgsIG9yIGRlZmluZSB0aGUgXFxgdGhlbWUuJHt0aGVtZUtleX1cXGAgYXMgYSBudW1iZXIuYF0uam9pbignXFxuJykpO1xuICAgICAgICB9IGVsc2UgaWYgKGFicyA+IHRoZW1lU3BhY2luZy5sZW5ndGggLSAxKSB7XG4gICAgICAgICAgY29uc29sZS5lcnJvcihbYE1VSTogVGhlIHZhbHVlIHByb3ZpZGVkICgke2Fic30pIG92ZXJmbG93cy5gLCBgVGhlIHN1cHBvcnRlZCB2YWx1ZXMgYXJlOiAke0pTT04uc3RyaW5naWZ5KHRoZW1lU3BhY2luZyl9LmAsIGAke2Fic30gPiAke3RoZW1lU3BhY2luZy5sZW5ndGggLSAxfSwgeW91IG5lZWQgdG8gYWRkIHRoZSBtaXNzaW5nIHZhbHVlcy5gXS5qb2luKCdcXG4nKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGVtZVNwYWNpbmdbYWJzXTtcbiAgICB9O1xuICB9XG4gIGlmICh0eXBlb2YgdGhlbWVTcGFjaW5nID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHRoZW1lU3BhY2luZztcbiAgfVxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGNvbnNvbGUuZXJyb3IoW2BNVUk6IFRoZSBcXGB0aGVtZS4ke3RoZW1lS2V5fVxcYCB2YWx1ZSAoJHt0aGVtZVNwYWNpbmd9KSBpcyBpbnZhbGlkLmAsICdJdCBzaG91bGQgYmUgYSBudW1iZXIsIGFuIGFycmF5IG9yIGEgZnVuY3Rpb24uJ10uam9pbignXFxuJykpO1xuICB9XG4gIHJldHVybiAoKSA9PiB1bmRlZmluZWQ7XG59XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlTcGFjaW5nKHRoZW1lKSB7XG4gIHJldHVybiBjcmVhdGVVbmFyeVVuaXQodGhlbWUsICdzcGFjaW5nJywgOCwgJ3NwYWNpbmcnKTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKSB7XG4gIGlmICh0eXBlb2YgcHJvcFZhbHVlID09PSAnc3RyaW5nJyB8fCBwcm9wVmFsdWUgPT0gbnVsbCkge1xuICAgIHJldHVybiBwcm9wVmFsdWU7XG4gIH1cbiAgY29uc3QgYWJzID0gTWF0aC5hYnMocHJvcFZhbHVlKTtcbiAgY29uc3QgdHJhbnNmb3JtZWQgPSB0cmFuc2Zvcm1lcihhYnMpO1xuICBpZiAocHJvcFZhbHVlID49IDApIHtcbiAgICByZXR1cm4gdHJhbnNmb3JtZWQ7XG4gIH1cbiAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lZCA9PT0gJ251bWJlcicpIHtcbiAgICByZXR1cm4gLXRyYW5zZm9ybWVkO1xuICB9XG4gIHJldHVybiBgLSR7dHJhbnNmb3JtZWR9YDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBnZXRTdHlsZUZyb21Qcm9wVmFsdWUoY3NzUHJvcGVydGllcywgdHJhbnNmb3JtZXIpIHtcbiAgcmV0dXJuIHByb3BWYWx1ZSA9PiBjc3NQcm9wZXJ0aWVzLnJlZHVjZSgoYWNjLCBjc3NQcm9wZXJ0eSkgPT4ge1xuICAgIGFjY1tjc3NQcm9wZXJ0eV0gPSBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG59XG5mdW5jdGlvbiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSB7XG4gIC8vIFVzaW5nIGEgaGFzaCBjb21wdXRhdGlvbiBvdmVyIGFuIGFycmF5IGl0ZXJhdGlvbiBjb3VsZCBiZSBmYXN0ZXIsIGJ1dCB3aXRoIG9ubHkgMjggaXRlbXMsXG4gIC8vIGl0J3MgZG9lc24ndCB3b3J0aCB0aGUgYnVuZGxlIHNpemUuXG4gIGlmIChrZXlzLmluZGV4T2YocHJvcCkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbiAgY29uc3QgY3NzUHJvcGVydGllcyA9IGdldENzc1Byb3BlcnRpZXMocHJvcCk7XG4gIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IGdldFN0eWxlRnJvbVByb3BWYWx1ZShjc3NQcm9wZXJ0aWVzLCB0cmFuc2Zvcm1lcik7XG4gIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbn1cbmZ1bmN0aW9uIHN0eWxlKHByb3BzLCBrZXlzKSB7XG4gIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlTcGFjaW5nKHByb3BzLnRoZW1lKTtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKHByb3BzKS5tYXAocHJvcCA9PiByZXNvbHZlQ3NzUHJvcGVydHkocHJvcHMsIGtleXMsIHByb3AsIHRyYW5zZm9ybWVyKSkucmVkdWNlKG1lcmdlLCB7fSk7XG59XG5leHBvcnQgZnVuY3Rpb24gbWFyZ2luKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgbWFyZ2luS2V5cyk7XG59XG5tYXJnaW4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IG1hcmdpbktleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xubWFyZ2luLmZpbHRlclByb3BzID0gbWFyZ2luS2V5cztcbmV4cG9ydCBmdW5jdGlvbiBwYWRkaW5nKHByb3BzKSB7XG4gIHJldHVybiBzdHlsZShwcm9wcywgcGFkZGluZ0tleXMpO1xufVxucGFkZGluZy5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gcGFkZGluZ0tleXMucmVkdWNlKChvYmosIGtleSkgPT4ge1xuICBvYmpba2V5XSA9IHJlc3BvbnNpdmVQcm9wVHlwZTtcbiAgcmV0dXJuIG9iajtcbn0sIHt9KSA6IHt9O1xucGFkZGluZy5maWx0ZXJQcm9wcyA9IHBhZGRpbmdLZXlzO1xuZnVuY3Rpb24gc3BhY2luZyhwcm9wcykge1xuICByZXR1cm4gc3R5bGUocHJvcHMsIHNwYWNpbmdLZXlzKTtcbn1cbnNwYWNpbmcucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHNwYWNpbmdLZXlzLnJlZHVjZSgob2JqLCBrZXkpID0+IHtcbiAgb2JqW2tleV0gPSByZXNwb25zaXZlUHJvcFR5cGU7XG4gIHJldHVybiBvYmo7XG59LCB7fSkgOiB7fTtcbnNwYWNpbmcuZmlsdGVyUHJvcHMgPSBzcGFjaW5nS2V5cztcbmV4cG9ydCBkZWZhdWx0IHNwYWNpbmc7IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVtb2l6ZShmbikge1xuICBjb25zdCBjYWNoZSA9IHt9O1xuICByZXR1cm4gYXJnID0+IHtcbiAgICBpZiAoY2FjaGVbYXJnXSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBjYWNoZVthcmddID0gZm4oYXJnKTtcbiAgICB9XG4gICAgcmV0dXJuIGNhY2hlW2FyZ107XG4gIH07XG59IiwiaW1wb3J0IGNhcGl0YWxpemUgZnJvbSAnQG11aS91dGlscy9jYXBpdGFsaXplJztcbmltcG9ydCByZXNwb25zaXZlUHJvcFR5cGUgZnJvbSAnLi9yZXNwb25zaXZlUHJvcFR5cGUnO1xuaW1wb3J0IHsgaGFuZGxlQnJlYWtwb2ludHMgfSBmcm9tICcuL2JyZWFrcG9pbnRzJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRQYXRoKG9iaiwgcGF0aCwgY2hlY2tWYXJzID0gdHJ1ZSkge1xuICBpZiAoIXBhdGggfHwgdHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICAvLyBDaGVjayBpZiBDU1MgdmFyaWFibGVzIGFyZSB1c2VkXG4gIGlmIChvYmogJiYgb2JqLnZhcnMgJiYgY2hlY2tWYXJzKSB7XG4gICAgY29uc3QgdmFsID0gYHZhcnMuJHtwYXRofWAuc3BsaXQoJy4nKS5yZWR1Y2UoKGFjYywgaXRlbSkgPT4gYWNjICYmIGFjY1tpdGVtXSA/IGFjY1tpdGVtXSA6IG51bGwsIG9iaik7XG4gICAgaWYgKHZhbCAhPSBudWxsKSB7XG4gICAgICByZXR1cm4gdmFsO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcGF0aC5zcGxpdCgnLicpLnJlZHVjZSgoYWNjLCBpdGVtKSA9PiB7XG4gICAgaWYgKGFjYyAmJiBhY2NbaXRlbV0gIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIGFjY1tpdGVtXTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG4gIH0sIG9iaik7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwsIHVzZXJWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsKSB7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKHR5cGVvZiB0aGVtZU1hcHBpbmcgPT09ICdmdW5jdGlvbicpIHtcbiAgICB2YWx1ZSA9IHRoZW1lTWFwcGluZyhwcm9wVmFsdWVGaW5hbCk7XG4gIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheSh0aGVtZU1hcHBpbmcpKSB7XG4gICAgdmFsdWUgPSB0aGVtZU1hcHBpbmdbcHJvcFZhbHVlRmluYWxdIHx8IHVzZXJWYWx1ZTtcbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGdldFBhdGgodGhlbWVNYXBwaW5nLCBwcm9wVmFsdWVGaW5hbCkgfHwgdXNlclZhbHVlO1xuICB9XG4gIGlmICh0cmFuc2Zvcm0pIHtcbiAgICB2YWx1ZSA9IHRyYW5zZm9ybSh2YWx1ZSwgdXNlclZhbHVlLCB0aGVtZU1hcHBpbmcpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmZ1bmN0aW9uIHN0eWxlKG9wdGlvbnMpIHtcbiAgY29uc3Qge1xuICAgIHByb3AsXG4gICAgY3NzUHJvcGVydHkgPSBvcHRpb25zLnByb3AsXG4gICAgdGhlbWVLZXksXG4gICAgdHJhbnNmb3JtXG4gIH0gPSBvcHRpb25zO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICBpZiAocHJvcHNbcHJvcF0gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNvbnN0IHByb3BWYWx1ZSA9IHByb3BzW3Byb3BdO1xuICAgIGNvbnN0IHRoZW1lID0gcHJvcHMudGhlbWU7XG4gICAgY29uc3QgdGhlbWVNYXBwaW5nID0gZ2V0UGF0aCh0aGVtZSwgdGhlbWVLZXkpIHx8IHt9O1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZUZpbmFsID0+IHtcbiAgICAgIGxldCB2YWx1ZSA9IGdldFN0eWxlVmFsdWUodGhlbWVNYXBwaW5nLCB0cmFuc2Zvcm0sIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIGlmIChwcm9wVmFsdWVGaW5hbCA9PT0gdmFsdWUgJiYgdHlwZW9mIHByb3BWYWx1ZUZpbmFsID09PSAnc3RyaW5nJykge1xuICAgICAgICAvLyBIYXZlbid0IGZvdW5kIHZhbHVlXG4gICAgICAgIHZhbHVlID0gZ2V0U3R5bGVWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BWYWx1ZSwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfTtcbiAgZm4ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgICBbcHJvcF06IHJlc3BvbnNpdmVQcm9wVHlwZVxuICB9IDoge307XG4gIGZuLmZpbHRlclByb3BzID0gW3Byb3BdO1xuICByZXR1cm4gZm47XG59XG5leHBvcnQgZGVmYXVsdCBzdHlsZTsiLCJpbXBvcnQgbWVyZ2UgZnJvbSAnLi9tZXJnZSc7XG5mdW5jdGlvbiBjb21wb3NlKC4uLnN0eWxlcykge1xuICBjb25zdCBoYW5kbGVycyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IHtcbiAgICBzdHlsZS5maWx0ZXJQcm9wcy5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgYWNjW3Byb3BdID0gc3R5bGU7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuXG4gIC8vIGZhbHNlIHBvc2l0aXZlXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuICBjb25zdCBmbiA9IHByb3BzID0+IHtcbiAgICByZXR1cm4gT2JqZWN0LmtleXMocHJvcHMpLnJlZHVjZSgoYWNjLCBwcm9wKSA9PiB7XG4gICAgICBpZiAoaGFuZGxlcnNbcHJvcF0pIHtcbiAgICAgICAgcmV0dXJuIG1lcmdlKGFjYywgaGFuZGxlcnNbcHJvcF0ocHJvcHMpKTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2M7XG4gICAgfSwge30pO1xuICB9O1xuICBmbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8gc3R5bGVzLnJlZHVjZSgoYWNjLCBzdHlsZSkgPT4gT2JqZWN0LmFzc2lnbihhY2MsIHN0eWxlLnByb3BUeXBlcyksIHt9KSA6IHt9O1xuICBmbi5maWx0ZXJQcm9wcyA9IHN0eWxlcy5yZWR1Y2UoKGFjYywgc3R5bGUpID0+IGFjYy5jb25jYXQoc3R5bGUuZmlsdGVyUHJvcHMpLCBbXSk7XG4gIHJldHVybiBmbjtcbn1cbmV4cG9ydCBkZWZhdWx0IGNvbXBvc2U7IiwiaW1wb3J0IHJlc3BvbnNpdmVQcm9wVHlwZSBmcm9tICcuL3Jlc3BvbnNpdmVQcm9wVHlwZSc7XG5pbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuaW1wb3J0IHsgY3JlYXRlVW5hcnlVbml0LCBnZXRWYWx1ZSB9IGZyb20gJy4vc3BhY2luZyc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cyB9IGZyb20gJy4vYnJlYWtwb2ludHMnO1xuZXhwb3J0IGZ1bmN0aW9uIGJvcmRlclRyYW5zZm9ybSh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSAnbnVtYmVyJykge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxuICByZXR1cm4gYCR7dmFsdWV9cHggc29saWRgO1xufVxuZnVuY3Rpb24gY3JlYXRlQm9yZGVyU3R5bGUocHJvcCwgdHJhbnNmb3JtKSB7XG4gIHJldHVybiBzdHlsZSh7XG4gICAgcHJvcCxcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybVxuICB9KTtcbn1cbmV4cG9ydCBjb25zdCBib3JkZXIgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJUb3AgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyVG9wJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJSaWdodCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodCcsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlckJvdHRvbScsIGJvcmRlclRyYW5zZm9ybSk7XG5leHBvcnQgY29uc3QgYm9yZGVyTGVmdCA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJMZWZ0JywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBib3JkZXJDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJDb2xvcicpO1xuZXhwb3J0IGNvbnN0IGJvcmRlclRvcENvbG9yID0gY3JlYXRlQm9yZGVyU3R5bGUoJ2JvcmRlclRvcENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyUmlnaHRDb2xvciA9IGNyZWF0ZUJvcmRlclN0eWxlKCdib3JkZXJSaWdodENvbG9yJyk7XG5leHBvcnQgY29uc3QgYm9yZGVyQm90dG9tQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyQm90dG9tQ29sb3InKTtcbmV4cG9ydCBjb25zdCBib3JkZXJMZWZ0Q29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnYm9yZGVyTGVmdENvbG9yJyk7XG5leHBvcnQgY29uc3Qgb3V0bGluZSA9IGNyZWF0ZUJvcmRlclN0eWxlKCdvdXRsaW5lJywgYm9yZGVyVHJhbnNmb3JtKTtcbmV4cG9ydCBjb25zdCBvdXRsaW5lQ29sb3IgPSBjcmVhdGVCb3JkZXJTdHlsZSgnb3V0bGluZUNvbG9yJyk7XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBib3JkZXJSYWRpdXMgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5ib3JkZXJSYWRpdXMgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5ib3JkZXJSYWRpdXMgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NoYXBlLmJvcmRlclJhZGl1cycsIDQsICdib3JkZXJSYWRpdXMnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGJvcmRlclJhZGl1czogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmJvcmRlclJhZGl1cywgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5ib3JkZXJSYWRpdXMucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgYm9yZGVyUmFkaXVzOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmJvcmRlclJhZGl1cy5maWx0ZXJQcm9wcyA9IFsnYm9yZGVyUmFkaXVzJ107XG5jb25zdCBib3JkZXJzID0gY29tcG9zZShib3JkZXIsIGJvcmRlclRvcCwgYm9yZGVyUmlnaHQsIGJvcmRlckJvdHRvbSwgYm9yZGVyTGVmdCwgYm9yZGVyQ29sb3IsIGJvcmRlclRvcENvbG9yLCBib3JkZXJSaWdodENvbG9yLCBib3JkZXJCb3R0b21Db2xvciwgYm9yZGVyTGVmdENvbG9yLCBib3JkZXJSYWRpdXMsIG91dGxpbmUsIG91dGxpbmVDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBib3JkZXJzOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBjcmVhdGVVbmFyeVVuaXQsIGdldFZhbHVlIH0gZnJvbSAnLi9zcGFjaW5nJztcbmltcG9ydCB7IGhhbmRsZUJyZWFrcG9pbnRzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5pbXBvcnQgcmVzcG9uc2l2ZVByb3BUeXBlIGZyb20gJy4vcmVzcG9uc2l2ZVByb3BUeXBlJztcblxuLy8gZmFsc2UgcG9zaXRpdmVcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC9mdW5jdGlvbi1jb21wb25lbnQtZGVmaW5pdGlvblxuZXhwb3J0IGNvbnN0IGdhcCA9IHByb3BzID0+IHtcbiAgaWYgKHByb3BzLmdhcCAhPT0gdW5kZWZpbmVkICYmIHByb3BzLmdhcCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHRyYW5zZm9ybWVyID0gY3JlYXRlVW5hcnlVbml0KHByb3BzLnRoZW1lLCAnc3BhY2luZycsIDgsICdnYXAnKTtcbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWUgPT4gKHtcbiAgICAgIGdhcDogZ2V0VmFsdWUodHJhbnNmb3JtZXIsIHByb3BWYWx1ZSlcbiAgICB9KTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHByb3BzLmdhcCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICByZXR1cm4gbnVsbDtcbn07XG5nYXAucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJyA/IHtcbiAgZ2FwOiByZXNwb25zaXZlUHJvcFR5cGVcbn0gOiB7fTtcbmdhcC5maWx0ZXJQcm9wcyA9IFsnZ2FwJ107XG5cbi8vIGZhbHNlIHBvc2l0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QvZnVuY3Rpb24tY29tcG9uZW50LWRlZmluaXRpb25cbmV4cG9ydCBjb25zdCBjb2x1bW5HYXAgPSBwcm9wcyA9PiB7XG4gIGlmIChwcm9wcy5jb2x1bW5HYXAgIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5jb2x1bW5HYXAgIT09IG51bGwpIHtcbiAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGNyZWF0ZVVuYXJ5VW5pdChwcm9wcy50aGVtZSwgJ3NwYWNpbmcnLCA4LCAnY29sdW1uR2FwJyk7XG4gICAgY29uc3Qgc3R5bGVGcm9tUHJvcFZhbHVlID0gcHJvcFZhbHVlID0+ICh7XG4gICAgICBjb2x1bW5HYXA6IGdldFZhbHVlKHRyYW5zZm9ybWVyLCBwcm9wVmFsdWUpXG4gICAgfSk7XG4gICAgcmV0dXJuIGhhbmRsZUJyZWFrcG9pbnRzKHByb3BzLCBwcm9wcy5jb2x1bW5HYXAsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xuY29sdW1uR2FwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicgPyB7XG4gIGNvbHVtbkdhcDogcmVzcG9uc2l2ZVByb3BUeXBlXG59IDoge307XG5jb2x1bW5HYXAuZmlsdGVyUHJvcHMgPSBbJ2NvbHVtbkdhcCddO1xuXG4vLyBmYWxzZSBwb3NpdGl2ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0L2Z1bmN0aW9uLWNvbXBvbmVudC1kZWZpbml0aW9uXG5leHBvcnQgY29uc3Qgcm93R2FwID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMucm93R2FwICE9PSB1bmRlZmluZWQgJiYgcHJvcHMucm93R2FwICE9PSBudWxsKSB7XG4gICAgY29uc3QgdHJhbnNmb3JtZXIgPSBjcmVhdGVVbmFyeVVuaXQocHJvcHMudGhlbWUsICdzcGFjaW5nJywgOCwgJ3Jvd0dhcCcpO1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiAoe1xuICAgICAgcm93R2FwOiBnZXRWYWx1ZSh0cmFuc2Zvcm1lciwgcHJvcFZhbHVlKVxuICAgIH0pO1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMucm93R2FwLCBzdHlsZUZyb21Qcm9wVmFsdWUpO1xuICB9XG4gIHJldHVybiBudWxsO1xufTtcbnJvd0dhcC5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nID8ge1xuICByb3dHYXA6IHJlc3BvbnNpdmVQcm9wVHlwZVxufSA6IHt9O1xucm93R2FwLmZpbHRlclByb3BzID0gWydyb3dHYXAnXTtcbmV4cG9ydCBjb25zdCBncmlkQ29sdW1uID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZENvbHVtbidcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRSb3cgPSBzdHlsZSh7XG4gIHByb3A6ICdncmlkUm93J1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9GbG93ID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9GbG93J1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9Db2x1bW5zID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9Db2x1bW5zJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZEF1dG9Sb3dzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZEF1dG9Sb3dzJ1xufSk7XG5leHBvcnQgY29uc3QgZ3JpZFRlbXBsYXRlQ29sdW1ucyA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRUZW1wbGF0ZUNvbHVtbnMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkVGVtcGxhdGVSb3dzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlUm93cydcbn0pO1xuZXhwb3J0IGNvbnN0IGdyaWRUZW1wbGF0ZUFyZWFzID0gc3R5bGUoe1xuICBwcm9wOiAnZ3JpZFRlbXBsYXRlQXJlYXMnXG59KTtcbmV4cG9ydCBjb25zdCBncmlkQXJlYSA9IHN0eWxlKHtcbiAgcHJvcDogJ2dyaWRBcmVhJ1xufSk7XG5jb25zdCBncmlkID0gY29tcG9zZShnYXAsIGNvbHVtbkdhcCwgcm93R2FwLCBncmlkQ29sdW1uLCBncmlkUm93LCBncmlkQXV0b0Zsb3csIGdyaWRBdXRvQ29sdW1ucywgZ3JpZEF1dG9Sb3dzLCBncmlkVGVtcGxhdGVDb2x1bW5zLCBncmlkVGVtcGxhdGVSb3dzLCBncmlkVGVtcGxhdGVBcmVhcywgZ3JpZEFyZWEpO1xuZXhwb3J0IGRlZmF1bHQgZ3JpZDsiLCJpbXBvcnQgc3R5bGUgZnJvbSAnLi9zdHlsZSc7XG5pbXBvcnQgY29tcG9zZSBmcm9tICcuL2NvbXBvc2UnO1xuZXhwb3J0IGZ1bmN0aW9uIHBhbGV0dGVUcmFuc2Zvcm0odmFsdWUsIHVzZXJWYWx1ZSkge1xuICBpZiAodXNlclZhbHVlID09PSAnZ3JleScpIHtcbiAgICByZXR1cm4gdXNlclZhbHVlO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCBjb2xvciA9IHN0eWxlKHtcbiAgcHJvcDogJ2NvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBiZ2NvbG9yID0gc3R5bGUoe1xuICBwcm9wOiAnYmdjb2xvcicsXG4gIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBiYWNrZ3JvdW5kQ29sb3IgPSBzdHlsZSh7XG4gIHByb3A6ICdiYWNrZ3JvdW5kQ29sb3InLFxuICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbn0pO1xuY29uc3QgcGFsZXR0ZSA9IGNvbXBvc2UoY29sb3IsIGJnY29sb3IsIGJhY2tncm91bmRDb2xvcik7XG5leHBvcnQgZGVmYXVsdCBwYWxldHRlOyIsImltcG9ydCBzdHlsZSBmcm9tICcuL3N0eWxlJztcbmltcG9ydCBjb21wb3NlIGZyb20gJy4vY29tcG9zZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgdmFsdWVzIGFzIGJyZWFrcG9pbnRzVmFsdWVzIH0gZnJvbSAnLi9icmVha3BvaW50cyc7XG5leHBvcnQgZnVuY3Rpb24gc2l6aW5nVHJhbnNmb3JtKHZhbHVlKSB7XG4gIHJldHVybiB2YWx1ZSA8PSAxICYmIHZhbHVlICE9PSAwID8gYCR7dmFsdWUgKiAxMDB9JWAgOiB2YWx1ZTtcbn1cbmV4cG9ydCBjb25zdCB3aWR0aCA9IHN0eWxlKHtcbiAgcHJvcDogJ3dpZHRoJyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1heFdpZHRoID0gcHJvcHMgPT4ge1xuICBpZiAocHJvcHMubWF4V2lkdGggIT09IHVuZGVmaW5lZCAmJiBwcm9wcy5tYXhXaWR0aCAhPT0gbnVsbCkge1xuICAgIGNvbnN0IHN0eWxlRnJvbVByb3BWYWx1ZSA9IHByb3BWYWx1ZSA9PiB7XG4gICAgICB2YXIgX3Byb3BzJHRoZW1lLCBfcHJvcHMkdGhlbWUyO1xuICAgICAgY29uc3QgYnJlYWtwb2ludCA9ICgoX3Byb3BzJHRoZW1lID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZSA9IF9wcm9wcyR0aGVtZS5icmVha3BvaW50cykgPT0gbnVsbCB8fCAoX3Byb3BzJHRoZW1lID0gX3Byb3BzJHRoZW1lLnZhbHVlcykgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZVtwcm9wVmFsdWVdKSB8fCBicmVha3BvaW50c1ZhbHVlc1twcm9wVmFsdWVdO1xuICAgICAgaWYgKCFicmVha3BvaW50KSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgbWF4V2lkdGg6IHNpemluZ1RyYW5zZm9ybShwcm9wVmFsdWUpXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICBpZiAoKChfcHJvcHMkdGhlbWUyID0gcHJvcHMudGhlbWUpID09IG51bGwgfHwgKF9wcm9wcyR0aGVtZTIgPSBfcHJvcHMkdGhlbWUyLmJyZWFrcG9pbnRzKSA9PSBudWxsID8gdm9pZCAwIDogX3Byb3BzJHRoZW1lMi51bml0KSAhPT0gJ3B4Jykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIG1heFdpZHRoOiBgJHticmVha3BvaW50fSR7cHJvcHMudGhlbWUuYnJlYWtwb2ludHMudW5pdH1gXG4gICAgICAgIH07XG4gICAgICB9XG4gICAgICByZXR1cm4ge1xuICAgICAgICBtYXhXaWR0aDogYnJlYWtwb2ludFxuICAgICAgfTtcbiAgICB9O1xuICAgIHJldHVybiBoYW5kbGVCcmVha3BvaW50cyhwcm9wcywgcHJvcHMubWF4V2lkdGgsIHN0eWxlRnJvbVByb3BWYWx1ZSk7XG4gIH1cbiAgcmV0dXJuIG51bGw7XG59O1xubWF4V2lkdGguZmlsdGVyUHJvcHMgPSBbJ21heFdpZHRoJ107XG5leHBvcnQgY29uc3QgbWluV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdtaW5XaWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBoZWlnaHQgPSBzdHlsZSh7XG4gIHByb3A6ICdoZWlnaHQnLFxuICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxufSk7XG5leHBvcnQgY29uc3QgbWF4SGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnbWF4SGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IG1pbkhlaWdodCA9IHN0eWxlKHtcbiAgcHJvcDogJ21pbkhlaWdodCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplV2lkdGggPSBzdHlsZSh7XG4gIHByb3A6ICdzaXplJyxcbiAgY3NzUHJvcGVydHk6ICd3aWR0aCcsXG4gIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG59KTtcbmV4cG9ydCBjb25zdCBzaXplSGVpZ2h0ID0gc3R5bGUoe1xuICBwcm9wOiAnc2l6ZScsXG4gIGNzc1Byb3BlcnR5OiAnaGVpZ2h0JyxcbiAgdHJhbnNmb3JtOiBzaXppbmdUcmFuc2Zvcm1cbn0pO1xuZXhwb3J0IGNvbnN0IGJveFNpemluZyA9IHN0eWxlKHtcbiAgcHJvcDogJ2JveFNpemluZydcbn0pO1xuY29uc3Qgc2l6aW5nID0gY29tcG9zZSh3aWR0aCwgbWF4V2lkdGgsIG1pbldpZHRoLCBoZWlnaHQsIG1heEhlaWdodCwgbWluSGVpZ2h0LCBib3hTaXppbmcpO1xuZXhwb3J0IGRlZmF1bHQgc2l6aW5nOyIsImltcG9ydCB7IHBhZGRpbmcsIG1hcmdpbiB9IGZyb20gJy4uL3NwYWNpbmcnO1xuaW1wb3J0IHsgYm9yZGVyUmFkaXVzLCBib3JkZXJUcmFuc2Zvcm0gfSBmcm9tICcuLi9ib3JkZXJzJztcbmltcG9ydCB7IGdhcCwgcm93R2FwLCBjb2x1bW5HYXAgfSBmcm9tICcuLi9jc3NHcmlkJztcbmltcG9ydCB7IHBhbGV0dGVUcmFuc2Zvcm0gfSBmcm9tICcuLi9wYWxldHRlJztcbmltcG9ydCB7IG1heFdpZHRoLCBzaXppbmdUcmFuc2Zvcm0gfSBmcm9tICcuLi9zaXppbmcnO1xuY29uc3QgZGVmYXVsdFN4Q29uZmlnID0ge1xuICAvLyBib3JkZXJzXG4gIGJvcmRlcjoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyVG9wOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJSaWdodDoge1xuICAgIHRoZW1lS2V5OiAnYm9yZGVycycsXG4gICAgdHJhbnNmb3JtOiBib3JkZXJUcmFuc2Zvcm1cbiAgfSxcbiAgYm9yZGVyQm90dG9tOiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJMZWZ0OiB7XG4gICAgdGhlbWVLZXk6ICdib3JkZXJzJyxcbiAgICB0cmFuc2Zvcm06IGJvcmRlclRyYW5zZm9ybVxuICB9LFxuICBib3JkZXJDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyVG9wQ29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlclJpZ2h0Q29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIGJvcmRlckJvdHRvbUNvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJ1xuICB9LFxuICBib3JkZXJMZWZ0Q29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnXG4gIH0sXG4gIG91dGxpbmU6IHtcbiAgICB0aGVtZUtleTogJ2JvcmRlcnMnLFxuICAgIHRyYW5zZm9ybTogYm9yZGVyVHJhbnNmb3JtXG4gIH0sXG4gIG91dGxpbmVDb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZSdcbiAgfSxcbiAgYm9yZGVyUmFkaXVzOiB7XG4gICAgdGhlbWVLZXk6ICdzaGFwZS5ib3JkZXJSYWRpdXMnLFxuICAgIHN0eWxlOiBib3JkZXJSYWRpdXNcbiAgfSxcbiAgLy8gcGFsZXR0ZVxuICBjb2xvcjoge1xuICAgIHRoZW1lS2V5OiAncGFsZXR0ZScsXG4gICAgdHJhbnNmb3JtOiBwYWxldHRlVHJhbnNmb3JtXG4gIH0sXG4gIGJnY29sb3I6IHtcbiAgICB0aGVtZUtleTogJ3BhbGV0dGUnLFxuICAgIGNzc1Byb3BlcnR5OiAnYmFja2dyb3VuZENvbG9yJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgYmFja2dyb3VuZENvbG9yOiB7XG4gICAgdGhlbWVLZXk6ICdwYWxldHRlJyxcbiAgICB0cmFuc2Zvcm06IHBhbGV0dGVUcmFuc2Zvcm1cbiAgfSxcbiAgLy8gc3BhY2luZ1xuICBwOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcHQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwcjoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBiOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGw6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBweDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHB5OiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZzoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdUb3A6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nUmlnaHQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQm90dG9tOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0xlZnQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nWDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdZOiB7XG4gICAgc3R5bGU6IHBhZGRpbmdcbiAgfSxcbiAgcGFkZGluZ0lubGluZToge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmVTdGFydDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdJbmxpbmVFbmQ6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2s6IHtcbiAgICBzdHlsZTogcGFkZGluZ1xuICB9LFxuICBwYWRkaW5nQmxvY2tTdGFydDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIHBhZGRpbmdCbG9ja0VuZDoge1xuICAgIHN0eWxlOiBwYWRkaW5nXG4gIH0sXG4gIG06IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG10OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtcjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWI6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1sOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBteDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbXk6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbjoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luVG9wOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5SaWdodDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgbWFyZ2luQm90dG9tOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5MZWZ0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5YOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5ZOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmU6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbklubGluZVN0YXJ0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5JbmxpbmVFbmQ6IHtcbiAgICBzdHlsZTogbWFyZ2luXG4gIH0sXG4gIG1hcmdpbkJsb2NrOiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9ja1N0YXJ0OiB7XG4gICAgc3R5bGU6IG1hcmdpblxuICB9LFxuICBtYXJnaW5CbG9ja0VuZDoge1xuICAgIHN0eWxlOiBtYXJnaW5cbiAgfSxcbiAgLy8gZGlzcGxheVxuICBkaXNwbGF5UHJpbnQ6IHtcbiAgICBjc3NQcm9wZXJ0eTogZmFsc2UsXG4gICAgdHJhbnNmb3JtOiB2YWx1ZSA9PiAoe1xuICAgICAgJ0BtZWRpYSBwcmludCc6IHtcbiAgICAgICAgZGlzcGxheTogdmFsdWVcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuICBkaXNwbGF5OiB7fSxcbiAgb3ZlcmZsb3c6IHt9LFxuICB0ZXh0T3ZlcmZsb3c6IHt9LFxuICB2aXNpYmlsaXR5OiB7fSxcbiAgd2hpdGVTcGFjZToge30sXG4gIC8vIGZsZXhib3hcbiAgZmxleEJhc2lzOiB7fSxcbiAgZmxleERpcmVjdGlvbjoge30sXG4gIGZsZXhXcmFwOiB7fSxcbiAganVzdGlmeUNvbnRlbnQ6IHt9LFxuICBhbGlnbkl0ZW1zOiB7fSxcbiAgYWxpZ25Db250ZW50OiB7fSxcbiAgb3JkZXI6IHt9LFxuICBmbGV4OiB7fSxcbiAgZmxleEdyb3c6IHt9LFxuICBmbGV4U2hyaW5rOiB7fSxcbiAgYWxpZ25TZWxmOiB7fSxcbiAganVzdGlmeUl0ZW1zOiB7fSxcbiAganVzdGlmeVNlbGY6IHt9LFxuICAvLyBncmlkXG4gIGdhcDoge1xuICAgIHN0eWxlOiBnYXBcbiAgfSxcbiAgcm93R2FwOiB7XG4gICAgc3R5bGU6IHJvd0dhcFxuICB9LFxuICBjb2x1bW5HYXA6IHtcbiAgICBzdHlsZTogY29sdW1uR2FwXG4gIH0sXG4gIGdyaWRDb2x1bW46IHt9LFxuICBncmlkUm93OiB7fSxcbiAgZ3JpZEF1dG9GbG93OiB7fSxcbiAgZ3JpZEF1dG9Db2x1bW5zOiB7fSxcbiAgZ3JpZEF1dG9Sb3dzOiB7fSxcbiAgZ3JpZFRlbXBsYXRlQ29sdW1uczoge30sXG4gIGdyaWRUZW1wbGF0ZVJvd3M6IHt9LFxuICBncmlkVGVtcGxhdGVBcmVhczoge30sXG4gIGdyaWRBcmVhOiB7fSxcbiAgLy8gcG9zaXRpb25zXG4gIHBvc2l0aW9uOiB7fSxcbiAgekluZGV4OiB7XG4gICAgdGhlbWVLZXk6ICd6SW5kZXgnXG4gIH0sXG4gIHRvcDoge30sXG4gIHJpZ2h0OiB7fSxcbiAgYm90dG9tOiB7fSxcbiAgbGVmdDoge30sXG4gIC8vIHNoYWRvd3NcbiAgYm94U2hhZG93OiB7XG4gICAgdGhlbWVLZXk6ICdzaGFkb3dzJ1xuICB9LFxuICAvLyBzaXppbmdcbiAgd2lkdGg6IHtcbiAgICB0cmFuc2Zvcm06IHNpemluZ1RyYW5zZm9ybVxuICB9LFxuICBtYXhXaWR0aDoge1xuICAgIHN0eWxlOiBtYXhXaWR0aFxuICB9LFxuICBtaW5XaWR0aDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIGhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1heEhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIG1pbkhlaWdodDoge1xuICAgIHRyYW5zZm9ybTogc2l6aW5nVHJhbnNmb3JtXG4gIH0sXG4gIGJveFNpemluZzoge30sXG4gIC8vIHR5cG9ncmFwaHlcbiAgZm9udEZhbWlseToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFNpemU6IHtcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH0sXG4gIGZvbnRTdHlsZToge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgZm9udFdlaWdodDoge1xuICAgIHRoZW1lS2V5OiAndHlwb2dyYXBoeSdcbiAgfSxcbiAgbGV0dGVyU3BhY2luZzoge30sXG4gIHRleHRUcmFuc2Zvcm06IHt9LFxuICBsaW5lSGVpZ2h0OiB7fSxcbiAgdGV4dEFsaWduOiB7fSxcbiAgdHlwb2dyYXBoeToge1xuICAgIGNzc1Byb3BlcnR5OiBmYWxzZSxcbiAgICB0aGVtZUtleTogJ3R5cG9ncmFwaHknXG4gIH1cbn07XG5leHBvcnQgZGVmYXVsdCBkZWZhdWx0U3hDb25maWc7IiwiaW1wb3J0IF9leHRlbmRzIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzXCI7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmNvbnN0IF9leGNsdWRlZCA9IFtcInN4XCJdO1xuaW1wb3J0IHsgaXNQbGFpbk9iamVjdCB9IGZyb20gJ0BtdWkvdXRpbHMvZGVlcG1lcmdlJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuY29uc3Qgc3BsaXRQcm9wcyA9IHByb3BzID0+IHtcbiAgdmFyIF9wcm9wcyR0aGVtZSR1bnN0YWJsZSwgX3Byb3BzJHRoZW1lO1xuICBjb25zdCByZXN1bHQgPSB7XG4gICAgc3lzdGVtUHJvcHM6IHt9LFxuICAgIG90aGVyUHJvcHM6IHt9XG4gIH07XG4gIGNvbnN0IGNvbmZpZyA9IChfcHJvcHMkdGhlbWUkdW5zdGFibGUgPSBwcm9wcyA9PSBudWxsIHx8IChfcHJvcHMkdGhlbWUgPSBwcm9wcy50aGVtZSkgPT0gbnVsbCA/IHZvaWQgMCA6IF9wcm9wcyR0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF9wcm9wcyR0aGVtZSR1bnN0YWJsZSA6IGRlZmF1bHRTeENvbmZpZztcbiAgT2JqZWN0LmtleXMocHJvcHMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgaWYgKGNvbmZpZ1twcm9wXSkge1xuICAgICAgcmVzdWx0LnN5c3RlbVByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJlc3VsdC5vdGhlclByb3BzW3Byb3BdID0gcHJvcHNbcHJvcF07XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHRlbmRTeFByb3AocHJvcHMpIHtcbiAgY29uc3Qge1xuICAgICAgc3g6IGluU3hcbiAgICB9ID0gcHJvcHMsXG4gICAgb3RoZXIgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcm9wcywgX2V4Y2x1ZGVkKTtcbiAgY29uc3Qge1xuICAgIHN5c3RlbVByb3BzLFxuICAgIG90aGVyUHJvcHNcbiAgfSA9IHNwbGl0UHJvcHMob3RoZXIpO1xuICBsZXQgZmluYWxTeDtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaW5TeCkpIHtcbiAgICBmaW5hbFN4ID0gW3N5c3RlbVByb3BzLCAuLi5pblN4XTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgaW5TeCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGZpbmFsU3ggPSAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgcmVzdWx0ID0gaW5TeCguLi5hcmdzKTtcbiAgICAgIGlmICghaXNQbGFpbk9iamVjdChyZXN1bHQpKSB7XG4gICAgICAgIHJldHVybiBzeXN0ZW1Qcm9wcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBfZXh0ZW5kcyh7fSwgc3lzdGVtUHJvcHMsIHJlc3VsdCk7XG4gICAgfTtcbiAgfSBlbHNlIHtcbiAgICBmaW5hbFN4ID0gX2V4dGVuZHMoe30sIHN5c3RlbVByb3BzLCBpblN4KTtcbiAgfVxuICByZXR1cm4gX2V4dGVuZHMoe30sIG90aGVyUHJvcHMsIHtcbiAgICBzeDogZmluYWxTeFxuICB9KTtcbn0iLCJpbXBvcnQgY2FwaXRhbGl6ZSBmcm9tICdAbXVpL3V0aWxzL2NhcGl0YWxpemUnO1xuaW1wb3J0IG1lcmdlIGZyb20gJy4uL21lcmdlJztcbmltcG9ydCB7IGdldFBhdGgsIGdldFN0eWxlVmFsdWUgYXMgZ2V0VmFsdWUgfSBmcm9tICcuLi9zdHlsZSc7XG5pbXBvcnQgeyBoYW5kbGVCcmVha3BvaW50cywgY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0LCByZW1vdmVVbnVzZWRCcmVha3BvaW50cyB9IGZyb20gJy4uL2JyZWFrcG9pbnRzJztcbmltcG9ydCBkZWZhdWx0U3hDb25maWcgZnJvbSAnLi9kZWZhdWx0U3hDb25maWcnO1xuZnVuY3Rpb24gb2JqZWN0c0hhdmVTYW1lS2V5cyguLi5vYmplY3RzKSB7XG4gIGNvbnN0IGFsbEtleXMgPSBvYmplY3RzLnJlZHVjZSgoa2V5cywgb2JqZWN0KSA9PiBrZXlzLmNvbmNhdChPYmplY3Qua2V5cyhvYmplY3QpKSwgW10pO1xuICBjb25zdCB1bmlvbiA9IG5ldyBTZXQoYWxsS2V5cyk7XG4gIHJldHVybiBvYmplY3RzLmV2ZXJ5KG9iamVjdCA9PiB1bmlvbi5zaXplID09PSBPYmplY3Qua2V5cyhvYmplY3QpLmxlbmd0aCk7XG59XG5mdW5jdGlvbiBjYWxsSWZGbihtYXliZUZuLCBhcmcpIHtcbiAgcmV0dXJuIHR5cGVvZiBtYXliZUZuID09PSAnZnVuY3Rpb24nID8gbWF5YmVGbihhcmcpIDogbWF5YmVGbjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvblxuZXhwb3J0IGZ1bmN0aW9uIHVuc3RhYmxlX2NyZWF0ZVN0eWxlRnVuY3Rpb25TeCgpIHtcbiAgZnVuY3Rpb24gZ2V0VGhlbWVWYWx1ZShwcm9wLCB2YWwsIHRoZW1lLCBjb25maWcpIHtcbiAgICBjb25zdCBwcm9wcyA9IHtcbiAgICAgIFtwcm9wXTogdmFsLFxuICAgICAgdGhlbWVcbiAgICB9O1xuICAgIGNvbnN0IG9wdGlvbnMgPSBjb25maWdbcHJvcF07XG4gICAgaWYgKCFvcHRpb25zKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBbcHJvcF06IHZhbFxuICAgICAgfTtcbiAgICB9XG4gICAgY29uc3Qge1xuICAgICAgY3NzUHJvcGVydHkgPSBwcm9wLFxuICAgICAgdGhlbWVLZXksXG4gICAgICB0cmFuc2Zvcm0sXG4gICAgICBzdHlsZVxuICAgIH0gPSBvcHRpb25zO1xuICAgIGlmICh2YWwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgLy8gVE9ETyB2NjogcmVtb3ZlLCBzZWUgaHR0cHM6Ly9naXRodWIuY29tL211aS9tYXRlcmlhbC11aS9wdWxsLzM4MTIzXG4gICAgaWYgKHRoZW1lS2V5ID09PSAndHlwb2dyYXBoeScgJiYgdmFsID09PSAnaW5oZXJpdCcpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIFtwcm9wXTogdmFsXG4gICAgICB9O1xuICAgIH1cbiAgICBjb25zdCB0aGVtZU1hcHBpbmcgPSBnZXRQYXRoKHRoZW1lLCB0aGVtZUtleSkgfHwge307XG4gICAgaWYgKHN0eWxlKSB7XG4gICAgICByZXR1cm4gc3R5bGUocHJvcHMpO1xuICAgIH1cbiAgICBjb25zdCBzdHlsZUZyb21Qcm9wVmFsdWUgPSBwcm9wVmFsdWVGaW5hbCA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgcHJvcFZhbHVlRmluYWwpO1xuICAgICAgaWYgKHByb3BWYWx1ZUZpbmFsID09PSB2YWx1ZSAmJiB0eXBlb2YgcHJvcFZhbHVlRmluYWwgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIEhhdmVuJ3QgZm91bmQgdmFsdWVcbiAgICAgICAgdmFsdWUgPSBnZXRWYWx1ZSh0aGVtZU1hcHBpbmcsIHRyYW5zZm9ybSwgYCR7cHJvcH0ke3Byb3BWYWx1ZUZpbmFsID09PSAnZGVmYXVsdCcgPyAnJyA6IGNhcGl0YWxpemUocHJvcFZhbHVlRmluYWwpfWAsIHByb3BWYWx1ZUZpbmFsKTtcbiAgICAgIH1cbiAgICAgIGlmIChjc3NQcm9wZXJ0eSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgW2Nzc1Byb3BlcnR5XTogdmFsdWVcbiAgICAgIH07XG4gICAgfTtcbiAgICByZXR1cm4gaGFuZGxlQnJlYWtwb2ludHMocHJvcHMsIHZhbCwgc3R5bGVGcm9tUHJvcFZhbHVlKTtcbiAgfVxuICBmdW5jdGlvbiBzdHlsZUZ1bmN0aW9uU3gocHJvcHMpIHtcbiAgICB2YXIgX3RoZW1lJHVuc3RhYmxlX3N4Q29uO1xuICAgIGNvbnN0IHtcbiAgICAgIHN4LFxuICAgICAgdGhlbWUgPSB7fVxuICAgIH0gPSBwcm9wcyB8fCB7fTtcbiAgICBpZiAoIXN4KSB7XG4gICAgICByZXR1cm4gbnVsbDsgLy8gRW1vdGlvbiAmIHN0eWxlZC1jb21wb25lbnRzIHdpbGwgbmVnbGVjdCBudWxsXG4gICAgfVxuICAgIGNvbnN0IGNvbmZpZyA9IChfdGhlbWUkdW5zdGFibGVfc3hDb24gPSB0aGVtZS51bnN0YWJsZV9zeENvbmZpZykgIT0gbnVsbCA/IF90aGVtZSR1bnN0YWJsZV9zeENvbiA6IGRlZmF1bHRTeENvbmZpZztcblxuICAgIC8qXG4gICAgICogUmVjZWl2ZSBgc3hJbnB1dGAgYXMgb2JqZWN0IG9yIGNhbGxiYWNrXG4gICAgICogYW5kIHRoZW4gcmVjdXJzaXZlbHkgY2hlY2sga2V5cyAmIHZhbHVlcyB0byBjcmVhdGUgbWVkaWEgcXVlcnkgb2JqZWN0IHN0eWxlcy5cbiAgICAgKiAodGhlIHJlc3VsdCB3aWxsIGJlIHVzZWQgaW4gYHN0eWxlZGApXG4gICAgICovXG4gICAgZnVuY3Rpb24gdHJhdmVyc2Uoc3hJbnB1dCkge1xuICAgICAgbGV0IHN4T2JqZWN0ID0gc3hJbnB1dDtcbiAgICAgIGlmICh0eXBlb2Ygc3hJbnB1dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBzeE9iamVjdCA9IHN4SW5wdXQodGhlbWUpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3hJbnB1dCAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgLy8gdmFsdWVcbiAgICAgICAgcmV0dXJuIHN4SW5wdXQ7XG4gICAgICB9XG4gICAgICBpZiAoIXN4T2JqZWN0KSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfVxuICAgICAgY29uc3QgZW1wdHlCcmVha3BvaW50cyA9IGNyZWF0ZUVtcHR5QnJlYWtwb2ludE9iamVjdCh0aGVtZS5icmVha3BvaW50cyk7XG4gICAgICBjb25zdCBicmVha3BvaW50c0tleXMgPSBPYmplY3Qua2V5cyhlbXB0eUJyZWFrcG9pbnRzKTtcbiAgICAgIGxldCBjc3MgPSBlbXB0eUJyZWFrcG9pbnRzO1xuICAgICAgT2JqZWN0LmtleXMoc3hPYmplY3QpLmZvckVhY2goc3R5bGVLZXkgPT4ge1xuICAgICAgICBjb25zdCB2YWx1ZSA9IGNhbGxJZkZuKHN4T2JqZWN0W3N0eWxlS2V5XSwgdGhlbWUpO1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBpZiAoY29uZmlnW3N0eWxlS2V5XSkge1xuICAgICAgICAgICAgICBjc3MgPSBtZXJnZShjc3MsIGdldFRoZW1lVmFsdWUoc3R5bGVLZXksIHZhbHVlLCB0aGVtZSwgY29uZmlnKSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBjb25zdCBicmVha3BvaW50c1ZhbHVlcyA9IGhhbmRsZUJyZWFrcG9pbnRzKHtcbiAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICB9LCB2YWx1ZSwgeCA9PiAoe1xuICAgICAgICAgICAgICAgIFtzdHlsZUtleV06IHhcbiAgICAgICAgICAgICAgfSkpO1xuICAgICAgICAgICAgICBpZiAob2JqZWN0c0hhdmVTYW1lS2V5cyhicmVha3BvaW50c1ZhbHVlcywgdmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY3NzW3N0eWxlS2V5XSA9IHN0eWxlRnVuY3Rpb25TeCh7XG4gICAgICAgICAgICAgICAgICBzeDogdmFsdWUsXG4gICAgICAgICAgICAgICAgICB0aGVtZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgYnJlYWtwb2ludHNWYWx1ZXMpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNzcyA9IG1lcmdlKGNzcywgZ2V0VGhlbWVWYWx1ZShzdHlsZUtleSwgdmFsdWUsIHRoZW1lLCBjb25maWcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlbW92ZVVudXNlZEJyZWFrcG9pbnRzKGJyZWFrcG9pbnRzS2V5cywgY3NzKTtcbiAgICB9XG4gICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoc3gpID8gc3gubWFwKHRyYXZlcnNlKSA6IHRyYXZlcnNlKHN4KTtcbiAgfVxuICByZXR1cm4gc3R5bGVGdW5jdGlvblN4O1xufVxuY29uc3Qgc3R5bGVGdW5jdGlvblN4ID0gdW5zdGFibGVfY3JlYXRlU3R5bGVGdW5jdGlvblN4KCk7XG5zdHlsZUZ1bmN0aW9uU3guZmlsdGVyUHJvcHMgPSBbJ3N4J107XG5leHBvcnQgZGVmYXVsdCBzdHlsZUZ1bmN0aW9uU3g7IiwiJ3VzZSBjbGllbnQnO1xuXG5pbXBvcnQgY3JlYXRlVGhlbWUgZnJvbSAnLi9jcmVhdGVUaGVtZSc7XG5pbXBvcnQgdXNlVGhlbWVXaXRob3V0RGVmYXVsdCBmcm9tICcuL3VzZVRoZW1lV2l0aG91dERlZmF1bHQnO1xuZXhwb3J0IGNvbnN0IHN5c3RlbURlZmF1bHRUaGVtZSA9IGNyZWF0ZVRoZW1lKCk7XG5mdW5jdGlvbiB1c2VUaGVtZShkZWZhdWx0VGhlbWUgPSBzeXN0ZW1EZWZhdWx0VGhlbWUpIHtcbiAgcmV0dXJuIHVzZVRoZW1lV2l0aG91dERlZmF1bHQoZGVmYXVsdFRoZW1lKTtcbn1cbmV4cG9ydCBkZWZhdWx0IHVzZVRoZW1lOyIsIid1c2UgY2xpZW50JztcblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgVGhlbWVDb250ZXh0IH0gZnJvbSAnQG11aS9zdHlsZWQtZW5naW5lJztcbmZ1bmN0aW9uIGlzT2JqZWN0RW1wdHkob2JqKSB7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmopLmxlbmd0aCA9PT0gMDtcbn1cbmZ1bmN0aW9uIHVzZVRoZW1lKGRlZmF1bHRUaGVtZSA9IG51bGwpIHtcbiAgY29uc3QgY29udGV4dFRoZW1lID0gUmVhY3QudXNlQ29udGV4dChUaGVtZUNvbnRleHQpO1xuICByZXR1cm4gIWNvbnRleHRUaGVtZSB8fCBpc09iamVjdEVtcHR5KGNvbnRleHRUaGVtZSkgPyBkZWZhdWx0VGhlbWUgOiBjb250ZXh0VGhlbWU7XG59XG5leHBvcnQgZGVmYXVsdCB1c2VUaGVtZTsiXSwibmFtZXMiOlsiR2xvYmFsU3R5bGVzIiwicHJvcHMiLCJzdHlsZXMiLCJkZWZhdWx0VGhlbWUiLCJnbG9iYWxTdHlsZXMiLCJ0aGVtZUlucHV0Iiwib2JqIiwiT2JqZWN0Iiwia2V5cyIsImxlbmd0aCIsImNhY2hlIiwiU3R5bGVkRW5naW5lUHJvdmlkZXIiLCJpbmplY3RGaXJzdCIsImNoaWxkcmVuIiwiQyIsInZhbHVlIiwiZG9jdW1lbnQiLCJrZXkiLCJwcmVwZW5kIiwic3R5bGVkIiwidGFnIiwib3B0aW9ucyIsImludGVybmFsX3Byb2Nlc3NTdHlsZXMiLCJwcm9jZXNzb3IiLCJBcnJheSIsImlzQXJyYXkiLCJfX2Vtb3Rpb25fc3R5bGVzIiwiX2ludGVyb3BSZXF1aXJlRGVmYXVsdCIsImV4cG9ydHMiLCJjb2xvciIsImRlY29tcG9zZUNvbG9yIiwiY2xhbXBXcmFwcGVyIiwidHlwZSIsInZhbHVlcyIsInJlY29tcG9zZUNvbG9yIiwiZGFya2VuIiwiZm9yZWdyb3VuZCIsImJhY2tncm91bmQiLCJsdW1BIiwiZ2V0THVtaW5hbmNlIiwibHVtQiIsIk1hdGgiLCJtYXgiLCJtaW4iLCJsaWdodGVuIiwiX2Zvcm1hdE11aUVycm9yTWVzc2FnZTIiLCJfY2xhbXAiLCJkZWZhdWx0IiwiY2hhckF0Iiwic2xpY2UiLCJyZSIsIlJlZ0V4cCIsImNvbG9ycyIsIm1hdGNoIiwibWFwIiwibiIsImluZGV4IiwicGFyc2VJbnQiLCJyb3VuZCIsImpvaW4iLCJoZXhUb1JnYiIsIm1hcmtlciIsImluZGV4T2YiLCJzdWJzdHJpbmciLCJFcnJvciIsImNvbG9yU3BhY2UiLCJzcGxpdCIsInNoaWZ0IiwicGFyc2VGbG9hdCIsImkiLCJyZ2IiLCJoIiwicyIsImwiLCJhIiwiZiIsImsiLCJwdXNoIiwiaHNsVG9SZ2IiLCJ2YWwiLCJOdW1iZXIiLCJ0b0ZpeGVkIiwiY29lZmZpY2llbnQiLCJpbnB1dCIsInRoZW1lSWQiLCJzeXN0ZW1EZWZhdWx0VGhlbWUiLCJyb290U2hvdWxkRm9yd2FyZFByb3AiLCJzaG91bGRGb3J3YXJkUHJvcCIsInNsb3RTaG91bGRGb3J3YXJkUHJvcCIsInN5c3RlbVN4IiwiX3N0eWxlRnVuY3Rpb25TeCIsIl9leHRlbmRzMiIsInRoZW1lIiwicmVzb2x2ZVRoZW1lIiwiX19tdWlfc3lzdGVtU3giLCJpbnB1dE9wdGlvbnMiLCJfc3R5bGVkRW5naW5lIiwiZmlsdGVyIiwic3R5bGUiLCJuYW1lIiwiY29tcG9uZW50TmFtZSIsInNsb3QiLCJjb21wb25lbnRTbG90Iiwic2tpcFZhcmlhbnRzUmVzb2x2ZXIiLCJpbnB1dFNraXBWYXJpYW50c1Jlc29sdmVyIiwic2tpcFN4IiwiaW5wdXRTa2lwU3giLCJvdmVycmlkZXNSZXNvbHZlciIsImRlZmF1bHRPdmVycmlkZXNSZXNvbHZlciIsImxvd2VyY2FzZUZpcnN0TGV0dGVyIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UyIiwiX2V4Y2x1ZGVkMyIsInVuZGVmaW5lZCIsInNob3VsZEZvcndhcmRQcm9wT3B0aW9uIiwiY2hhckNvZGVBdCIsImlzU3RyaW5nVGFnIiwiZGVmYXVsdFN0eWxlZFJlc29sdmVyIiwibGFiZWwiLCJ0cmFuc2Zvcm1TdHlsZUFyZyIsInN0eWxlc0FyZyIsIl9fZW1vdGlvbl9yZWFsIiwiX2RlZXBtZXJnZSIsImlzUGxhaW5PYmplY3QiLCJwcm9jZXNzU3R5bGVBcmciLCJtdWlTdHlsZWRSZXNvbHZlciIsInN0eWxlQXJnIiwiZXhwcmVzc2lvbnMiLCJ0cmFuc2Zvcm1lZFN0eWxlQXJnIiwiZXhwcmVzc2lvbnNXaXRoRGVmYXVsdFRoZW1lIiwiY29tcG9uZW50cyIsInN0eWxlT3ZlcnJpZGVzIiwicmVzb2x2ZWRTdHlsZU92ZXJyaWRlcyIsImVudHJpZXMiLCJmb3JFYWNoIiwic2xvdEtleSIsInNsb3RTdHlsZSIsIl90aGVtZSRjb21wb25lbnRzIiwidmFyaWFudHMiLCJudW1PZkN1c3RvbUZuc0FwcGxpZWQiLCJwbGFjZWhvbGRlcnMiLCJmaWxsIiwicmF3IiwiQ29tcG9uZW50IiwibXVpTmFtZSIsIndpdGhDb25maWciLCJlIiwiciIsIl9fZXNNb2R1bGUiLCJ0IiwiX2dldFJlcXVpcmVXaWxkY2FyZENhY2hlIiwiaGFzIiwiZ2V0IiwiX19wcm90b19fIiwiZGVmaW5lUHJvcGVydHkiLCJnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ1IiwicHJvdG90eXBlIiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwic2V0IiwiX2ludGVyb3BSZXF1aXJlV2lsZGNhcmQiLCJfY3JlYXRlVGhlbWUiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiV2Vha01hcCIsInByb3AiLCJzdHJpbmciLCJ0b0xvd2VyQ2FzZSIsImNhbGxhYmxlU3R5bGUiLCJfcmVmIiwib3duZXJTdGF0ZSIsInJlc29sdmVkU3R5bGVzQXJnIiwiZmxhdE1hcCIsInJlc29sdmVkU3R5bGUiLCJyZXN1bHQiLCJ2YXJpYW50IiwiaXNNYXRjaCIsImNyZWF0ZVRoZW1lIiwic3R5bGVGdW5jdGlvblN4IiwiY3JlYXRlU3R5bGVkIiwiZGVmYXVsdENyZWF0ZVN0eWxlZENvbXBvbmVudCIsInJvb3QiLCJjYXBpdGFsaXplIiwiU3RyaW5nIiwibWF4V2lkdGgiLCJmaXhlZCIsImRpc2FibGVHdXR0ZXJzIiwidXNlVGhlbWVQcm9wc0RlZmF1bHQiLCJpblByb3BzIiwidXNlVGhlbWUiLCJwYXJhbXMiLCJkZWZhdWx0UHJvcHMiLCJyZXNvbHZlUHJvcHMiLCJnZXRUaGVtZVByb3BzIiwidXNlVGhlbWVQcm9wcyIsInVzZVV0aWxpdHlDbGFzc2VzIiwiY2xhc3NlcyIsInNsb3RzIiwiY29tcG9zZUNsYXNzZXMiLCJnZW5lcmF0ZVV0aWxpdHlDbGFzcyIsImNyZWF0ZUNvbnRhaW5lciIsImNyZWF0ZVN0eWxlZENvbXBvbmVudCIsIkNvbnRhaW5lclJvb3QiLCJ3aWR0aCIsIm1hcmdpbkxlZnQiLCJib3hTaXppbmciLCJtYXJnaW5SaWdodCIsImRpc3BsYXkiLCJwYWRkaW5nTGVmdCIsInNwYWNpbmciLCJwYWRkaW5nUmlnaHQiLCJicmVha3BvaW50cyIsInVwIiwicmVkdWNlIiwiYWNjIiwiYnJlYWtwb2ludFZhbHVlS2V5IiwiYnJlYWtwb2ludCIsInVuaXQiLCJ4cyIsInJlZiIsImNsYXNzTmFtZSIsImNvbXBvbmVudCIsIm90aGVyIiwiYXMiLCJjbHN4IiwiUHJvcHNDb250ZXh0IiwidXNlRGVmYXVsdFByb3BzIiwiY29uZmlnIiwiUHJvdmlkZXIiLCJ1cHBlclRoZW1lIiwiUnRsQ29udGV4dCIsInVzZVJ0bCIsIlN5bWJvbCIsImZvciIsImxvY2FsVGhlbWUiLCJvdXRlclRoZW1lIiwib3V0cHV0IiwibWVyZ2VPdXRlckxvY2FsVGhlbWUiLCJuZXN0ZWQiLCJFTVBUWV9USEVNRSIsInVzZVRoZW1lU2NvcGluZyIsImlzUHJpdmF0ZSIsInJlc29sdmVkVGhlbWUiLCJtZXJnZWRUaGVtZSIsInVzZVRoZW1lV2l0aG91dERlZmF1bHQiLCJ1cHBlclByaXZhdGVUaGVtZSIsImVuZ2luZVRoZW1lIiwicHJpdmF0ZVRoZW1lIiwicnRsVmFsdWUiLCJkaXJlY3Rpb24iLCJSdGxQcm92aWRlciIsIkRlZmF1bHRQcm9wc1Byb3ZpZGVyIiwic20iLCJtZCIsImxnIiwieGwiLCJkZWZhdWx0QnJlYWtwb2ludHMiLCJoYW5kbGVCcmVha3BvaW50cyIsInByb3BWYWx1ZSIsInN0eWxlRnJvbVByb3BWYWx1ZSIsInRoZW1lQnJlYWtwb2ludHMiLCJpdGVtIiwiY3NzS2V5IiwiY3JlYXRlRW1wdHlCcmVha3BvaW50T2JqZWN0IiwiYnJlYWtwb2ludHNJbnB1dCIsIl9icmVha3BvaW50c0lucHV0JGtleSIsInJlbW92ZVVudXNlZEJyZWFrcG9pbnRzIiwiYnJlYWtwb2ludEtleXMiLCJicmVha3BvaW50T3V0cHV0IiwicmVzb2x2ZUJyZWFrcG9pbnRWYWx1ZXMiLCJicmVha3BvaW50VmFsdWVzIiwiYmFzZSIsImN1c3RvbUJhc2UiLCJicmVha3BvaW50c0tleXMiLCJjb21wdXRlQnJlYWtwb2ludHNCYXNlIiwicHJldmlvdXMiLCJjcmVhdGVCb3giLCJkZWZhdWx0Q2xhc3NOYW1lIiwiZ2VuZXJhdGVDbGFzc05hbWUiLCJCb3hSb290IiwiX2V4dGVuZFN4UHJvcCIsImFwcGx5U3R5bGVzIiwidGhpcyIsInZhcnMiLCJnZXRDb2xvclNjaGVtZVNlbGVjdG9yIiwic2VsZWN0b3IiLCJyZXBsYWNlIiwicGFsZXR0ZSIsIm1vZGUiLCJzb3J0QnJlYWtwb2ludHNWYWx1ZXMiLCJicmVha3BvaW50c0FzQXJyYXkiLCJzb3J0IiwiYnJlYWtwb2ludDEiLCJicmVha3BvaW50MiIsImNyZWF0ZUJyZWFrcG9pbnRzIiwic3RlcCIsInNvcnRlZFZhbHVlcyIsImRvd24iLCJiZXR3ZWVuIiwic3RhcnQiLCJlbmQiLCJlbmRJbmRleCIsIm9ubHkiLCJub3QiLCJrZXlJbmRleCIsImJvcmRlclJhZGl1cyIsImFyZ3MiLCJwYWxldHRlSW5wdXQiLCJzcGFjaW5nSW5wdXQiLCJzaGFwZSIsInNoYXBlSW5wdXQiLCJtdWkiLCJ0cmFuc2Zvcm0iLCJhcmdzSW5wdXQiLCJhcmd1bWVudCIsImNyZWF0ZVNwYWNpbmciLCJtdWlUaGVtZSIsImRlZXBtZXJnZSIsInVuc3RhYmxlX3N4Q29uZmlnIiwiZGVmYXVsdFN4Q29uZmlnIiwidW5zdGFibGVfc3giLCJzeCIsImNsb25lIiwicHJvcGVydGllcyIsIm0iLCJwIiwiZGlyZWN0aW9ucyIsImIiLCJ4IiwieSIsImFsaWFzZXMiLCJtYXJnaW5YIiwibWFyZ2luWSIsInBhZGRpbmdYIiwicGFkZGluZ1kiLCJnZXRDc3NQcm9wZXJ0aWVzIiwiYXJnIiwicHJvcGVydHkiLCJkaXIiLCJmbiIsIm1lbW9pemUiLCJtYXJnaW5LZXlzIiwicGFkZGluZ0tleXMiLCJzcGFjaW5nS2V5cyIsImNyZWF0ZVVuYXJ5VW5pdCIsInRoZW1lS2V5IiwiZGVmYXVsdFZhbHVlIiwicHJvcE5hbWUiLCJfZ2V0UGF0aCIsInRoZW1lU3BhY2luZyIsImFicyIsImNyZWF0ZVVuYXJ5U3BhY2luZyIsImdldFZhbHVlIiwidHJhbnNmb3JtZXIiLCJ0cmFuc2Zvcm1lZCIsImNzc1Byb3BlcnRpZXMiLCJjc3NQcm9wZXJ0eSIsImdldFN0eWxlRnJvbVByb3BWYWx1ZSIsInJlc29sdmVDc3NQcm9wZXJ0eSIsIm1lcmdlIiwibWFyZ2luIiwicGFkZGluZyIsInByb3BUeXBlcyIsImZpbHRlclByb3BzIiwiZ2V0UGF0aCIsInBhdGgiLCJjaGVja1ZhcnMiLCJnZXRTdHlsZVZhbHVlIiwidGhlbWVNYXBwaW5nIiwicHJvcFZhbHVlRmluYWwiLCJ1c2VyVmFsdWUiLCJoYW5kbGVycyIsImNvbmNhdCIsImJvcmRlclRyYW5zZm9ybSIsImNyZWF0ZUJvcmRlclN0eWxlIiwiYm9yZGVyIiwiYm9yZGVyVG9wIiwiYm9yZGVyUmlnaHQiLCJib3JkZXJCb3R0b20iLCJib3JkZXJMZWZ0IiwiYm9yZGVyQ29sb3IiLCJib3JkZXJUb3BDb2xvciIsImJvcmRlclJpZ2h0Q29sb3IiLCJib3JkZXJCb3R0b21Db2xvciIsImJvcmRlckxlZnRDb2xvciIsIm91dGxpbmUiLCJvdXRsaW5lQ29sb3IiLCJnYXAiLCJjb2x1bW5HYXAiLCJyb3dHYXAiLCJwYWxldHRlVHJhbnNmb3JtIiwic2l6aW5nVHJhbnNmb3JtIiwiX3Byb3BzJHRoZW1lIiwiX3Byb3BzJHRoZW1lMiIsIm1pbldpZHRoIiwiaGVpZ2h0IiwibWF4SGVpZ2h0IiwibWluSGVpZ2h0IiwiYmdjb2xvciIsImJhY2tncm91bmRDb2xvciIsInB0IiwicHIiLCJwYiIsInBsIiwicHgiLCJweSIsInBhZGRpbmdUb3AiLCJwYWRkaW5nQm90dG9tIiwicGFkZGluZ0lubGluZSIsInBhZGRpbmdJbmxpbmVTdGFydCIsInBhZGRpbmdJbmxpbmVFbmQiLCJwYWRkaW5nQmxvY2siLCJwYWRkaW5nQmxvY2tTdGFydCIsInBhZGRpbmdCbG9ja0VuZCIsIm10IiwibXIiLCJtYiIsIm1sIiwibXgiLCJteSIsIm1hcmdpblRvcCIsIm1hcmdpbkJvdHRvbSIsIm1hcmdpbklubGluZSIsIm1hcmdpbklubGluZVN0YXJ0IiwibWFyZ2luSW5saW5lRW5kIiwibWFyZ2luQmxvY2siLCJtYXJnaW5CbG9ja1N0YXJ0IiwibWFyZ2luQmxvY2tFbmQiLCJkaXNwbGF5UHJpbnQiLCJvdmVyZmxvdyIsInRleHRPdmVyZmxvdyIsInZpc2liaWxpdHkiLCJ3aGl0ZVNwYWNlIiwiZmxleEJhc2lzIiwiZmxleERpcmVjdGlvbiIsImZsZXhXcmFwIiwianVzdGlmeUNvbnRlbnQiLCJhbGlnbkl0ZW1zIiwiYWxpZ25Db250ZW50Iiwib3JkZXIiLCJmbGV4IiwiZmxleEdyb3ciLCJmbGV4U2hyaW5rIiwiYWxpZ25TZWxmIiwianVzdGlmeUl0ZW1zIiwianVzdGlmeVNlbGYiLCJncmlkQ29sdW1uIiwiZ3JpZFJvdyIsImdyaWRBdXRvRmxvdyIsImdyaWRBdXRvQ29sdW1ucyIsImdyaWRBdXRvUm93cyIsImdyaWRUZW1wbGF0ZUNvbHVtbnMiLCJncmlkVGVtcGxhdGVSb3dzIiwiZ3JpZFRlbXBsYXRlQXJlYXMiLCJncmlkQXJlYSIsInBvc2l0aW9uIiwiekluZGV4IiwidG9wIiwicmlnaHQiLCJib3R0b20iLCJsZWZ0IiwiYm94U2hhZG93IiwiZm9udEZhbWlseSIsImZvbnRTaXplIiwiZm9udFN0eWxlIiwiZm9udFdlaWdodCIsImxldHRlclNwYWNpbmciLCJ0ZXh0VHJhbnNmb3JtIiwibGluZUhlaWdodCIsInRleHRBbGlnbiIsInR5cG9ncmFwaHkiLCJzcGxpdFByb3BzIiwiX3Byb3BzJHRoZW1lJHVuc3RhYmxlIiwic3lzdGVtUHJvcHMiLCJvdGhlclByb3BzIiwiZXh0ZW5kU3hQcm9wIiwiaW5TeCIsImZpbmFsU3giLCJ1bnN0YWJsZV9jcmVhdGVTdHlsZUZ1bmN0aW9uU3giLCJnZXRUaGVtZVZhbHVlIiwiX3RoZW1lJHVuc3RhYmxlX3N4Q29uIiwidHJhdmVyc2UiLCJzeElucHV0Iiwic3hPYmplY3QiLCJlbXB0eUJyZWFrcG9pbnRzIiwiY3NzIiwic3R5bGVLZXkiLCJtYXliZUZuIiwiYnJlYWtwb2ludHNWYWx1ZXMiLCJvYmplY3RzIiwiYWxsS2V5cyIsIm9iamVjdCIsInVuaW9uIiwiU2V0IiwiZXZlcnkiLCJzaXplIiwib2JqZWN0c0hhdmVTYW1lS2V5cyIsImNvbnRleHRUaGVtZSIsIlQiXSwic291cmNlUm9vdCI6IiJ9