@touchtech/baselayer-ui 8.3.26 → 8.3.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
1
  /*! For license information please see index.js.LICENSE.txt */
2
- (()=>{var e={3349:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},2122:(e,t,n)=>{"use strict";function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},1788:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.d(t,{Z:()=>r})},9756:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},2565:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(6689);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=function(e){return o.createElement("svg",a({xmlns:"http://www.w3.org/2000/svg",width:15,height:15,fill:"none"},e),r||(r=o.createElement("path",{stroke:"currentColor",strokeLinecap:"square",d:"m1 7 4.5 4.5L14 3"})))}},5348:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useOutsideClick:()=>a,usePromise:()=>l,useSWRHooksConfig:()=>X,useToggle:()=>J});var r=n(6689),o={capture:!0};function a(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function l(){var e=this,t=i((0,r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=(0,r.useRef)(!1);(0,r.useEffect)((function(){return a.current=!1,function(){a.current=!0}}),[]);var l=(0,r.useCallback)((function(t){return n=e,r=void 0,l=function(){var e,n;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(l){return function(u){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,u])}}}(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,t){function o(e){try{u(l.next(e))}catch(e){t(e)}}function a(e){try{u(l.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,a)}u((l=l.apply(n,r||[])).next())}));var n,r,i,l}),[a]);return[n,l]}Object.create,Object.create;var u=n(1688);const s=new WeakMap,c={},d={},f=()=>{},p=f(),v=Object,h=e=>e===p,m=e=>"function"==typeof e,g=(e,t)=>({...e,...t}),_="undefined",b=typeof window!=_,y=typeof document!=_,O=(e,t)=>{const n=s.get(e);return[()=>e.get(t)||c,r=>{if(!h(t)){const o=e.get(t);t in d||(d[t]=o),n[5](t,g(o,r),o||c)}},n[6],()=>!h(t)&&t in d?d[t]:e.get(t)||c]},w=new WeakMap;let E=0;const M=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(v(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=w.get(e),o)return o;if(o=++E+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=M(e[a])+",";w.set(e,o)}if(n==v){o="#";const t=v.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+M(e[a])+",");w.set(e,o)}}return o};let S=!0;const[x,C]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],P={isOnline:()=>S,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},j={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),x("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),C("focus",e)}),initReconnect:e=>{const t=()=>{S=!0,e()},n=()=>{S=!1};return x("online",t),x("offline",n),()=>{C("online",t),C("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,N=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),T=e=>{if(m(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?M(e):"",t]};let L=0;const z=()=>++L,A=2;var H=A;async function B(...e){const[t,n,r,o]=e,a=g({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const c=!1!==a.revalidate,d=e=>"function"==typeof l?l(e):!1!==l,f=a.throwOnError;if(m(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!/^\$(inf|sub)\$/.test(o)&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=T(n);if(!o)return;const[a,l]=O(t,o),[v,g,_]=s.get(t),b=v[o],y=()=>c&&(delete _[o],b&&b[0])?b[0](A).then((()=>a().data)):a().data;if(e.length<3)return y();let w,E=r;const M=z();g[o]=[M,0];const S=!h(u),x=a(),C=x.data,P=x._c,j=h(P)?C:P;if(S&&(u=m(u)?u(j):u,l({data:u,_c:j})),m(E))try{E=E(j)}catch(e){w=e}if(E&&m(E.then)){if(E=await E.catch((e=>{w=e})),M!==g[o][0]){if(w)throw w;return E}w&&S&&d(w)&&(i=!0,E=j,l({data:E,_c:p}))}i&&(w||(m(i)&&(E=i(E,j)),l({data:E,_c:p}))),g[o][1]=z();const I=await y();if(l({_c:p}),!w)return i?I:E;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!s.has(e)){const n=g(j,t),r={},o=B.bind(p,e);let a=f;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(const e of o)e(n,r)},c=()=>{if(!s.has(e)&&(s.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));a=()=>{t&&t(),o&&o(),s.delete(e)}}};return c(),[e,o,c,a]}return[e,s.get(e)[4]]},[W,G]=V(new Map),U=g({onLoadingSlow:f,onSuccess:f,onError:f,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!h(a)&&i>a||setTimeout(r,l,o)},onDiscarded:f,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:N?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:N?5e3:3e3,compare:(e,t)=>M(e)==M(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},P),Z=(0,r.createContext)({}),K=b&&window.__SWR_DEVTOOLS_USE__,q=K?window.__SWR_DEVTOOLS_USE__:[],Q=()=>g(U,(0,r.useContext)(Z));q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=T(t)[0],[,,,o]=s.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));K&&(window.__SWR_DEVTOOLS_REACT__=r);const Y={dedupe:!0};function X(){var e=Q();return(0,r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function J(e){void 0===e&&(e=!1);var t=i((0,r.useState)(e),2),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}v.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(Z),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=g(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=g(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,u=(0,r.useRef)(p);l&&!u.current&&(u.current=V(l(i.cache||W),a));const s=u.current;return s&&(i.cache=s[0],i.mutate=s[1]),D((()=>{if(s)return s[2]&&s[2](),s[3]}),[]),(0,r.createElement)(Z.Provider,g(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},5580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"umKAZmLkARLzX3gnuKkp",left:"u1l5AJGbUiP6RVFIKxOI",small:"hxZpK9CpBK1wR0W0v4SD",large:"o9DYmt4xfLaImiVzI9dQ",xlarge:"qmEVxSZS5kfL3aVbee1n",inverted:"CNOZHLd9XbokzOW6LYBP",rounded:"jJCAzw2SyaH4tIWXrAlR",rightOffset:"KGCu7aPjQy_aFNjHWNuw",leftOffset:"dDHYyGzXNi773FAl13GX",noShadow:"lQF1YcUqM0OHvPSlSwl_",noBorder:"sEo25Eiv6zs1D_x5q8Vy",transparent:"vm3cmANNuYlaQM5Yqz9G",stretchHorizontally:"Pikfzj7zYg2IntdJymuK",stretchVertically:"oSgV5cwX6inkSbCG98w8",noPadding:"gSZrGR1xqm8Q1iRUfGga",content:"pYLUj9noAqT8WytjDOOb"}},3391:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Unj4rp1Dy71ACruzXl75",left:"EXWMRvveRvQifixzTH02",small:"_U0znUk5QTAzPnS2gaLC",medium:"aH8u4s2MtYc5y4vyubDw",large:"c306yV78al_eGwBSkmFm",xlarge:"xvA1meUmE28AEOpjsWc9",inverted:"WB77YIDOSwJoX68NjlUG",rounded:"k2nJCsENNgCz2Hlsj_bG",rightOffset:"jAe5EVE37OrKYvkXdc1s",leftOffset:"DgbtB6G4LoBDd04P_MzO",noShadow:"KpQI95_f8nHvk7G2J6h8",transparent:"L8PnxUQogzgFMMT7QI4d",stretchHorizontally:"JulaxSccoGmqtgTNJmk9",stretchVertically:"zTYr9W7g2SqbVjPFAokG",noPadding:"UHzTm51kVyll52_S7sGB",noBorder:"hRP1XYfuJ49TsYU_cO5A",disabled:"lwWITPhM9TMo585Dsaw8",content:"MyT_PufJdEvsZE3hSW8P"}},7941:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={checkbox:"sy8lKVWP56AlOR7ys_9A",small:"XjfpcuPtguFZvKrxxt7y",medium:"tLP3dZWepXH3HKg17sOH",large:"Wgp9qHWDrQi9fmcxQIVK",xlarge:"lUA6tpLkWcGFgnoqCFvu"}},4560:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorSwatch:"PvbeBm4SMtMqlQNTyQjQ",small:"S7E3EPy_AWQukEexuvTf",large:"a1FsItKPQEOBeTqBCuDl",xlarge:"sFhgQEN_UOL3ZxOAR1Ie",selected:"aUx2uSBSs14VqwPqjvlQ",srOnly:"JIQmeZdd9TFl5I_gifPi"}},7855:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},2838:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawer:"U3dCzqTyynyzBn2mFkmW",visible:"sTcJdQUaZPOeseD_2fe0",drawerPaper:"I3Z0jA85NrYHJ1wDZHWb",drawerPaperEnter:"MWLbaUZIM1JbDLE3H0_Q",drawerPaperEnterActive:"reBHfkDZXiKwiRvYTfHu",drawerPaperEnterDone:"J5dmw7woKvwgujgbB0qV",drawerPaperExit:"rm7jH2Sq7wf2d9IlSevk",drawerPaperExitActive:"nbeoVr9VpIXAH1GWfphC",drawerPaperExitDone:"sgNb6nOhF35lWQE9jQKE",drawerPaperContent:"CsqC6wvlLYDsKBsZ0GdT",drawerOverlay:"e34gBjx3k3bRYPZlf9wZ",noOverlay:"b3ucNpEtNq2OrQKwvqqw"}},8930:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerContent:"gF1_WnOrrPKWEQoXJmgf"}},6282:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerFooter:"nk69HulhPkeFsEMuZOrB"}},713:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerHeader:"vdwkPIGxzELdYhmiZPq2",drawerHeaderClose:"uz4NM_XvNZaqxVZYvSYA",drawerHeaderCloseIcon:"ZdNjx6DpeWEI2pAVL18t"}},6114:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={input:"KWk7oZ8tvPfQicgQYlVa",label:"e6zrx7UOP_BSoMM3GrjQ",small:"ihSnDQg0ygxcVLIySJkM",large:"FpwhbD7HXx_uFT3l01wb",xlarge:"YVds4u_DfWSG1r0SAGnS",inverted:"CKynoLhiLd6KzAYi5NtG",rounded:"v72mzJumFSiDOOE1MnXH",noShadow:"EoewJEDbGdteJ_NRfS5F",noBorder:"cb7l4xvcNnHNlQZmLjkb",noPadding:"vcOwDYuGF2etoPfyFDX5",transparent:"l08khaXIUOcruBFHws7X",stretchHorizontally:"I0xvJbB0LNT0S15jTMWW",stretchVertically:"X6fqUcVH1BlCRJBiiJii"}},7800:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j1mfiYEGolTRmbBmGKlQ",row:"EGaKvmqM2SawiFrW8Ctu",column:"NMi0MT1b7rp1Zjye8UVA",fixed:"g0j3kkQr_AjCKFd94S1s",plain:"Fr1q7WnF1nFnnbfgpaRz",transparent:"udRZe9H0bKUHXjOwG1Fn",top:"uYiKw6VvDEkhjZHzvo7e",topEdge:"tRbEcYjE3KncsNwTbvVM",topOnEdge:"LGunG37X1_HReuw3qzua",right:"lw27rGVlo34axCxw3QHi",rightEdge:"PZItvleFIIj0Jx2MikRE",rightOnEdge:"KNuGaDPq9rmXfgmO3pcb",bottom:"dn1uh1tasGxDGqmU18HN",bottomEdge:"eD0UCrBRpsRTPPwwIoVg",bottomOnEdge:"IrhH5gfyGsQ6kdcP94RQ",left:"D5fGHnAGCMR4Ltb9y4Hr",leftEdge:"_AtAd2tr7t1kXusRbXSz",leftOnEdge:"_8C9dd0X_JXY4uHzw5Nj",horizontalCenter:"QDks8ovt9RVcFWeEB8wb",verticalCenter:"CVuQRE652GH2VJn8zOTs"}},7060:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={icon:"fp_BLJ2FW4Oyyb0bHiD4",small:"zsVDNfNRkos0Q5uv9FR9",medium:"eSlil3evPtPBswWF80C5",large:"T7ULyq1yE9AVXEMknV4G",xlarge:"QPAceVQdZ6QIQ2Qvijwg",inverted:"mFTGbhLa4NlUO16nvJrk"}},2844:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Wcemyr2Gr8ZCGc6Bjbqw",small:"T_pa8CcpL1GvuDsdvsqq",medium:"nLLErjOgfa5b2sOeZrQ5",large:"Q71NFBHrSxQLQE4AGD2h",xlarge:"EbBiyF1rg6wRaxSMK8so",rounded:"tLjuwRSsIiLJGVsrarbd",topOffset:"d4KLpI79CuSU6gkPPInA",rightOffset:"G7hJZoYv8qIrNmFCygME",bottomOffset:"DZs3AvGkVdOvJfLeJ8Gh",leftOffset:"wEEnWRcvuvomh_OLO5iq",inverted:"K9WGCFpUadO9WIXwFaj_",noShadow:"eAQJ10kEkPmDxMGvlYzy",noBorder:"OlENR9ntuWYLGOKKKrGR",transparent:"KOcsPrivr94rxnfHVlfe"}},6299:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gUSTy3_Np1mGJHW1N3gx",small:"IYuVzh1HBzgoTCi2WQ_p",medium:"JNg3_bCEfIvi4geEcsS3",large:"n61saxA20_EwMgt9Gw4s",xlarge:"gqGnvnH9X6mGvzwl4aGz",rounded:"DkzuqhEaiMR3XMs1M1If",topOffset:"sGnvevvsxBZUaXrpZQpI",rightOffset:"hgY3ZpkyD70p7E8rn3bi",bottomOffset:"ROoQY6OaRnQzDOfX_QDF",leftOffset:"Kevm582e3gXPJE3ODopa",inverted:"OOznCbAbjOLc4_bCEqfy",noShadow:"xrHxfce034dgYNEknlVM",noBorder:"eHt_RIq8JGoYHc4iCoeg",transparent:"nfgqtSgfrtrGFDWfZonQ",disabled:"I_nhJ9u6pTD_2SF3ql_l"}},1513:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rO5W6DQk4NtoWrwmKMWg",hasOverlay:"llvnmI8K13g9PTBiCNz3",overlay:"GVk2j8wV1t3gY5uXQ4qI",image:"gXjYqKe9w3NgYurYwUQp",cover:"_l7ONOWayr8tyuGiyUsc",contain:"SYjOb8lAhmDbdylFIQY9",stretchHorizontally:"HkrozSfllTFlkkbqxXWh",stretchVertically:"xyHXhhHEYXMYeavWZw_N"}},8197:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menu:"xQ9Bfk0X1HmZgihCutZV",open:"utv9FYOU7Q0JNnZW1ejv",entrance:"yYKjcCvD2L94FpPgOigQ",header:"wNL86s9zGFi8XK11KloR",footer:"mu4Jev1c4KcifeF8Mzqg",noBorder:"EaPSjL1nXsz7TCx11Lrf"}},2752:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"kYh7DKYqH6jdLXd7PdJw",menuContainer:"QleAO3ymTliU6ZNBQxfg",top:"axfcrjSH4lvujzrsk2Qp",right:"LtVltW3BPZ5gNXVxxkrP",left:"PRb5f8XcMZOcY5ufPMdq",bottom:"__MZ5OoiIrVidFXbQfju"}},754:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"j0h9hd_glvI9xdOnaauY",noOverlay:"SL48SzZufKgdMiGY3YTN",modal:"hTXcZevGyyI0AcvprXVJ",transparent:"ibqloG1HxHx3stdkVZSj",noShadow:"IEo5vEeftvLpmwi0VyjD",modalButton:"FoPfC3j7cIg2BYfzqQGE"}},3733:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4",button:"nyR3cGEmw3QkYMtiem3S"}},186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",showSelectedWithTickContainer:"O5npD0lT3FbBCwjy31SE",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz",selectedLabel:"ngI3SJJjUmfca4niQkhQ",tickContainer:"ZPkrksmvBQCboYA1hzNE"}},4822:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn",noOptions:"ovKvB5H8EoFznuMqUujl",searchKeyword:"TwcVaRDz8cokIK9D9DxJ"}},2396:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",disabled:"nECgGdXOspUrQWHjzwkg",header:"XAoJhxTApcR9lGegyp9A",active:"ebemztZEWIV4_6AsKPQH",content:"rRDWv2qqwSrBy3evZ7Dw",isLoading:"IsxSe9oasdMK9fmg_6At",noOptions:"fLP4x4IxnyiWhp5BP5sT",searchContainer:"yOECDJeDVT5z5YaXpeJn",iconButton:"aVKp3H3JWraBf7G5UdaP",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",scrollable:"ovdjwhr21awv2AgiQEd2",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={textInput:"NPZrksCpnXVJSq_snHjR",small:"jQGriQJSa04zsoG1a2u9",medium:"lVoY9Dp17HOBinMj0Q7o",large:"QlUaPbX8EaIi7rZ4Fb8o",xlarge:"rYPOM9fNtVLdPFyWKkGE",noBorder:"KDTINsHdolYReSbLcooH"}},9220:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",absolute:"e50zEjtfQK00lf_884OY",fixed:"jqxT4McOeUDDnGseZkBL",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"yY9HV40ITTWgAV8qLw1w",hasOverlay:"zub5bqdVXm4NFxpI4HBf",video:"MVCDVjfgmHE7QemcYxGl",cover:"V4nEcm179vZe2MLgRVaM",contain:"u2_MfeCjMSl_aBNJn5nL",stretchHorizontally:"ljfsYs8BQqleKzbLkkad",stretchVertically:"HJtRqbAFLOnXVyGz8iFU",overlay:"ALHhOHAeLlBDy1DpYqiv"}},1914:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Hint=void 0;var l=i(n(6689)),u=n(2394);t.Hint=function(e){var t,n,o=l.default.Children.only(e.children);if("input"!==(null===(n=null===(t=o.type)||void 0===t?void 0:t.toString())||void 0===n?void 0:n.toLowerCase()))throw new TypeError("react-autocomplete-hint: 'Hint' only accepts an 'input' element as child.");var a=e.options,i=e.disableHint,s=e.allowTabFill,c=e.allowEnterFill,d=e.onFill,f=e.onHint,p=e.valueModifier,v=o.props,h=l.useRef(null),m=l.useRef(null),g=l.useRef(null),_=l.useState(""),b=_[0],y=_[1],O=l.useState(""),w=O[0],E=O[1],M=l.useState(""),S=M[0],x=M[1],C=l.useState(),P=C[0],j=C[1],I=l.useState(),k=I[0],D=I[1];l.useEffect((function(){if("object"==typeof a[0]){var e=u.getFirstDuplicateOption(a);e&&console.warn('react-autocomplete-hint: "'+e+'" occurs more than once and may cause errors. Options should not contain duplicate values!')}}),[a]),l.useEffect((function(){if(!i){var e=h.current&&window.getComputedStyle(h.current);e&&T(m,g,e)}}));var R=function(e){E(e);var t,n=function(e){if(e&&""!==e)return"string"==typeof a[0]?a.filter((function(t){return t.toLowerCase()!==e.toLowerCase()&&t.toLowerCase().startsWith(e.toLowerCase())})).sort()[0]:a.filter((function(t){return t.label.toLowerCase()!==e.toLowerCase()&&t.label.toLowerCase().startsWith(e.toLowerCase())})).sort((function(e,t){return u.sortAsc(e.label,t.label)}))[0]}(e);t=n?"string"==typeof n?n.slice(e.length):n.label.slice(e.length):"",x(t),j(n),f&&f(n)},N=function(){if(""!==S&&k){var e=b+S;k.target.value=e,v.onChange&&v.onChange(k),R(""),d&&d(P),y(e)}},T=function(e,t,n){var r,o;(null===(r=null==e?void 0:e.current)||void 0===r?void 0:r.style)&&(e.current.style.fontFamily=n.fontFamily,e.current.style.fontSize=n.fontSize,e.current.style.width=n.width,e.current.style.height=n.height,e.current.style.lineHeight=n.lineHeight,e.current.style.boxSizing=n.boxSizing,e.current.style.margin=u.interpolateStyle(n,"margin"),e.current.style.padding=u.interpolateStyle(n,"padding"),e.current.style.borderStyle=u.interpolateStyle(n,"border","style"),e.current.style.borderWidth=u.interpolateStyle(n,"border","width")),(null===(o=null==t?void 0:t.current)||void 0===o?void 0:o.style)&&(t.current.style.fontFamily=n.fontFamily,t.current.style.fontSize=n.fontSize,t.current.style.lineHeight=n.lineHeight)},L=l.cloneElement(o).ref,z=l.cloneElement(o,r(r({},v),{onChange:function(e){D(e),e.persist(),y(e.target.value);var t=p?p(e.target.value):e.target.value;R(t),v.onChange&&v.onChange(e)},onBlur:function(e){(null==g?void 0:g.current)!==e.relatedTarget&&(R(""),v.onBlur&&v.onBlur(e))},onFocus:function(e){R(e.target.value),v.onFocus&&v.onFocus(e)},onKeyDown:function(e){var t=null===e.currentTarget.selectionEnd||e.currentTarget.selectionEnd===e.currentTarget.value.length;t&&"ArrowRight"===e.key?N():(t&&s&&"Tab"===e.key&&""!==S||t&&c&&"Enter"===e.key&&""!==S)&&(e.preventDefault(),N()),v.onKeyDown&&v.onKeyDown(e)},ref:L&&"string"!=typeof L?u.mergeRefs(L,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,z,l.default.createElement("span",{className:"rah-hint-wrapper",ref:m,style:{display:"flex",pointerEvents:"none",backgroundColor:"transparent",borderColor:"transparent",boxShadow:"none",color:"rgba(0, 0, 0, 0.35)",position:"absolute",top:0,left:0}},l.default.createElement("span",{className:"rah-text-filler",style:{visibility:"hidden",pointerEvents:"none",whiteSpace:"pre"}},w),l.default.createElement("input",{className:"rah-hint",ref:g,onClick:function(e){var t,n=e.currentTarget.selectionEnd||0;0!==n?S&&""!==S&&(N(),setTimeout((function(){var e,t;null===(e=h.current)||void 0===e||e.focus();var r=w.length+n;null===(t=h.current)||void 0===t||t.setSelectionRange(r,r)}),0)):null===(t=h.current)||void 0===t||t.focus()},style:{pointerEvents:S&&""!==S?"visible":"none",background:"transparent",width:"100%",outline:"none",border:"none",boxShadow:"none",padding:0,margin:0,color:"rgba(0, 0, 0, 0.30)",caretColor:"transparent"},defaultValue:S,tabIndex:-1}))))}},2394:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstDuplicateOption=t.sortAsc=t.interpolateStyle=t.mergeRefs=void 0,t.mergeRefs=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.filter(Boolean);return function(e){for(var t=0,r=n;t<r.length;t++){var o=r[t];"function"==typeof o?o(e):o&&(o.current=e)}}},t.interpolateStyle=function(e,t,n){return void 0===n&&(n=""),n&&(n=n.replace(n[0],n[0].toUpperCase())),["Top","Right","Bottom","Left"].map((function(r){return e[t+r+n]})).join(" ")},t.sortAsc=function(e,t){return e>t?1:e<t?-1:0},t.getFirstDuplicateOption=function(e){for(var t={},n=0;n<e.length;n++){if(t[e[n].label])return e[n].label;t[e[n].label]=!0}return null}},5172:(e,t,n)=>{"use strict";n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>P});var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},f=1;f<20;f++)l["f".concat(f)]=111+f;var p=[],v=!1,h="all",m=[],g=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function _(e){h=e||"all"}function b(){return h||"all"}var y=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],s="*"===i?"*":g(i);if(d[s]){n||(n=b());var c=o>1?a(u,t):[];d[s]=d[s].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,c))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=d["*"],r=e.keyCode||e.which||e.charCode;if(E.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===p.indexOf(r)&&229!==r&&p.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=s[t];e[t]&&-1===p.indexOf(n)?p.push(n):!e[t]&&p.indexOf(n)>-1?p.splice(p.indexOf(n),1):"metaKey"===t&&e[t]&&3===p.length&&(e.ctrlKey||e.shiftKey||e.altKey||(p=p.slice(p.indexOf(n))))})),r in c){for(var o in c[r]=!0,u)u[o]===r&&(E[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),c[17]=!0,c[18]=!0);var i=b();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var v=d[r][f],h=v.splitKey,m=v.key.split(h),_=[],y=0;y<m.length;y++)_.push(g(m[y]));_.sort().join("")===p.sort().join("")&&O(e,v,i,t)}}}function E(e,t,n){p=[];var r=i(e),l=[],s="all",f=document,h=0,_=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(s=t.scope),t.element&&(f=t.element),t.keyup&&(_=t.keyup),void 0!==t.keydown&&(b=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(y=t.splitKey)),"string"==typeof t&&(s=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":g(e))in d||(d[e]=[]),d[e].push({keyup:_,keydown:b,scope:s,mods:l,shortcut:r[h],method:n,key:r[h],splitKey:y,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),v||(v=!0,o(window,"focus",(function(){p=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=p.indexOf(t);if(n>=0&&p.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&p.splice(0,p.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,u)u[r]===t&&(E[r]=!1)}(e)}),O))}var M={setScope:_,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&_(t||"all")},getPressedKeyCodes:function(){return p.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=g(e)),-1!==p.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(d).forEach((function(n){var r=d[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(void 0===e)Object.keys(d).forEach((function(e){return delete d[e]}));else if(Array.isArray(e))e.forEach((function(e){e.key&&y(e)}));else if("object"==typeof e)e.key&&y(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),y({key:e,scope:o,method:a,splitKey:"+"})}},keyMap:l,modifier:u,modifierMap:s};for(var S in M)Object.prototype.hasOwnProperty.call(M,S)&&(E[S]=M[S]);if("undefined"!=typeof window){var x=window.hotkeys;E.noConflict=function(e){return e&&window.hotkeys===E&&(window.hotkeys=x),E},window.hotkeys=E}var C=n(6689);function P(){return E.isPressed}E.filter=function(){return!0};var j=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return j(e,["INPUT","TEXTAREA","SELECT"])};function k(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,C.useRef)(null),m=(0,C.useCallback)((function(e,n){var r,o;return i&&!i(e)?!c:!!(I(e)&&!j(e,a)||null!=(r=e.target)&&r.isContentEditable&&!v)||!!(null===h.current||document.activeElement===h.current||null!=(o=h.current)&&o.contains(document.activeElement))&&(t(e,n),!0)}),r?[h,a,i].concat(r):[h,a,i]);return(0,C.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),E(e,n||{},m),function(){return E.unbind(e,m)};E.unbind(e,m)}),[m,e,f]),h}var D=E.isPressed},8744:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CSSTransition:()=>M,ReplaceTransition:()=>R,SwitchTransition:()=>V,Transition:()=>O,TransitionGroup:()=>k,config:()=>d});var r=n(2122),o=n(9756),a=n(1788);function i(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var l=n(6689),u=n.n(l),s=n(6405),c=n.n(s);const d={disabled:!1},f=u().createContext(null);var p=function(e){return e.scrollTop},v="unmounted",h="exited",m="entering",g="entered",_="exiting",b=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,a=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?a?(o=h,r.appearStatus=m):o=g:o=t.unmountOnExit||t.mountOnEnter?v:h,r.state={status:o},r.nextCallback=null,r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:h}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==m&&n!==g&&(t=m):n!==m&&n!==g||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===m){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this);n&&p(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===h&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[c().findDOMNode(this),r],a=o[0],i=o[1],l=this.getTimeouts(),u=r?l.appear:l.enter;!e&&!n||d.disabled?this.safeSetState({status:g},(function(){t.props.onEntered(a)})):(this.props.onEnter(a,i),this.safeSetState({status:m},(function(){t.props.onEntering(a,i),t.onTransitionEnd(u,(function(){t.safeSetState({status:g},(function(){t.props.onEntered(a,i)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:c().findDOMNode(this);t&&!d.disabled?(this.props.onExit(r),this.safeSetState({status:_},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:h},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:h},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,o.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function y(){}b.contextType=f,b.propTypes={},b.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:y,onEntering:y,onEntered:y,onExit:y,onExiting:y,onExited:y},b.UNMOUNTED=v,b.EXITED=h,b.ENTERING=m,b.ENTERED=g,b.EXITING=_;const O=b;var w=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=i(n.className,r):n.setAttribute("class",i(n.className&&n.className.baseVal||"",r)));var n,r}))},E=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1];t.removeClasses(o,"exit"),t.addClass(o,a?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.addClass(o,a,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.removeClasses(o,a),t.addClass(o,a,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}(0,a.Z)(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&p(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,a=n.done;this.appliedClasses[t]={},r&&w(e,r),o&&w(e,o),a&&w(e,a)},n.render=function(){var e=this.props,t=(e.classNames,(0,o.Z)(e,["classNames"]));return u().createElement(O,(0,r.Z)({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);E.defaultProps={classNames:""},E.propTypes={};const M=E;var S=n(3349);function x(e,t){var n=Object.create(null);return e&&l.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)})),n}function C(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=x(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var l={};for(var u in t){if(o[u])for(r=0;r<o[u].length;r++){var s=o[u][r];l[o[u][r]]=n(s)}l[u]=n(u)}for(r=0;r<a.length;r++)l[a[r]]=n(a[r]);return l}(t,r);return Object.keys(o).forEach((function(a){var i=o[a];if((0,l.isValidElement)(i)){var u=a in t,s=a in r,c=t[a],d=(0,l.isValidElement)(c)&&!c.props.in;!s||u&&!d?s||!u||d?s&&u&&(0,l.isValidElement)(c)&&(o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:c.props.in,exit:C(i,"exit",e),enter:C(i,"enter",e)})):o[a]=(0,l.cloneElement)(i,{in:!1}):o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:!0,exit:C(i,"exit",e),enter:C(i,"enter",e)})}})),o}var j=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},I=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind((0,S.Z)(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,r=a,x(n.children,(function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:C(e,"appear",n),enter:C(e,"enter",n),exit:C(e,"exit",n)})}))):P(e,o,a),firstRender:!1}},n.handleExited=function(e,t){var n=x(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,r.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=(0,o.Z)(e,["component","childFactory"]),a=this.state.contextValue,i=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(f.Provider,{value:a},i):u().createElement(f.Provider,{value:a},u().createElement(t,r,i))},t}(u().Component);I.propTypes={},I.defaultProps={component:"div",childFactory:function(e){return e}};const k=I;var D=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}(0,a.Z)(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,a=u().Children.toArray(o)[t];if(a.props[e]&&(r=a.props)[e].apply(r,n),this.props[e]){var i=a.props.nodeRef?void 0:c().findDOMNode(this);this.props[e](i)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=(0,o.Z)(e,["children","in"]),a=u().Children.toArray(t),i=a[0],l=a[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(k,r,n?u().cloneElement(i,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(l,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);D.propTypes={};const R=D;var N,T,L="out-in",z="in-out",A=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},H=((N={})[L]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){n(m,null)}))})},N[z]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:A(r,"onEntered",(function(){n(m)}))})]},N),B=((T={})[L]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:A(t,"onEntered",(function(){n(g,u().cloneElement(t,{in:!0}))}))})},T[z]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){r(g,u().cloneElement(n,{in:!0}))}))}),u().cloneElement(n,{in:!0})]},T),F=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:g,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===m&&e.mode===z?{status:m}:!t.current||((n=t.current)===(r=e.children)||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,a=o.status,i=o.current,l={children:n,current:i,changeState:this.changeState,status:a};switch(a){case m:e=B[r](l);break;case _:e=H[r](l);break;case g:e=i}return u().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);F.propTypes={},F.defaultProps={mode:L};const V=F},5691:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(6689),o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},i=function(e){function t(){var e,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var o=arguments.length,i=Array(o),l=0;l<o;l++)i[l]=arguments[l];return n=r=a(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},a(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,s=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.stopIndex,a=[],i=null,l=null,u=e.startIndex;u<=o;u++)t(u)?null!==l&&(a.push(i,l),i=l=null):(l=u,null===i&&(i=u));if(null!==l){for(var s=Math.min(Math.max(l,i+r-1),n-1),c=l+1;c<=s&&!t(c);c++)l=c;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var d=a[0]-1;if(t(d))break;a[0]=d}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(!((e={lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a}).startIndex>e.lastRenderedStopIndex||e.stopIndex<e.lastRenderedStartIndex)){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}var e}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);const l=i},4356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FixedSizeGrid:()=>A,FixedSizeList:()=>H,VariableSizeGrid:()=>j,VariableSizeList:()=>z,areEqual:()=>W,shouldComponentUpdate:()=>G});var r=n(2122),o=n(3349),a=n(1788),i=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function l(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!((r=e[n])===(o=t[n])||i(r)&&i(o)))return!1;var r,o;return!0}const u=function(e,t){var n;void 0===t&&(t=l);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}};var s=n(6689),c=n(9756),d="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function p(e,t){var n=d(),r={id:requestAnimationFrame((function o(){d()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var v=-1;function h(e){if(void 0===e&&(e=!1),-1===v||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),v=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return v}var m=null;function g(e){if(void 0===e&&(e=!1),null===m||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?m="positive-descending":(t.scrollLeft=1,m=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),m}return m}var _=150,b=function(e){var t=e.columnIndex;return e.data,e.rowIndex+":"+t};function y(e){var t,n=e.getColumnOffset,i=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,c=e.getColumnWidth,d=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,E=e.getRowOffset,M=e.getRowStartIndexForOffset,S=e.getRowStopIndexForStartIndex,x=e.initInstanceProps,C=e.shouldResetStyleCacheOnItemSizeChange,P=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=x(r.props,(0,o.Z)(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:(0,o.Z)(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,u=a.rowHeight,s=r._getItemStyleCache(C&&i,C&&l,C&&u),d=e+":"+t;if(s.hasOwnProperty(d))o=s[d];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;s[d]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:E(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:c(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,s=a;if("rtl"===t)switch(g()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,_)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),P(e),null};var j=t.prototype;return j.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},j.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,s=a.width,c=this.state,f=c.scrollLeft,p=c.scrollTop,g=h();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var _=d(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>s?g:0,O=_>l?g:0;this.scrollTo({scrollLeft:void 0!==r?m(this.props,r,n,f,this._instanceProps,O):f,scrollTop:void 0!==o?y(this.props,o,n,p,this._instanceProps,b):p})},j.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},j.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(g()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},j.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},j.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,f=e.itemData,p=e.itemKey,h=void 0===p?b:p,m=e.outerElementType,g=e.outerTagName,_=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,E=this.state.isScrolling,M=this._getHorizontalRangeToRender(),S=M[0],x=M[1],C=this._getVerticalRangeToRender(),P=C[0],j=C[1],I=[];if(o>0&&_)for(var k=P;k<=j;k++)for(var D=S;D<=x;D++)I.push((0,s.createElement)(t,{columnIndex:D,data:f,isScrolling:O?E:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=d(this.props,this._instanceProps),N=v(this.props,this._instanceProps);return(0,s.createElement)(m||g||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,s.createElement)(u||c||"div",{children:I,ref:l,style:{height:R,pointerEvents:E?"none":void 0,width:N}}))},j._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],p=c[2],v=c[3];this._callOnItemsRendered(i,l,d,f,u,s,p,v)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,g=h.scrollLeft,_=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(g,_,m,y,b)}},j._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,d,this._instanceProps),v=l(this.props,p,d,this._instanceProps),h=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},j._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=M(this.props,s,this._instanceProps),f=S(this.props,d,s,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,c),v=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-p),Math.max(0,Math.min(a-1,f+v)),d,f]},t}(s.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},E=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},S=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?x(e,t,n,a,0,r):C(e,t,n,Math.max(0,a),r)},x=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=M(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},C=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&M(e,t,r,n).offset<o;)r+=i,i*=2;return x(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},P=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=M(e,t,n,a),s="column"===e?E(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);default:return o>=d&&o<=c?o:d>c||o<d?d:c}},j=y({getColumnOffset:function(e,t,n){return M("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return S("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=M("column",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:E,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return P("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return P("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return M("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return S("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=M("row",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("row",e,s,r).size;return s},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),I=150,k=function(e,t){return e};function D(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,c=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,m=e.initInstanceProps,_=e.shouldResetStyleCacheOnItemSizeChange,b=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=m(r.props,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,s=r._getItemStyleCache(_&&i,_&&u,_&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?c:0;s[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(g()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,I)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return R(e,t),b(e),null};var y=t.prototype;return y.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},y.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?h():0:l.scrollHeight>l.clientHeight?h():0}this.scrollTo(c(this.props,e,t,a,this._instanceProps,i))},y.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},y.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(g()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},y.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},y.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,a=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,d=e.itemCount,f=e.itemData,p=e.itemKey,v=void 0===p?k:p,h=e.layout,m=e.outerElementType,g=e.outerTagName,_=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,E=w?this._onScrollHorizontal:this._onScrollVertical,M=this._getRangeToRender(),S=M[0],x=M[1],C=[];if(d>0)for(var P=S;P<=x;P++)C.push((0,s.createElement)(t,{data:f,key:v(P,f),index:P,isScrolling:b?O:void 0,style:this._getItemStyle(P)}));var j=i(this.props,this._instanceProps);return(0,s.createElement)(m||g||"div",{className:n,onScroll:E,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},(0,s.createElement)(u||c||"div",{children:C,ref:l,style:{height:w?"100%":j,pointerEvents:O?"none":void 0,width:w?j:"100%"}}))},y._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=d(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(s.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var R=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},N=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var s=r(u);o[u]={offset:i,size:s},i+=s}n.lastMeasuredIndex=t}return o[t]},T=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=N(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},L=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},z=D({getItemOffset:function(e,t,n){return N(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:L,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=N(e,t,o),f=L(e,o),p=Math.max(0,Math.min(f-c,d.offset)),v=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=v-c&&r<=p+c?"auto":"center"),n){case"start":return p;case"end":return v;case"center":return Math.round(v+(p-v)/2);default:return r>=v&&r<=p?r:r<v?v:p}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?T(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&N(e,n,t).offset<r;)n+=a,a*=2;return T(e,t,Math.min(n,o-1),Math.floor(n/2),r)}(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,s="horizontal"===o||"horizontal"===l?u:a,c=N(e,t,r),d=n+s,f=c.offset+c.size,p=t;p<i-1&&f<d;)p++,f+=N(e,p,r).size;return p},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),A=y({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),H=D({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,p=Math.max(0,u*s-f),v=Math.min(p,t*s),h=Math.max(0,t*s-f+s+a);switch("smart"===n&&(n=r>=h-f&&r<=v+f?"auto":"center"),n){case"start":return v;case"end":return h;case"center":var m=Math.round(h+(v-h)/2);return m<Math.ceil(f/2)?0:m>p+Math.floor(f/2)?p:m;default:return r>=h&&r<=v?r:r<h?h:v}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function B(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],V=["style"];function W(e,t){var n=e.style,r=(0,c.Z)(e,F),o=t.style,a=(0,c.Z)(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7274:function(e,t){var n,r;n=function(){var e=/(auto|scroll)/,t=function(e,n){return null===e.parentNode?n:t(e.parentNode,n.concat([e]))},n=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},r=function(t){return e.test(function(e){return n(e,"overflow")+n(e,"overflow-y")+n(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var n=t(e.parentNode,[]),o=0;o<n.length;o+=1)if(r(n[o]))return n[o];return document.scrollingElement||document.documentElement}}},void 0===(r=n.apply(t,[]))||(e.exports=r)},7237:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5580));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noPadding,b=void 0!==_&&_,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.autoFocus,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=e.size,T=void 0===N?"medium":N,L=e.type;return o.default.createElement("button",{ref:s,className:(0,a.default)([i.default.container,i.default[T],i.default[R],(t={},t[i.default.inverted]=p,t[i.default.rounded]=h,t[i.default.noShadow]=g,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=E,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:d,autoFocus:j,type:L,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},9508:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(7237);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},289:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(3391));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},4127:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(289);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},5798:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(2457));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.size,d=e.containerRef,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.transparent,g=void 0!==m&&m,_=e.noShadow,b=void 0!==_&&_,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.disabled,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],u.default[R],(t={},t[u.default.inverted]=p,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=E,t[u.default.disabled]=j,t[u.default.transparent]=g,t[u.default.stretchHorizontally]=S,t[u.default.stretchVertically]=C,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),s])},N),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(5798);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},819:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7941));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,d=e.className,f=e.indeterminate,p=e.size,v=void 0===p?"medium":p,h=e.autoFocus,m=void 0!==h&&h,g=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]),_=l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([c.default.checkbox,d,c.default[v]]),onChange:g,placeholder:r,name:i,type:"checkbox",autoFocus:m});return t?l.default.createElement(s.Label,{value:t},_):l.default.createElement(l.default.Fragment,null,_)}},4616:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(819);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},5801:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(2554),l=r(n(4560));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},7429:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(5801);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},5324:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5057));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(5324);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},4619:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(1391),l=r(n(7855));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,p=e.buttonsRight,v=void 0===p?[]:p,h=e.onClose,m=void 0===h?function(){}:h,g=e.noPadding,_=void 0!==g&&g,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,E=e.baseZIndex,M=void 0===E?1019:E;return o.default.createElement(i.Modal,{containerRef:u,isOpen:c,onClose:m,noOverlay:y,noShadow:w,baseZIndex:M},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=_,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},v))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(4619);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},9745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useDrawerContext=t.DrawerContext=void 0;var o=r(n(6689));t.DrawerContext=o.default.createContext({}),t.useDrawerContext=function(){return o.default.useContext(t.DrawerContext)}},3096:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=i(n(7659)),u=a(n(6689)),s=i(n(6405)),c=i(n(2838)),d=n(8744),f=n(6790),p=n(60),v=n(5089),h=n(9745),m=n(5172),g={enter:c.default.drawerPaperEnter,enterActive:c.default.drawerPaperEnterActive,enterDone:c.default.drawerPaperEnterDone,exit:c.default.drawerPaperExit,exitActive:c.default.drawerPaperExitActive,exitDone:c.default.drawerPaperExitDone};function _(e){var t,n,r=e.open,o=e.className,a=e.style,i=e.noCloseIcon,f=void 0!==i&&i,p=e.noOverlay,v=void 0!==p&&p,_=e.children,b=e.unmountOnExit,y=void 0!==b&&b,O=e.mountOnEnter,w=void 0!==O&&O,E=e.portalContainer,M=void 0===E?document.body:E,S=e.onClose,x=e.onCloseAnimationEnd,C=(0,u.useState)(!1),P=C[0],j=C[1],I=(0,u.useState)(!1),k=I[0],D=I[1],R=(0,u.useRef)(null),N=function(e){var t,n;return null===(n=null===(t=e.current)||void 0===t?void 0:t.className.match(Object.values(g).join("|")))||void 0===n?void 0:n[0]}(R),T=(0,u.useMemo)((function(){return{onClose:S,noCloseIcon:f}}),[S,f]);(0,m.useHotkeys)("Escape",S);var L=(0,u.useCallback)((function(){j(!0),D(!0)}),[]),z=(0,u.useCallback)((function(){D(!1)}),[]),A=(0,u.useCallback)((function(){j(!1),null==x||x()}),[x]);return s.default.createPortal(u.default.createElement(d.CSSTransition,{nodeRef:R,in:r,timeout:300,classNames:g,unmountOnExit:y,mountOnEnter:w,onExited:A,onEnter:L,onExit:z},u.default.createElement(h.DrawerContext.Provider,{value:T},u.default.createElement("div",{className:(0,l.default)([c.default.drawer,o,(t={},t[c.default.visible]=P,t)])},u.default.createElement("div",{ref:R,className:(0,l.default)([c.default.drawerPaper,N]),style:a},u.default.createElement("div",{className:c.default.drawerPaperContent},_)),u.default.createElement("div",{className:(0,l.default)([c.default.drawerOverlay,(n={},n[c.default.noOverlay]=v,n[c.default.visible]=k,n)]),onClick:S})))),M)}_.Header=p.DrawerHeader,_.Content=v.DrawerContent,_.Footer=f.DrawerFooter,t.default=_},4190:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(8930));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerContent,n])},t)}},5089:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerContent=void 0;var o=n(4190);Object.defineProperty(t,"DrawerContent",{enumerable:!0,get:function(){return r(o).default}})},1848:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(6282));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerFooter,n])},t)}},6790:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerFooter=void 0;var o=n(1848);Object.defineProperty(t,"DrawerFooter",{enumerable:!0,get:function(){return r(o).default}})},7365:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=n(4958),l=r(n(8799)),u=r(n(713)),s=n(9745);t.default=function(e){var t=e.children,n=e.className,r=(0,s.useDrawerContext)(),c=r.onClose,d=r.noCloseIcon;return a.default.createElement("div",{className:(0,o.default)([u.default.drawerHeader,n])},!d&&a.default.createElement("div",{className:u.default.drawerHeaderClose},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:c},a.default.createElement(i.Icon,{src:l.default,size:"xlarge"}))),t)}},60:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerHeader=void 0;var o=n(7365);Object.defineProperty(t,"DrawerHeader",{enumerable:!0,get:function(){return r(o).default}})},3212:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Drawer=void 0;var o=n(3096);Object.defineProperty(t,"Drawer",{enumerable:!0,get:function(){return r(o).default}})},943:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(6114)),u=r(n(3210));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},3064:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(6689)),l=n(5348),u=n(943),s=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,p=(0,i.useState)(!1),v=p[0],h=p[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),g=!n||0===n.length,_=function(){return h(!v)};return i.default.createElement(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:g,selectedItem:c,toggleIsOpen:_}):i.default.createElement(u.Clickable,{display:o,isDisabled:g,onClick:_}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},1889:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(3064);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(943);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},2205:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8117));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,p=e.inverted,v=void 0!==p&&p,h=e.noShadow,m=void 0!==h&&h,g=e.noBorder,_=void 0!==g&&g,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,E=e.stretchHorizontally,M=void 0!==E&&E,S=e.stretchVertically,x=void 0!==S&&S,C=e.rounded,P=void 0!==C&&C,j=e.size,I=void 0===j?"medium":j;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[I],(t={},t[i.default.inverted]=v,t[i.default.rounded]=P,t[i.default.noShadow]=m,t[i.default.noBorder]=_,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=x,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(2205);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},4200:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7800));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,p="center"===d.vertical?"verticalCenter":d.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[p],i.default[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},6384:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(4200);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},6535:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7060));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(6535);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},6698:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(4958),l=r(n(2844));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,p=e.onClick,v=void 0===p?function(){}:p,h=e.disabled,m=void 0!==h&&h,g=e.inverted,_=void 0!==g&&g,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.transparent,M=void 0!==E&&E,S=e.rounded,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.type,I=void 0===j?"button":j;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[P],(t={},t[l.default.inverted]=_,t[l.default.rounded]=x,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=M,t[l.default.topOffset]=x&&f.includes("top"),t[l.default.rightOffset]=x&&f.includes("right"),t[l.default.bottomOffset]=x&&f.includes("bottom"),t[l.default.leftOffset]=x&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:s,alt:c,size:P,inverted:_}),u)}},2847:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(6698);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},749:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(4958),s=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=e.className,f=e.src,p=e.alt,v=e.inverted,h=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noBorder,b=void 0!==_&&_,y=e.transparent,O=void 0!==y&&y,w=e.rounded,E=void 0!==w&&w,M=e.offsetSides,S=void 0===M?[]:M,x=e.disabled,C=void 0!==x&&x,P=e.size,j=void 0===P?"medium":P,I=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([s.default.container,s.default[j],(t={},t[s.default.inverted]=h,t[s.default.rounded]=E,t[s.default.noShadow]=g,t[s.default.noBorder]=b,t[s.default.disabled]=C,t[s.default.transparent]=O,t[s.default.topOffset]=E&&S.includes("top"),t[s.default.rightOffset]=E&&S.includes("right"),t[s.default.bottomOffset]=E&&S.includes("bottom"),t[s.default.leftOffset]=E&&S.includes("left"),t),d])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:j,inverted:h}),c)}},5860:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(749);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},5084:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(1513));t.default=function(e){var t=e.src,n=e.alt,a=e.srcWidth,s=e.srcHeight,c=e.children,d=e.containerRef,f=e.layout,p=void 0===f?"contain":f,v=e.decoding,h=void 0===v?"auto":v,m=e.loading,g=void 0===m?"eager":m,_=e.style,b=o(e,["src","alt","srcWidth","srcHeight","children","containerRef","layout","decoding","loading","style"]),y=i.default.createElement("img",r({className:(0,l.default)([u.default.image,u.default[p]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:a,height:s,decoding:h,loading:g,style:_},b));return c?i.default.createElement("div",{ref:d,className:(0,l.default)([u.default.container,u.default.hasOverlay])},y,c&&i.default.createElement("div",{className:u.default.overlay},c)):y}},3928:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(5084);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},6392:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8197));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},4115:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(6392);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},9611:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8639));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},1332:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(9508),l=r(n(1725));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,f=e.noPadding,p=void 0!==f&&f,v=e.size,h=void 0===v?"medium":v,m=e.align,g=void 0===m?"center":m,_=e.onClick,b=void 0===_?function(){}:_;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:s,inverted:r,transparent:d,noPadding:p,align:g,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(75),s=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,p=e.noPadding,v=void 0!==p&&p,h=e.align,m=void 0===h?"center":h,g=e.size,_=void 0===g?"medium":g,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:v,align:m,size:_,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(9611);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(1332);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(8569);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},935:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(9633),c=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(s.PlacementContext),g=(0,l.useRef)(null),_=o||g;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&_.current){var e=_.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=_.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[d,m,h]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:_,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),p&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(6689)),u=i(n(7659)),s=i(n(2752));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},9385:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(754));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},9762:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(3079));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.noPadding,d=void 0!==c&&c,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},3814:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(935);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(9633);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(9385);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(9762);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},4915:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(5172),s=i(n(7659)),c=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,d=e.transparent,f=void 0!==d&&d,p=e.noShadow,v=void 0!==p&&p,h=e.noOverlay,m=void 0!==h&&h,g=e.onClose,_=void 0===g?function(){}:g,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",_);var O=(0,l.useCallback)((function(){_()}),[_]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,s.default)([c.default.overlay,(t={},t[c.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,s.default)([c.default.modal,(n={},n[c.default.transparent]=f,n[c.default.noShadow]=v,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:c.default.modalButton},i))}},1391:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(4915);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},6791:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(3733)),u=r(n(4330)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,p=void 0!==f&&f,v=function(e){return function(t){t.stopPropagation(),r(e)}},h=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:p,noBorder:!0,noShadow:!0,onPointerDown:v(s(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{className:l.default.button,disabled:p,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:v(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(6791);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},7845:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(186));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=c,t)]),onClick:f},n)}},6650:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(7845);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},410:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(4685)),c=n(5348),d=n(3781),f=n(2847),p=i(n(3790)),v=n(2568);t.default=function(e){var t,n=e.className,r=e.label,o=e.options,a=(0,l.useContext)(v.SelectContext).showExpandedGroup,i=(0,c.useToggle)(a),h=i[0],m=i[1],g=(0,l.useCallback)((function(){m()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:s.default.header,onClick:g},l.default.createElement("div",{className:s.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[s.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(d.Option,{key:"".concat(e.value,"-").concat(e.label),data:e},e.label)})))}},9087:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GroupOption=void 0;var o=n(410);Object.defineProperty(t,"GroupOption",{enumerable:!0,get:function(){return r(o).default}})},1954:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8054)),c=n(4616),d=n(2568),f=i(n(2565));t.default=function(e){var t,n,r=e.children,o=e.className,a=e.data,i=(0,l.useContext)(d.SelectContext),p=i.multiple,v=i.selectedOptions,h=i.updateSelectedOption,m=i.showSelectedWithTick,g=(0,l.useMemo)((function(){return v.map((function(e){return e.value})).includes(a.value)}),[a,v]),_=(0,l.useCallback)((function(){h(a)}),[a,v]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.selected]=g&&!p,t[s.default.showSelectedWithTickContainer]=m&&g,t),o]),onClick:_},p&&!m&&l.default.createElement("span",{className:s.default.checkboxContainer},l.default.createElement(c.Checkbox,{className:s.default.checkbox,checked:g,size:"small"})),l.default.createElement("span",{className:(0,u.default)([s.default.label,(n={},n[s.default.selectedLabel]=m&&g,n)])},(null==a?void 0:a.node)&&a.node,r),m&&g&&l.default.createElement("div",{className:s.default.tickContainer},l.default.createElement(f.default,null)))}},3781:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Option=void 0;var o=n(1954);Object.defineProperty(t,"Option",{enumerable:!0,get:function(){return r(o).default}})},2918:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=void 0;var s=n(5348),c=i(n(6689)),d=n(4616),f=n(9087),p=n(3781),v=n(2568),h=u(n(4822));t.isOption=function(e){return void 0!==e.value},t.default=function(e){var n=e.options,o=e.onFilter,a=e.onChange,i=(0,s.useToggle)(!1),u=i[0],m=i[1],g=(0,c.useContext)(v.SelectContext),_=g.multiple,b=g.searchKeyword,y=g.selectAll,O=g.selectedOptions,w=g.setSelectedOptions,E=n.some((function(e){return!(0,t.isOption)(e)})),M=function(e){var t=b.toLowerCase().trim();return t.length?e.filter((function(e){return o?o(e,t):e.label.toLowerCase().includes(t)})):e},S=(0,c.useMemo)((function(){return E?n.reduce((function(e,t){var n=M(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):M(n)}),[E,n,b]),x=(0,c.useMemo)((function(){return S.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[E,S,t.isOption]),C=(0,c.useMemo)((function(){return O.filter((function(e){return S.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,S]),P=(0,c.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=S.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[S,t.isOption,u,w,m]);return(0,c.useEffect)((function(){C===x?m(!0):u&&m(!1)}),[C,x,u,m]),c.default.createElement("div",{className:h.default.container},y&&_&&!!S.length&&c.default.createElement("div",{className:h.default.selectAllContainer,onClick:P},c.default.createElement("span",{className:h.default.checkboxContainer},c.default.createElement(d.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!C&&C!==x,size:"small"})),c.default.createElement("span",{className:h.default.label},"Select All")),S.length?S.map((function(e){return(0,t.isOption)(e)?c.default.createElement(p.Option,{key:"".concat(e.value,"-").concat(e.label),data:e},e.label):c.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):c.default.createElement("div",{className:h.default.noOptions},"No matches for",c.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=t.OptionList=void 0;var o=n(2918);Object.defineProperty(t,"OptionList",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"isOption",{enumerable:!0,get:function(){return o.isOption}})},2300:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(2396)),c=n(2568),d=n(1143),f=n(4958),p=i(n(5585)),v=i(n(7451)),h=n(2847);t.default=function(e){var t=e.className,n=(0,l.useContext)(c.SelectContext),r=n.searchKeyword,o=n.setSearchKeyword,a=(0,l.useCallback)((function(e){o(e)}),[r]),i=(0,l.useCallback)((function(){o("")}),[]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,t])},l.default.createElement("div",{className:s.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(d.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:s.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=void 0;var o=n(2300);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(o).default}})},4113:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(5348),c=n(2568),d=n(4745),f=n(8947),p=n(2847),v=n(4958),h=n(4292),m=n(4115),g=i(n(7917)),_=i(n(3790)),b=i(n(2865));t.default=function(e){var t,n,r,o,a=e.className,i=e.defaultValue,y=e.disabled,O=e.multiple,w=void 0!==O&&O,E=e.options,M=e.placeholder,S=e.label,x=e.selectAll,C=e.showExpandedGroup,P=e.scrollMenuIntoView,j=void 0!==P&&P,I=e.size,k=void 0===I?"medium":I,D=e.showSelectedAsTags,R=void 0!==D&&D,N=e.showSearch,T=void 0!==N&&N,L=e.showSelectedWithTick,z=void 0!==L&&L,A=e.enableSingleDeletion,H=void 0!==A&&A,B=e.width,F=e.loading,V=e.onChange,W=e.onFilter,G=(0,s.useToggle)(!1),U=G[0],Z=G[1],K=(0,s.useOutsideClick)((function(){return Z(!1)})),q=(0,l.useRef)(),Q=(0,l.useCallback)((function(){q.current&&q.current.scrollIntoView({behavior:"smooth",block:"nearest"})}),[]);(0,l.useLayoutEffect)((function(){if(q.current&&U&&j){var e=new ResizeObserver(Q);return e.observe(q.current),function(){e.disconnect(),e=null}}}),[U,j,Q]);var Y=(0,l.useCallback)((function(){Z()}),[]),X=(0,l.useCallback)((function(e){w||Z(!1),V&&V(e)}),[V]);return l.default.createElement(c.SelectContextProvider,{defaultValue:i,multiple:w,options:E,onChange:X,selectAll:x,showExpandedGroup:C,showSelectedWithTick:z,enableSingleDeletion:H},l.default.createElement("div",{ref:K},S?l.default.createElement(m.Label,{value:S}):null,l.default.createElement("div",{className:(0,u.default)([g.default.container,(t={},t[g.default.disabled]=y,t),g.default[k],a]),style:{width:B}},l.default.createElement("div",{className:(0,u.default)([g.default.header,(n={},n[g.default.active]=U,n)]),onClick:Y},l.default.createElement(d.Selector,{placeholder:M,showSelectedAsTags:R,isDropdownOpened:U}),l.default.createElement(p.IconButton,{className:(0,u.default)([g.default.iconButton,(r={},r[g.default.expanded]=U,r)]),src:_.default,alt:U?"Collapse":"Expand",noBorder:!0,transparent:!0})),U&&l.default.createElement("div",{className:(0,u.default)([g.default.content,(o={},o[g.default.isLoading]=F,o)]),ref:q},F?l.default.createElement(v.Icon,{size:"large",src:b.default}):l.default.createElement(l.default.Fragment,null,0===E.length?l.default.createElement("div",{className:g.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,T&&l.default.createElement("div",{className:g.default.searchContainer},l.default.createElement(f.Search,null)),l.default.createElement(h.OptionList,{options:E,onFilter:W,onChange:X})))))))}},2568:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectContextProvider=t.SelectContext=void 0;var l=a(n(6689)),u=n(4292),s={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){},showSelectedWithTick:!1},c=(0,l.createContext)(s);t.SelectContext=c,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,d=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=e.showSelectedWithTick,g=void 0!==m&&m,_=e.enableSingleDeletion,b=void 0!==_&&_,y=(0,l.useState)(s.selectedOptions),O=y[0],w=y[1],E=(0,l.useState)(s.searchKeyword),M=E[0],S=E[1],x=(0,l.useCallback)((function(e){var t,n=O.some((function(t){return t.value===e.value}));t=o?n?O.filter((function(t){return t.value!==e.value})):i(i([],O,!0),[e],!1):n&&b?[]:[e],w(t),h&&h(t.map((function(e){return e.value})))}),[O,w,h]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=v.reduce((function(e,t){return(0,u.isOption)(t)?i(i([],e,!0),[t],!1):i(i([],e,!0),t.options,!0)}),[]).filter((function(t){return e.includes(t.value)}))),w(t)}}),[n,v]);var C=(0,l.useMemo)((function(){return{multiple:o,selectAll:d,showExpandedGroup:p,selectedOptions:O,updateSelectedOption:x,searchKeyword:M,setSearchKeyword:S,setSelectedOptions:w,showSelectedWithTick:g,enableSingleDeletion:b}}),[d,O,w,x,M,S]);return l.default.createElement(c.Provider,{value:C},t)}},237:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(6884)),s=n(2568),c=n(2149),d=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(s.SelectContext),a=o.selectedOptions,i=o.multiple,f=o.updateSelectedOption,p=(0,l.useCallback)((function(e){e.stopPropagation()}),[]),v=(0,l.useCallback)((function(e,t){if(t){var n=a.find((function(e){return e.value===t}));n&&f(n)}e.stopPropagation()}),[a]),h=(0,l.useMemo)((function(){var e;return l.default.createElement("span",{className:(0,d.default)([u.default.placeholder,(e={},e[u.default.active]=r,e)])},t)}),[t,r]),m=(0,l.useMemo)((function(){return a.length?l.default.createElement(l.default.Fragment,null,a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{key:n,className:u.default.tagWrapper,onClick:p},l.default.createElement(c.Tag,{key:n,value:n,closable:!0,onClose:v},t))}))):h}),[a,h]),g=a.length?l.default.createElement("span",{className:u.default.selectedOptions},"".concat(t," (").concat(a.length,")")):h;return i?n?m:g:a.length?l.default.createElement("span",{className:u.default.selectedOption},a[0].node&&a[0].node,a[0].label):h}},4745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Selector=void 0;var o=n(237);Object.defineProperty(t,"Selector",{enumerable:!0,get:function(){return r(o).default}})},9929:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Select=void 0;var o=n(4113);Object.defineProperty(t,"Select",{enumerable:!0,get:function(){return r(o).default}})},1420:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(6689)),s=l(n(7659)),c=n(4356),d=l(n(5691)),f=l(n(5038)),p=l(n(8784)),v=n(2037),h=l(n(6684));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,g=e.pageSize,_=void 0===g?v.TableConfig.PAGE_SIZE:g,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,E=e.headerHeight,M=void 0===E?v.TableConfig.HEADER_HEIGHT:E,S=e.disableLazyLoader,x=e.activeRows,C=e.itemsCount,P=e.isHeaderSticky,j=void 0!==P&&P,I=e.hasVirtualScroll,k=void 0===I||I,D=e.scrollToTop,R=void 0!==D&&D,N=e.className,T=(0,u.useState)(0),L=T[0],z=T[1],A=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[s.id])}))}),[t,x,a,w,o]),H=(0,u.useCallback)((function(e){var t=e.scrollOffset;z(t)}),[]),B=(0,u.useCallback)((function(){S||n.length!==C&&(n.length<_*l||m&&i&&(m(l+1),i(l+1)))}),[S,n.length,C,_,l,m,i]),F=(0,u.useCallback)((function(e){return!S&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,S]),V=(0,u.useRef)(null);return(0,u.useEffect)((function(){R&&V.current&&V.current.scrollToItem(0)}),[n]),u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,s.default)([h.default.container,N])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:L,headerHeight:M}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(d.default,{isItemLoaded:F,itemCount:n.length,loadMoreItems:B},(function(e){var t=e.onItemsRendered;return u.default.createElement(c.FixedSizeList,{ref:V,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:H,onItemsRendered:t,className:h.default.scrollbarContainer},A)})))):u.default.createElement("div",{className:(0,s.default)([h.default.container,h.default.scrollbarContainer,N]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:L,isHeaderSticky:j,headerHeight:M}),n.map((function(e,n){return u.default.createElement(p.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(2212)),l=r(n(4867));t.default=function(e){var t,n,r=e.columns,u=e.scrollTop,s=e.isHeaderSticky,c=e.headerHeight;return o.default.createElement("div",{className:(0,a.default)([l.default.container,(t={},t[l.default.borderBottom]=!!u,t),(n={},n[l.default.isHeaderSticky]=s,n)]),style:{height:c}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=l(n(7659)),s=i(n(6689)),c=n(4958),d=l(n(3210)),f=l(n(2223)),p=n(2802),v=l(n(1435));t.default=function(e){var t,n=e.column,o=n.onSort,a=n.sortable,i=n.sorted,l=n.defaultSortOrder,h=n.title,m=n.width,g=n.className,_=(0,s.useState)((function(){return l||p.SortOrder.DESC})),b=_[0],y=_[1],O=(0,s.useCallback)((function(){if(!i)return o(b);var e=b===p.SortOrder.DESC?p.SortOrder.ASC:p.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return s.default.createElement("div",r({},w,{className:(0,u.default)([v.default.tableHeaderCell,g,(t={},t[v.default.sortIconVisible]=a&&i,t[v.default.sortable]=a,t)]),style:{width:m}}),h,a?s.default.createElement(c.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?d.default:f.default}):null)}},8784:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8605)),c=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,d=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.hasArrow]=a,t[c.default.active]=d,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(s.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4009));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r,width:null==n?void 0:n.width}},n.render?n.render(l):l)}},2285:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(1420);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},8372:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(7451)),c=n(4958),d=i(n(5374));t.default=function(e){var t,n=e.children,r=(e.className,e.closable),o=e.value,a=e.onClose,i=e.disabled,f=e.onDelete,p=e.id,v=(0,l.useCallback)((function(e){"function"==typeof f&&f(p),"function"==typeof a&&a(e,o)}),[a,f]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t)])},l.default.createElement("span",{className:d.default.content},n),r&&l.default.createElement("span",{className:d.default.closeButton,onClick:v},l.default.createElement(c.Icon,{src:s.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tag=void 0;var o=n(8372);Object.defineProperty(t,"Tag",{enumerable:!0,get:function(){return r(o).default}})},8397:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=a(n(6689)),s=l(n(7659)),c=n(1982),d=n(1914),f=n(5348),p=n(2149),v=l(n(9067));t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,h=e.name,m=e.pattern,g=e.inputRef,_=e.size,b=void 0===_?"small":_,y=e.type,O=void 0===y?"text":y,w=e.autoFocus,E=void 0!==w&&w,M=e.noBorder,S=void 0!==M&&M,x=e.withScroll,C=void 0!==x&&x,P=e.inputMode,j=e.disabled,I=e.tagOptions,k=void 0===I?[]:I,D=(0,u.useState)(""),R=D[0],N=D[1],T=(0,u.useState)(),L=T[0],z=T[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,c.v4)(),label:e}}));z(e)}}),[l,z]);var A=(0,u.useCallback)((function(e){var t=e.target.value;N(t)}),[N]),H=(0,u.useCallback)((function(e){var t=L.filter((function(t){return t.id!==e}));if(z(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[L,z,o]),B=(0,u.useCallback)((function(){var e=R.trim(),t=i([],L,!0);if(e.length>0){var n={id:(0,c.v4)(),label:e};t=i(i([],L,!0),[n],!1)}if(z(t),N(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[L,R,z,N]),F=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),B())}),[B]),V=(0,f.useOutsideClick)((function(){R.trim().length>0&&B()})),W=u.default.createElement(d.Hint,{options:k,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:g,className:(0,s.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=S,t)]),onChange:A,onKeyDown:F,pattern:m,placeholder:a,name:h,type:O,value:R,autoFocus:E,inputMode:P,disabled:j}));return u.default.createElement("div",{className:(0,s.default)([v.default.container,(n={},n[v.default.disabled]=j,n[v.default.scrollable]=C,n),r]),ref:V},null==L?void 0:L.map((function(e){var t=e.id,n=e.label;return u.default.createElement(p.Tag,{key:t,value:n,id:t,onDelete:H,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},W))}},2819:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TagsInput=void 0;var o=n(8397);Object.defineProperty(t,"TagsInput",{enumerable:!0,get:function(){return r(o).default}})},2506:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=e.value,f=e.name,p=e.pattern,v=e.inputRef,h=e.size,m=void 0===h?"medium":h,g=e.type,_=void 0===g?"text":g,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.inputMode,M=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),S=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:M,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:_,value:d,autoFocus:y,inputMode:E});return n?l.default.createElement(s.Label,{value:n},S):l.default.createElement(l.default.Fragment,null,S)}},1143:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(2506);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},7215:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(9220));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},2580:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4106));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},393:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(7215);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(2580);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},127:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(6405),s=i(n(7274)),c=i(n(7659)),d=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.position,a=void 0===o?"absolute":o,i=e.showTooltip,f=e.className,p=e.touchScreenHidingDelay,v=void 0===p?5e3:p,h=(0,l.useState)({left:0,top:0}),m=h[0],g=h[1],_=(0,l.useState)(!1),b=_[0],y=_[1],O=(0,l.useRef)(null),w=(0,l.useRef)(null),E=(0,l.useCallback)((function(){if(w.current){var e=w.current.getBoundingClientRect(),t=function(e,t,n){var r=n.top,o=n.left,a=n.height,i=n.width,l={top:0,left:0};switch(e){case"left":l={top:r+a/2,left:o};break;case"right":l={top:r+a/2,left:o+i};break;case"bottom":l={top:r+a,left:o+i/2};break;case"top":l={top:r,left:o+i/2}}return"absolute"===t?{top:l.top+window.scrollY,left:l.left+window.scrollX}:l}(r,a,e);g(t),y(!0)}}),[r,a]),M=(0,l.useCallback)((function(){E()}),[E]),S=(0,l.useCallback)((function(){y(!1)}),[]),x=(0,l.useCallback)((function(){O.current&&(clearTimeout(O.current),O.current=null),E()}),[E]),C=(0,l.useCallback)((function(){O.current=setTimeout((function(){y(!1),O.current=null}),v)}),[v]);return(0,l.useEffect)((function(){return function(){return O.current&&clearTimeout(O.current)}}),[]),(0,l.useEffect)((function(){if(w.current&&"absolute"===a){var e=(0,s.default)(w.current);if(e){var t=function(){return y(!1)};return e.addEventListener("scroll",t),e.addEventListener("resize",t),function(){e.removeEventListener("scroll",t),e.removeEventListener("resize",t)}}}}),[a]),l.default.createElement("span",{onTouchStart:x,onMouseEnter:M,onMouseLeave:S,onTouchEnd:C,ref:w},t,(0,u.createPortal)(l.default.createElement(l.default.Fragment,null,i&&b?l.default.createElement("div",{style:m,"data-text":n,"data-testid":"tooltip",className:(0,c.default)([d.default.tooltip,d.default[r],d.default[a],f])}):null),document.body))}},746:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tooltip=void 0;var o=n(127);Object.defineProperty(t,"Tooltip",{enumerable:!0,get:function(){return r(o).default}})},1918:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(6504));t.default=function(e){var t=e.src,n=e.type,a=e.children,s=e.containerRef,c=e.poster,d=e.muted,f=void 0===d||d,p=e.loop,v=void 0===p||p,h=e.autoPlay,m=void 0===h||h,g=e.layout,_=void 0===g?"contain":g,b=o(e,["src","type","children","containerRef","poster","muted","loop","autoPlay","layout"]);return a?i.default.createElement("div",{ref:s,className:(0,l.default)([u.default.container,u.default.hasOverlay])},i.default.createElement("video",r({"data-testid":"video",crossOrigin:"anonymous",className:(0,l.default)([u.default.video,u.default[_]]),muted:f,loop:v,autoPlay:m,poster:c,playsInline:!0},b),i.default.createElement("source",{"data-testid":"source",src:t,type:n})),a&&i.default.createElement("div",{className:u.default.overlay},a)):i.default.createElement("video",r({"data-testid":"video",crossOrigin:"anonymous",className:(0,l.default)([u.default.video,u.default[_]]),muted:f,loop:v,autoPlay:m,poster:c,playsInline:!0},b),i.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(1918);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},7297:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,(n=t.TableConfig||(t.TableConfig={}))[n.ROW_HEIGHT=48]="ROW_HEIGHT",n[n.HEADER_HEIGHT=32]="HEADER_HEIGHT",n[n.PAGE_SIZE=100]="PAGE_SIZE",n[n.ITEMS_LOADED=5]="ITEMS_LOADED"},2037:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(7297),t)},3607:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(9508),t),o(n(4127),t),o(n(75),t),o(n(4616),t),o(n(7429),t),o(n(2554),t),o(n(6873),t),o(n(1889),t),o(n(6086),t),o(n(6384),t),o(n(4958),t),o(n(2847),t),o(n(5860),t),o(n(3928),t),o(n(4115),t),o(n(2572),t),o(n(3814),t),o(n(1391),t),o(n(7387),t),o(n(6650),t),o(n(9929),t),o(n(2285),t),o(n(2149),t),o(n(2819),t),o(n(1143),t),o(n(393),t),o(n(746),t),o(n(6975),t),o(n(3212),t)},2802:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.SortOrder=void 0,(n=t.SortOrder||(t.SortOrder={})).ASC="asc",n.DESC="desc"},4330:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},3210:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},2223:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1 10L7.5 3L14 10' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},8799:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e"},7451:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.5 1.5L13.5 13.5M1.5 13.5L13.5 1.5' stroke='black'/%3e %3c/svg%3e"},5585:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M15.4685 15.4665L11.2018 11.1999M6.93516 13.3332C3.40053 13.3332 0.535156 10.4678 0.535156 6.9332C0.535156 3.39858 3.40053 0.533203 6.93516 0.533203C10.4698 0.533203 13.3352 3.39858 13.3352 6.9332C13.3352 10.4678 10.4698 13.3332 6.93516 13.3332Z' stroke='%23898891'/%3e %3c/svg%3e"},3790:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.9331 4.26758L7.99974 11.7342L1.06641 4.26758' stroke='%23898891' stroke-linecap='square'/%3e %3c/svg%3e"},2865:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8' standalone='no'%3f%3e %3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e %3csvg width='100%25' height='100%25' viewBox='0 0 46 46' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve' xmlns:serif='http://www.serif.com/' style='fill-rule:evenodd%3bclip-rule:evenodd%3bstroke-linejoin:round%3bstroke-miterlimit:2%3b'%3e %3cg transform='matrix(1%2c0%2c0%2c1%2c-27%2c-27)'%3e %3cpath d='M73%2c50C73%2c37.3 62.7%2c27 50%2c27C37.3%2c27 27%2c37.3 27%2c50M30.9%2c50C30.9%2c39.5 39.4%2c30.9 50%2c30.9C60.6%2c30.9 69.1%2c39.5 69.1%2c50' style='fill-rule:nonzero%3b'%3e %3canimateTransform attributeName='transform' attributeType='XML' type='rotate' dur='1s' from='0 50 50' to='360 50 50' repeatCount='indefinite' /%3e %3c/path%3e %3c/g%3e %3c/svg%3e"},3250:(e,t,n)=>{"use strict";var r=n(6689),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},1982:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return u.default}});var r=f(n(3990)),o=f(n(8237)),a=f(n(5355)),i=f(n(3764)),l=f(n(6314)),u=f(n(8464)),s=f(n(6435)),c=f(n(4008)),d=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,a,i){return r((l=r(r(t,e),r(o,i)))<<(u=a)|l>>>32-u,n);var l,u}function a(e,t,n,r,a,i,l){return o(t&n|~t&r,e,t,a,i,l)}function i(e,t,n,r,a,i,l){return o(t&r|n&~r,e,t,a,i,l)}function l(e,t,n,r,a,i,l){return o(t^n^r,e,t,a,i,l)}function u(e,t,n,r,a,i,l){return o(n^(t|~r),e,t,a,i,l)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){const t=[],n=32*e.length,r="0123456789abcdef";for(let o=0;o<n;o+=8){const n=e[o>>5]>>>o%32&255,a=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(a)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[n(t)-1]=t;let o=1732584193,s=-271733879,c=-1732584194,d=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=s,p=c,v=d;o=a(o,s,c,d,e[t],7,-680876936),d=a(d,o,s,c,e[t+1],12,-389564586),c=a(c,d,o,s,e[t+2],17,606105819),s=a(s,c,d,o,e[t+3],22,-1044525330),o=a(o,s,c,d,e[t+4],7,-176418897),d=a(d,o,s,c,e[t+5],12,1200080426),c=a(c,d,o,s,e[t+6],17,-1473231341),s=a(s,c,d,o,e[t+7],22,-45705983),o=a(o,s,c,d,e[t+8],7,1770035416),d=a(d,o,s,c,e[t+9],12,-1958414417),c=a(c,d,o,s,e[t+10],17,-42063),s=a(s,c,d,o,e[t+11],22,-1990404162),o=a(o,s,c,d,e[t+12],7,1804603682),d=a(d,o,s,c,e[t+13],12,-40341101),c=a(c,d,o,s,e[t+14],17,-1502002290),s=a(s,c,d,o,e[t+15],22,1236535329),o=i(o,s,c,d,e[t+1],5,-165796510),d=i(d,o,s,c,e[t+6],9,-1069501632),c=i(c,d,o,s,e[t+11],14,643717713),s=i(s,c,d,o,e[t],20,-373897302),o=i(o,s,c,d,e[t+5],5,-701558691),d=i(d,o,s,c,e[t+10],9,38016083),c=i(c,d,o,s,e[t+15],14,-660478335),s=i(s,c,d,o,e[t+4],20,-405537848),o=i(o,s,c,d,e[t+9],5,568446438),d=i(d,o,s,c,e[t+14],9,-1019803690),c=i(c,d,o,s,e[t+3],14,-187363961),s=i(s,c,d,o,e[t+8],20,1163531501),o=i(o,s,c,d,e[t+13],5,-1444681467),d=i(d,o,s,c,e[t+2],9,-51403784),c=i(c,d,o,s,e[t+7],14,1735328473),s=i(s,c,d,o,e[t+12],20,-1926607734),o=l(o,s,c,d,e[t+5],4,-378558),d=l(d,o,s,c,e[t+8],11,-2022574463),c=l(c,d,o,s,e[t+11],16,1839030562),s=l(s,c,d,o,e[t+14],23,-35309556),o=l(o,s,c,d,e[t+1],4,-1530992060),d=l(d,o,s,c,e[t+4],11,1272893353),c=l(c,d,o,s,e[t+7],16,-155497632),s=l(s,c,d,o,e[t+10],23,-1094730640),o=l(o,s,c,d,e[t+13],4,681279174),d=l(d,o,s,c,e[t],11,-358537222),c=l(c,d,o,s,e[t+3],16,-722521979),s=l(s,c,d,o,e[t+6],23,76029189),o=l(o,s,c,d,e[t+9],4,-640364487),d=l(d,o,s,c,e[t+12],11,-421815835),c=l(c,d,o,s,e[t+15],16,530742520),s=l(s,c,d,o,e[t+2],23,-995338651),o=u(o,s,c,d,e[t],6,-198630844),d=u(d,o,s,c,e[t+7],10,1126891415),c=u(c,d,o,s,e[t+14],15,-1416354905),s=u(s,c,d,o,e[t+5],21,-57434055),o=u(o,s,c,d,e[t+12],6,1700485571),d=u(d,o,s,c,e[t+3],10,-1894986606),c=u(c,d,o,s,e[t+10],15,-1051523),s=u(s,c,d,o,e[t+1],21,-2054922799),o=u(o,s,c,d,e[t+8],6,1873313359),d=u(d,o,s,c,e[t+15],10,-30611744),c=u(c,d,o,s,e[t+6],15,-1560198380),s=u(s,c,d,o,e[t+13],21,1309151649),o=u(o,s,c,d,e[t+4],6,-145523070),d=u(d,o,s,c,e[t+11],10,-1120210379),c=u(c,d,o,s,e[t+2],15,718787259),s=u(s,c,d,o,e[t+9],21,-343485551),o=r(o,n),s=r(s,f),c=r(c,p),d=r(d,v)}return[o,s,c,d]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(n(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}},4790:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};t.default=n},6314:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},58:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},3319:(e,t)=>{"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},3757:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const a=e.length/4+2,i=Math.ceil(a/16),l=new Array(i);for(let t=0;t<i;++t){const n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[64*t+4*r]<<24|e[64*t+4*r+1]<<16|e[64*t+4*r+2]<<8|e[64*t+4*r+3];l[t]=n}l[i-1][14]=8*(e.length-1)/Math.pow(2,32),l[i-1][14]=Math.floor(l[i-1][14]),l[i-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<i;++e){const a=new Uint32Array(80);for(let t=0;t<16;++t)a[t]=l[e][t];for(let e=16;e<80;++e)a[e]=r(a[e-3]^a[e-8]^a[e-14]^a[e-16],1);let i=o[0],u=o[1],s=o[2],c=o[3],d=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,s,c)+d+t[o]+a[e]>>>0;d=c,c=s,s=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+s>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+d>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]}},4008:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=i;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};const a=[];for(let e=0;e<256;++e)a.push((e+256).toString(16).slice(1));function i(e,t=0){return(a[e[t+0]]+a[e[t+1]]+a[e[t+2]]+a[e[t+3]]+"-"+a[e[t+4]]+a[e[t+5]]+"-"+a[e[t+6]]+a[e[t+7]]+"-"+a[e[t+8]]+a[e[t+9]]+"-"+a[e[t+10]]+a[e[t+11]]+a[e[t+12]]+a[e[t+13]]+a[e[t+14]]+a[e[t+15]]).toLowerCase()}t.default=function(e,t=0){const n=i(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n}},3990:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(3319))&&r.__esModule?r:{default:r},a=n(4008);let i,l,u=0,s=0;t.default=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let d=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==d||null==f){const t=e.random||(e.rng||o.default)();null==d&&(d=i=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=l=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),v=void 0!==e.nsecs?e.nsecs:s+1;const h=p-u+(v-s)/1e4;if(h<0&&void 0===e.clockseq&&(f=f+1&16383),(h<0||p>u)&&void 0===e.nsecs&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=p,s=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;c[r++]=m>>>24&255,c[r++]=m>>>16&255,c[r++]=m>>>8&255,c[r++]=255&m;const g=p/4294967296*1e4&268435455;c[r++]=g>>>8&255,c[r++]=255&g,c[r++]=g>>>24&15|16,c[r++]=g>>>16&255,c[r++]=f>>>8|128,c[r++]=255&f;for(let e=0;e<6;++e)c[r+e]=d[e];return t||(0,a.unsafeStringify)(c)}},8237:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(4163));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v3",48,o.default);t.default=i},7925:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,i,l){var u;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=(0,a.default)(r)),16!==(null===(u=r)||void 0===u?void 0:u.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let s=new Uint8Array(16+e.length);if(s.set(r),s.set(e,r.length),s=n(s),s[6]=15&s[6]|t,s[8]=63&s[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=s[e];return i}return(0,o.unsafeStringify)(s)}try{r.name=e}catch(e){}return r.DNS=i,r.URL=l,r};var r,o=n(4008),a=(r=n(8222))&&r.__esModule?r:{default:r};const i="6ba7b810-9dad-11d1-80b4-00c04fd430c8";t.DNS=i;const l="6ba7b811-9dad-11d1-80b4-00c04fd430c8";t.URL=l},5355:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(4790)),o=i(n(3319)),a=n(4008);function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const i=(e=e||{}).random||(e.rng||o.default)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=i[e];return t}return(0,a.unsafeStringify)(i)}},3764:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(3757));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v5",80,o.default);t.default=i},6435:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(58))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&o.default.test(e)}},8464:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},6689:e=>{"use strict";e.exports=require("react")},6405:e=>{"use strict";e.exports=require("react-dom")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r=n(3607),o=exports;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
3
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,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QUFNL0ssSUFBS2s1QyxFQUFXeGdELElBRTFFLEVDTkRtZ0QsRUFBb0J6OUMsRUFBSSxDQUFDa1AsRUFBS2tZLElBQVVycUIsT0FBT1EsVUFBVUMsZUFBZUMsS0FBS3lSLEVBQUtrWSxHQ0NsRnEyQixFQUFvQnA5QyxFQUFLMlAsSUFDSCxvQkFBWDdQLFFBQTBCQSxPQUFPNDlDLGFBQzFDaGhELE9BQU9xUixlQUFlNEIsRUFBUzdQLE9BQU80OUMsWUFBYSxDQUFFcDlDLE1BQU8sV0FFN0Q1RCxPQUFPcVIsZUFBZTRCLEVBQVMsYUFBYyxDQUFFclAsT0FBTyxHQUFPLEVDRjlELElBQUlxOUMsRUFBc0JQLEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3N2Z3IvY2hlY2stbWFyay5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvX2ludGVybmFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9mZjFiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz80MzI4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/YzBiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/ZmYyZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ODcxOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/ZmNlMiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/YThhZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXIubW9kdWxlLmNzcz85MjlkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckNvbnRlbnQvRHJhd2VyQ29udGVudC5tb2R1bGUuY3NzP2JhMGMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyRm9vdGVyL0RyYXdlckZvb3Rlci5tb2R1bGUuY3NzP2JiZTAiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VySGVhZGVyL0RyYXdlckhlYWRlci5tb2R1bGUuY3NzP2FkYjYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9DbGlja2FibGUubW9kdWxlLmNzcz83YTBkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC5tb2R1bGUuY3NzP2Q1NTciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwubW9kdWxlLmNzcz8wOTlkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLm1vZHVsZS5jc3M/MWNhYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzPzU5NmYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzPzJjNDQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JbWFnZS9JbWFnZS5tb2R1bGUuY3NzP2YxMGUiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC5tb2R1bGUuY3NzPzQ2OWYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy5tb2R1bGUuY3NzPzNjZDQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzcz9kZmZhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Lm1vZHVsZS5jc3M/MTkwYSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzP2NkMzQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLm1vZHVsZS5jc3M/YWFjZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLm1vZHVsZS5jc3M/YjVkYiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01vZGFsL01vZGFsLm1vZHVsZS5jc3M/OGE4NiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9OdW1wYWQubW9kdWxlLmNzcz82NWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5Lm1vZHVsZS5jc3M/MzcxNyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9Hcm91cE9wdGlvbi5tb2R1bGUuY3NzPzRkYjQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uL09wdGlvbi5tb2R1bGUuY3NzP2I2NzQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0Lm1vZHVsZS5jc3M/NDlhYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWFyY2gvU2VhcmNoLm1vZHVsZS5jc3M/ZWQ0MyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QubW9kdWxlLmNzcz8xZTc5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLm1vZHVsZS5jc3M/OWFiZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLm1vZHVsZS5jc3M/OTNhOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3M/NzBkZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC5tb2R1bGUuY3NzPzFkMGMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy5tb2R1bGUuY3NzP2I5NTUiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwubW9kdWxlLmNzcz9kYTVhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnL1RhZy5tb2R1bGUuY3NzPzhmMzYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWdzSW5wdXQvVGFnc0lucHV0Lm1vZHVsZS5jc3M/OGZkMSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQubW9kdWxlLmNzcz8zZjFmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz81ODg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIubW9kdWxlLmNzcz9lYzg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9vbHRpcC9Ub29sdGlwLm1vZHVsZS5jc3M/MDZhZCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1ZpZGVvL1ZpZGVvLm1vZHVsZS5jc3M/ZWRhNyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvY29tcGxldGUtaGludC9kaXN0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1hdXRvY29tcGxldGUtaGludC9kaXN0L3NyYy91dGlscy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9ob3RrZXlzLWpzL2Rpc3QvaG90a2V5cy5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtaG90a2V5cy1ob29rL2Rpc3QvcmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vcmVtb3ZlQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vY29uZmlnLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cENvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvcmVmbG93LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vQ1NTVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vYWRkQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvZG9tLWhlbHBlcnMvZXNtL2hhc0NsYXNzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL3V0aWxzL0NoaWxkTWFwcGluZy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9UcmFuc2l0aW9uR3JvdXAuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vUmVwbGFjZVRyYW5zaXRpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vU3dpdGNoVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyL2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL21lbW9pemUtb25lL2Rpc3QvbWVtb2l6ZS1vbmUuZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zY3JvbGxwYXJlbnQvc2Nyb2xscGFyZW50LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9Db2xvclBpY2tlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclBpY2tlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvQ29udGV4dC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckNvbnRlbnQvRHJhd2VyQ29udGVudC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyQ29udGVudC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJGb290ZXIvRHJhd2VyRm9vdGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJGb290ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VySGVhZGVyL0RyYXdlckhlYWRlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VySGVhZGVyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvVG9vbHRpcC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL1RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbnN0YW50cy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy90eXBlcy90YWJsZS50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2NhcmV0LXVwLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jbG9zZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY3Jvc3NlZC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VhcmNoLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc3Bpbm5lci1jaXJjbGUuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbWQ1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25hdGl2ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9uaWwuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcGFyc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcmVnZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvcm5nLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3NoYTEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YxLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3YzNS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92NS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92YWxpZGF0ZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci92ZXJzaW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3RcIiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0LWRvbVwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoc2VsZikge1xuICBpZiAoc2VsZiA9PT0gdm9pZCAwKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIHNlbGY7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2Uoc291cmNlLCBleGNsdWRlZCkge1xuICBpZiAoc291cmNlID09IG51bGwpIHJldHVybiB7fTtcbiAgdmFyIHRhcmdldCA9IHt9O1xuICB2YXIgc291cmNlS2V5cyA9IE9iamVjdC5rZXlzKHNvdXJjZSk7XG4gIHZhciBrZXksIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IHNvdXJjZUtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBzb3VyY2VLZXlzW2ldO1xuICAgIGlmIChleGNsdWRlZC5pbmRleE9mKGtleSkgPj0gMCkgY29udGludWU7XG4gICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgfVxuXG4gIHJldHVybiB0YXJnZXQ7XG59IiwidmFyIF9wYXRoO1xuZnVuY3Rpb24gX2V4dGVuZHMoKSB7IF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiA/IE9iamVjdC5hc3NpZ24uYmluZCgpIDogZnVuY3Rpb24gKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldOyBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7IGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7IHRhcmdldFtrZXldID0gc291cmNlW2tleV07IH0gfSB9IHJldHVybiB0YXJnZXQ7IH07IHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpOyB9XG5pbXBvcnQgKiBhcyBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbnZhciBTdmdDaGVja01hcmsgPSBmdW5jdGlvbiBTdmdDaGVja01hcmsocHJvcHMpIHtcbiAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFwic3ZnXCIsIF9leHRlbmRzKHtcbiAgICB4bWxuczogXCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiLFxuICAgIHdpZHRoOiAxNSxcbiAgICBoZWlnaHQ6IDE1LFxuICAgIGZpbGw6IFwibm9uZVwiXG4gIH0sIHByb3BzKSwgX3BhdGggfHwgKF9wYXRoID0gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJwYXRoXCIsIHtcbiAgICBzdHJva2U6IFwiY3VycmVudENvbG9yXCIsXG4gICAgc3Ryb2tlTGluZWNhcDogXCJzcXVhcmVcIixcbiAgICBkOiBcIm0xIDcgNC41IDQuNUwxNCAzXCJcbiAgfSkpKTtcbn07XG5leHBvcnQgZGVmYXVsdCBTdmdDaGVja01hcms7IiwiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBvcHRpb25zID0ge1xuICAgIGNhcHR1cmU6IHRydWUsXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgIH0sIFtjYWxsYmFja10pO1xuICAgIHJldHVybiByZWY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VPdXRzaWRlQ2xpY2suanMubWFwIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVJlZiwgY3JlYXRlRWxlbWVudCwgdXNlU3RhdGUsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG5jb25zdCBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IEVNUFRZX0NBQ0hFID0ge307XG5jb25zdCBJTklUSUFMX0NBQ0hFID0ge307XG5jb25zdCBub29wID0gKCk9Pnt9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBVTkRFRklORUQgPSAvKiNfX05PSU5MSU5FX18qLyBub29wKCk7XG5jb25zdCBPQkpFQ1QgPSBPYmplY3Q7XG5jb25zdCBpc1VuZGVmaW5lZCA9ICh2KT0+diA9PT0gVU5ERUZJTkVEO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2KT0+dHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJztcbmNvbnN0IG1lcmdlT2JqZWN0cyA9IChhLCBiKT0+KHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgLi4uYlxuICAgIH0pO1xuY29uc3QgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIHRoZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbmNvbnN0IGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGlzRG9jdW1lbnREZWZpbmVkID0gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKT0+aXNXaW5kb3dEZWZpbmVkICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBjcmVhdGVDYWNoZUhlbHBlciA9IChjYWNoZSwga2V5KT0+e1xuICAgIGNvbnN0IHN0YXRlID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBHZXR0ZXJcbiAgICAgICAgKCk9PmNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFLFxuICAgICAgICAvLyBTZXR0ZXJcbiAgICAgICAgKGluZm8pPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdyaXRpbmcgdG8gdGhlIHN0b3JlLCB3ZSBrZWVwIHRoZSB2YWx1ZSBpbiB0aGUgaW5pdGlhbCBjYWNoZVxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3Mgbm90IHRoZXJlIHlldC5cbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gSU5JVElBTF9DQUNIRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DQUNIRVtrZXldID0gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGVbNV0oa2V5LCBtZXJnZU9iamVjdHMocHJldiwgaW5mbyksIHByZXYgfHwgRU1QVFlfQ0FDSEUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBTdWJzY3JpYmVyXG4gICAgICAgIHN0YXRlWzZdLFxuICAgICAgICAvLyBHZXQgc2VydmVyIGNhY2hlIHNuYXBzaG90XG4gICAgICAgICgpPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgd2FzIHVwZGF0ZWQgb24gdGhlIGNsaWVudCwgd2UgcmV0dXJuIHRoZSBzdG9yZWQgaW5pdGlhbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIElOSVRJQUxfQ0FDSEUpIHJldHVybiBJTklUSUFMX0NBQ0hFW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGRvbmUgYW55IGNsaWVudC1zaWRlIHVwZGF0ZXMsIHdlIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRTtcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxuY29uc3QgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG5sZXQgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzYWJsZS5cbmNvbnN0IHN0YWJsZUhhc2ggPSAoYXJnKT0+e1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyBTdG9yZSB0aGUgaGFzaCBmaXJzdCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBiZWZvcmUgZW50ZXJpbmcgdGhlXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBgc3RhYmxlSGFzaGAgY2FsbHMuXG4gICAgICAgIC8vIEZvciBvdGhlciBvYmplY3RzIGxpa2Ugc2V0IGFuZCBtYXAsIHdlIHVzZSB0aGlzIGlkIGRpcmVjdGx5IGFzIHRoZSBoYXNoLlxuICAgICAgICByZXN1bHQgPSArK2NvdW50ZXIgKyAnfic7XG4gICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXJyYXkuXG4gICAgICAgICAgICByZXN1bHQgPSAnQCc7XG4gICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4Kyspe1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPQkpFQ1Qua2V5cyhhcmcpLnNvcnQoKTtcbiAgICAgICAgICAgIHdoaWxlKCFpc1VuZGVmaW5lZChpbmRleCA9IGtleXMucG9wKCkpKXtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGlzRGF0ZSA/IGFyZy50b0pTT04oKSA6IHR5cGUgPT0gJ3N5bWJvbCcgPyBhcmcudG9TdHJpbmcoKSA6IHR5cGUgPT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeShhcmcpIDogJycgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIER1ZSB0byB0aGUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29ya2Fyb3VuZCwgd2UgYWx3YXlzIGFzc3VtZSBpdCdzIG9ubGluZSBvbiB0aGUgZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi8gbGV0IG9ubGluZSA9IHRydWU7XG5jb25zdCBpc09ubGluZSA9ICgpPT5vbmxpbmU7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxuY29uc3QgW29uV2luZG93RXZlbnQsIG9mZldpbmRvd0V2ZW50XSA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/IFtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdyksXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG5dIDogW1xuICAgIG5vb3AsXG4gICAgbm9vcFxuXTtcbmNvbnN0IGlzVmlzaWJsZSA9ICgpPT57XG4gICAgY29uc3QgdmlzaWJpbGl0eVN0YXRlID0gaXNEb2N1bWVudERlZmluZWQgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xuY29uc3QgaW5pdEZvY3VzID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZXaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG5jb25zdCBpbml0UmVjb25uZWN0ID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIHJldmFsaWRhdGUgb24gcmVjb25uZWN0ZWRcbiAgICBjb25zdCBvbk9ubGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IHRydWU7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICAvLyBub3RoaW5nIHRvIHJldmFsaWRhdGUsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgICBjb25zdCBvbk9mZmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIG9uV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICBvbldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xuY29uc3QgcHJlc2V0ID0ge1xuICAgIGlzT25saW5lLFxuICAgIGlzVmlzaWJsZVxufTtcbmNvbnN0IGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1cyxcbiAgICBpbml0UmVjb25uZWN0XG59O1xuXG5jb25zdCBJU19SRUFDVF9MRUdBQ1kgPSAhUmVhY3QudXNlSWQ7XG5jb25zdCBJU19TRVJWRVIgPSAhaXNXaW5kb3dEZWZpbmVkIHx8ICdEZW5vJyBpbiB3aW5kb3c7XG4vLyBQb2x5ZmlsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbmNvbnN0IHJBRiA9IChmKT0+aGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbi8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLlxuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxuY29uc3QgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbmNvbnN0IHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJiBuYXZpZ2F0b3JDb25uZWN0aW9uICYmIChbXG4gICAgJ3Nsb3ctMmcnLFxuICAgICcyZydcbl0uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fCBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxuY29uc3Qgc2VyaWFsaXplID0gKGtleSk9PntcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIGtleSBhcyB0aGUgYXJndW1lbnQgb2YgZmV0Y2hlci4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgb3IgYW5cbiAgICAvLyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgY29uc3QgYXJncyA9IGtleTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID0gdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6IChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkubGVuZ3RoIDoga2V5KSA/IHN0YWJsZUhhc2goa2V5KSA6ICcnO1xuICAgIHJldHVybiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgYXJnc1xuICAgIF07XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxubGV0IF9fdGltZXN0YW1wID0gMDtcbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpPT4rK19fdGltZXN0YW1wO1xuXG5jb25zdCBGT0NVU19FVkVOVCA9IDA7XG5jb25zdCBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xuY29uc3QgTVVUQVRFX0VWRU5UID0gMjtcbmNvbnN0IEVSUk9SX1JFVkFMSURBVEVfRVZFTlQgPSAzO1xuXG52YXIgY29uc3RhbnRzID0ge1xuICBfX3Byb3RvX186IG51bGwsXG4gIEZPQ1VTX0VWRU5UOiBGT0NVU19FVkVOVCxcbiAgUkVDT05ORUNUX0VWRU5UOiBSRUNPTk5FQ1RfRVZFTlQsXG4gIE1VVEFURV9FVkVOVDogTVVUQVRFX0VWRU5ULFxuICBFUlJPUl9SRVZBTElEQVRFX0VWRU5UOiBFUlJPUl9SRVZBTElEQVRFX0VWRU5UXG59O1xuXG5hc3luYyBmdW5jdGlvbiBpbnRlcm5hbE11dGF0ZSguLi5hcmdzKSB7XG4gICAgY29uc3QgW2NhY2hlLCBfa2V5LCBfZGF0YSwgX29wdHNdID0gYXJncztcbiAgICAvLyBXaGVuIHBhc3NpbmcgYXMgYSBib29sZWFuLCBpdCdzIGV4cGxpY2l0bHkgdXNlZCB0byBkaXNhYmxlL2VuYWJsZVxuICAgIC8vIHJldmFsaWRhdGlvbi5cbiAgICBjb25zdCBvcHRpb25zID0gbWVyZ2VPYmplY3RzKHtcbiAgICAgICAgcG9wdWxhdGVDYWNoZTogdHJ1ZSxcbiAgICAgICAgdGhyb3dPbkVycm9yOiB0cnVlXG4gICAgfSwgdHlwZW9mIF9vcHRzID09PSAnYm9vbGVhbicgPyB7XG4gICAgICAgIHJldmFsaWRhdGU6IF9vcHRzXG4gICAgfSA6IF9vcHRzIHx8IHt9KTtcbiAgICBsZXQgcG9wdWxhdGVDYWNoZSA9IG9wdGlvbnMucG9wdWxhdGVDYWNoZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3JPcHRpb24gPSBvcHRpb25zLnJvbGxiYWNrT25FcnJvcjtcbiAgICBsZXQgb3B0aW1pc3RpY0RhdGEgPSBvcHRpb25zLm9wdGltaXN0aWNEYXRhO1xuICAgIGNvbnN0IHJldmFsaWRhdGUgPSBvcHRpb25zLnJldmFsaWRhdGUgIT09IGZhbHNlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvciA9IChlcnJvcik9PntcbiAgICAgICAgcmV0dXJuIHR5cGVvZiByb2xsYmFja09uRXJyb3JPcHRpb24gPT09ICdmdW5jdGlvbicgPyByb2xsYmFja09uRXJyb3JPcHRpb24oZXJyb3IpIDogcm9sbGJhY2tPbkVycm9yT3B0aW9uICE9PSBmYWxzZTtcbiAgICB9O1xuICAgIGNvbnN0IHRocm93T25FcnJvciA9IG9wdGlvbnMudGhyb3dPbkVycm9yO1xuICAgIC8vIElmIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgYSBrZXkgZmlsdGVyLCByZXR1cm4gdGhlIG11dGF0aW9uIHJlc3VsdHMgZm9yIGFsbFxuICAgIC8vIGZpbHRlcmVkIGtleXMuXG4gICAgaWYgKGlzRnVuY3Rpb24oX2tleSkpIHtcbiAgICAgICAgY29uc3Qga2V5RmlsdGVyID0gX2tleTtcbiAgICAgICAgY29uc3QgbWF0Y2hlZEtleXMgPSBbXTtcbiAgICAgICAgY29uc3QgaXQgPSBjYWNoZS5rZXlzKCk7XG4gICAgICAgIGZvcihsZXQga2V5SXQgPSBpdC5uZXh0KCk7ICFrZXlJdC5kb25lOyBrZXlJdCA9IGl0Lm5leHQoKSl7XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBrZXlJdC52YWx1ZTtcbiAgICAgICAgICAgIGlmICgvLyBTa2lwIHRoZSBzcGVjaWFsIHVzZVNXUkluZmluaXRlIGFuZCB1c2VTV1JTdWJzY3JpcHRpb24ga2V5cy5cbiAgICAgICAgICAgICEvXlxcJChpbmZ8c3ViKVxcJC8udGVzdChrZXkpICYmIGtleUZpbHRlcihjYWNoZS5nZXQoa2V5KS5faykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG1hdGNoZWRLZXlzLm1hcChtdXRhdGVCeUtleSkpO1xuICAgIH1cbiAgICByZXR1cm4gbXV0YXRlQnlLZXkoX2tleSk7XG4gICAgYXN5bmMgZnVuY3Rpb24gbXV0YXRlQnlLZXkoX2spIHtcbiAgICAgICAgLy8gU2VyaWFsaXplIGtleVxuICAgICAgICBjb25zdCBba2V5XSA9IHNlcmlhbGl6ZShfayk7XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IFtnZXQsIHNldF0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICAgICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICBjb25zdCBzdGFydFJldmFsaWRhdGUgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKHJldmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oKCk9PmdldCgpLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXQoKS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXcgZGF0YSBwcm92aWRlZCwgcmV2YWxpZGF0ZSB0aGUga2V5IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBhbmQgYnJvYWRjYXN0IHN0YXRlLlxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gX2RhdGE7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgLy8gVXBkYXRlIGdsb2JhbCB0aW1lc3RhbXBzLlxuICAgICAgICBjb25zdCBiZWZvcmVNdXRhdGlvblRzID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIE1VVEFUSU9OW2tleV0gPSBbXG4gICAgICAgICAgICBiZWZvcmVNdXRhdGlvblRzLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBoYXNPcHRpbWlzdGljRGF0YSA9ICFpc1VuZGVmaW5lZChvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0KCk7XG4gICAgICAgIC8vIGBkaXNwbGF5ZWREYXRhYCBpcyB0aGUgY3VycmVudCB2YWx1ZSBvbiBzY3JlZW4uIEl0IGNvdWxkIGJlIHRoZSBvcHRpbWlzdGljIHZhbHVlXG4gICAgICAgIC8vIHRoYXQgaXMgZ29pbmcgdG8gYmUgb3ZlcnJpZGRlbiBieSBhIGBjb21taXR0ZWREYXRhYCwgb3IgZ2V0IHJldmVydGVkIGJhY2suXG4gICAgICAgIC8vIGBjb21taXR0ZWREYXRhYCBpcyB0aGUgdmFsaWRhdGVkIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGZldGNoIG9yIG11dGF0aW9uLlxuICAgICAgICBjb25zdCBkaXNwbGF5ZWREYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdGF0ZS5fYztcbiAgICAgICAgY29uc3QgY29tbWl0dGVkRGF0YSA9IGlzVW5kZWZpbmVkKGN1cnJlbnREYXRhKSA/IGRpc3BsYXllZERhdGEgOiBjdXJyZW50RGF0YTtcbiAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgaWYgKGhhc09wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24ob3B0aW1pc3RpY0RhdGEpID8gb3B0aW1pc3RpY0RhdGEoY29tbWl0dGVkRGF0YSkgOiBvcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgIC8vIFdoZW4gd2Ugc2V0IG9wdGltaXN0aWMgZGF0YSwgYmFja3VwIHRoZSBjdXJyZW50IGNvbW1pdHRlZERhdGEgZGF0YSBpbiBgX2NgLlxuICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpbWlzdGljRGF0YSxcbiAgICAgICAgICAgICAgICBfYzogY29tbWl0dGVkRGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIGBkYXRhYCBpcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHBhc3NpbmcgY3VycmVudCBjYWNoZSB2YWx1ZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEoY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYGRhdGFgIGlzIGEgcHJvbWlzZS90aGVuYWJsZSwgcmVzb2x2ZSB0aGUgZmluYWwgZGF0YSBmaXJzdC5cbiAgICAgICAgaWYgKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBkYXRhLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgaWYgKGJlZm9yZU11dGF0aW9uVHMgIT09IE1VVEFUSU9OW2tleV1bMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBoYXNPcHRpbWlzdGljRGF0YSAmJiByb2xsYmFja09uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBjb21taXR0ZWREYXRhO1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgdG8gYmUgdGhlIGxhdGVzdCBjb21taXR0ZWQgZGF0YSwgYW5kIGNsZWFyIHRoZSBgX2NgIHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBzaG91bGQgd3JpdGUgYmFjayB0aGUgY2FjaGUgYWZ0ZXIgcmVxdWVzdC5cbiAgICAgICAgaWYgKHBvcHVsYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGRhdGEuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocG9wdWxhdGVDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBvcHVsYXRlQ2FjaGUoZGF0YSwgY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBTV1IgSG9va3MnIGludGVybmFsIHN0YXRlczpcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIC8vIFRoZSBtdXRhdGlvbiBhbmQgcmV2YWxpZGF0aW9uIGFyZSBlbmRlZCwgd2UgY2FuIGNsZWFyIGl0IHNpbmNlIHRoZSBkYXRhIGlzXG4gICAgICAgIC8vIG5vdCBhbiBvcHRpbWlzdGljIHZhbHVlIGFueW1vcmUuXG4gICAgICAgIHNldCh7XG4gICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YTtcbiAgICB9XG59XG5cbmNvbnN0IHJldmFsaWRhdGVBbGxLZXlzID0gKHJldmFsaWRhdG9ycywgdHlwZSk9PntcbiAgICBmb3IoY29uc3Qga2V5IGluIHJldmFsaWRhdG9ycyl7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSkgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbmNvbnN0IGluaXRDYWNoZSA9IChwcm92aWRlciwgb3B0aW9ucyk9PntcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBpcyBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBUaGUgcHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCBFVkVOVF9SRVZBTElEQVRPUlMgPSB7fTtcbiAgICAgICAgY29uc3QgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgbGV0IHVubW91bnQgPSBub29wO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0ge307XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IChrZXksIGNhbGxiYWNrKT0+e1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNba2V5XSA9IHN1YnM7XG4gICAgICAgICAgICBzdWJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuICgpPT5zdWJzLnNwbGljZShzdWJzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGVyID0gKGtleSwgdmFsdWUsIHByZXYpPT57XG4gICAgICAgICAgICBwcm92aWRlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldO1xuICAgICAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZuIG9mIHN1YnMpe1xuICAgICAgICAgICAgICAgICAgICBmbih2YWx1ZSwgcHJldik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBpbml0UHJvdmlkZXIgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSBzdGF0ZSBpZiBpdCdzIG5ldywgb3IgaWYgdGhlIHByb3ZpZGVyIGhhcyBiZWVuIGV4dGVuZGVkLlxuICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLnNldChwcm92aWRlciwgW1xuICAgICAgICAgICAgICAgICAgICBFVkVOVF9SRVZBTElEQVRPUlMsXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgICAgICAgICAgc2V0dGVyLFxuICAgICAgICAgICAgICAgICAgICBzdWJzY3JpYmVcbiAgICAgICAgICAgICAgICBdKTtcbiAgICAgICAgICAgICAgICBpZiAoIUlTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIGxpc3RlbmluZyB0byB0aGUgbmF0aXZlIGV2ZW50cyBmb3IgYXV0byByZXZhbGlkYXRpb25zLFxuICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbnRlbnRpb25hbGx5IHB1dCBhIGRlbGF5IChzZXRUaW1lb3V0KSBoZXJlIHRvIG1ha2Ugc3VyZSB0aGV5IGFyZVxuICAgICAgICAgICAgICAgICAgICAvLyBmaXJlZCBhZnRlciBpbW1lZGlhdGUgSmF2YVNjcmlwdCBleGVjdXRpb25zLCB3aGljaCBjYW4gYmVcbiAgICAgICAgICAgICAgICAgICAgLy8gUmVhY3QncyBzdGF0ZSB1cGRhdGVzLlxuICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGF2b2lkcyBzb21lIHVubmVjZXNzYXJ5IHJldmFsaWRhdGlvbnMgc3VjaCBhc1xuICAgICAgICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTY4MC5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZUZvY3VzID0gb3B0cy5pbml0Rm9jdXMoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgRk9DVVNfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VSZWNvbm5lY3QgPSBvcHRzLmluaXRSZWNvbm5lY3Qoc2V0VGltZW91dC5iaW5kKFVOREVGSU5FRCwgcmV2YWxpZGF0ZUFsbEtleXMuYmluZChVTkRFRklORUQsIEVWRU5UX1JFVkFMSURBVE9SUywgUkVDT05ORUNUX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICB1bm1vdW50ID0gKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VGb2N1cyAmJiByZWxlYXNlRm9jdXMoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VSZWNvbm5lY3QgJiYgcmVsZWFzZVJlY29ubmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiB1bi1tb3VudGluZywgd2UgbmVlZCB0byByZW1vdmUgdGhlIGNhY2hlIHByb3ZpZGVyIGZyb20gdGhlIHN0YXRlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzdG9yYWdlIHRvbyBiZWNhdXNlIGl0J3MgYSBzaWRlLWVmZmVjdC4gT3RoZXJ3aXNlLCB3aGVuIHJlLW1vdW50aW5nIHdlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIG5vdCByZS1yZWdpc3RlciB0aG9zZSBldmVudCBsaXN0ZW5lcnMuXG4gICAgICAgICAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5kZWxldGUocHJvdmlkZXIpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgaW5pdFByb3ZpZGVyKCk7XG4gICAgICAgIC8vIFRoaXMgaXMgYSBuZXcgcHJvdmlkZXIsIHdlIG5lZWQgdG8gaW5pdGlhbGl6ZSBpdCBhbmQgc2V0dXAgRE9NIGV2ZW50c1xuICAgICAgICAvLyBsaXN0ZW5lcnMgZm9yIGBmb2N1c2AgYW5kIGByZWNvbm5lY3RgIGFjdGlvbnMuXG4gICAgICAgIC8vIFdlIG1pZ2h0IHdhbnQgdG8gaW5qZWN0IGFuIGV4dHJhIGxheWVyIG9uIHRvcCBvZiBgcHJvdmlkZXJgIGluIHRoZSBmdXR1cmUsXG4gICAgICAgIC8vIHN1Y2ggYXMga2V5IHNlcmlhbGl6YXRpb24sIGF1dG8gR0MsIGV0Yy5cbiAgICAgICAgLy8gRm9yIG5vdywgaXQncyBqdXN0IGEgYE1hcGAgaW50ZXJmYWNlIHdpdGhvdXQgYW55IG1vZGlmaWNhdGlvbnMuXG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICBwcm92aWRlcixcbiAgICAgICAgICAgIG11dGF0ZSxcbiAgICAgICAgICAgIGluaXRQcm92aWRlcixcbiAgICAgICAgICAgIHVubW91bnRcbiAgICAgICAgXTtcbiAgICB9XG4gICAgcmV0dXJuIFtcbiAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgIFNXUkdsb2JhbFN0YXRlLmdldChwcm92aWRlcilbNF1cbiAgICBdO1xufTtcblxuLy8gZXJyb3IgcmV0cnlcbmNvbnN0IG9uRXJyb3JSZXRyeSA9IChfLCBfXywgY29uZmlnLCByZXZhbGlkYXRlLCBvcHRzKT0+e1xuICAgIGNvbnN0IG1heFJldHJ5Q291bnQgPSBjb25maWcuZXJyb3JSZXRyeUNvdW50O1xuICAgIGNvbnN0IGN1cnJlbnRSZXRyeUNvdW50ID0gb3B0cy5yZXRyeUNvdW50O1xuICAgIC8vIEV4cG9uZW50aWFsIGJhY2tvZmZcbiAgICBjb25zdCB0aW1lb3V0ID0gfn4oKE1hdGgucmFuZG9tKCkgKyAwLjUpICogKDEgPDwgKGN1cnJlbnRSZXRyeUNvdW50IDwgOCA/IGN1cnJlbnRSZXRyeUNvdW50IDogOCkpKSAqIGNvbmZpZy5lcnJvclJldHJ5SW50ZXJ2YWw7XG4gICAgaWYgKCFpc1VuZGVmaW5lZChtYXhSZXRyeUNvdW50KSAmJiBjdXJyZW50UmV0cnlDb3VudCA+IG1heFJldHJ5Q291bnQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KHJldmFsaWRhdGUsIHRpbWVvdXQsIG9wdHMpO1xufTtcbmNvbnN0IGNvbXBhcmUgPSAoY3VycmVudERhdGEsIG5ld0RhdGEpPT5zdGFibGVIYXNoKGN1cnJlbnREYXRhKSA9PSBzdGFibGVIYXNoKG5ld0RhdGEpO1xuLy8gRGVmYXVsdCBjYWNoZSBwcm92aWRlclxuY29uc3QgW2NhY2hlLCBtdXRhdGVdID0gaW5pdENhY2hlKG5ldyBNYXAoKSk7XG4vLyBEZWZhdWx0IGNvbmZpZ1xuY29uc3QgZGVmYXVsdENvbmZpZyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgLy8gZXZlbnRzXG4gICAgb25Mb2FkaW5nU2xvdzogbm9vcCxcbiAgICBvblN1Y2Nlc3M6IG5vb3AsXG4gICAgb25FcnJvcjogbm9vcCxcbiAgICBvbkVycm9yUmV0cnksXG4gICAgb25EaXNjYXJkZWQ6IG5vb3AsXG4gICAgLy8gc3dpdGNoZXNcbiAgICByZXZhbGlkYXRlT25Gb2N1czogdHJ1ZSxcbiAgICByZXZhbGlkYXRlT25SZWNvbm5lY3Q6IHRydWUsXG4gICAgcmV2YWxpZGF0ZUlmU3RhbGU6IHRydWUsXG4gICAgc2hvdWxkUmV0cnlPbkVycm9yOiB0cnVlLFxuICAgIC8vIHRpbWVvdXRzXG4gICAgZXJyb3JSZXRyeUludGVydmFsOiBzbG93Q29ubmVjdGlvbiA/IDEwMDAwIDogNTAwMCxcbiAgICBmb2N1c1Rocm90dGxlSW50ZXJ2YWw6IDUgKiAxMDAwLFxuICAgIGRlZHVwaW5nSW50ZXJ2YWw6IDIgKiAxMDAwLFxuICAgIGxvYWRpbmdUaW1lb3V0OiBzbG93Q29ubmVjdGlvbiA/IDUwMDAgOiAzMDAwLFxuICAgIC8vIHByb3ZpZGVyc1xuICAgIGNvbXBhcmUsXG4gICAgaXNQYXVzZWQ6ICgpPT5mYWxzZSxcbiAgICBjYWNoZSxcbiAgICBtdXRhdGUsXG4gICAgZmFsbGJhY2s6IHt9XG59LCAvLyB1c2Ugd2ViIHByZXNldCBieSBkZWZhdWx0XG5wcmVzZXQpO1xuXG5jb25zdCBtZXJnZUNvbmZpZ3MgPSAoYSwgYik9PntcbiAgICAvLyBOZWVkIHRvIGNyZWF0ZSBhIG5ldyBvYmplY3QgdG8gYXZvaWQgbXV0YXRpbmcgdGhlIG9yaWdpbmFsIGhlcmUuXG4gICAgY29uc3QgdiA9IG1lcmdlT2JqZWN0cyhhLCBiKTtcbiAgICAvLyBJZiB0d28gY29uZmlncyBhcmUgcHJvdmlkZWQsIG1lcmdlIHRoZWlyIGB1c2VgIGFuZCBgZmFsbGJhY2tgIG9wdGlvbnMuXG4gICAgaWYgKGIpIHtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUxICwgZmFsbGJhY2s6IGYxICB9ID0gYTtcbiAgICAgICAgY29uc3QgeyB1c2U6IHUyICwgZmFsbGJhY2s6IGYyICB9ID0gYjtcbiAgICAgICAgaWYgKHUxICYmIHUyKSB7XG4gICAgICAgICAgICB2LnVzZSA9IHUxLmNvbmNhdCh1Mik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGYxICYmIGYyKSB7XG4gICAgICAgICAgICB2LmZhbGxiYWNrID0gbWVyZ2VPYmplY3RzKGYxLCBmMik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHY7XG59O1xuXG5jb25zdCBTV1JDb25maWdDb250ZXh0ID0gY3JlYXRlQ29udGV4dCh7fSk7XG5jb25zdCBTV1JDb25maWcgPSAocHJvcHMpPT57XG4gICAgY29uc3QgeyB2YWx1ZSAgfSA9IHByb3BzO1xuICAgIGNvbnN0IHBhcmVudENvbmZpZyA9IHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCk7XG4gICAgY29uc3QgaXNGdW5jdGlvbmFsQ29uZmlnID0gaXNGdW5jdGlvbih2YWx1ZSk7XG4gICAgY29uc3QgY29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gdmFsdWUocGFyZW50Q29uZmlnKSA6IHZhbHVlLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICB2YWx1ZVxuICAgIF0pO1xuICAgIC8vIEV4dGVuZCBwYXJlbnQgY29udGV4dCB2YWx1ZXMgYW5kIG1pZGRsZXdhcmUuXG4gICAgY29uc3QgZXh0ZW5kZWRDb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyBjb25maWcgOiBtZXJnZUNvbmZpZ3MocGFyZW50Q29uZmlnLCBjb25maWcpLCBbXG4gICAgICAgIGlzRnVuY3Rpb25hbENvbmZpZyxcbiAgICAgICAgcGFyZW50Q29uZmlnLFxuICAgICAgICBjb25maWdcbiAgICBdKTtcbiAgICAvLyBTaG91bGQgbm90IHVzZSB0aGUgaW5oZXJpdGVkIHByb3ZpZGVyLlxuICAgIGNvbnN0IHByb3ZpZGVyID0gY29uZmlnICYmIGNvbmZpZy5wcm92aWRlcjtcbiAgICAvLyBpbml0aWFsaXplIHRoZSBjYWNoZSBvbmx5IG9uIGZpcnN0IGFjY2Vzcy5cbiAgICBjb25zdCBjYWNoZUNvbnRleHRSZWYgPSB1c2VSZWYoVU5ERUZJTkVEKTtcbiAgICBpZiAocHJvdmlkZXIgJiYgIWNhY2hlQ29udGV4dFJlZi5jdXJyZW50KSB7XG4gICAgICAgIGNhY2hlQ29udGV4dFJlZi5jdXJyZW50ID0gaW5pdENhY2hlKHByb3ZpZGVyKGV4dGVuZGVkQ29uZmlnLmNhY2hlIHx8IGNhY2hlKSwgY29uZmlnKTtcbiAgICB9XG4gICAgY29uc3QgY2FjaGVDb250ZXh0ID0gY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQ7XG4gICAgLy8gT3ZlcnJpZGUgdGhlIGNhY2hlIGlmIGEgbmV3IHByb3ZpZGVyIGlzIGdpdmVuLlxuICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcuY2FjaGUgPSBjYWNoZUNvbnRleHRbMF07XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLm11dGF0ZSA9IGNhY2hlQ29udGV4dFsxXTtcbiAgICB9XG4gICAgLy8gVW5zdWJzY3JpYmUgZXZlbnRzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICAgICAgY2FjaGVDb250ZXh0WzJdICYmIGNhY2hlQ29udGV4dFsyXSgpO1xuICAgICAgICAgICAgcmV0dXJuIGNhY2hlQ29udGV4dFszXTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gY3JlYXRlRWxlbWVudChTV1JDb25maWdDb250ZXh0LlByb3ZpZGVyLCBtZXJnZU9iamVjdHMocHJvcHMsIHtcbiAgICAgICAgdmFsdWU6IGV4dGVuZGVkQ29uZmlnXG4gICAgfSkpO1xufTtcblxuLy8gQHRzLWV4cGVjdC1lcnJvclxuY29uc3QgZW5hYmxlRGV2dG9vbHMgPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fO1xuY29uc3QgdXNlID0gZW5hYmxlRGV2dG9vbHMgPyB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX18gOiBbXTtcbmNvbnN0IHNldHVwRGV2VG9vbHMgPSAoKT0+e1xuICAgIGlmIChlbmFibGVEZXZ0b29scykge1xuICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yXG4gICAgICAgIHdpbmRvdy5fX1NXUl9ERVZUT09MU19SRUFDVF9fID0gUmVhY3Q7XG4gICAgfVxufTtcblxuY29uc3Qgbm9ybWFsaXplID0gKGFyZ3MpPT57XG4gICAgcmV0dXJuIGlzRnVuY3Rpb24oYXJnc1sxXSkgPyBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIGFyZ3NbMV0sXG4gICAgICAgIGFyZ3NbMl0gfHwge31cbiAgICBdIDogW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBudWxsLFxuICAgICAgICAoYXJnc1sxXSA9PT0gbnVsbCA/IGFyZ3NbMl0gOiBhcmdzWzFdKSB8fCB7fVxuICAgIF07XG59O1xuXG5jb25zdCB1c2VTV1JDb25maWcgPSAoKT0+e1xuICAgIHJldHVybiBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZywgdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KSk7XG59O1xuXG5jb25zdCBwcmVsb2FkID0gKGtleV8sIGZldGNoZXIpPT57XG4gICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gUHJldmVudCBwcmVsb2FkIHRvIGJlIGNhbGxlZCBtdWx0aXBsZSB0aW1lcyBiZWZvcmUgdXNlZC5cbiAgICBpZiAoUFJFTE9BRFtrZXldKSByZXR1cm4gUFJFTE9BRFtrZXldO1xuICAgIGNvbnN0IHJlcSA9IGZldGNoZXIoa2V5Xyk7XG4gICAgUFJFTE9BRFtrZXldID0gcmVxO1xuICAgIHJldHVybiByZXE7XG59O1xuY29uc3QgbWlkZGxld2FyZSA9ICh1c2VTV1JOZXh0KT0+KGtleV8sIGZldGNoZXJfLCBjb25maWcpPT57XG4gICAgICAgIC8vIGZldGNoZXIgbWlnaHQgYmUgYSBzeW5jIGZ1bmN0aW9uLCBzbyB0aGlzIHNob3VsZCBub3QgYmUgYW4gYXN5bmMgZnVuY3Rpb25cbiAgICAgICAgY29uc3QgZmV0Y2hlciA9IGZldGNoZXJfICYmICgoLi4uYXJncyk9PntcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICAgICAgICAgIGNvbnN0IFssICwgLCBQUkVMT0FEXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgICAgICBjb25zdCByZXEgPSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICBpZiAocmVxKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZldGNoZXJfKC4uLmFyZ3MpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUk5leHQoa2V5XywgZmV0Y2hlciwgY29uZmlnKTtcbiAgICB9O1xuXG5jb25zdCBCVUlMVF9JTl9NSURETEVXQVJFID0gdXNlLmNvbmNhdChtaWRkbGV3YXJlKTtcblxuLy8gSXQncyB0cmlja3kgdG8gcGFzcyBnZW5lcmljIHR5cGVzIGFzIHBhcmFtZXRlcnMsIHNvIHdlIGp1c3QgZGlyZWN0bHkgb3ZlcnJpZGVcbi8vIHRoZSB0eXBlcyBoZXJlLlxuY29uc3Qgd2l0aEFyZ3MgPSAoaG9vayk9PntcbiAgICByZXR1cm4gZnVuY3Rpb24gdXNlU1dSQXJncyguLi5hcmdzKSB7XG4gICAgICAgIC8vIEdldCB0aGUgZGVmYXVsdCBhbmQgaW5oZXJpdGVkIGNvbmZpZ3VyYXRpb24uXG4gICAgICAgIGNvbnN0IGZhbGxiYWNrQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgICAgIC8vIE5vcm1hbGl6ZSBhcmd1bWVudHMuXG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBfY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgLy8gTWVyZ2UgY29uZmlndXJhdGlvbnMuXG4gICAgICAgIGNvbnN0IGNvbmZpZyA9IG1lcmdlQ29uZmlncyhmYWxsYmFja0NvbmZpZywgX2NvbmZpZyk7XG4gICAgICAgIC8vIEFwcGx5IG1pZGRsZXdhcmVcbiAgICAgICAgbGV0IG5leHQgPSBob29rO1xuICAgICAgICBjb25zdCB7IHVzZSAgfSA9IGNvbmZpZztcbiAgICAgICAgY29uc3QgbWlkZGxld2FyZSA9ICh1c2UgfHwgW10pLmNvbmNhdChCVUlMVF9JTl9NSURETEVXQVJFKTtcbiAgICAgICAgZm9yKGxldCBpID0gbWlkZGxld2FyZS5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgbmV4dCA9IG1pZGRsZXdhcmVbaV0obmV4dCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG5leHQoa2V5LCBmbiB8fCBjb25maWcuZmV0Y2hlciB8fCBudWxsLCBjb25maWcpO1xuICAgIH07XG59O1xuXG4vKipcbiAqIEFuIGltcGxlbWVudGF0aW9uIG9mIHN0YXRlIHdpdGggZGVwZW5kZW5jeS10cmFja2luZy5cbiAqLyBjb25zdCB1c2VTdGF0ZVdpdGhEZXBzID0gKHN0YXRlKT0+e1xuICAgIGNvbnN0IHJlcmVuZGVyID0gdXNlU3RhdGUoe30pWzFdO1xuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgY29uc3Qgc3RhdGVSZWYgPSB1c2VSZWYoc3RhdGUpO1xuICAgIC8vIElmIGEgc3RhdGUgcHJvcGVydHkgKGRhdGEsIGVycm9yLCBvciBpc1ZhbGlkYXRpbmcpIGlzIGFjY2Vzc2VkIGJ5IHRoZSByZW5kZXJcbiAgICAvLyBmdW5jdGlvbiwgd2UgbWFyayB0aGUgcHJvcGVydHkgYXMgYSBkZXBlbmRlbmN5IHNvIGlmIGl0IGlzIHVwZGF0ZWQgYWdhaW5cbiAgICAvLyBpbiB0aGUgZnV0dXJlLCB3ZSB0cmlnZ2VyIGEgcmVyZW5kZXIuXG4gICAgLy8gVGhpcyBpcyBhbHNvIGtub3duIGFzIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXNSZWYgPSB1c2VSZWYoe1xuICAgICAgICBkYXRhOiBmYWxzZSxcbiAgICAgICAgZXJyb3I6IGZhbHNlLFxuICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAgfSk7XG4gICAgLyoqXG4gICAqIEBwYXJhbSBwYXlsb2FkIFRvIGNoYW5nZSBzdGF0ZVJlZiwgcGFzcyB0aGUgdmFsdWVzIGV4cGxpY2l0bHkgdG8gc2V0U3RhdGU6XG4gICAqIEBleGFtcGxlXG4gICAqIGBgYGpzXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogbmV3RGF0YSAvLyBzZXQgZGF0YSB0byBuZXdEYXRhXG4gICAqICAgZXJyb3I6IHVuZGVmaW5lZCAvLyBzZXQgZXJyb3IgdG8gdW5kZWZpbmVkXG4gICAqIH0pXG4gICAqXG4gICAqIHNldFN0YXRlKHtcbiAgICogICBpc1ZhbGlkYXRpbmc6IGZhbHNlXG4gICAqICAgZGF0YTogdW5kZWZpbmVkIC8vIHNldCBkYXRhIHRvIHVuZGVmaW5lZFxuICAgKiAgIGVycm9yOiBlcnIgLy8gc2V0IGVycm9yIHRvIGVyclxuICAgKiB9KVxuICAgKiBgYGBcbiAgICovIGNvbnN0IHNldFN0YXRlID0gdXNlQ2FsbGJhY2soKHBheWxvYWQpPT57XG4gICAgICAgIGxldCBzaG91bGRSZXJlbmRlciA9IGZhbHNlO1xuICAgICAgICBjb25zdCBjdXJyZW50U3RhdGUgPSBzdGF0ZVJlZi5jdXJyZW50O1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBwYXlsb2FkKXtcbiAgICAgICAgICAgIGNvbnN0IGsgPSBfO1xuICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGhhcyBjaGFuZ2VkLCB1cGRhdGUgdGhlIHN0YXRlIGFuZCBtYXJrIHJlcmVuZGVyIGFzXG4gICAgICAgICAgICAvLyBuZWVkZWQuXG4gICAgICAgICAgICBpZiAoY3VycmVudFN0YXRlW2tdICE9PSBwYXlsb2FkW2tdKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFN0YXRlW2tdID0gcGF5bG9hZFtrXTtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaXMgYWNjZXNzZWQgYnkgdGhlIGNvbXBvbmVudCwgYSByZXJlbmRlciBzaG91bGQgYmVcbiAgICAgICAgICAgICAgICAvLyB0cmlnZ2VyZWQuXG4gICAgICAgICAgICAgICAgaWYgKHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnRba10pIHtcbiAgICAgICAgICAgICAgICAgICAgc2hvdWxkUmVyZW5kZXIgPSB0cnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoc2hvdWxkUmVyZW5kZXIgJiYgIXVubW91bnRlZFJlZi5jdXJyZW50KSB7XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmVyZW5kZXIoe30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBSZWFjdC5zdGFydFRyYW5zaXRpb24oKCk9PnJlcmVuZGVyKHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9LCAvLyBjb25maWcuc3VzcGVuc2UgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGVcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgc3RhdGVSZWYsXG4gICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzUmVmLmN1cnJlbnQsXG4gICAgICAgIHNldFN0YXRlXG4gICAgXTtcbn07XG5cbi8vIEFkZCBhIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGEgbGlzdCBvZiBrZXllZCBjYWxsYmFjayBmdW5jdGlvbnMgYW5kIHJldHVyblxuLy8gdGhlIHVuc3Vic2NyaWJlIGZ1bmN0aW9uLlxuY29uc3Qgc3Vic2NyaWJlQ2FsbGJhY2sgPSAoa2V5LCBjYWxsYmFja3MsIGNhbGxiYWNrKT0+e1xuICAgIGNvbnN0IGtleWVkUmV2YWxpZGF0b3JzID0gY2FsbGJhY2tzW2tleV0gfHwgKGNhbGxiYWNrc1trZXldID0gW10pO1xuICAgIGtleWVkUmV2YWxpZGF0b3JzLnB1c2goY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBjb25zdCBpbmRleCA9IGtleWVkUmV2YWxpZGF0b3JzLmluZGV4T2YoY2FsbGJhY2spO1xuICAgICAgICBpZiAoaW5kZXggPj0gMCkge1xuICAgICAgICAgICAgLy8gTygxKTogZmFzdGVyIHRoYW4gc3BsaWNlXG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9yc1tpbmRleF0gPSBrZXllZFJldmFsaWRhdG9yc1trZXllZFJldmFsaWRhdG9ycy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzLnBvcCgpO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5cbi8vIENyZWF0ZSBhIGN1c3RvbSBob29rIHdpdGggYSBtaWRkbGV3YXJlXG5jb25zdCB3aXRoTWlkZGxld2FyZSA9ICh1c2VTV1IsIG1pZGRsZXdhcmUpPT57XG4gICAgcmV0dXJuICguLi5hcmdzKT0+e1xuICAgICAgICBjb25zdCBba2V5LCBmbiwgY29uZmlnXSA9IG5vcm1hbGl6ZShhcmdzKTtcbiAgICAgICAgY29uc3QgdXNlcyA9IChjb25maWcudXNlIHx8IFtdKS5jb25jYXQobWlkZGxld2FyZSk7XG4gICAgICAgIHJldHVybiB1c2VTV1Ioa2V5LCBmbiwge1xuICAgICAgICAgICAgLi4uY29uZmlnLFxuICAgICAgICAgICAgdXNlOiB1c2VzXG4gICAgICAgIH0pO1xuICAgIH07XG59O1xuXG5zZXR1cERldlRvb2xzKCk7XG5cbmV4cG9ydCB7IElTX1JFQUNUX0xFR0FDWSwgSVNfU0VSVkVSLCBPQkpFQ1QsIFNXUkNvbmZpZywgU1dSR2xvYmFsU3RhdGUsIFVOREVGSU5FRCwgY2FjaGUsIGNvbXBhcmUsIGNyZWF0ZUNhY2hlSGVscGVyLCBkZWZhdWx0Q29uZmlnLCBkZWZhdWx0Q29uZmlnT3B0aW9ucywgZ2V0VGltZXN0YW1wLCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsIGluaXRDYWNoZSwgaW50ZXJuYWxNdXRhdGUsIGlzRG9jdW1lbnREZWZpbmVkLCBpc0Z1bmN0aW9uLCBpc1VuZGVmaW5lZCwgaXNXaW5kb3dEZWZpbmVkLCBtZXJnZUNvbmZpZ3MsIG1lcmdlT2JqZWN0cywgbXV0YXRlLCBub29wLCBub3JtYWxpemUsIHByZWxvYWQsIHByZXNldCwgckFGLCBjb25zdGFudHMgYXMgcmV2YWxpZGF0ZUV2ZW50cywgc2VyaWFsaXplLCBzbG93Q29ubmVjdGlvbiwgc3RhYmxlSGFzaCwgc3Vic2NyaWJlQ2FsbGJhY2ssIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHVzZVNXUkNvbmZpZywgdXNlU3RhdGVXaXRoRGVwcywgd2l0aEFyZ3MsIHdpdGhNaWRkbGV3YXJlIH07XG4iLCJpbXBvcnQgeyB1c2VSZWYsIHVzZU1lbW8sIHVzZUNhbGxiYWNrLCB1c2VEZWJ1Z1ZhbHVlIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IHsgdXNlU3luY0V4dGVybmFsU3RvcmUgfSBmcm9tICd1c2Utc3luYy1leHRlcm5hbC1zdG9yZS9zaGltL2luZGV4LmpzJztcbmltcG9ydCB7IE9CSkVDVCwgU1dSQ29uZmlnIGFzIFNXUkNvbmZpZyQxLCBkZWZhdWx0Q29uZmlnLCB3aXRoQXJncywgU1dSR2xvYmFsU3RhdGUsIHNlcmlhbGl6ZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGlzVW5kZWZpbmVkLCBnZXRUaW1lc3RhbXAsIFVOREVGSU5FRCwgaXNGdW5jdGlvbiwgcmV2YWxpZGF0ZUV2ZW50cywgaW50ZXJuYWxNdXRhdGUsIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QsIHN1YnNjcmliZUNhbGxiYWNrLCBJU19TRVJWRVIsIHJBRiwgSVNfUkVBQ1RfTEVHQUNZLCBtZXJnZU9iamVjdHMgfSBmcm9tICdzd3IvX2ludGVybmFsJztcbmV4cG9ydCB7IG11dGF0ZSwgcHJlbG9hZCwgdXNlU1dSQ29uZmlnIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5cbmNvbnN0IFdJVEhfREVEVVBFID0ge1xuICAgIGRlZHVwZTogdHJ1ZVxufTtcbmNvbnN0IHVzZVNXUkhhbmRsZXIgPSAoX2tleSwgZmV0Y2hlciwgY29uZmlnKT0+e1xuICAgIGNvbnN0IHsgY2FjaGUgLCBjb21wYXJlICwgc3VzcGVuc2UgLCBmYWxsYmFja0RhdGEgLCByZXZhbGlkYXRlT25Nb3VudCAsIHJldmFsaWRhdGVJZlN0YWxlICwgcmVmcmVzaEludGVydmFsICwgcmVmcmVzaFdoZW5IaWRkZW4gLCByZWZyZXNoV2hlbk9mZmxpbmUgLCBrZWVwUHJldmlvdXNEYXRhICB9ID0gY29uZmlnO1xuICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIGBrZXlgIGlzIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBTV1IgYGRhdGFgIHN0YXRlLCBga2V5SW5mb2AgaG9sZHMgZXh0cmFcbiAgICAvLyBzdGF0ZXMgc3VjaCBhcyBgZXJyb3JgIGFuZCBgaXNWYWxpZGF0aW5nYCBpbnNpZGUsXG4gICAgLy8gYWxsIG9mIHRoZW0gYXJlIGRlcml2ZWQgZnJvbSBgX2tleWAuXG4gICAgLy8gYGZuQXJnYCBpcyB0aGUgYXJndW1lbnQvYXJndW1lbnRzIHBhcnNlZCBmcm9tIHRoZSBrZXksIHdoaWNoIHdpbGwgYmUgcGFzc2VkXG4gICAgLy8gdG8gdGhlIGZldGNoZXIuXG4gICAgY29uc3QgW2tleSwgZm5BcmddID0gc2VyaWFsaXplKF9rZXkpO1xuICAgIC8vIElmIGl0J3MgdGhlIGluaXRpYWwgcmVuZGVyIG9mIHRoaXMgaG9vay5cbiAgICBjb25zdCBpbml0aWFsTW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gSWYgdGhlIGhvb2sgaXMgdW5tb3VudGVkIGFscmVhZHkuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIHByZXZlbnQgc29tZSBlZmZlY3RzXG4gICAgLy8gdG8gYmUgY2FsbGVkIGFmdGVyIHVubW91bnRpbmcuXG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBSZWZzIHRvIGtlZXAgdGhlIGtleSBhbmQgY29uZmlnLlxuICAgIGNvbnN0IGtleVJlZiA9IHVzZVJlZihrZXkpO1xuICAgIGNvbnN0IGZldGNoZXJSZWYgPSB1c2VSZWYoZmV0Y2hlcik7XG4gICAgY29uc3QgY29uZmlnUmVmID0gdXNlUmVmKGNvbmZpZyk7XG4gICAgY29uc3QgZ2V0Q29uZmlnID0gKCk9PmNvbmZpZ1JlZi5jdXJyZW50O1xuICAgIGNvbnN0IGlzQWN0aXZlID0gKCk9PmdldENvbmZpZygpLmlzVmlzaWJsZSgpICYmIGdldENvbmZpZygpLmlzT25saW5lKCk7XG4gICAgY29uc3QgW2dldENhY2hlLCBzZXRDYWNoZSwgc3Vic2NyaWJlQ2FjaGUsIGdldEluaXRpYWxDYWNoZV0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llcyA9IHVzZVJlZih7fSkuY3VycmVudDtcbiAgICBjb25zdCBmYWxsYmFjayA9IGlzVW5kZWZpbmVkKGZhbGxiYWNrRGF0YSkgPyBjb25maWcuZmFsbGJhY2tba2V5XSA6IGZhbGxiYWNrRGF0YTtcbiAgICBjb25zdCBpc0VxdWFsID0gKHByZXYsIGN1cnJlbnQpPT57XG4gICAgICAgIGxldCBlcXVhbCA9IHRydWU7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHN0YXRlRGVwZW5kZW5jaWVzKXtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBfO1xuICAgICAgICAgICAgaWYgKHQgPT09ICdkYXRhJykge1xuICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCBwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghY29tcGFyZShjdXJyZW50W3RdLCByZXR1cm5lZERhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50W3RdICE9PSBwcmV2W3RdKSB7XG4gICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBlcXVhbDtcbiAgICB9O1xuICAgIGNvbnN0IGdldFNuYXBzaG90ID0gdXNlTWVtbygoKT0+e1xuICAgICAgICBjb25zdCBzaG91bGRTdGFydFJlcXVlc3QgPSAoKCk9PntcbiAgICAgICAgICAgIGlmICgha2V5KSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWZldGNoZXIpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVJZlN0YWxlKSkgcmV0dXJuIHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIC8vIEdldCB0aGUgY2FjaGUgYW5kIG1lcmdlIGl0IHdpdGggZXhwZWN0ZWQgc3RhdGVzLlxuICAgICAgICBjb25zdCBnZXRTZWxlY3RlZENhY2hlID0gKHN0YXRlKT0+e1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzZWxlY3QgdGhlIG5lZWRlZCBmaWVsZHMgZnJvbSB0aGUgc3RhdGUuXG4gICAgICAgICAgICBjb25zdCBzbmFwc2hvdCA9IG1lcmdlT2JqZWN0cyhzdGF0ZSk7XG4gICAgICAgICAgICBkZWxldGUgc25hcHNob3QuX2s7XG4gICAgICAgICAgICBpZiAoIXNob3VsZFN0YXJ0UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiBzbmFwc2hvdDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIGlzTG9hZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAuLi5zbmFwc2hvdFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2FjaGVkRGF0YSA9IGdldENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxEYXRhID0gZ2V0SW5pdGlhbENhY2hlKCk7XG4gICAgICAgIGNvbnN0IGNsaWVudFNuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShjYWNoZWREYXRhKTtcbiAgICAgICAgY29uc3Qgc2VydmVyU25hcHNob3QgPSBjYWNoZWREYXRhID09PSBpbml0aWFsRGF0YSA/IGNsaWVudFNuYXBzaG90IDogZ2V0U2VsZWN0ZWRDYWNoZShpbml0aWFsRGF0YSk7XG4gICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgdGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZSB0byBhdm9pZFxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdXNlIGRlZXBcbiAgICAgICAgLy8gY29tcGFyaXNvbiB0byBjaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIG5ldyBvbmUuXG4gICAgICAgIGxldCBtZW1vcml6ZWRTbmFwc2hvdCA9IGNsaWVudFNuYXBzaG90O1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoZ2V0Q2FjaGUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwobmV3U25hcHNob3QsIG1lbW9yaXplZFNuYXBzaG90KSA/IG1lbW9yaXplZFNuYXBzaG90IDogbWVtb3JpemVkU25hcHNob3QgPSBuZXdTbmFwc2hvdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKT0+c2VydmVyU25hcHNob3RcbiAgICAgICAgXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgfSwgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gR2V0IHRoZSBjdXJyZW50IHN0YXRlIHRoYXQgU1dSIHNob3VsZCByZXR1cm4uXG4gICAgY29uc3QgY2FjaGVkID0gdXNlU3luY0V4dGVybmFsU3RvcmUodXNlQ2FsbGJhY2soKGNhbGxiYWNrKT0+c3Vic2NyaWJlQ2FjaGUoa2V5LCAoY3VycmVudCwgcHJldik9PntcbiAgICAgICAgICAgIGlmICghaXNFcXVhbChwcmV2LCBjdXJyZW50KSkgY2FsbGJhY2soKTtcbiAgICAgICAgfSksIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKSwgZ2V0U25hcHNob3RbMF0sIGdldFNuYXBzaG90WzFdKTtcbiAgICBjb25zdCBpc0luaXRpYWxNb3VudCA9ICFpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgIGNvbnN0IGhhc1JldmFsaWRhdG9yID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV0gJiYgRVZFTlRfUkVWQUxJREFUT1JTW2tleV0ubGVuZ3RoID4gMDtcbiAgICBjb25zdCBjYWNoZWREYXRhID0gY2FjaGVkLmRhdGE7XG4gICAgY29uc3QgZGF0YSA9IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gZmFsbGJhY2sgOiBjYWNoZWREYXRhO1xuICAgIGNvbnN0IGVycm9yID0gY2FjaGVkLmVycm9yO1xuICAgIC8vIFVzZSBhIHJlZiB0byBzdG9yZSBwcmV2aW91c2x5IHJldHVybmVkIGRhdGEuIFVzZSB0aGUgaW5pdGlhbCBkYXRhIGFzIGl0cyBpbml0aWFsIHZhbHVlLlxuICAgIGNvbnN0IGxhZ2d5RGF0YVJlZiA9IHVzZVJlZihkYXRhKTtcbiAgICBjb25zdCByZXR1cm5lZERhdGEgPSBrZWVwUHJldmlvdXNEYXRhID8gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBsYWdneURhdGFSZWYuY3VycmVudCA6IGNhY2hlZERhdGEgOiBkYXRhO1xuICAgIC8vIC0gU3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUncyBzdGFsZSBkYXRhIGZvciB0aGUgaW5pdGlhbCByZW5kZXIuXG4gICAgLy8gLSBOb3Qgc3VzcGVuc2UgbW9kZSBhbmQgdGhlcmUgaXMgbm8gZmFsbGJhY2sgZGF0YSBhbmQgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkLlxuICAgIC8vIC0gYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBlbmFibGVkIGJ1dCBgZGF0YWAgaXMgbm90IGRlZmluZWQuXG4gICAgY29uc3Qgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uID0gKCgpPT57XG4gICAgICAgIC8vIGlmIGEga2V5IGFscmVhZHkgaGFzIHJldmFsaWRhdG9ycyBhbmQgYWxzbyBoYXMgZXJyb3IsIHdlIHNob3VsZCBub3QgdHJpZ2dlciByZXZhbGlkYXRpb25cbiAgICAgICAgaWYgKGhhc1JldmFsaWRhdG9yICYmICFpc1VuZGVmaW5lZChlcnJvcikpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICBpZiAoaXNJbml0aWFsTW91bnQgJiYgIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAvLyBJZiBpdCdzIHBhdXNlZCwgd2Ugc2tpcCByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIFVuZGVyIHN1c3BlbnNlIG1vZGUsIGl0IHdpbGwgYWx3YXlzIGZldGNoIG9uIHJlbmRlciBpZiB0aGVyZSBpcyBub1xuICAgICAgICAvLyBzdGFsZSBkYXRhIHNvIG5vIG5lZWQgdG8gcmV2YWxpZGF0ZSBpbW1lZGlhdGVseSBtb3VudCBpdCBhZ2Fpbi5cbiAgICAgICAgLy8gSWYgZGF0YSBleGlzdHMsIG9ubHkgcmV2YWxpZGF0ZSBpZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHRydWUuXG4gICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpID8gZmFsc2UgOiByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gc3RhbGUgZGF0YSwgd2UgbmVlZCB0byByZXZhbGlkYXRlIHdoZW4gbW91bnQ7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgc2V0IHRvIHRydWUsIHdlIHdpbGwgYWx3YXlzIHJldmFsaWRhdGUuXG4gICAgICAgIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSB8fCByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICB9KSgpO1xuICAgIC8vIFJlc29sdmUgdGhlIGRlZmF1bHQgdmFsaWRhdGluZyBzdGF0ZTpcbiAgICAvLyBJZiBpdCdzIGFibGUgdG8gdmFsaWRhdGUsIGFuZCBpdCBzaG91bGQgcmV2YWxpZGF0ZSB3aGVuIG1vdW50LCB0aGlzIHdpbGwgYmUgdHJ1ZS5cbiAgICBjb25zdCBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlID0gISEoa2V5ICYmIGZldGNoZXIgJiYgaXNJbml0aWFsTW91bnQgJiYgc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKTtcbiAgICBjb25zdCBpc1ZhbGlkYXRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNWYWxpZGF0aW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNWYWxpZGF0aW5nO1xuICAgIGNvbnN0IGlzTG9hZGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc0xvYWRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc0xvYWRpbmc7XG4gICAgLy8gVGhlIHJldmFsaWRhdGlvbiBmdW5jdGlvbiBpcyBhIGNhcmVmdWxseSBjcmFmdGVkIHdyYXBwZXIgb2YgdGhlIG9yaWdpbmFsXG4gICAgLy8gYGZldGNoZXJgLCB0byBjb3JyZWN0bHkgaGFuZGxlIHRoZSBtYW55IGVkZ2UgY2FzZXMuXG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IHVzZUNhbGxiYWNrKGFzeW5jIChyZXZhbGlkYXRlT3B0cyk9PntcbiAgICAgICAgY29uc3QgY3VycmVudEZldGNoZXIgPSBmZXRjaGVyUmVmLmN1cnJlbnQ7XG4gICAgICAgIGlmICgha2V5IHx8ICFjdXJyZW50RmV0Y2hlciB8fCB1bm1vdW50ZWRSZWYuY3VycmVudCB8fCBnZXRDb25maWcoKS5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG5ld0RhdGE7XG4gICAgICAgIGxldCBzdGFydEF0O1xuICAgICAgICBsZXQgbG9hZGluZyA9IHRydWU7XG4gICAgICAgIGNvbnN0IG9wdHMgPSByZXZhbGlkYXRlT3B0cyB8fCB7fTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gb25nb2luZyBjb25jdXJyZW50IHJlcXVlc3QsIG9yIGBkZWR1cGVgIGlzIG5vdCBzZXQsIGFcbiAgICAgICAgLy8gbmV3IHJlcXVlc3Qgc2hvdWxkIGJlIGluaXRpYXRlZC5cbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnROZXdSZXF1ZXN0ID0gIUZFVENIW2tleV0gfHwgIW9wdHMuZGVkdXBlO1xuICAgICAgICAvKlxuICAgICAgICAgRm9yIFJlYWN0IDE3XG4gICAgICAgICBEbyB1bm1vdW50IGNoZWNrIGZvciBjYWxsczpcbiAgICAgICAgIElmIGtleSBoYXMgY2hhbmdlZCBkdXJpbmcgdGhlIHJldmFsaWRhdGlvbiwgb3IgdGhlIGNvbXBvbmVudCBoYXMgYmVlblxuICAgICAgICAgdW5tb3VudGVkLCBvbGQgZGlzcGF0Y2ggYW5kIG9sZCBldmVudCBjYWxsYmFja3Mgc2hvdWxkIG5vdCB0YWtlIGFueVxuICAgICAgICAgZWZmZWN0XG5cbiAgICAgICAgRm9yIFJlYWN0IDE4XG4gICAgICAgIG9ubHkgY2hlY2sgaWYga2V5IGhhcyBjaGFuZ2VkXG4gICAgICAgIGh0dHBzOi8vZ2l0aHViLmNvbS9yZWFjdHdnL3JlYWN0LTE4L2Rpc2N1c3Npb25zLzgyXG4gICAgICAqLyBjb25zdCBjYWxsYmFja1NhZmVndWFyZCA9ICgpPT57XG4gICAgICAgICAgICBpZiAoSVNfUkVBQ1RfTEVHQUNZKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICF1bm1vdW50ZWRSZWYuY3VycmVudCAmJiBrZXkgPT09IGtleVJlZi5jdXJyZW50ICYmIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ga2V5ID09PSBrZXlSZWYuY3VycmVudDtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gVGhlIGZpbmFsIHN0YXRlIG9iamVjdCB3aGVuIHRoZSByZXF1ZXN0IGZpbmlzaGVzLlxuICAgICAgICBjb25zdCBmaW5hbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZSxcbiAgICAgICAgICAgIGlzTG9hZGluZzogZmFsc2VcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIHNldENhY2hlKGZpbmFsU3RhdGUpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjbGVhbnVwU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBzdGlsbCB0aGUgc2FtZSByZXF1ZXN0IGJlZm9yZSBkZWxldGluZyBpdC5cbiAgICAgICAgICAgIGNvbnN0IHJlcXVlc3RJbmZvID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXF1ZXN0SW5mbyAmJiByZXF1ZXN0SW5mb1sxXSA9PT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICAvLyBTdGFydCBmZXRjaGluZy4gQ2hhbmdlIHRoZSBgaXNWYWxpZGF0aW5nYCBzdGF0ZSwgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgY29uc3QgaW5pdGlhbFN0YXRlID0ge1xuICAgICAgICAgICAgaXNWYWxpZGF0aW5nOiB0cnVlXG4gICAgICAgIH07XG4gICAgICAgIC8vIEl0IGlzIGluIHRoZSBgaXNMb2FkaW5nYCBzdGF0ZSwgaWYgYW5kIG9ubHkgaWYgdGhlcmUgaXMgbm8gY2FjaGVkIGRhdGEuXG4gICAgICAgIC8vIFRoaXMgYnlwYXNzZXMgZmFsbGJhY2sgZGF0YSBhbmQgbGFnZ3kgZGF0YS5cbiAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgIGluaXRpYWxTdGF0ZS5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgc2V0Q2FjaGUoaW5pdGlhbFN0YXRlKTtcbiAgICAgICAgICAgICAgICAvLyBJZiBubyBjYWNoZSBpcyBiZWluZyByZW5kZXJlZCBjdXJyZW50bHkgKGl0IHNob3dzIGEgYmxhbmsgcGFnZSksXG4gICAgICAgICAgICAgICAgLy8gd2UgdHJpZ2dlciB0aGUgbG9hZGluZyBzbG93IGV2ZW50LlxuICAgICAgICAgICAgICAgIGlmIChjb25maWcubG9hZGluZ1RpbWVvdXQgJiYgaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobG9hZGluZyAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25Mb2FkaW5nU2xvdyhrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0sIGNvbmZpZy5sb2FkaW5nVGltZW91dCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSByZXF1ZXN0IGFuZCBzYXZlIHRoZSB0aW1lc3RhbXAuXG4gICAgICAgICAgICAgICAgLy8gS2V5IG11c3QgYmUgdHJ1dGh5IGlmIGVudGVyaW5nIGhlcmUuXG4gICAgICAgICAgICAgICAgRkVUQ0hba2V5XSA9IFtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudEZldGNoZXIoZm5BcmcpLFxuICAgICAgICAgICAgICAgICAgICBnZXRUaW1lc3RhbXAoKVxuICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBbbmV3RGF0YSwgc3RhcnRBdF0gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgbmV3RGF0YSA9IGF3YWl0IG5ld0RhdGE7XG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHJlcXVlc3QgaXNuJ3QgaW50ZXJydXB0ZWQsIGNsZWFuIGl0IHVwIGFmdGVyIHRoZVxuICAgICAgICAgICAgICAgIC8vIGRlZHVwbGljYXRpb24gaW50ZXJ2YWwuXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChjbGVhbnVwU3RhdGUsIGNvbmZpZy5kZWR1cGluZ0ludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG9uZ29pbmcgcmVxdWVzdChzKSwgc3RhcnRlZCBhZnRlciB0aGUgY3VycmVudCBvbmUsXG4gICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGlnbm9yZSB0aGUgY3VycmVudCBvbmUgdG8gYXZvaWQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zOlxuICAgICAgICAgICAgLy8gICByZXExLS0tLS0tLS0tLS0tLS0tLS0tPnJlczEgICAgICAgIChjdXJyZW50IG9uZSlcbiAgICAgICAgICAgIC8vICAgICAgICByZXEyLS0tLS0tLS0tLS0tLS0tLT5yZXMyXG4gICAgICAgICAgICAvLyB0aGUgcmVxdWVzdCB0aGF0IGZpcmVkIGxhdGVyIHdpbGwgYWx3YXlzIGJlIGtlcHQuXG4gICAgICAgICAgICAvLyBUaGUgdGltZXN0YW1wIG1heWJlIGJlIGB1bmRlZmluZWRgIG9yIGEgbnVtYmVyXG4gICAgICAgICAgICBpZiAoIUZFVENIW2tleV0gfHwgRkVUQ0hba2V5XVsxXSAhPT0gc3RhcnRBdCkge1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gQ2xlYXIgZXJyb3IuXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gVU5ERUZJTkVEO1xuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgbXV0YXRpb25zKHMpLCB0aGF0IG92ZXJsYXBwZWQgd2l0aCB0aGUgY3VycmVudCByZXZhbGlkYXRpb246XG4gICAgICAgICAgICAvLyBjYXNlIDE6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMjpcbiAgICAgICAgICAgIC8vICAgICAgICAgcmVxLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDM6XG4gICAgICAgICAgICAvLyAgIHJlcS0tLS0tLS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgICAgIG11dGF0ZS0tLS0tLS0uLi4tLS0tLS0tLS0tPlxuICAgICAgICAgICAgLy8gd2UgaGF2ZSB0byBpZ25vcmUgdGhlIHJldmFsaWRhdGlvbiByZXN1bHQgKHJlcykgYmVjYXVzZSBpdCdzIG5vIGxvbmdlciBmcmVzaC5cbiAgICAgICAgICAgIC8vIG1lYW53aGlsZSwgYSBuZXcgcmV2YWxpZGF0aW9uIHNob3VsZCBiZSB0cmlnZ2VyZWQgd2hlbiB0aGUgbXV0YXRpb24gZW5kcy5cbiAgICAgICAgICAgIGNvbnN0IG11dGF0aW9uSW5mbyA9IE1VVEFUSU9OW2tleV07XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKG11dGF0aW9uSW5mbykgJiYgLy8gY2FzZSAxXG4gICAgICAgICAgICAoc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMF0gfHwgLy8gY2FzZSAyXG4gICAgICAgICAgICBzdGFydEF0IDw9IG11dGF0aW9uSW5mb1sxXSB8fCAvLyBjYXNlIDNcbiAgICAgICAgICAgIG11dGF0aW9uSW5mb1sxXSA9PT0gMCkpIHtcbiAgICAgICAgICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIERlZXAgY29tcGFyZSB3aXRoIHRoZSBsYXRlc3Qgc3RhdGUgdG8gYXZvaWQgZXh0cmEgcmUtcmVuZGVycy5cbiAgICAgICAgICAgIC8vIEZvciBsb2NhbCBzdGF0ZSwgY29tcGFyZSBhbmQgYXNzaWduLlxuICAgICAgICAgICAgY29uc3QgY2FjaGVEYXRhID0gZ2V0Q2FjaGUoKS5kYXRhO1xuICAgICAgICAgICAgLy8gU2luY2UgdGhlIGNvbXBhcmUgZm4gY291bGQgYmUgY3VzdG9tIGZuXG4gICAgICAgICAgICAvLyBjYWNoZURhdGEgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gbmV3RGF0YSBldmVuIHdoZW4gY29tcGFyZSBmbiByZXR1cm5zIFRydWVcbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZGF0YSA9IGNvbXBhcmUoY2FjaGVEYXRhLCBuZXdEYXRhKSA/IGNhY2hlRGF0YSA6IG5ld0RhdGE7XG4gICAgICAgICAgICAvLyBUcmlnZ2VyIHRoZSBzdWNjZXNzZnVsIGNhbGxiYWNrIGlmIGl0J3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QuXG4gICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25TdWNjZXNzKG5ld0RhdGEsIGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY2xlYW51cFN0YXRlKCk7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50Q29uZmlnID0gZ2V0Q29uZmlnKCk7XG4gICAgICAgICAgICBjb25zdCB7IHNob3VsZFJldHJ5T25FcnJvciAgfSA9IGN1cnJlbnRDb25maWc7XG4gICAgICAgICAgICAvLyBOb3QgcGF1c2VkLCB3ZSBjb250aW51ZSBoYW5kbGluZyB0aGUgZXJyb3IuIE90aGVyd2lzZSwgZGlzY2FyZCBpdC5cbiAgICAgICAgICAgIGlmICghY3VycmVudENvbmZpZy5pc1BhdXNlZCgpKSB7XG4gICAgICAgICAgICAgICAgLy8gR2V0IGEgbmV3IGVycm9yLCBkb24ndCB1c2UgZGVlcCBjb21wYXJpc29uIGZvciBlcnJvcnMuXG4gICAgICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IGVycjtcbiAgICAgICAgICAgICAgICAvLyBFcnJvciBldmVudCBhbmQgcmV0cnkgbG9naWMuIE9ubHkgZm9yIHRoZSBhY3R1YWwgcmVxdWVzdCwgbm90XG4gICAgICAgICAgICAgICAgLy8gZGVkdXBlZCBvbmVzLlxuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3IoZXJyLCBrZXksIGN1cnJlbnRDb25maWcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2hvdWxkUmV0cnlPbkVycm9yID09PSB0cnVlIHx8IGlzRnVuY3Rpb24oc2hvdWxkUmV0cnlPbkVycm9yKSAmJiBzaG91bGRSZXRyeU9uRXJyb3IoZXJyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiBpdCdzIGluYWN0aXZlLCBzdG9wLiBJdCB3aWxsIGF1dG8tcmV2YWxpZGF0ZSB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmVmb2N1c2luZyBvciByZWNvbm5lY3RpbmcuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiByZXRyeWluZywgZGVkdXBsaWNhdGlvbiBpcyBhbHdheXMgZW5hYmxlZC5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50Q29uZmlnLm9uRXJyb3JSZXRyeShlcnIsIGtleSwgY3VycmVudENvbmZpZywgKF9vcHRzKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldmFsaWRhdG9yc1swXShyZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQsIF9vcHRzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ2AsIGFuZFxuICAgIC8vIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAga2V5LFxuICAgICAgICBjYWNoZVxuICAgIF0pO1xuICAgIC8vIFNpbWlsYXIgdG8gdGhlIGdsb2JhbCBtdXRhdGUgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgY29uc3QgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjaygvLyBVc2UgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIGBrZXlSZWYuY3VycmVudGAgcmV0dXJucyBsYXRlc3QgcmVzdWx0IGV2ZXJ5IHRpbWVcbiAgICAoLi4uYXJncyk9PntcbiAgICAgICAgcmV0dXJuIGludGVybmFsTXV0YXRlKGNhY2hlLCBrZXlSZWYuY3VycmVudCwgLi4uYXJncyk7XG4gICAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBUaGUgbG9naWMgZm9yIHVwZGF0aW5nIHJlZnMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgLy8gSGFuZGxlIGxhZ2d5IGRhdGEgdXBkYXRlcy4gSWYgdGhlcmUncyBjYWNoZWQgZGF0YSBvZiB0aGUgY3VycmVudCBrZXksXG4gICAgICAgIC8vIGl0J2xsIGJlIHRoZSBjb3JyZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjYWNoZWREYXRhKSkge1xuICAgICAgICAgICAgbGFnZ3lEYXRhUmVmLmN1cnJlbnQgPSBjYWNoZWREYXRhO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICBsZXQgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIGNvbnN0IG9uUmV2YWxpZGF0ZSA9ICh0eXBlLCBvcHRzID0ge30pPT57XG4gICAgICAgICAgICBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkZPQ1VTX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uRm9jdXMgJiYgbm93ID4gbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSBub3cgKyBnZXRDb25maWcoKS5mb2N1c1Rocm90dGxlSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuUkVDT05ORUNUX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPblJlY29ubmVjdCAmJiBpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuTVVUQVRFX0VWRU5UKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLkVSUk9SX1JFVkFMSURBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZShvcHRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgdW5zdWJFdmVudHMgPSBzdWJzY3JpYmVDYWxsYmFjayhrZXksIEVWRU5UX1JFVkFMSURBVE9SUywgb25SZXZhbGlkYXRlKTtcbiAgICAgICAgLy8gTWFyayB0aGUgY29tcG9uZW50IGFzIG1vdW50ZWQgYW5kIHVwZGF0ZSBjb3JyZXNwb25kaW5nIHJlZnMuXG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIGtleVJlZi5jdXJyZW50ID0ga2V5O1xuICAgICAgICBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgLy8gS2VlcCB0aGUgb3JpZ2luYWwga2V5IGluIHRoZSBjYWNoZS5cbiAgICAgICAgc2V0Q2FjaGUoe1xuICAgICAgICAgICAgX2s6IGZuQXJnXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoc2hvdWxkRG9Jbml0aWFsUmV2YWxpZGF0aW9uKSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQoZGF0YSkgfHwgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBpbW1lZGlhdGVseS5cbiAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBEZWxheSB0aGUgcmV2YWxpZGF0ZSBpZiB3ZSBoYXZlIGRhdGEgdG8gcmV0dXJuIHNvIHdlIHdvbid0IGJsb2NrXG4gICAgICAgICAgICAgICAgLy8gcmVuZGVyaW5nLlxuICAgICAgICAgICAgICAgIHJBRihzb2Z0UmV2YWxpZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICAvLyBNYXJrIGl0IGFzIHVubW91bnRlZC5cbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgICAgIHVuc3ViRXZlbnRzKCk7XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBQb2xsaW5nXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBsZXQgdGltZXI7XG4gICAgICAgIGZ1bmN0aW9uIG5leHQoKSB7XG4gICAgICAgICAgICAvLyBVc2UgdGhlIHBhc3NlZCBpbnRlcnZhbFxuICAgICAgICAgICAgLy8gLi4ub3IgaW52b2tlIHRoZSBmdW5jdGlvbiB3aXRoIHRoZSB1cGRhdGVkIGRhdGEgdG8gZ2V0IHRoZSBpbnRlcnZhbFxuICAgICAgICAgICAgY29uc3QgaW50ZXJ2YWwgPSBpc0Z1bmN0aW9uKHJlZnJlc2hJbnRlcnZhbCkgPyByZWZyZXNoSW50ZXJ2YWwoZGF0YSkgOiByZWZyZXNoSW50ZXJ2YWw7XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHN0YXJ0IHRoZSBuZXh0IGludGVydmFsIGlmIGByZWZyZXNoSW50ZXJ2YWxgIGlzIG5vdCAwLCBhbmQ6XG4gICAgICAgICAgICAvLyAtIGBmb3JjZWAgaXMgdHJ1ZSwgd2hpY2ggaXMgdGhlIHN0YXJ0IG9mIHBvbGxpbmdcbiAgICAgICAgICAgIC8vIC0gb3IgYHRpbWVyYCBpcyBub3QgMCwgd2hpY2ggbWVhbnMgdGhlIGVmZmVjdCB3YXNuJ3QgY2FuY2VsZWRcbiAgICAgICAgICAgIGlmIChpbnRlcnZhbCAmJiB0aW1lciAhPT0gLTEpIHtcbiAgICAgICAgICAgICAgICB0aW1lciA9IHNldFRpbWVvdXQoZXhlY3V0ZSwgaW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGZ1bmN0aW9uIGV4ZWN1dGUoKSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIE9LIHRvIGV4ZWN1dGU6XG4gICAgICAgICAgICAvLyBPbmx5IHJldmFsaWRhdGUgd2hlbiB0aGUgcGFnZSBpcyB2aXNpYmxlLCBvbmxpbmUsIGFuZCBub3QgZXJyb3JlZC5cbiAgICAgICAgICAgIGlmICghZ2V0Q2FjaGUoKS5lcnJvciAmJiAocmVmcmVzaFdoZW5IaWRkZW4gfHwgZ2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkpICYmIChyZWZyZXNoV2hlbk9mZmxpbmUgfHwgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKSkpIHtcbiAgICAgICAgICAgICAgICByZXZhbGlkYXRlKFdJVEhfREVEVVBFKS50aGVuKG5leHQpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBTY2hlZHVsZSB0aGUgbmV4dCBpbnRlcnZhbCB0byBjaGVjayBhZ2Fpbi5cbiAgICAgICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgbmV4dCgpO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIGlmICh0aW1lcikge1xuICAgICAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aW1lcik7XG4gICAgICAgICAgICAgICAgdGltZXIgPSAtMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIHJlZnJlc2hJbnRlcnZhbCxcbiAgICAgICAgcmVmcmVzaFdoZW5IaWRkZW4sXG4gICAgICAgIHJlZnJlc2hXaGVuT2ZmbGluZSxcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gRGlzcGxheSBkZWJ1ZyBpbmZvIGluIFJlYWN0IERldlRvb2xzLlxuICAgIHVzZURlYnVnVmFsdWUocmV0dXJuZWREYXRhKTtcbiAgICAvLyBJbiBTdXNwZW5zZSBtb2RlLCB3ZSBjYW4ndCByZXR1cm4gdGhlIGVtcHR5IGBkYXRhYCBzdGF0ZS5cbiAgICAvLyBJZiB0aGVyZSBpcyBhbiBgZXJyb3JgLCB0aGUgYGVycm9yYCBuZWVkcyB0byBiZSB0aHJvd24gdG8gdGhlIGVycm9yIGJvdW5kYXJ5LlxuICAgIC8vIElmIHRoZXJlIGlzIG5vIGBlcnJvcmAsIHRoZSBgcmV2YWxpZGF0aW9uYCBwcm9taXNlIG5lZWRzIHRvIGJlIHRocm93biB0b1xuICAgIC8vIHRoZSBzdXNwZW5zZSBib3VuZGFyeS5cbiAgICBpZiAoc3VzcGVuc2UgJiYgaXNVbmRlZmluZWQoZGF0YSkgJiYga2V5KSB7XG4gICAgICAgIC8vIFNXUiBzaG91bGQgdGhyb3cgd2hlbiB0cnlpbmcgdG8gdXNlIFN1c3BlbnNlIG9uIHRoZSBzZXJ2ZXIgd2l0aCBSZWFjdCAxOCxcbiAgICAgICAgLy8gd2l0aG91dCBwcm92aWRpbmcgYW55IGluaXRpYWwgZGF0YS4gU2VlOlxuICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vdmVyY2VsL3N3ci9pc3N1ZXMvMTgzMlxuICAgICAgICBpZiAoIUlTX1JFQUNUX0xFR0FDWSAmJiBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmFsbGJhY2sgZGF0YSBpcyByZXF1aXJlZCB3aGVuIHVzaW5nIHN1c3BlbnNlIGluIFNTUi4nKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBBbHdheXMgdXBkYXRlIGZldGNoZXIgYW5kIGNvbmZpZyByZWZzIGV2ZW4gd2l0aCB0aGUgU3VzcGVuc2UgbW9kZS5cbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHRocm93IGlzVW5kZWZpbmVkKGVycm9yKSA/IHJldmFsaWRhdGUoV0lUSF9ERURVUEUpIDogZXJyb3I7XG4gICAgfVxuICAgIHJldHVybiB7XG4gICAgICAgIG11dGF0ZTogYm91bmRNdXRhdGUsXG4gICAgICAgIGdldCBkYXRhICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmRhdGEgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHJldHVybmVkRGF0YTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGVycm9yICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmVycm9yID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBlcnJvcjtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzVmFsaWRhdGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc1ZhbGlkYXRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzVmFsaWRhdGluZztcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0IGlzTG9hZGluZyAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGlzTG9hZGluZztcbiAgICAgICAgfVxuICAgIH07XG59O1xuY29uc3QgU1dSQ29uZmlnID0gT0JKRUNULmRlZmluZVByb3BlcnR5KFNXUkNvbmZpZyQxLCAnZGVmYXVsdFZhbHVlJywge1xuICAgIHZhbHVlOiBkZWZhdWx0Q29uZmlnXG59KTtcbmNvbnN0IHVuc3RhYmxlX3NlcmlhbGl6ZSA9IChrZXkpPT5zZXJpYWxpemUoa2V5KVswXTtcbi8qKlxuICogQSBob29rIHRvIGZldGNoIGRhdGEuXG4gKlxuICogQGxpbmsgaHR0cHM6Ly9zd3IudmVyY2VsLmFwcFxuICogQGV4YW1wbGVcbiAqIGBgYGpzeFxuICogaW1wb3J0IHVzZVNXUiBmcm9tICdzd3InXG4gKiBmdW5jdGlvbiBQcm9maWxlKCkge1xuICogICBjb25zdCB7IGRhdGEsIGVycm9yIH0gPSB1c2VTV1IoJy9hcGkvdXNlcicsIGZldGNoZXIpXG4gKiAgIGlmIChlcnJvcikgcmV0dXJuIDxkaXY+ZmFpbGVkIHRvIGxvYWQ8L2Rpdj5cbiAqICAgaWYgKCFkYXRhKSByZXR1cm4gPGRpdj5sb2FkaW5nLi4uPC9kaXY+XG4gKiAgIHJldHVybiA8ZGl2PmhlbGxvIHtkYXRhLm5hbWV9ITwvZGl2PlxuICogfVxuICogYGBgXG4gKi8gdmFyIHVzZVNXUiA9IHdpdGhBcmdzKHVzZVNXUkhhbmRsZXIpO1xuXG4vLyB1c2VTV1JcblxuZXhwb3J0IHsgU1dSQ29uZmlnLCB1c2VTV1IgYXMgZGVmYXVsdCwgdW5zdGFibGVfc2VyaWFsaXplIH07XG4iLCJpbXBvcnQgeyB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VTV1JDb25maWcgfSBmcm9tIFwic3dyXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VTV1JIb29rc0NvbmZpZygpIHtcbiAgICB2YXIgc3dyQ29uZmlnID0gdXNlU1dSQ29uZmlnKCk7XG4gICAgdmFyIHZhbHVlID0gdXNlTWVtbyhmdW5jdGlvbiAoKSB7IHJldHVybiAoeyBtdXRhdGU6IHN3ckNvbmZpZy5tdXRhdGUsIGNhY2hlOiBzd3JDb25maWcuY2FjaGUgfSk7IH0sIFtzd3JDb25maWcubXV0YXRlLCBzd3JDb25maWcuY2FjaGVdKTtcbiAgICByZXR1cm4gdmFsdWU7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VTV1JIb29rc0NvbmZpZy5qcy5tYXAiLCJpbXBvcnQgeyBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlVG9nZ2xlKGluaXRpYWxWYWx1ZSkge1xuICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgeyBpbml0aWFsVmFsdWUgPSBmYWxzZTsgfVxuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZShpbml0aWFsVmFsdWUpLCAyKSwgdmFsdWUgPSBfYVswXSwgc2V0VmFsdWUgPSBfYVsxXTtcbiAgICB2YXIgdG9nZ2xlID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKG5ld1ZhbHVlKSB7XG4gICAgICAgIGlmICh0eXBlb2YgbmV3VmFsdWUgPT09IFwiYm9vbGVhblwiKSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShuZXdWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBzZXRWYWx1ZShmdW5jdGlvbiAocHJldlZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICFwcmV2VmFsdWU7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH0sIFtdKTtcbiAgICByZXR1cm4gW3ZhbHVlLCB0b2dnbGVdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlVG9nZ2xlLmpzLm1hcCIsInZhciBpc0FycmF5ID0gQXJyYXkuaXNBcnJheVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjYyhvYmopIHtcbiAgdmFyIG91dCA9IFwiXCJcblxuICBpZiAodHlwZW9mIG9iaiA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2Ygb2JqID09PSBcIm51bWJlclwiKSByZXR1cm4gb2JqIHx8IFwiXCJcblxuICBpZiAoaXNBcnJheShvYmopKVxuICAgIGZvciAodmFyIGsgPSAwLCB0bXA7IGsgPCBvYmoubGVuZ3RoOyBrKyspIHtcbiAgICAgIGlmICgodG1wID0gY2Mob2JqW2tdKSkgIT09IFwiXCIpIHtcbiAgICAgICAgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsgdG1wXG4gICAgICB9XG4gICAgfVxuICBlbHNlXG4gICAgZm9yICh2YXIgayBpbiBvYmopIHtcbiAgICAgIGlmIChvYmouaGFzT3duUHJvcGVydHkoaykgJiYgb2JqW2tdKSBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyBrXG4gICAgfVxuXG4gIHJldHVybiBvdXRcbn1cbiIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ1bUtBWm1Ma0FSTHpYM2dudUtrcFwiLFwibGVmdFwiOlwidTFsNUFKR2JVaVA2UlZGSUt4T0lcIixcInNtYWxsXCI6XCJoeFpwSzlDcEJLMXdSMFcwdjRTRFwiLFwibGFyZ2VcIjpcIm85RFltdDR4ZkxhSW1pVnpJOWRRXCIsXCJ4bGFyZ2VcIjpcInFtRVZ4U1pTNWtmTDNhVmJlZTFuXCIsXCJpbnZlcnRlZFwiOlwiQ05PWkhMZDlYYm9rek9XNkxZQlBcIixcInJvdW5kZWRcIjpcImpKQ0F6dzJTeWFINHRJV1hyQWxSXCIsXCJyaWdodE9mZnNldFwiOlwiS0dDdTdhUGpReV9hRk5qSFdOdXdcIixcImxlZnRPZmZzZXRcIjpcImRESFl5R3pYTmk3NzNGQWwxM0dYXCIsXCJub1NoYWRvd1wiOlwibFFGMVljVXFNME9IdlBTbFN3bF9cIixcIm5vQm9yZGVyXCI6XCJzRW8yNUVpdjZ6czFEX3g1cThWeVwiLFwidHJhbnNwYXJlbnRcIjpcInZtM2NtQU5OdVlsYVFNNVlxejlHXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJQaWtmemo3ellnMkludGRKeW11S1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIm9TZ1Y1Y3dYNmlua1NiQ0c5OHc4XCIsXCJub1BhZGRpbmdcIjpcImdTWnJHUjF4cW04UTFpUlVmR2dhXCIsXCJjb250ZW50XCI6XCJwWUxVajlub0FxVDhXeXRqRE9PYlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImJ1dHRvbkJhZGdlXCI6XCJpT3lfdGhVZnd4SXFaT3JXU0l6eFwiLFwiaW52ZXJ0ZWRcIjpcImc3OWpqY1dWbm14TG9QTnlBeDQ5XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJVbmo0cnAxRHk3MUFDcnV6WGw3NVwiLFwibGVmdFwiOlwiRVhXTVJ2dmVSdlFpZml4elRIMDJcIixcInNtYWxsXCI6XCJfVTB6blVrNVFUQXpQblMyZ2FMQ1wiLFwibWVkaXVtXCI6XCJhSDh1NHMyTXRZYzV5NHZ5dWJEd1wiLFwibGFyZ2VcIjpcImMzMDZ5Vjc4YWxfZUd3QlNrbUZtXCIsXCJ4bGFyZ2VcIjpcInh2QTFtZVVtRTI4QUVPcGpzV2M5XCIsXCJpbnZlcnRlZFwiOlwiV0I3N1lJRE9Td0pvWDY4TmpsVUdcIixcInJvdW5kZWRcIjpcImsybkpDc0VOTmdDejJIbHNqX2JHXCIsXCJyaWdodE9mZnNldFwiOlwiakFlNUVWRTM3T3JLWXZrWGRjMXNcIixcImxlZnRPZmZzZXRcIjpcIkRnYnRCNkc0TG9CRGQwNFBfTXpPXCIsXCJub1NoYWRvd1wiOlwiS3BRSTk1X2Y4bkh2azdHMko2aDhcIixcInRyYW5zcGFyZW50XCI6XCJMOFBueFVRb2d6Z0ZNTVQ3UUk0ZFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSnVsYXhTY2NvR21xdGdUTkptazlcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ6VFlyOVc3ZzJTcWJWalBGQW9rR1wiLFwibm9QYWRkaW5nXCI6XCJVSHpUbTUxa1Z5bGw1Ml9TN3NHQlwiLFwibm9Cb3JkZXJcIjpcImhSUDFYWWZ1SjQ5VHNZVV9jTzVBXCIsXCJkaXNhYmxlZFwiOlwibHdXSVRQaE05VE1vNTg1RHNhdzhcIixcImNvbnRlbnRcIjpcIk15VF9QdWZKZEV2c1pFM2hTVzhQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY2hlY2tib3hcIjpcInN5OGxLVldQNTZBbE9SN3lzXzlBXCIsXCJzbWFsbFwiOlwiWGpmcGN1UHRndUZadktyeHh0N3lcIixcIm1lZGl1bVwiOlwidExQM2RaV2VwWEgzSEtnMTdzT0hcIixcImxhcmdlXCI6XCJXZ3A5cUhXRHJRaTlmbWN4UUlWS1wiLFwieGxhcmdlXCI6XCJsVUE2dHBMa1djR0Znbm9xQ0Z2dVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yUGlja2VyXCI6XCJLazJkcDE1SHdNWnpJTmJVRkFaNFwiLFwiaG9yaXpvbnRhbFwiOlwiSnN6T19VZzdwS0xZUTBEZWhOOF9cIixcInZlcnRpY2FsXCI6XCJFVlQ2MmxnaEM5OWU5YmRqWWx5NVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbG9yU3dhdGNoXCI6XCJQdmJlQm00U010TXFsUU5UeVFqUVwiLFwic21hbGxcIjpcIlM3RTNFUHlfQVdRdWtFZXh1dlRmXCIsXCJsYXJnZVwiOlwiYTFGc0l0S1BRRU9CZVRxQkN1RGxcIixcInhsYXJnZVwiOlwic0ZoZ1FFTl9VT0wzWnhPQVIxSWVcIixcInNlbGVjdGVkXCI6XCJhVXgydVNCU3MxNFZxd1BxanZsUVwiLFwic3JPbmx5XCI6XCJKSVFtZVpkZDlURmw1SV9naWZQaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiWlpWSGNYNDVYQ2JsbURhYjlld1pcIixcIm1vZGFsSGVhZGVyXCI6XCJ4VFgxWEpmQ1NVc3JoX3lMbFpvaVwiLFwibW9kYWxDb250ZW50XCI6XCJUZTZqSGRseWpzUVhtblRzOWJhblwiLFwibm9QYWRkaW5nXCI6XCJMel9nd1N3UDNRQ041ell6RnNFaVwiLFwibW9kYWxCdXR0b25zQ29udGFpbmVyXCI6XCJHaDF1dnhNZkVnUFRkdDY2UWlzMlwiLFwibW9kYWxCdXR0b25zXCI6XCJJYXczNEZrTUpxanJHUTU4QkdmeFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlclwiOlwiVTNkQ3pxVHl5bnl6Qm4ybUZrbVdcIixcInZpc2libGVcIjpcInNUY0pkUVVhWlBPZXNlRF8yZmUwXCIsXCJkcmF3ZXJQYXBlclwiOlwiSTNaMGpBODVOcllISjF3RFpIV2JcIixcImRyYXdlclBhcGVyRW50ZXJcIjpcIk1XTGJhVVpJTTFKYkRMRTNIMF9RXCIsXCJkcmF3ZXJQYXBlckVudGVyQWN0aXZlXCI6XCJyZUJIZmtEWlhpS3dpUnZZVGZIdVwiLFwiZHJhd2VyUGFwZXJFbnRlckRvbmVcIjpcIko1ZG13N3dvS3Z3Z3VqZ2JCMHFWXCIsXCJkcmF3ZXJQYXBlckV4aXRcIjpcInJtN2pIMlNxN3dmMmQ5SWxTZXZrXCIsXCJkcmF3ZXJQYXBlckV4aXRBY3RpdmVcIjpcIm5iZW9WcjlWcElYQUgxR1dmcGhDXCIsXCJkcmF3ZXJQYXBlckV4aXREb25lXCI6XCJzZ05iNm5PaEYzNWxXUUU5alFLRVwiLFwiZHJhd2VyUGFwZXJDb250ZW50XCI6XCJDc3FDNnd2bExZRHNLQnNaMEdkVFwiLFwiZHJhd2VyT3ZlcmxheVwiOlwiZTM0Z0JqeDNrM2JSWVBabGY5d1pcIixcIm5vT3ZlcmxheVwiOlwiYjN1Y05wRXROcTJPclFLd3ZxcXdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJkcmF3ZXJDb250ZW50XCI6XCJnRjFfV25PcnJQS1dFUW9YSm1nZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlckZvb3RlclwiOlwibms2OUh1bGhQa2VGc0VNdVpPckJcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJkcmF3ZXJIZWFkZXJcIjpcInZkd2tQSUd4ekVMZFlobWlaUHEyXCIsXCJkcmF3ZXJIZWFkZXJDbG9zZVwiOlwidXo0Tk1fWHZOWmFxeFZaWXZTWUFcIixcImRyYXdlckhlYWRlckNsb3NlSWNvblwiOlwiWmROang2RHBlV0VJMnBBVkwxOHRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInJCYWZYa29UQ24yQWg2eFlZbXhmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIktXazdvWjh0dlBmUWljZ1FZbFZhXCIsXCJsYWJlbFwiOlwiZTZ6cng3VU9QX0JTb01NM0dyalFcIixcInNtYWxsXCI6XCJpaFNuRFFnMHlneGNWTEl5U0prTVwiLFwibGFyZ2VcIjpcIkZwd2hiRDdIWHhfdUZUM2wwMXdiXCIsXCJ4bGFyZ2VcIjpcIllWZHM0dV9EZldTRzFyMFNBR25TXCIsXCJpbnZlcnRlZFwiOlwiQ0t5bm9MaGlMZDZLekFZaTVOdEdcIixcInJvdW5kZWRcIjpcInY3Mm16SnVtRlNpRE9PRTFNblhIXCIsXCJub1NoYWRvd1wiOlwiRW9ld0pFRGJHZHRlSl9OUmZTNUZcIixcIm5vQm9yZGVyXCI6XCJjYjdsNHh2Y05uSE5sUVptTGprYlwiLFwibm9QYWRkaW5nXCI6XCJ2Y093RFl1R0YyZXRvUGZ5RkRYNVwiLFwidHJhbnNwYXJlbnRcIjpcImwwOGtoYVhJVU9jcnVCRkh3czdYXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJMHh2SmJCMExOVDBTMTVqVE1XV1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIlg2ZnFVY1ZIMUJsQ1JKQmlpSmlpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqMW1maVlFR29sVFJtYkJtR0tsUVwiLFwicm93XCI6XCJFR2FLdm1xTTJTYXdpRnJXOEN0dVwiLFwiY29sdW1uXCI6XCJOTWkwTVQxYjdycDFaanllOFVWQVwiLFwiZml4ZWRcIjpcImcwajNra1FyX0FqQ0tGZDk0UzFzXCIsXCJwbGFpblwiOlwiRnIxcTdXbkYxbkZubmJmZ3BhUnpcIixcInRyYW5zcGFyZW50XCI6XCJ1ZFJaZTlIMGJLVUhYak93RzFGblwiLFwidG9wXCI6XCJ1WWlLdzZWdkRFa2hqWkh6dm83ZVwiLFwidG9wRWRnZVwiOlwidFJiRWNZakUzS25jc053VGJ2Vk1cIixcInRvcE9uRWRnZVwiOlwiTEd1bkczN1gxX0hSZXV3M3F6dWFcIixcInJpZ2h0XCI6XCJsdzI3ckdWbG8zNGF4Q3h3M1FIaVwiLFwicmlnaHRFZGdlXCI6XCJQWkl0dmxlRklJajBKeDJNaWtSRVwiLFwicmlnaHRPbkVkZ2VcIjpcIktOdUdhRFBxOXJtWGZnbU8zcGNiXCIsXCJib3R0b21cIjpcImRuMXVoMXRhc0d4REdxbVUxOEhOXCIsXCJib3R0b21FZGdlXCI6XCJlRDBVQ3JCUnBzUlRQUHd3SW9WZ1wiLFwiYm90dG9tT25FZGdlXCI6XCJJcmhINWdmeUdzUTZrZGNQOTRSUVwiLFwibGVmdFwiOlwiRDVmR0huQUdDTVI0THRiOXk0SHJcIixcImxlZnRFZGdlXCI6XCJfQXRBZDJ0cjd0MWtYdXNSYlhTelwiLFwibGVmdE9uRWRnZVwiOlwiXzhDOWRkMFhfSlhZNHVIenc1TmpcIixcImhvcml6b250YWxDZW50ZXJcIjpcIlFEa3M4b3Z0OVJWY0ZXZUVCOHdiXCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiQ1Z1UVJFNjUyR0gyVkpuOHpPVHNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJmcF9CTEoyRlc0T3l5YjBiSGlENFwiLFwic21hbGxcIjpcInpzVkROZk5Sa29zMFE1dXY5RlI5XCIsXCJtZWRpdW1cIjpcImVTbGlsM2V2UHRQQnN3V0Y4MEM1XCIsXCJsYXJnZVwiOlwiVDdVTHlxMXlFOUFWWEVNa25WNEdcIixcInhsYXJnZVwiOlwiUVBBY2VWUWRaNlFJUTJRdmlqd2dcIixcImludmVydGVkXCI6XCJtRlRHYmhMYTRObFVPMTZudkpya1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiV2NlbXlyMkdyOFpDR2M2QmpicXdcIixcInNtYWxsXCI6XCJUX3BhOENjcEwxR3Z1RHNkdnNxcVwiLFwibWVkaXVtXCI6XCJuTExFcmpPZ2ZhNWIyc09lWnJRNVwiLFwibGFyZ2VcIjpcIlE3MU5GQkhyU3hRTFFFNEFHRDJoXCIsXCJ4bGFyZ2VcIjpcIkViQml5RjFyZzZ3UmF4U01LOHNvXCIsXCJyb3VuZGVkXCI6XCJ0TGp1d1JTc0lpTEpHVnNyYXJiZFwiLFwidG9wT2Zmc2V0XCI6XCJkNEtMcEk3OUN1U1U2Z2tQUEluQVwiLFwicmlnaHRPZmZzZXRcIjpcIkc3aEpab1l2OHFJck5tRkN5Z01FXCIsXCJib3R0b21PZmZzZXRcIjpcIkRaczNBdkdrVmRPdkpmTGVKOEdoXCIsXCJsZWZ0T2Zmc2V0XCI6XCJ3RUVuV1JjdnV2b21oX09MTzVpcVwiLFwiaW52ZXJ0ZWRcIjpcIks5V0dDRnBVYWRPOVdJWHdGYWpfXCIsXCJub1NoYWRvd1wiOlwiZUFRSjEwa0VrUG1EeE1HdmxZenlcIixcIm5vQm9yZGVyXCI6XCJPbEVOUjludHVXWUxHT0tLS3JHUlwiLFwidHJhbnNwYXJlbnRcIjpcIktPY3NQcml2cjk0cnhuZkhWbGZlXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnVVNUeTNfTnAxbUdKSFcxTjNneFwiLFwic21hbGxcIjpcIklZdVZ6aDFIQnpnb1RDaTJXUV9wXCIsXCJtZWRpdW1cIjpcIkpOZzNfYkNFZkl2aTRnZUVjc1MzXCIsXCJsYXJnZVwiOlwibjYxc2F4QTIwX0V3TWd0OUd3NHNcIixcInhsYXJnZVwiOlwiZ3FHbnZuSDlYNm1Hdnp3bDRhR3pcIixcInJvdW5kZWRcIjpcIkRrenVxaEVhaU1SM1hNczFNMUlmXCIsXCJ0b3BPZmZzZXRcIjpcInNHbnZldnZzeEJaVWFYcnBaUXBJXCIsXCJyaWdodE9mZnNldFwiOlwiaGdZM1pwa3lENzBwN0U4cm4zYmlcIixcImJvdHRvbU9mZnNldFwiOlwiUk9vUVk2T2FSblF6RE9mWF9RREZcIixcImxlZnRPZmZzZXRcIjpcIktldm01ODJlM2dYUEpFM09Eb3BhXCIsXCJpbnZlcnRlZFwiOlwiT096bkNiQWJqT0xjNF9iQ0VxZnlcIixcIm5vU2hhZG93XCI6XCJ4ckh4ZmNlMDM0ZGdZTkVrbmxWTVwiLFwibm9Cb3JkZXJcIjpcImVIdF9SSXE4SkdvWUhjNGlDb2VnXCIsXCJ0cmFuc3BhcmVudFwiOlwibmZncXRTZ2ZydHJHRkRXZlpvblFcIixcImRpc2FibGVkXCI6XCJJX25oSjl1NnBURF8yU0YzcWxfbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwick81VzZEUWs0TnRvV3J3bUtNV2dcIixcImhhc092ZXJsYXlcIjpcImxsdm5tSThLMTNnOVBUQmlDTnozXCIsXCJvdmVybGF5XCI6XCJHVmsyajh3VjF0M2dZNXVYUTRxSVwiLFwiaW1hZ2VcIjpcImdYallxS2U5dzNOZ1l1cll3VVFwXCIsXCJjb3ZlclwiOlwiX2w3T05PV2F5cjh0eXVHaXlVc2NcIixcImNvbnRhaW5cIjpcIlNZak9iOGxBaG1EYmR5bEZJUVk5XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJIa3JvelNmbGxURmxra2JxeFhXaFwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInh5SFhoaEhFWVhNWWVhdldad19OXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJSRFp5bENNbEdmZUNVd1NieWVJcVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaThHdV9XMXc4V0JBWWZsTElZendcIixcImhlYWRlclwiOlwiR3A3Ujh3WXdhTHRGb0tGY1J0Z05cIixcImhlYWRlckxhYmVsXCI6XCJWR2tvdE1UbnFQUmFLY0dWOFJqZ1wiLFwibGlzdFwiOlwidmc5UUx0Q1lUQXM1eDNmRjc5enBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlpGVWQ3b1NwUEx0MEVkMlhxYVdaXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudVwiOlwieFE5QmZrMFgxSG1aZ2loQ3V0WlZcIixcIm9wZW5cIjpcInV0djlGWU9VN1EwSk5uWlcxZWp2XCIsXCJlbnRyYW5jZVwiOlwieVlLamNDdkQyTDk0RnBQZ09pZ1FcIixcImhlYWRlclwiOlwid05MODZzOXpHRmk4WEsxMUtsb1JcIixcImZvb3RlclwiOlwibXU0SmV2MWM0S2NpZmVGOE16cWdcIixcIm5vQm9yZGVyXCI6XCJFYVBTakwxblhzejdUQ3gxMUxyZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwia1loN0RLWXFINmpkTFhkN1BkSndcIixcIm1lbnVDb250YWluZXJcIjpcIlFsZUFPM3ltVGxpVTZaTkJReGZnXCIsXCJ0b3BcIjpcImF4ZmNyalNINGx2dWp6cnNrMlFwXCIsXCJyaWdodFwiOlwiTHRWbHRXM0JQWjVnTlhWeHhrclBcIixcImxlZnRcIjpcIlBSYjVmOFhjTVpPY1k1dWZQTWRxXCIsXCJib3R0b21cIjpcIl9fTVo1T29pSXJWaWRGWGJRZmp1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcImdHWmZfR3NXc3drcjBOVERfbmJRXCIsXCJub1BhZGRpbmdcIjpcIkNNMmJIU0N4d3VpdE1lczd1OVdmXCIsXCJhY3RpdmVcIjpcInM0dEpsSzRPRmMzcm5YTDBNeHFrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJYMUY0U1FraFFoMGZ4ejVZdTN0SFwiLFwibm9QYWRkaW5nXCI6XCJrcERMWFpTRDJLcDE5aDlzdVJMQVwiLFwiYWN0aXZlXCI6XCJJd0lUakduNnZUWnRlRUtqTm9ZY1wiLFwibWVudUl0ZW1cIjpcImxkb1I2cEdPcnRnSE1YU3BtSDdGXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiajBoOWhkX2dsdkk5eGRPbmFhdVlcIixcIm5vT3ZlcmxheVwiOlwiU0w0OFN6WnVmS2dkTWlHWTNZVE5cIixcIm1vZGFsXCI6XCJoVFhjWmV2R3l5STBBY3ZwclhWSlwiLFwidHJhbnNwYXJlbnRcIjpcImlicWxvRzFIeEh4M3N0ZGtWWlNqXCIsXCJub1NoYWRvd1wiOlwiSUVvNXZFZWZ0dkxwbXdpMFZ5akRcIixcIm1vZGFsQnV0dG9uXCI6XCJGb1BmQzNqN2NJZzJCWWZ6cVFHRVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiR2V2YmJHM0QwUjM0eEdVRnM1WTFcIixcIm51bWJlcnNcIjpcImZMNUkxV0tYQ2FVOXZyQkd5SkI0XCIsXCJidXR0b25cIjpcIm55UjNjR0VtdzNRa1lNdGllbTNTXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiRGg2anNRMTVlTXlkc1NNVEN3UndcIixcInRyYW5zcGFyZW50XCI6XCJXVDZPUGxqQzJxZmJBV3NrMHo0clwiLFwiZml4ZWRcIjpcInB1NnM5TWo1VDFZSWdtdjRMT25DXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaGVhZGVyXCI6XCJXU1lZQkF6NTNkaHF1SU9aUFdCUFwiLFwibGFiZWxcIjpcImI1NWh5WjBvSGwwczRPdDlPaHdNXCIsXCJleHBhbmRlZFwiOlwiTjNBek81a1psaDRIQVBrbm5ZenFcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlNtQ2k0eE94RXNMdGk2MUdvWWs0XCIsXCJzZWxlY3RlZFwiOlwiXzRySnRDT1pwbmYzeG44cG1GdkNRXCIsXCJzaG93U2VsZWN0ZWRXaXRoVGlja0NvbnRhaW5lclwiOlwiTzVucEQwbFQzRmJCQ3dqeTMxU0VcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJNU1haRjd4Y0M1YW9xSGxxcEkwZ1wiLFwiY2hlY2tib3hcIjpcIk5KanE5X2dBZWREUnJPRV9YV0UxXCIsXCJsYWJlbFwiOlwidndtRExjOTZEOXRYZ1dxczRJS3pcIixcInNlbGVjdGVkTGFiZWxcIjpcIm5nSTNTSkpqVW1mY2E0bmlRa2hRXCIsXCJ0aWNrQ29udGFpbmVyXCI6XCJaUGtya3NtdkJRQ2JvWUExaHpORVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZTN5WEpCcllUVzRzVlpLWTJORm1cIixcInNlbGVjdEFsbENvbnRhaW5lclwiOlwiY3pITGE0TDN0UkNKRENpREI2QXpcIixcImNoZWNrYm94XCI6XCJpS3FqV1VkOTZ6U3A5eG1vY1h6a1wiLFwiY2hlY2tib3hDb250YWluZXJcIjpcImF4aWg5RW51eksxZndocVlEVlJBXCIsXCJsYWJlbFwiOlwicTVXczlocjhaTVg3ZlN2REtfcW5cIixcIm5vT3B0aW9uc1wiOlwib3ZLdkI1SDhFb0Z6bnVNcVV1amxcIixcInNlYXJjaEtleXdvcmRcIjpcIlR3Y1ZhUkR6OGNva0lLOUQ5RHhKXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpeDNhWldNZU41QWw0VUs4eWViSlwiLFwiaWNvblNlYXJjaENvbnRhaW5lclwiOlwiWjVMUHg0N3liRUtlWDI5WEJZQkNcIixcInJlc2V0QnV0dG9uXCI6XCJoalQ5Wlh2bXZjNVFVcnV3ejhFbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiRVRHYlhUZFlBcDBHNDBUSlBMbktcIixcImRpc2FibGVkXCI6XCJuRUNnR2RYT3NwVXJRV0hqendrZ1wiLFwiaGVhZGVyXCI6XCJYQW9KaHhUQXBjUjlsR2VneXA5QVwiLFwiYWN0aXZlXCI6XCJlYmVtenRaRVdJVjRfNkFzS1BRSFwiLFwiY29udGVudFwiOlwiclJEV3YycXF3U3JCeTNldlo3RHdcIixcImlzTG9hZGluZ1wiOlwiSXN4U2U5b2FzZE1LOWZtZ182QXRcIixcIm5vT3B0aW9uc1wiOlwiZkxQNHg0SXhueWlXaHA1QlA1c1RcIixcInNlYXJjaENvbnRhaW5lclwiOlwieU9FQ0RKZURWVDV6NVlhWHBlSm5cIixcImljb25CdXR0b25cIjpcImFWS3AzSDNKV3JhQmY3RzVVZGFQXCIsXCJleHBhbmRlZFwiOlwiQnJ4cnREM2FNWDdJVTUyckEyMjBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJwbGFjZWhvbGRlclwiOlwiZGRsUmlkbkl6WWhRQzlER3BnSXRcIixcImFjdGl2ZVwiOlwic2hIc0VKR3RiejRjbUE2eDFHMWxcIixcInRhZ1dyYXBwZXJcIjpcIkJHRVNoYzdxdTJmazlEWkUyUlVzXCIsXCJzZWxlY3RlZE9wdGlvblwiOlwibWE5QklqdUdDUWVLRjQ0c2d1Y1RcIixcInNlbGVjdGVkT3B0aW9uc1wiOlwiblJwQXd2OTdDZXNxUWJETGNldDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImc1T1IwYU9OT1cxT3MxeHRrTkhpXCIsXCJ0YWJsZVwiOlwic01SMVZiNjJYRXZPT1dScldjNFFcIixcInBsYWNlaG9sZGVyQ29udGFpbmVyXCI6XCJfN3gyejdwX2tiUU9MRG1FWDU0aUFcIixcInNjcm9sbGJhckNvbnRhaW5lclwiOlwiRUFIMTRYUGVKQnVEV0dwNU5WWW9cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImo0UGlnSk9MNURnekQ4T1l4c2t6XCIsXCJpc0hlYWRlclN0aWNreVwiOlwiQVlSXzRIZW9sQWpKQ09zbDNIWkpcIixcImJvcmRlckJvdHRvbVwiOlwiaVpyRDN0SDEyekRJRk9XdkpVRDdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0YWJsZUhlYWRlckNlbGxcIjpcIkpjQTFWelY0TXdWUTNORWgwdnpFXCIsXCJzb3J0SWNvblZpc2libGVcIjpcIklxN094c1F6TDA2eGo5OE8wTHFKXCIsXCJzb3J0YWJsZVwiOlwiVlNUU2hZN0xUaF9JSWpuclBfX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImRPdmlnU2doeHlRNENiYkNNa0NSXCIsXCJhY3RpdmVcIjpcInRxbllkWTBIdERsbVc2MXRqR2JRXCIsXCJoYXNBcnJvd1wiOlwicXFPNmExak5MNkhUSkc3SFIxMXRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkF2UjdXQ0RSeEN3dlJVQV9qODBQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ6S0YzNGFLdllabmJMdVp6akVlT1wiLFwiY29udGVudFwiOlwib18yMXJfRWpMS0IzeGhnR3k3NHNcIixcImNsb3NlQnV0dG9uXCI6XCJaWlBSWkxVcTlNUXlpZkQ4eDJqSFwiLFwiZGlzYWJsZWRcIjpcInVDTHowdmJOblFaRlg4a1Z1VWlHXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnd1lLUlBwR2RJTVZYa2lOMEg5QlwiLFwic2Nyb2xsYWJsZVwiOlwib3ZkandocjIxYXd2MkFnaVFFZDJcIixcInRhZ0lucHV0XCI6XCJhdkltR3MzWGNMZURMR2h4RDhid1wiLFwiZGlzYWJsZWRcIjpcInlUOFBwOFRVdlA3c1FTR2VHTE5KXCIsXCJ0ZXh0SW5wdXRcIjpcIlppTk5mMm9MVmpFeHhwOVJUMnNfXCIsXCJzbWFsbFwiOlwiTGVtTVVUc2VpZ3hIYm1JWVZWVGNcIixcIm1lZGl1bVwiOlwiUFVISmRNN1pFYjNMRlJlTTFfVWdcIixcImxhcmdlXCI6XCJqOW1rNTJoR2hvRndqdzRGV0hROVwiLFwieGxhcmdlXCI6XCJFaVdxZUZxUVhFOUxIVWgxdnhwWFwiLFwibm9Cb3JkZXJcIjpcIk82V3NPcFVab1plVGhVYl9WaVhuXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGV4dElucHV0XCI6XCJOUFpya3NDcG5YVkpTcV9zbkhqUlwiLFwic21hbGxcIjpcImpRR3JpUUpTYTA0enNvRzFhMnU5XCIsXCJtZWRpdW1cIjpcImxWb1k5RHAxN0hPQmluTWowUTdvXCIsXCJsYXJnZVwiOlwiUWxVYVBiWDhFYUlpN3JaNEZiOG9cIixcInhsYXJnZVwiOlwicllQT005Zk50VkxkUEZ5V0trR0VcIixcIm5vQm9yZGVyXCI6XCJLRFRJTnNIZG9sWVJlU2JMY29vSFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJ6Rml1QVRnc1NCNDJWZEVtY0paWVwiLFwiZW50cmFuY2VcIjpcIlI4cnBPVU90bmdZT0V0N0kwcEdNXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIlhsTFFPZTQ3NE90QmlhY19nVTdIXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9vbHRpcFwiOlwiS202VVV5MGpwcU0wTEEyZVhjY2NcIixcImFic29sdXRlXCI6XCJlNTB6RWp0ZlFLMDBsZl84ODRPWVwiLFwiZml4ZWRcIjpcImpxeFQ0TWNPZVVERG5Hc2Vaa0JMXCIsXCJsZWZ0XCI6XCJ5QnYxbHdESHBleHhPM0RQcGQxdlwiLFwicmlnaHRcIjpcInY4NTJFeHhtUTZBdFNRRjJzWDhBXCIsXCJ0b3BcIjpcImlWMnl6UGl6b291OW9tVzgxMWhnXCIsXCJib3R0b21cIjpcIlZtbUU4RU5zQ2t6YndMcEwzWEpnXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ5WTlIVjQwSVRUV2dBVjhxTHcxd1wiLFwiaGFzT3ZlcmxheVwiOlwienViNWJxZFZYbTRORnhwSTRIQmZcIixcInZpZGVvXCI6XCJNVkNEVmpmZ21IRTdRZW1jWXhHbFwiLFwiY292ZXJcIjpcIlY0bkVjbTE3OXZaZTJNTGdSVmFNXCIsXCJjb250YWluXCI6XCJ1Ml9NZmVDak1TbF9hQk5KbjVuTFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwibGpmc1lzOEJRcWxlS3piTGtrYWRcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJISnRScWJBRkxPblhWeUd6OGlGVVwiLFwib3ZlcmxheVwiOlwiQUxIaE9IQWVMbEJEeTFEcFlxaXZcIn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSGludCA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZXhwb3J0cy5IaW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgY2hpbGQgPSByZWFjdF8xLmRlZmF1bHQuQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKCgoX2IgPSAoX2EgPSBjaGlsZC50eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRvTG93ZXJDYXNlKCkpICE9PSAnaW5wdXQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogJ0hpbnQnIG9ubHkgYWNjZXB0cyBhbiAnaW5wdXQnIGVsZW1lbnQgYXMgY2hpbGQuXCIpO1xuICAgIH1cbiAgICB2YXIgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsIGRpc2FibGVIaW50ID0gcHJvcHMuZGlzYWJsZUhpbnQsIGFsbG93VGFiRmlsbCA9IHByb3BzLmFsbG93VGFiRmlsbCwgYWxsb3dFbnRlckZpbGwgPSBwcm9wcy5hbGxvd0VudGVyRmlsbCwgb25GaWxsID0gcHJvcHMub25GaWxsLCBvbkhpbnQgPSBwcm9wcy5vbkhpbnQsIHZhbHVlTW9kaWZpZXIgPSBwcm9wcy52YWx1ZU1vZGlmaWVyO1xuICAgIHZhciBjaGlsZFByb3BzID0gY2hpbGQucHJvcHM7XG4gICAgdmFyIG1haW5JbnB1dFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50V3JhcHBlclJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50UmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIF9jID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIHVuTW9kaWZpZWRJbnB1dFRleHQgPSBfY1swXSwgc2V0VW5tb2RpZmllZElucHV0VGV4dCA9IF9jWzFdO1xuICAgIHZhciBfZCA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB0ZXh0ID0gX2RbMF0sIHNldFRleHQgPSBfZFsxXTtcbiAgICB2YXIgX2UgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgaGludCA9IF9lWzBdLCBzZXRIaW50ID0gX2VbMV07XG4gICAgdmFyIF9mID0gcmVhY3RfMS51c2VTdGF0ZSgpLCBtYXRjaCA9IF9mWzBdLCBzZXRNYXRjaCA9IF9mWzFdO1xuICAgIHZhciBfZyA9IHJlYWN0XzEudXNlU3RhdGUoKSwgY2hhbmdlRXZlbnQgPSBfZ1swXSwgc2V0Q2hhbmdlRXZlbnQgPSBfZ1sxXTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZhciBkdXBsaWNhdGUgPSB1dGlsc18xLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcInJlYWN0LWF1dG9jb21wbGV0ZS1oaW50OiBcXFwiXCIgKyBkdXBsaWNhdGUgKyBcIlxcXCIgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGFuZCBtYXkgY2F1c2UgZXJyb3JzLiBPcHRpb25zIHNob3VsZCBub3QgY29udGFpbiBkdXBsaWNhdGUgdmFsdWVzIVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtvcHRpb25zXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZGlzYWJsZUhpbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5wdXRTdHlsZSA9IG1haW5JbnB1dFJlZi5jdXJyZW50ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG1haW5JbnB1dFJlZi5jdXJyZW50KTtcbiAgICAgICAgaW5wdXRTdHlsZSAmJiBzdHlsZUhpbnQoaGludFdyYXBwZXJSZWYsIGhpbnRSZWYsIGlucHV0U3R5bGUpO1xuICAgIH0pO1xuICAgIHZhciBnZXRNYXRjaCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIGlmICghdGV4dCB8fCB0ZXh0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnNbMF0pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzEgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgpWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hfMiA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgIT09IHRleHQudG9Mb3dlckNhc2UoKSAmJiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0ZXh0LnRvTG93ZXJDYXNlKCkpOyB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB1dGlsc18xLnNvcnRBc2MoYS5sYWJlbCwgYi5sYWJlbCk7IH0pWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBzZXRIaW50VGV4dEFuZElkID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgc2V0VGV4dCh0ZXh0KTtcbiAgICAgICAgdmFyIG1hdGNoID0gZ2V0TWF0Y2godGV4dCk7XG4gICAgICAgIHZhciBoaW50O1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBoaW50ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaGludCA9IG1hdGNoLnNsaWNlKHRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5sYWJlbC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SGludChoaW50KTtcbiAgICAgICAgc2V0TWF0Y2gobWF0Y2gpO1xuICAgICAgICBvbkhpbnQgJiYgb25IaW50KG1hdGNoKTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVPbkZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChoaW50ID09PSAnJyB8fCAhY2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3VW5Nb2RpZmllZFRleHQgPSB1bk1vZGlmaWVkSW5wdXRUZXh0ICsgaGludDtcbiAgICAgICAgY2hhbmdlRXZlbnQudGFyZ2V0LnZhbHVlID0gbmV3VW5Nb2RpZmllZFRleHQ7XG4gICAgICAgIGNoaWxkUHJvcHMub25DaGFuZ2UgJiYgY2hpbGRQcm9wcy5vbkNoYW5nZShjaGFuZ2VFdmVudCk7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICBvbkZpbGwgJiYgb25GaWxsKG1hdGNoKTtcbiAgICAgICAgc2V0VW5tb2RpZmllZElucHV0VGV4dChuZXdVbk1vZGlmaWVkVGV4dCk7XG4gICAgfTtcbiAgICB2YXIgc3R5bGVIaW50ID0gZnVuY3Rpb24gKGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoX2EgPSBoaW50V3JhcHBlclJlZiA9PT0gbnVsbCB8fCBoaW50V3JhcHBlclJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFdyYXBwZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRGYW1pbHkgPSBpbnB1dFN0eWxlLmZvbnRGYW1pbHk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSBpbnB1dFN0eWxlLndpZHRoO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBpbnB1dFN0eWxlLmhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm94U2l6aW5nID0gaW5wdXRTdHlsZS5ib3hTaXppbmc7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLm1hcmdpbiA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnbWFyZ2luJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLnBhZGRpbmcgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyU3R5bGUgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICdzdHlsZScpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3JkZXJXaWR0aCA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChfYiA9IGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3R5bGUpIHtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5saW5lSGVpZ2h0ID0gaW5wdXRTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRDaGFuZ2VFdmVudChlKTtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICB2YXIgbW9kaWZpZWRWYWx1ZSA9IHZhbHVlTW9kaWZpZXIgPyB2YWx1ZU1vZGlmaWVyKGUudGFyZ2V0LnZhbHVlKSA6IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKG1vZGlmaWVkVmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoZSk7XG4gICAgfTtcbiAgICB2YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uRm9jdXMgJiYgY2hpbGRQcm9wcy5vbkZvY3VzKGUpO1xuICAgIH07XG4gICAgdmFyIG9uQmx1ciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vT25seSBibHVyIGl0IGlmIHRoZSBuZXcgZm9jdXMgaXNuJ3QgdGhlIHRoZSBoaW50IGlucHV0XG4gICAgICAgIGlmICgoaGludFJlZiA9PT0gbnVsbCB8fCBoaW50UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50UmVmLmN1cnJlbnQpICE9PSBlLnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICAgICAgY2hpbGRQcm9wcy5vbkJsdXIgJiYgY2hpbGRQcm9wcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBBUlJPV1JJR0hUID0gJ0Fycm93UmlnaHQnO1xuICAgIHZhciBUQUIgPSAnVGFiJztcbiAgICB2YXIgRU5URVIgPSAnRW50ZXInO1xuICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2VsZWN0YWJsZSBpbnB1dCB0eXBlcyAoXCJ0ZXh0XCIsIFwic2VhcmNoXCIpLCBvbmx5IHNlbGVjdCB0aGUgaGludCBpZlxuICAgICAgICAgICAgLy8gaXQncyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB2YWx1ZS4gRm9yIG5vbi1zZWxlY3RhYmxlIHR5cGVzIChcImVtYWlsXCIsXG4gICAgICAgICAgICAvLyBcIm51bWJlclwiKSwgYWx3YXlzIHNlbGVjdCB0aGUgaGludC5cbiAgICAgICAgICAgIHZhciBpc05vblNlbGVjdGFibGVUeXBlID0gZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gbnVsbDtcbiAgICAgICAgICAgIHZhciBjYXJldElzQXRUZXh0RW5kID0gaXNOb25TZWxlY3RhYmxlVHlwZSB8fCBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kID09PSBlLmN1cnJlbnRUYXJnZXQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGNhcmV0SXNBdFRleHRFbmQ7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGUua2V5ID09PSBBUlJPV1JJR0hUKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93VGFiRmlsbCAmJiBlLmtleSA9PT0gVEFCICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93RW50ZXJGaWxsICYmIGUua2V5ID09PSBFTlRFUiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRQcm9wcy5vbktleURvd24gJiYgY2hpbGRQcm9wcy5vbktleURvd24oZSk7XG4gICAgfTtcbiAgICB2YXIgb25IaW50Q2xpY2sgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBoaW50Q2FyZXRQb3NpdGlvbiA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgLy8gSWYgdXNlciBjbGlja3MgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBoaW50LCBcbiAgICAgICAgLy8gbW92ZSBmb2N1cyB0byB0aGUgZW5kIG9mIHRoZSBtYWluSW5wdXQgdGV4dFxuICAgICAgICBpZiAoaGludENhcmV0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFoaW50ICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgKF9hID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHZhciBjYXJldFBvc2l0aW9uID0gdGV4dC5sZW5ndGggKyBoaW50Q2FyZXRQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAoX2IgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNldFNlbGVjdGlvblJhbmdlKGNhcmV0UG9zaXRpb24sIGNhcmV0UG9zaXRpb24pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBjaGlsZFJlZiA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkKS5yZWY7XG4gICAgdmFyIG1haW5JbnB1dCA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hpbGRQcm9wcyksIHsgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICBvbkJsdXI6IG9uQmx1cixcbiAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sIHJlZjogY2hpbGRSZWYgJiYgdHlwZW9mIChjaGlsZFJlZikgIT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHV0aWxzXzEubWVyZ2VSZWZzKGNoaWxkUmVmLCBtYWluSW5wdXRSZWYpXG4gICAgICAgICAgICA6IG1haW5JbnB1dFJlZiB9KSk7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaW5wdXQtd3JhcHBlclwiLCBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgICAgICAgfSB9LCBkaXNhYmxlSGludFxuICAgICAgICA/IGNoaWxkXG4gICAgICAgIDogKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlYWN0XzEuZGVmYXVsdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgIG1haW5JbnB1dCxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludC13cmFwcGVyXCIsIHJlZjogaGludFdyYXBwZXJSZWYsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzUpJyxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB9IH0sXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAncmFoLXRleHQtZmlsbGVyJywgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ3ByZSdcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB0ZXh0KSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgY2xhc3NOYW1lOiBcInJhaC1oaW50XCIsIHJlZjogaGludFJlZiwgb25DbGljazogb25IaW50Q2xpY2ssIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAhaGludCB8fCBoaW50ID09PSAnJyA/ICdub25lJyA6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4zMCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgICAgICAgICAgICAgICB9LCBkZWZhdWx0VmFsdWU6IGhpbnQsIHRhYkluZGV4OiAtMSB9KSkpKSkpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGV4cG9ydHMuc29ydEFzYyA9IGV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGV4cG9ydHMubWVyZ2VSZWZzID0gdm9pZCAwO1xuZnVuY3Rpb24gbWVyZ2VSZWZzKCkge1xuICAgIHZhciByZWZzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgcmVmc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgZmlsdGVyZWRSZWZzID0gcmVmcy5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgZmlsdGVyZWRSZWZzXzEgPSBmaWx0ZXJlZFJlZnM7IF9pIDwgZmlsdGVyZWRSZWZzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVmID0gZmlsdGVyZWRSZWZzXzFbX2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZWYoaW5zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudCA9IGluc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZVJlZnMgPSBtZXJnZVJlZnM7XG47XG4vLyBJRSBkb2Vzbid0IHNlZW0gdG8gZ2V0IHRoZSBjb21wb3NpdGUgY29tcHV0ZWQgdmFsdWUgKGVnOiAncGFkZGluZycsXG4vLyAnYm9yZGVyU3R5bGUnLCBldGMuKSwgc28gZ2VuZXJhdGUgdGhlc2UgZnJvbSB0aGUgaW5kaXZpZHVhbCB2YWx1ZXMuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVN0eWxlKHN0eWxlcywgYXR0ciwgc3ViYXR0cikge1xuICAgIGlmIChzdWJhdHRyID09PSB2b2lkIDApIHsgc3ViYXR0ciA9ICcnOyB9XG4gICAgLy8gVGl0bGUtY2FzZSB0aGUgc3ViLWF0dHJpYnV0ZS5cbiAgICBpZiAoc3ViYXR0cikge1xuICAgICAgICBzdWJhdHRyID0gc3ViYXR0ci5yZXBsYWNlKHN1YmF0dHJbMF0sIHN1YmF0dHJbMF0udG9VcHBlckNhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBbJ1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddXG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IChhdHRyICsgZGlyICsgc3ViYXR0cikgcHJvcGVydHkgY2Fubm90IGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGRpcikgeyByZXR1cm4gc3R5bGVzW2F0dHIgKyBkaXIgKyBzdWJhdHRyXTsgfSlcbiAgICAgICAgLmpvaW4oJyAnKTtcbn1cbmV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGludGVycG9sYXRlU3R5bGU7XG5mdW5jdGlvbiBzb3J0QXNjKGEsIGIpIHtcbiAgICBpZiAoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChhIDwgYikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuZXhwb3J0cy5zb3J0QXNjID0gc29ydEFzYztcbmZ1bmN0aW9uIGdldEZpcnN0RHVwbGljYXRlT3B0aW9uKGFycmF5KSB7XG4gICAgdmFyIHRyYWNrZXIgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0cmFja2VyW2FycmF5W2ldLmxhYmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNrZXJbYXJyYXlbaV0ubGFiZWxdID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uID0gZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb247XG4iLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjQgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIHdpbkxpc3RlbmRGb2N1cyA9IGZhbHNlOyAvLyB3aW5kb3fmmK/lkKblt7Lnu4/nm5HlkKzkuoZmb2N1c+S6i+S7tlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAodHlwZW9mIGtleXNJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5maWx0ZXIoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG4gICAgICByZXR1cm4gIShpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSk7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSwgZWxlbWVudCkge1xuICBpZiAoaGFuZGxlci5lbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCwgZWxlbWVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnO1xuICB2YXIgY2FwdHVyZSA9IGZhbHNlOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmNhcHR1cmUgIT09IHVuZGVmaW5lZCkgY2FwdHVyZSA9IG9wdGlvbi5jYXB0dXJlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgfSwgY2FwdHVyZSk7XG5cbiAgICBpZiAoIXdpbkxpc3RlbmRGb2N1cykge1xuICAgICAgd2luTGlzdGVuZEZvY3VzID0gdHJ1ZTtcbiAgICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfZG93bktleXMgPSBbXTtcbiAgICAgIH0sIGNhcHR1cmUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSwgY2FwdHVyZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJpZ2dlcihzaG9ydGN1dCkge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbGwnO1xuICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBkYXRhID0gX2hhbmRsZXJzW2tleV0uZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uc2NvcGUgPT09IHNjb3BlICYmIGl0ZW0uc2hvcnRjdXQgPT09IHNob3J0Y3V0O1xuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5tZXRob2QpIHtcbiAgICAgIGRhdGEubWV0aG9kKCk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHRyaWdnZXI6IHRyaWdnZXIsXG4gIHVuYmluZDogdW5iaW5kLFxuICBrZXlNYXA6IF9rZXlNYXAsXG4gIG1vZGlmaWVyOiBfbW9kaWZpZXIsXG4gIG1vZGlmaWVyTWFwOiBtb2RpZmllck1hcFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCB7IGhvdGtleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQsIF9yZWYkY3VycmVudDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50IHx8IChfcmVmJGN1cnJlbnQgPSByZWYuY3VycmVudCkgIT0gbnVsbCAmJiBfcmVmJGN1cnJlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIiwiZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzVG9SZW1vdmUgKyBcIig/OlxcXFxzfCQpXCIsICdnJyksICckMScpLnJlcGxhY2UoL1xccysvZywgJyAnKS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG4vKipcbiAqIFJlbW92ZXMgYSBDU1MgY2xhc3MgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnLCBjbGFzc05hbWUpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZGlzYWJsZWQ6IGZhbHNlXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImV4cG9ydCB2YXIgZm9yY2VSZWZsb3cgPSBmdW5jdGlvbiBmb3JjZVJlZmxvdyhub2RlKSB7XG4gIHJldHVybiBub2RlLnNjcm9sbFRvcDtcbn07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5leHBvcnQgdmFyIFVOTU9VTlRFRCA9ICd1bm1vdW50ZWQnO1xuZXhwb3J0IHZhciBFWElURUQgPSAnZXhpdGVkJztcbmV4cG9ydCB2YXIgRU5URVJJTkcgPSAnZW50ZXJpbmcnO1xuZXhwb3J0IHZhciBFTlRFUkVEID0gJ2VudGVyZWQnO1xuZXhwb3J0IHZhciBFWElUSU5HID0gJ2V4aXRpbmcnO1xuLyoqXG4gKiBUaGUgVHJhbnNpdGlvbiBjb21wb25lbnQgbGV0cyB5b3UgZGVzY3JpYmUgYSB0cmFuc2l0aW9uIGZyb20gb25lIGNvbXBvbmVudFxuICogc3RhdGUgdG8gYW5vdGhlciBfb3ZlciB0aW1lXyB3aXRoIGEgc2ltcGxlIGRlY2xhcmF0aXZlIEFQSS4gTW9zdCBjb21tb25seVxuICogaXQncyB1c2VkIHRvIGFuaW1hdGUgdGhlIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIG9mIGEgY29tcG9uZW50LCBidXQgY2FuIGFsc29cbiAqIGJlIHVzZWQgdG8gZGVzY3JpYmUgaW4tcGxhY2UgdHJhbnNpdGlvbiBzdGF0ZXMgYXMgd2VsbC5cbiAqXG4gKiAtLS1cbiAqXG4gKiAqKk5vdGUqKjogYFRyYW5zaXRpb25gIGlzIGEgcGxhdGZvcm0tYWdub3N0aWMgYmFzZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZ1xuICogdHJhbnNpdGlvbnMgaW4gQ1NTLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byB1c2VcbiAqIFtgQ1NTVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvY3NzLXRyYW5zaXRpb24pXG4gKiBpbnN0ZWFkLiBJdCBpbmhlcml0cyBhbGwgdGhlIGZlYXR1cmVzIG9mIGBUcmFuc2l0aW9uYCwgYnV0IGNvbnRhaW5zXG4gKiBhZGRpdGlvbmFsIGZlYXR1cmVzIG5lY2Vzc2FyeSB0byBwbGF5IG5pY2Ugd2l0aCBDU1MgdHJhbnNpdGlvbnMgKGhlbmNlIHRoZVxuICogbmFtZSBvZiB0aGUgY29tcG9uZW50KS5cbiAqXG4gKiAtLS1cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBgVHJhbnNpdGlvbmAgY29tcG9uZW50IGRvZXMgbm90IGFsdGVyIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAqIGNvbXBvbmVudCBpdCByZW5kZXJzLCBpdCBvbmx5IHRyYWNrcyBcImVudGVyXCIgYW5kIFwiZXhpdFwiIHN0YXRlcyBmb3IgdGhlXG4gKiBjb21wb25lbnRzLiBJdCdzIHVwIHRvIHlvdSB0byBnaXZlIG1lYW5pbmcgYW5kIGVmZmVjdCB0byB0aG9zZSBzdGF0ZXMuIEZvclxuICogZXhhbXBsZSB3ZSBjYW4gYWRkIHN0eWxlcyB0byBhIGNvbXBvbmVudCB3aGVuIGl0IGVudGVycyBvciBleGl0czpcbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbiAqXG4gKiBjb25zdCBkdXJhdGlvbiA9IDMwMDtcbiAqXG4gKiBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gKiAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7ZHVyYXRpb259bXMgZWFzZS1pbi1vdXRgLFxuICogICBvcGFjaXR5OiAwLFxuICogfVxuICpcbiAqIGNvbnN0IHRyYW5zaXRpb25TdHlsZXMgPSB7XG4gKiAgIGVudGVyaW5nOiB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZW50ZXJlZDogIHsgb3BhY2l0eTogMSB9LFxuICogICBleGl0aW5nOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiAgIGV4aXRlZDogIHsgb3BhY2l0eTogMCB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBGYWRlID0gKHsgaW46IGluUHJvcCB9KSA9PiAoXG4gKiAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9e2R1cmF0aW9ufT5cbiAqICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgPGRpdiBzdHlsZT17e1xuICogICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gKiAgICAgICAgIC4uLnRyYW5zaXRpb25TdHlsZXNbc3RhdGVdXG4gKiAgICAgICB9fT5cbiAqICAgICAgICAgSSdtIGEgZmFkZSBUcmFuc2l0aW9uIVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgKX1cbiAqICAgPC9UcmFuc2l0aW9uPlxuICogKTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSA0IG1haW4gc3RhdGVzIGEgVHJhbnNpdGlvbiBjYW4gYmUgaW46XG4gKiAgLSBgJ2VudGVyaW5nJ2BcbiAqICAtIGAnZW50ZXJlZCdgXG4gKiAgLSBgJ2V4aXRpbmcnYFxuICogIC0gYCdleGl0ZWQnYFxuICpcbiAqIFRyYW5zaXRpb24gc3RhdGUgaXMgdG9nZ2xlZCB2aWEgdGhlIGBpbmAgcHJvcC4gV2hlbiBgdHJ1ZWAgdGhlIGNvbXBvbmVudFxuICogYmVnaW5zIHRoZSBcIkVudGVyXCIgc3RhZ2UuIER1cmluZyB0aGlzIHN0YWdlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgZnJvbVxuICogaXRzIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0ZSwgdG8gYCdlbnRlcmluZydgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gKiB0cmFuc2l0aW9uIGFuZCB0aGVuIHRvIHRoZSBgJ2VudGVyZWQnYCBzdGFnZSBvbmNlIGl0J3MgY29tcGxldGUuIExldCdzIHRha2VcbiAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAod2UnbGwgdXNlIHRoZVxuICogW3VzZVN0YXRlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlc3RhdGUpIGhvb2spOlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXs1MDB9PlxuICogICAgICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgICAgIC8vIC4uLlxuICogICAgICAgICApfVxuICogICAgICAgPC9UcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgdG8gdGhlIGAnZW50ZXJpbmcnYCBzdGF0ZVxuICogYW5kIHN0YXkgdGhlcmUgZm9yIDUwMG1zICh0aGUgdmFsdWUgb2YgYHRpbWVvdXRgKSBiZWZvcmUgaXQgZmluYWxseSBzd2l0Y2hlc1xuICogdG8gYCdlbnRlcmVkJ2AuXG4gKlxuICogV2hlbiBgaW5gIGlzIGBmYWxzZWAgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyBleGNlcHQgdGhlIHN0YXRlIG1vdmVzIGZyb21cbiAqIGAnZXhpdGluZydgIHRvIGAnZXhpdGVkJ2AuXG4gKi9cblxudmFyIFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuICAgIHZhciBwYXJlbnRHcm91cCA9IGNvbnRleHQ7IC8vIEluIHRoZSBjb250ZXh0IG9mIGEgVHJhbnNpdGlvbkdyb3VwIGFsbCBlbnRlcnMgYXJlIHJlYWxseSBhcHBlYXJzXG5cbiAgICB2YXIgYXBwZWFyID0gcGFyZW50R3JvdXAgJiYgIXBhcmVudEdyb3VwLmlzTW91bnRpbmcgPyBwcm9wcy5lbnRlciA6IHByb3BzLmFwcGVhcjtcbiAgICB2YXIgaW5pdGlhbFN0YXR1cztcbiAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmluKSB7XG4gICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVOVEVSRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy51bm1vdW50T25FeGl0IHx8IHByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gVU5NT1VOVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogaW5pdGlhbFN0YXR1c1xuICAgIH07XG4gICAgX3RoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmLCBwcmV2U3RhdGUpIHtcbiAgICB2YXIgbmV4dEluID0gX3JlZi5pbjtcblxuICAgIGlmIChuZXh0SW4gJiYgcHJldlN0YXRlLnN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgLy8gICBsZXQgbmV4dFN0YXR1cyA9IG51bGxcbiAgLy8gICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gIC8vICAgICBjb25zdCB7IHN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAvLyAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHsgbmV4dFN0YXR1cyB9XG4gIC8vIH1cbiAgO1xuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyh0cnVlLCB0aGlzLmFwcGVhclN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgbmV4dFN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gICAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklORztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyhmYWxzZSwgbmV4dFN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0VGltZW91dHMgPSBmdW5jdGlvbiBnZXRUaW1lb3V0cygpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dDtcbiAgICB2YXIgZXhpdCwgZW50ZXIsIGFwcGVhcjtcbiAgICBleGl0ID0gZW50ZXIgPSBhcHBlYXIgPSB0aW1lb3V0O1xuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCAmJiB0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGV4aXQgPSB0aW1lb3V0LmV4aXQ7XG4gICAgICBlbnRlciA9IHRpbWVvdXQuZW50ZXI7IC8vIFRPRE86IHJlbW92ZSBmYWxsYmFjayBmb3IgbmV4dCBtYWpvclxuXG4gICAgICBhcHBlYXIgPSB0aW1lb3V0LmFwcGVhciAhPT0gdW5kZWZpbmVkID8gdGltZW91dC5hcHBlYXIgOiBlbnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhpdDogZXhpdCxcbiAgICAgIGVudGVyOiBlbnRlcixcbiAgICAgIGFwcGVhcjogYXBwZWFyXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhdHVzID0gZnVuY3Rpb24gdXBkYXRlU3RhdHVzKG1vdW50aW5nLCBuZXh0U3RhdHVzKSB7XG4gICAgaWYgKG1vdW50aW5nID09PSB2b2lkIDApIHtcbiAgICAgIG1vdW50aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5leHRTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIC8vIG5leHRTdGF0dXMgd2lsbCBhbHdheXMgYmUgRU5URVJJTkcgb3IgRVhJVElORy5cbiAgICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0IHx8IHRoaXMucHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3B1bGwvNzQ5XG4gICAgICAgICAgLy8gV2l0aCB1bm1vdW50T25FeGl0IG9yIG1vdW50T25FbnRlciwgdGhlIGVudGVyIGFuaW1hdGlvbiBzaG91bGQgaGFwcGVuIGF0IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gYGV4aXRlZGAgYW5kIGBlbnRlcmluZ2AuXG4gICAgICAgICAgLy8gVG8gbWFrZSB0aGUgYW5pbWF0aW9uIGhhcHBlbiwgIHdlIGhhdmUgdG8gc2VwYXJhdGUgZWFjaCByZW5kZXJpbmcgYW5kIGF2b2lkIGJlaW5nIHByb2Nlc3NlZCBhcyBiYXRjaGVkLlxuXG4gICAgICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtRW50ZXIobW91bnRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG5cbiAgICB2YXIgX3JlZjIgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbYXBwZWFyaW5nXSA6IFtSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSwgYXBwZWFyaW5nXSxcbiAgICAgICAgbWF5YmVOb2RlID0gX3JlZjJbMF0sXG4gICAgICAgIG1heWJlQXBwZWFyaW5nID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIGVudGVyVGltZW91dCA9IGFwcGVhcmluZyA/IHRpbWVvdXRzLmFwcGVhciA6IHRpbWVvdXRzLmVudGVyOyAvLyBubyBlbnRlciBhbmltYXRpb24gc2tpcCByaWdodCB0byBFTlRFUkVEXG4gICAgLy8gaWYgd2UgYXJlIG1vdW50aW5nIGFuZCBydW5uaW5nIHRoaXMgaXQgbWVhbnMgYXBwZWFyIF9tdXN0XyBiZSBzZXRcblxuICAgIGlmICghbW91bnRpbmcgJiYgIWVudGVyIHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRXhpdCA9IGZ1bmN0aW9uIHBlcmZvcm1FeGl0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBtYXliZU5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gbm8gZXhpdCBhbmltYXRpb24gc2tpcCByaWdodCB0byBFWElURURcblxuICAgIGlmICghZXhpdCB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRVhJVElOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcblxuICAgICAgX3RoaXMzLm9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0cy5leGl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIgPSB0aW1lb3V0ID09IG51bGwgJiYgIXRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXI7XG5cbiAgICBpZiAoIW5vZGUgfHwgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lcikge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIHZhciBfcmVmMyA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFt0aGlzLm5leHRDYWxsYmFja10gOiBbbm9kZSwgdGhpcy5uZXh0Q2FsbGJhY2tdLFxuICAgICAgICAgIG1heWJlTm9kZSA9IF9yZWYzWzBdLFxuICAgICAgICAgIG1heWJlTmV4dENhbGxiYWNrID0gX3JlZjNbMV07XG5cbiAgICAgIHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIobWF5YmVOb2RlLCBtYXliZU5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBfaW4gPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgX21vdW50T25FbnRlciA9IF90aGlzJHByb3BzLm1vdW50T25FbnRlcixcbiAgICAgICAgX3VubW91bnRPbkV4aXQgPSBfdGhpcyRwcm9wcy51bm1vdW50T25FeGl0LFxuICAgICAgICBfYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICBfZW50ZXIgPSBfdGhpcyRwcm9wcy5lbnRlcixcbiAgICAgICAgX2V4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICBfdGltZW91dCA9IF90aGlzJHByb3BzLnRpbWVvdXQsXG4gICAgICAgIF9hZGRFbmRMaXN0ZW5lciA9IF90aGlzJHByb3BzLmFkZEVuZExpc3RlbmVyLFxuICAgICAgICBfb25FbnRlciA9IF90aGlzJHByb3BzLm9uRW50ZXIsXG4gICAgICAgIF9vbkVudGVyaW5nID0gX3RoaXMkcHJvcHMub25FbnRlcmluZyxcbiAgICAgICAgX29uRW50ZXJlZCA9IF90aGlzJHByb3BzLm9uRW50ZXJlZCxcbiAgICAgICAgX29uRXhpdCA9IF90aGlzJHByb3BzLm9uRXhpdCxcbiAgICAgICAgX29uRXhpdGluZyA9IF90aGlzJHByb3BzLm9uRXhpdGluZyxcbiAgICAgICAgX29uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgIF9ub2RlUmVmID0gX3RoaXMkcHJvcHMubm9kZVJlZixcbiAgICAgICAgY2hpbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCIsIFwibW91bnRPbkVudGVyXCIsIFwidW5tb3VudE9uRXhpdFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcInRpbWVvdXRcIiwgXCJhZGRFbmRMaXN0ZW5lclwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FbnRlcmVkXCIsIFwib25FeGl0XCIsIFwib25FeGl0aW5nXCIsIFwib25FeGl0ZWRcIiwgXCJub2RlUmVmXCJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAvLyBhbGxvd3MgZm9yIG5lc3RlZCBUcmFuc2l0aW9uc1xuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpIDogUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBjaGlsZFByb3BzKSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uLmNvbnRleHRUeXBlID0gVHJhbnNpdGlvbkdyb3VwQ29udGV4dDtcblRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogQSBSZWFjdCByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnQgdGhhdCBuZWVkIHRvIHRyYW5zaXRpb246XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTEyNzEzMC80NjcxOTMyXG4gICAqXG4gICAqICAgLSBXaGVuIGBub2RlUmVmYCBwcm9wIGlzIHVzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgKiAgICAgIChlLmcuIGBvbkVudGVyYCkgYmVjYXVzZSB1c2VyIGFscmVhZHkgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5vZGUuXG4gICAqICAgLSBXaGVuIGNoYW5naW5nIGBrZXlgIHByb3Agb2YgYFRyYW5zaXRpb25gIGluIGEgYFRyYW5zaXRpb25Hcm91cGAgYSBuZXdcbiAgICogICAgIGBub2RlUmVmYCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGBUcmFuc2l0aW9uYCB3aXRoIGNoYW5nZWQgYGtleWAgcHJvcFxuICAgKiAgICAgKHNlZVxuICAgKiAgICAgW3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvMTM0MzVmODk3YjNhYjcxZjZlMTlkNzI0ZjE0NTU5NmY1OTEwNTgxYy90ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qcyNMMzYyLUw0MzcpKS5cbiAgICovXG4gIG5vZGVSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gUHJvcFR5cGVzLmFueSA6IGZ1bmN0aW9uIChwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwcm9wVmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBQcm9wVHlwZXMuaW5zdGFuY2VPZih2YWx1ZSAmJiAnb3duZXJEb2N1bWVudCcgaW4gdmFsdWUgPyB2YWx1ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkVsZW1lbnQgOiBFbGVtZW50KShwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KTtcbiAgICB9XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIGBmdW5jdGlvbmAgY2hpbGQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIFJlYWN0IGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXNcbiAgICogY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0dXMgKGAnZW50ZXJpbmcnYCwgYCdlbnRlcmVkJ2AsXG4gICAqIGAnZXhpdGluZydgLCBgJ2V4aXRlZCdgKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXBwbHkgY29udGV4dFxuICAgKiBzcGVjaWZpYyBwcm9wcyB0byBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIDxUcmFuc2l0aW9uIGluPXt0aGlzLnN0YXRlLmlufSB0aW1lb3V0PXsxNTB9PlxuICAgKiAgIHtzdGF0ZSA9PiAoXG4gICAqICAgICA8TXlDb21wb25lbnQgY2xhc3NOYW1lPXtgZmFkZSBmYWRlLSR7c3RhdGV9YH0gLz5cbiAgICogICApfVxuICAgKiA8L1RyYW5zaXRpb24+XG4gICAqIGBgYFxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb21wb25lbnQ7IHRyaWdnZXJzIHRoZSBlbnRlciBvciBleGl0IHN0YXRlc1xuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgaXMgbW91bnRlZCBpbW1lZGlhdGVseSBhbG9uZyB3aXRoXG4gICAqIHRoZSBwYXJlbnQgYFRyYW5zaXRpb25gIGNvbXBvbmVudC4gSWYgeW91IHdhbnQgdG8gXCJsYXp5IG1vdW50XCIgdGhlIGNvbXBvbmVudCBvbiB0aGVcbiAgICogZmlyc3QgYGluPXt0cnVlfWAgeW91IGNhbiBzZXQgYG1vdW50T25FbnRlcmAuIEFmdGVyIHRoZSBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIHRoZSBjb21wb25lbnQgd2lsbCBzdGF5XG4gICAqIG1vdW50ZWQsIGV2ZW4gb24gXCJleGl0ZWRcIiwgdW5sZXNzIHlvdSBhbHNvIHNwZWNpZnkgYHVubW91bnRPbkV4aXRgLlxuICAgKi9cbiAgbW91bnRPbkVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IHN0YXlzIG1vdW50ZWQgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgYCdleGl0ZWQnYCBzdGF0ZS5cbiAgICogU2V0IGB1bm1vdW50T25FeGl0YCBpZiB5b3UnZCBwcmVmZXIgdG8gdW5tb3VudCB0aGUgY29tcG9uZW50IGFmdGVyIGl0IGZpbmlzaGVzIGV4aXRpbmcuXG4gICAqL1xuICB1bm1vdW50T25FeGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGRvZXMgbm90IHBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlblxuICAgKiBpdCBmaXJzdCBtb3VudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpbmAuIElmIHlvdSB3YW50IHRoaXNcbiAgICogYmVoYXZpb3IsIHNldCBib3RoIGBhcHBlYXJgIGFuZCBgaW5gIHRvIGB0cnVlYC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogdGhlcmUgYXJlIG5vIHNwZWNpYWwgYXBwZWFyIHN0YXRlcyBsaWtlIGBhcHBlYXJpbmdgL2BhcHBlYXJlZGAsIHRoaXMgcHJvcFxuICAgKiA+IG9ubHkgYWRkcyBhbiBhZGRpdGlvbmFsIGVudGVyIHRyYW5zaXRpb24uIEhvd2V2ZXIsIGluIHRoZVxuICAgKiA+IGA8Q1NTVHJhbnNpdGlvbj5gIGNvbXBvbmVudCB0aGF0IGZpcnN0IGVudGVyIHRyYW5zaXRpb24gZG9lcyByZXN1bHQgaW5cbiAgICogPiBhZGRpdGlvbmFsIGAuYXBwZWFyLSpgIGNsYXNzZXMsIHRoYXQgd2F5IHlvdSBjYW4gY2hvb3NlIHRvIHN0eWxlIGl0XG4gICAqID4gZGlmZmVyZW50bHkuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4ge1xuICAgKiAgIC8vIHVzZSB0aGUgY3NzIHRyYW5zaXRpb25lbmQgZXZlbnQgdG8gbWFyayB0aGUgZmluaXNoIG9mIGEgdHJhbnNpdGlvblxuICAgKiAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGRvbmUsIGZhbHNlKTtcbiAgICogfX1cbiAgICogYGBgXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyZWRcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0ZWRcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59IDoge307IC8vIE5hbWUgdGhlIGZ1bmN0aW9uIHNvIGl0IGlzIGNsZWFyZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cblRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBpbjogZmFsc2UsXG4gIG1vdW50T25FbnRlcjogZmFsc2UsXG4gIHVubW91bnRPbkV4aXQ6IGZhbHNlLFxuICBhcHBlYXI6IGZhbHNlLFxuICBlbnRlcjogdHJ1ZSxcbiAgZXhpdDogdHJ1ZSxcbiAgb25FbnRlcjogbm9vcCxcbiAgb25FbnRlcmluZzogbm9vcCxcbiAgb25FbnRlcmVkOiBub29wLFxuICBvbkV4aXQ6IG5vb3AsXG4gIG9uRXhpdGluZzogbm9vcCxcbiAgb25FeGl0ZWQ6IG5vb3Bcbn07XG5UcmFuc2l0aW9uLlVOTU9VTlRFRCA9IFVOTU9VTlRFRDtcblRyYW5zaXRpb24uRVhJVEVEID0gRVhJVEVEO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IEVOVEVSSU5HO1xuVHJhbnNpdGlvbi5FTlRFUkVEID0gRU5URVJFRDtcblRyYW5zaXRpb24uRVhJVElORyA9IEVYSVRJTkc7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5cbnZhciBfYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYWRkT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcblxudmFyIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIHJlbW92ZU9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIGV4Y2VsbGVudFxuICogW25nLWFuaW1hdGVdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZ0FuaW1hdGUpIGxpYnJhcnksIHlvdSBzaG91bGRcbiAqIHVzZSBpdCBpZiB5b3UncmUgdXNpbmcgQ1NTIHRyYW5zaXRpb25zIG9yIGFuaW1hdGlvbnMuIEl0J3MgYnVpbHQgdXBvbiB0aGVcbiAqIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbilcbiAqIGNvbXBvbmVudCwgc28gaXQgaW5oZXJpdHMgYWxsIG9mIGl0cyBwcm9wcy5cbiAqXG4gKiBgQ1NTVHJhbnNpdGlvbmAgYXBwbGllcyBhIHBhaXIgb2YgY2xhc3MgbmFtZXMgZHVyaW5nIHRoZSBgYXBwZWFyYCwgYGVudGVyYCxcbiAqIGFuZCBgZXhpdGAgc3RhdGVzIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgZmlyc3QgY2xhc3MgaXMgYXBwbGllZCBhbmQgdGhlbiBhXG4gKiBzZWNvbmQgYCotYWN0aXZlYCBjbGFzcyBpbiBvcmRlciB0byBhY3RpdmF0ZSB0aGUgQ1NTIHRyYW5zaXRpb24uIEFmdGVyIHRoZVxuICogdHJhbnNpdGlvbiwgbWF0Y2hpbmcgYCotZG9uZWAgY2xhc3MgbmFtZXMgYXJlIGFwcGxpZWQgdG8gcGVyc2lzdCB0aGVcbiAqIHRyYW5zaXRpb24gc3RhdGUuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxDU1NUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezIwMH0gY2xhc3NOYW1lcz1cIm15LW5vZGVcIj5cbiAqICAgICAgICAgPGRpdj5cbiAqICAgICAgICAgICB7XCJJJ2xsIHJlY2VpdmUgbXktbm9kZS0qIGNsYXNzZXNcIn1cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBgaW5gIHByb3AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNoaWxkIGNvbXBvbmVudCB3aWxsIGZpcnN0IHJlY2VpdmVcbiAqIHRoZSBjbGFzcyBgZXhhbXBsZS1lbnRlcmAsIHRoZW4gdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgd2lsbCBiZSBhZGRlZCBpblxuICogdGhlIG5leHQgdGljay4gYENTU1RyYW5zaXRpb25gIFtmb3JjZXMgYVxuICogcmVmbG93XShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvNTAwNzMwM2U3MjlhNzRiZTY2YTIxYzNlMjIwNWU0OTE2ODIxNTI0Yi9zcmMvQ1NTVHJhbnNpdGlvbi5qcyNMMjA4LUwyMTUpXG4gKiBiZXR3ZWVuIGJlZm9yZSBhZGRpbmcgdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHRyaWNrXG4gKiBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byB0cmFuc2l0aW9uIGJldHdlZW4gYGV4YW1wbGUtZW50ZXJgIGFuZFxuICogYGV4YW1wbGUtZW50ZXItYWN0aXZlYCBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWRkZWQgaW1tZWRpYXRlbHkgb25lIGFmdGVyXG4gKiBhbm90aGVyLiBNb3N0IG5vdGFibHksIHRoaXMgaXMgd2hhdCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXMgdG8gYW5pbWF0ZVxuICogX2FwcGVhcmFuY2VfLlxuICpcbiAqIGBgYGNzc1xuICogLm15LW5vZGUtZW50ZXIge1xuICogICBvcGFjaXR5OiAwO1xuICogfVxuICogLm15LW5vZGUtZW50ZXItYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMTtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQge1xuICogICBvcGFjaXR5OiAxO1xuICogfVxuICogLm15LW5vZGUtZXhpdC1hY3RpdmUge1xuICogICBvcGFjaXR5OiAwO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogYGBgXG4gKlxuICogYCotYWN0aXZlYCBjbGFzc2VzIHJlcHJlc2VudCB3aGljaCBzdHlsZXMgeW91IHdhbnQgdG8gYW5pbWF0ZSAqKnRvKiosIHNvIGl0J3NcbiAqIGltcG9ydGFudCB0byBhZGQgYHRyYW5zaXRpb25gIGRlY2xhcmF0aW9uIG9ubHkgdG8gdGhlbSwgb3RoZXJ3aXNlIHRyYW5zaXRpb25zXG4gKiBtaWdodCBub3QgYmVoYXZlIGFzIGludGVuZGVkISBUaGlzIG1pZ2h0IG5vdCBiZSBvYnZpb3VzIHdoZW4gdGhlIHRyYW5zaXRpb25zXG4gKiBhcmUgc3ltbWV0cmljYWwsIGkuZS4gd2hlbiBgKi1lbnRlci1hY3RpdmVgIGlzIHRoZSBzYW1lIGFzIGAqLWV4aXRgLCBsaWtlIGluXG4gKiB0aGUgZXhhbXBsZSBhYm92ZSAobWludXMgYHRyYW5zaXRpb25gKSwgYnV0IGl0IGJlY29tZXMgYXBwYXJlbnQgaW4gbW9yZVxuICogY29tcGxleCB0cmFuc2l0aW9ucy5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91J3JlIHVzaW5nIHRoZVxuICogW2BhcHBlYXJgXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbiNUcmFuc2l0aW9uLXByb3AtYXBwZWFyKVxuICogcHJvcCwgbWFrZSBzdXJlIHRvIGRlZmluZSBzdHlsZXMgZm9yIGAuYXBwZWFyLSpgIGNsYXNzZXMgYXMgd2VsbC5cbiAqL1xuXG5cbnZhciBDU1NUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKENTU1RyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENTU1RyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuYXBwbGllZENsYXNzZXMgPSB7XG4gICAgICBhcHBlYXI6IHt9LFxuICAgICAgZW50ZXI6IHt9LFxuICAgICAgZXhpdDoge31cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlciA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudFsxXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDIgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1sxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NFswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnYXBwZWFyJyk7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2VudGVyJyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDUgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDVbMF07XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnJlc29sdmVBcmd1bWVudHMgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm5vZGVSZWYgPyBbX3RoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50LCBtYXliZU5vZGVdIC8vIGhlcmUgYG1heWJlTm9kZWAgaXMgYWN0dWFsbHkgYGFwcGVhcmluZ2BcbiAgICAgIDogW21heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmddO1xuICAgIH07XG5cbiAgICBfdGhpcy5nZXRDbGFzc05hbWVzID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gX3RoaXMucHJvcHMuY2xhc3NOYW1lcztcbiAgICAgIHZhciBpc1N0cmluZ0NsYXNzTmFtZXMgPSB0eXBlb2YgY2xhc3NOYW1lcyA9PT0gJ3N0cmluZyc7XG4gICAgICB2YXIgcHJlZml4ID0gaXNTdHJpbmdDbGFzc05hbWVzICYmIGNsYXNzTmFtZXMgPyBjbGFzc05hbWVzICsgXCItXCIgOiAnJztcbiAgICAgIHZhciBiYXNlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gXCJcIiArIHByZWZpeCArIHR5cGUgOiBjbGFzc05hbWVzW3R5cGVdO1xuICAgICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1hY3RpdmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiQWN0aXZlXCJdO1xuICAgICAgdmFyIGRvbmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItZG9uZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJEb25lXCJdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogYmFzZUNsYXNzTmFtZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lOiBhY3RpdmVDbGFzc05hbWUsXG4gICAgICAgIGRvbmVDbGFzc05hbWU6IGRvbmVDbGFzc05hbWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDU1NUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCB0eXBlLCBwaGFzZSkge1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmdldENsYXNzTmFtZXModHlwZSlbcGhhc2UgKyBcIkNsYXNzTmFtZVwiXTtcblxuICAgIHZhciBfdGhpcyRnZXRDbGFzc05hbWVzID0gdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkZ2V0Q2xhc3NOYW1lcy5kb25lQ2xhc3NOYW1lO1xuXG4gICAgaWYgKHR5cGUgPT09ICdhcHBlYXInICYmIHBoYXNlID09PSAnZG9uZScgJiYgZG9uZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgZG9uZUNsYXNzTmFtZTtcbiAgICB9IC8vIFRoaXMgaXMgdG8gZm9yY2UgYSByZXBhaW50LFxuICAgIC8vIHdoaWNoIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byB0cmFuc2l0aW9uIHN0eWxlcyB3aGVuIGFkZGluZyBhIGNsYXNzIG5hbWUuXG5cblxuICAgIGlmIChwaGFzZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdW3BoYXNlXSA9IGNsYXNzTmFtZTtcblxuICAgICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKSB7XG4gICAgdmFyIF90aGlzJGFwcGxpZWRDbGFzc2VzJCA9IHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0sXG4gICAgICAgIGJhc2VDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYmFzZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmFjdGl2ZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5kb25lO1xuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0gPSB7fTtcblxuICAgIGlmIChiYXNlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBiYXNlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChkb25lQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBkb25lQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lcyxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lc1wiXSk7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBvbkVudGVyOiB0aGlzLm9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMub25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5vbkVudGVyaW5nLFxuICAgICAgb25FeGl0OiB0aGlzLm9uRXhpdCxcbiAgICAgIG9uRXhpdGluZzogdGhpcy5vbkV4aXRpbmcsXG4gICAgICBvbkV4aXRlZDogdGhpcy5vbkV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gQ1NTVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuQ1NTVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZXM6ICcnXG59O1xuQ1NTVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBfZXh0ZW5kcyh7fSwgVHJhbnNpdGlvbi5wcm9wVHlwZXMsIHtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRpb24gY2xhc3NOYW1lcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQgYXMgaXQgYXBwZWFycywgZW50ZXJzLFxuICAgKiBleGl0cyBvciBoYXMgZmluaXNoZWQgdGhlIHRyYW5zaXRpb24uIEEgc2luZ2xlIG5hbWUgY2FuIGJlIHByb3ZpZGVkLCB3aGljaFxuICAgKiB3aWxsIGJlIHN1ZmZpeGVkIGZvciBlYWNoIHN0YWdlLCBlLmcuIGBjbGFzc05hbWVzPVwiZmFkZVwiYCBhcHBsaWVzOlxuICAgKlxuICAgKiAtIGBmYWRlLWFwcGVhcmAsIGBmYWRlLWFwcGVhci1hY3RpdmVgLCBgZmFkZS1hcHBlYXItZG9uZWBcbiAgICogLSBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsIGBmYWRlLWVudGVyLWRvbmVgXG4gICAqIC0gYGZhZGUtZXhpdGAsIGBmYWRlLWV4aXQtYWN0aXZlYCwgYGZhZGUtZXhpdC1kb25lYFxuICAgKlxuICAgKiBBIGZldyBkZXRhaWxzIHRvIG5vdGUgYWJvdXQgaG93IHRoZXNlIGNsYXNzZXMgYXJlIGFwcGxpZWQ6XG4gICAqXG4gICAqIDEuIFRoZXkgYXJlIF9qb2luZWRfIHdpdGggdGhlIG9uZXMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZSBjaGlsZFxuICAgKiAgICBjb21wb25lbnQsIHNvIGlmIHlvdSB3YW50IHRvIGFkZCBzb21lIGJhc2Ugc3R5bGVzLCB5b3UgY2FuIHVzZVxuICAgKiAgICBgY2xhc3NOYW1lYCB3aXRob3V0IHdvcnJ5aW5nIHRoYXQgaXQgd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiAyLiBJZiB0aGUgdHJhbnNpdGlvbiBjb21wb25lbnQgbW91bnRzIHdpdGggYGluPXtmYWxzZX1gLCBubyBjbGFzc2VzIGFyZVxuICAgKiAgICBhcHBsaWVkIHlldC4gWW91IG1pZ2h0IGJlIGV4cGVjdGluZyBgKi1leGl0LWRvbmVgLCBidXQgaWYgeW91IHRoaW5rXG4gICAqICAgIGFib3V0IGl0LCBhIGNvbXBvbmVudCBjYW5ub3QgZmluaXNoIGV4aXRpbmcgaWYgaXQgaGFzbid0IGVudGVyZWQgeWV0LlxuICAgKlxuICAgKiAyLiBgZmFkZS1hcHBlYXItZG9uZWAgYW5kIGBmYWRlLWVudGVyLWRvbmVgIHdpbGwgX2JvdGhfIGJlIGFwcGxpZWQuIFRoaXNcbiAgICogICAgYWxsb3dzIHlvdSB0byBkZWZpbmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciB3aGVuIGFwcGVhcmluZyBpcyBkb25lIGFuZFxuICAgKiAgICB3aGVuIHJlZ3VsYXIgZW50ZXJpbmcgaXMgZG9uZSwgdXNpbmcgc2VsZWN0b3JzIGxpa2VcbiAgICogICAgYC5mYWRlLWVudGVyLWRvbmU6bm90KC5mYWRlLWFwcGVhci1kb25lKWAuIEZvciBleGFtcGxlLCB5b3UgY291bGQgYXBwbHlcbiAgICogICAgYW4gZXBpYyBlbnRyYW5jZSBhbmltYXRpb24gd2hlbiBlbGVtZW50IGZpcnN0IGFwcGVhcnMgaW4gdGhlIERPTSB1c2luZ1xuICAgKiAgICBbQW5pbWF0ZS5jc3NdKGh0dHBzOi8vZGFuZWRlbi5naXRodWIuaW8vYW5pbWF0ZS5jc3MvKS4gT3RoZXJ3aXNlIHlvdSBjYW5cbiAgICogICAgc2ltcGx5IHVzZSBgZmFkZS1lbnRlci1kb25lYCBmb3IgZGVmaW5pbmcgYm90aCBjYXNlcy5cbiAgICpcbiAgICogRWFjaCBpbmRpdmlkdWFsIGNsYXNzTmFtZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluZGVwZW5kZW50bHkgbGlrZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17e1xuICAgKiAgYXBwZWFyOiAnbXktYXBwZWFyJyxcbiAgICogIGFwcGVhckFjdGl2ZTogJ215LWFjdGl2ZS1hcHBlYXInLFxuICAgKiAgYXBwZWFyRG9uZTogJ215LWRvbmUtYXBwZWFyJyxcbiAgICogIGVudGVyOiAnbXktZW50ZXInLFxuICAgKiAgZW50ZXJBY3RpdmU6ICdteS1hY3RpdmUtZW50ZXInLFxuICAgKiAgZW50ZXJEb25lOiAnbXktZG9uZS1lbnRlcicsXG4gICAqICBleGl0OiAnbXktZXhpdCcsXG4gICAqICBleGl0QWN0aXZlOiAnbXktYWN0aXZlLWV4aXQnLFxuICAgKiAgZXhpdERvbmU6ICdteS1kb25lLWV4aXQnLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gc2V0IHRoZXNlIGNsYXNzZXMgdXNpbmcgQ1NTIE1vZHVsZXM6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcbiAgICogYGBgXG4gICAqXG4gICAqIHlvdSBtaWdodCB3YW50IHRvIHVzZSBjYW1lbENhc2UgaW4geW91ciBDU1MgZmlsZSwgdGhhdCB3YXkgY291bGQgc2ltcGx5XG4gICAqIHNwcmVhZCB0aGVtIGluc3RlYWQgb2YgbGlzdGluZyB0aGVtIG9uZSBieSBvbmU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3sgLi4uc3R5bGVzIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwge1xuICAgKiAgYXBwZWFyPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyRG9uZT86IHN0cmluZyxcbiAgICogIGVudGVyPzogc3RyaW5nLFxuICAgKiAgZW50ZXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBlbnRlckRvbmU/OiBzdHJpbmcsXG4gICAqICBleGl0Pzogc3RyaW5nLFxuICAgKiAgZXhpdEFjdGl2ZT86IHN0cmluZyxcbiAgICogIGV4aXREb25lPzogc3RyaW5nLFxuICAgKiB9fVxuICAgKi9cbiAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1NoYXBlLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yICdhcHBlYXInIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXItYWN0aXZlJyBvclxuICAgKiAnYXBwZWFyLWFjdGl2ZScgY2xhc3MgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3JcbiAgICogJ2FwcGVhcicgY2xhc3NlcyBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzc2VzXG4gICAqIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBleGl0LWRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSkgOiB7fTtcbmV4cG9ydCBkZWZhdWx0IENTU1RyYW5zaXRpb247IiwiaW1wb3J0IGhhc0NsYXNzIGZyb20gJy4vaGFzQ2xhc3MnO1xuLyoqXG4gKiBBZGRzIGEgQ1NTIGNsYXNzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoIWhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgXCIgXCIgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyBcIiBcIiArIGNsYXNzTmFtZSk7XG59IiwiLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBlbGVtZW50IGhhcyBhIENTUyBjbGFzcy5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICByZXR1cm4gKFwiIFwiICsgKGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgZWxlbWVudC5jbGFzc05hbWUpICsgXCIgXCIpLmluZGV4T2YoXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIikgIT09IC0xO1xufSIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cCc7XG4vKipcbiAqIFRoZSBgPFJlcGxhY2VUcmFuc2l0aW9uPmAgY29tcG9uZW50IGlzIGEgc3BlY2lhbGl6ZWQgYFRyYW5zaXRpb25gIGNvbXBvbmVudFxuICogdGhhdCBhbmltYXRlcyBiZXR3ZWVuIHR3byBjaGlsZHJlbi5cbiAqXG4gKiBgYGBqc3hcbiAqIDxSZXBsYWNlVHJhbnNpdGlvbiBpbj5cbiAqICAgPEZhZGU+PGRpdj5JIGFwcGVhciBmaXJzdDwvZGl2PjwvRmFkZT5cbiAqICAgPEZhZGU+PGRpdj5JIHJlcGxhY2UgdGhlIGFib3ZlPC9kaXY+PC9GYWRlPlxuICogPC9SZXBsYWNlVHJhbnNpdGlvbj5cbiAqIGBgYFxuICovXG5cbnZhciBSZXBsYWNlVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShSZXBsYWNlVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVwbGFjZVRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChfYXJncykpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXInLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyaW5nJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyZWQnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0aW5nJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuICAgICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGVkJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZXBsYWNlVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZUxpZmVjeWNsZSA9IGZ1bmN0aW9uIGhhbmRsZUxpZmVjeWNsZShoYW5kbGVyLCBpZHgsIG9yaWdpbmFsQXJncykge1xuICAgIHZhciBfY2hpbGQkcHJvcHM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pW2lkeF07XG4gICAgaWYgKGNoaWxkLnByb3BzW2hhbmRsZXJdKSAoX2NoaWxkJHByb3BzID0gY2hpbGQucHJvcHMpW2hhbmRsZXJdLmFwcGx5KF9jaGlsZCRwcm9wcywgb3JpZ2luYWxBcmdzKTtcblxuICAgIGlmICh0aGlzLnByb3BzW2hhbmRsZXJdKSB7XG4gICAgICB2YXIgbWF5YmVOb2RlID0gY2hpbGQucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgdGhpcy5wcm9wc1toYW5kbGVyXShtYXliZU5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGluUHJvcCA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCJdKTtcblxuICAgIHZhciBfUmVhY3QkQ2hpbGRyZW4kdG9BcnIgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKSxcbiAgICAgICAgZmlyc3QgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMF0sXG4gICAgICAgIHNlY29uZCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclsxXTtcblxuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyaW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyZWQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0aW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRlZDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwLCBwcm9wcywgaW5Qcm9wID8gUmVhY3QuY2xvbmVFbGVtZW50KGZpcnN0LCB7XG4gICAgICBrZXk6ICdmaXJzdCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUVudGVyLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFbnRlcmVkXG4gICAgfSkgOiBSZWFjdC5jbG9uZUVsZW1lbnQoc2Vjb25kLCB7XG4gICAgICBrZXk6ICdzZWNvbmQnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFeGl0LFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFeGl0aW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gUmVwbGFjZVRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJlcGxhY2VUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgaW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICBpZiAoUmVhY3QuQ2hpbGRyZW4uY291bnQocHJvcHNbcHJvcE5hbWVdKSAhPT0gMikgcmV0dXJuIG5ldyBFcnJvcihcIlxcXCJcIiArIHByb3BOYW1lICsgXCJcXFwiIG11c3QgYmUgZXhhY3RseSB0d28gdHJhbnNpdGlvbiBjb21wb25lbnRzLlwiKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgUmVwbGFjZVRyYW5zaXRpb247IiwiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5cbnZhciBfbGVhdmVSZW5kZXJzLCBfZW50ZXJSZW5kZXJzO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEVOVEVSRUQsIEVOVEVSSU5HLCBFWElUSU5HIH0gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5cbmZ1bmN0aW9uIGFyZUNoaWxkcmVuRGlmZmVyZW50KG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbikge1xuICBpZiAob2xkQ2hpbGRyZW4gPT09IG5ld0NoaWxkcmVuKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KG9sZENoaWxkcmVuKSAmJiBSZWFjdC5pc1ZhbGlkRWxlbWVudChuZXdDaGlsZHJlbikgJiYgb2xkQ2hpbGRyZW4ua2V5ICE9IG51bGwgJiYgb2xkQ2hpbGRyZW4ua2V5ID09PSBuZXdDaGlsZHJlbi5rZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogRW51bSBvZiBtb2RlcyBmb3IgU3dpdGNoVHJhbnNpdGlvbiBjb21wb25lbnRcbiAqIEBlbnVtIHsgc3RyaW5nIH1cbiAqL1xuXG5cbmV4cG9ydCB2YXIgbW9kZXMgPSB7XG4gIG91dDogJ291dC1pbicsXG4gIGluOiAnaW4tb3V0J1xufTtcblxudmFyIGNhbGxIb29rID0gZnVuY3Rpb24gY2FsbEhvb2soZWxlbWVudCwgbmFtZSwgY2IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2VsZW1lbnQkcHJvcHM7XG5cbiAgICBlbGVtZW50LnByb3BzW25hbWVdICYmIChfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMpW25hbWVdLmFwcGx5KF9lbGVtZW50JHByb3BzLCBhcmd1bWVudHMpO1xuICAgIGNiKCk7XG4gIH07XG59O1xuXG52YXIgbGVhdmVSZW5kZXJzID0gKF9sZWF2ZVJlbmRlcnMgPSB7fSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcsIG51bGwpO1xuICAgIH0pXG4gIH0pO1xufSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmMi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMi5jaGFuZ2VTdGF0ZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHJldHVybiBbY3VycmVudCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HKTtcbiAgICB9KVxuICB9KV07XG59LCBfbGVhdmVSZW5kZXJzKTtcbnZhciBlbnRlclJlbmRlcnMgPSAoX2VudGVyUmVuZGVycyA9IHt9LCBfZW50ZXJSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjMuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYzLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pO1xufSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmNC5jdXJyZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjQuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBbUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pLCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZVxuICB9KV07XG59LCBfZW50ZXJSZW5kZXJzKTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgW3Z1ZSB0cmFuc2l0aW9uIG1vZGVzXShodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS90cmFuc2l0aW9ucy5odG1sI1RyYW5zaXRpb24tTW9kZXMpLlxuICogWW91IGNhbiB1c2UgaXQgd2hlbiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSByZW5kZXIgYmV0d2VlbiBzdGF0ZSB0cmFuc2l0aW9ucy5cbiAqIEJhc2VkIG9uIHRoZSBzZWxlY3RlZCBtb2RlIGFuZCB0aGUgY2hpbGQncyBrZXkgd2hpY2ggaXMgdGhlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIG1ha2VzIGEgY29uc2lzdGVudCB0cmFuc2l0aW9uIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBJZiB0aGUgYG91dC1pbmAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCB3YWl0cyB1bnRpbCB0aGUgb2xkIGNoaWxkIGxlYXZlcyBhbmQgdGhlbiBpbnNlcnRzIGEgbmV3IGNoaWxkLlxuICogSWYgdGhlIGBpbi1vdXRgIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgaW5zZXJ0cyBhIG5ldyBjaGlsZCBmaXJzdCwgd2FpdHMgZm9yIHRoZSBuZXcgY2hpbGQgdG8gZW50ZXIgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgb2xkIGNoaWxkLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3Ugd2FudCB0aGUgYW5pbWF0aW9uIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseVxuICogKHRoYXQgaXMsIHRvIGhhdmUgdGhlIG9sZCBjaGlsZCByZW1vdmVkIGFuZCBhIG5ldyBjaGlsZCBpbnNlcnRlZCAqKmF0IHRoZSBzYW1lIHRpbWUqKiksXG4gKiB5b3Ugc2hvdWxkIHVzZVxuICogW2BUcmFuc2l0aW9uR3JvdXBgXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24tZ3JvdXApXG4gKiBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogIHJldHVybiAoXG4gKiAgICA8U3dpdGNoVHJhbnNpdGlvbj5cbiAqICAgICAgPENTU1RyYW5zaXRpb25cbiAqICAgICAgICBrZXk9e3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4gbm9kZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBkb25lLCBmYWxzZSl9XG4gKiAgICAgICAgY2xhc3NOYW1lcz0nZmFkZSdcbiAqICAgICAgPlxuICogICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0U3RhdGUoc3RhdGUgPT4gIXN0YXRlKX0+XG4gKiAgICAgICAgICB7c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgPC9idXR0b24+XG4gKiAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgIDwvU3dpdGNoVHJhbnNpdGlvbj5cbiAqICApO1xuICogfVxuICogYGBgXG4gKlxuICogYGBgY3NzXG4gKiAuZmFkZS1lbnRlcntcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1leGl0e1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmUsXG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG52YXIgU3dpdGNoVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTd2l0Y2hUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTd2l0Y2hUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBFTlRFUkVELFxuICAgICAgY3VycmVudDogbnVsbFxuICAgIH07XG4gICAgX3RoaXMuYXBwZWFyZWQgPSBmYWxzZTtcblxuICAgIF90aGlzLmNoYW5nZVN0YXRlID0gZnVuY3Rpb24gKHN0YXR1cywgY3VycmVudCkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjdXJyZW50ID0gX3RoaXMuc3RhdGUuY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgY3VycmVudDogY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2l0Y2hUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmFwcGVhcmVkID0gdHJ1ZTtcbiAgfTtcblxuICBTd2l0Y2hUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICBpZiAocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudDogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSBFTlRFUklORyAmJiBwcm9wcy5tb2RlID09PSBtb2Rlcy5pbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuY3VycmVudCAmJiBhcmVDaGlsZHJlbkRpZmZlcmVudChzdGF0ZS5jdXJyZW50LCBwcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVElOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudDogUmVhY3QuY2xvbmVFbGVtZW50KHByb3BzLmNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBtb2RlID0gX3RoaXMkcHJvcHMubW9kZSxcbiAgICAgICAgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzdGF0dXMgPSBfdGhpcyRzdGF0ZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcyRzdGF0ZS5jdXJyZW50O1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgY3VycmVudDogY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlOiB0aGlzLmNoYW5nZVN0YXRlLFxuICAgICAgc3RhdHVzOiBzdGF0dXNcbiAgICB9O1xuICAgIHZhciBjb21wb25lbnQ7XG5cbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBFTlRFUklORzpcbiAgICAgICAgY29tcG9uZW50ID0gZW50ZXJSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFWElUSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBsZWF2ZVJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVOVEVSRUQ6XG4gICAgICAgIGNvbXBvbmVudCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6ICF0aGlzLmFwcGVhcmVkXG4gICAgICB9XG4gICAgfSwgY29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuU3dpdGNoVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBUcmFuc2l0aW9uIG1vZGVzLlxuICAgKiBgb3V0LWluYDogQ3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dCBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgbmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4uXG4gICAqIGBpbi1vdXRgOiBOZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbiBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgY3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dC5cbiAgICpcbiAgICogQHR5cGUgeydvdXQtaW4nfCdpbi1vdXQnfVxuICAgKi9cbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFttb2Rlcy5pbiwgbW9kZXMub3V0XSksXG5cbiAgLyoqXG4gICAqIEFueSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSlcbn0gOiB7fTtcblN3aXRjaFRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBtb2RlOiBtb2Rlcy5vdXRcbn07XG5leHBvcnQgZGVmYXVsdCBTd2l0Y2hUcmFuc2l0aW9uOyIsImltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1JhbmdlVmlzaWJsZShfcmVmKSB7XG4gIHZhciBsYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgcmV0dXJuICEoc3RhcnRJbmRleCA+IGxhc3RSZW5kZXJlZFN0b3BJbmRleCB8fCBzdG9wSW5kZXggPCBsYXN0UmVuZGVyZWRTdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvclVubG9hZGVkUmFuZ2VzKF9yZWYpIHtcbiAgdmFyIGlzSXRlbUxvYWRlZCA9IF9yZWYuaXNJdGVtTG9hZGVkLFxuICAgICAgaXRlbUNvdW50ID0gX3JlZi5pdGVtQ291bnQsXG4gICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3JlZi5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHZhciB1bmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5nZVN0YXJ0SW5kZXggPSBudWxsO1xuICB2YXIgcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuXG4gIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgdmFyIGxvYWRlZCA9IGlzSXRlbUxvYWRlZChfaW5kZXgpO1xuXG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4O1xuICAgICAgaWYgKHJhbmdlU3RhcnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICByYW5nZVN0YXJ0SW5kZXggPSBfaW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcblxuICAgICAgcmFuZ2VTdGFydEluZGV4ID0gcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIDpyYW5nZVN0b3BJbmRleCBpcyBub3QgbnVsbCBpdCBtZWFucyB3ZSBoYXZlbid0IHJhbiBvdXQgb2YgdW5sb2FkZWQgcm93cy5cbiAgLy8gU2NhbiBmb3J3YXJkIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgdmFyIHBvdGVudGlhbFN0b3BJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KHJhbmdlU3RvcEluZGV4LCByYW5nZVN0YXJ0SW5kZXggKyBtaW5pbXVtQmF0Y2hTaXplIC0gMSksIGl0ZW1Db3VudCAtIDEpO1xuXG4gICAgZm9yICh2YXIgX2luZGV4MiA9IHJhbmdlU3RvcEluZGV4ICsgMTsgX2luZGV4MiA8PSBwb3RlbnRpYWxTdG9wSW5kZXg7IF9pbmRleDIrKykge1xuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MikpIHtcbiAgICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXgyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcbiAgfVxuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgZmlyc3QgcmFuZ2UgZW5kZWQgcHJlbWF0dXJlbHkuXG4gIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2NhbiBiYWNrd2FyZHMgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAodW5sb2FkZWRSYW5nZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHVubG9hZGVkUmFuZ2VzWzFdIC0gdW5sb2FkZWRSYW5nZXNbMF0gKyAxIDwgbWluaW11bUJhdGNoU2l6ZSAmJiB1bmxvYWRlZFJhbmdlc1swXSA+IDApIHtcbiAgICAgIHZhciBfaW5kZXgzID0gdW5sb2FkZWRSYW5nZXNbMF0gLSAxO1xuXG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgzKSkge1xuICAgICAgICB1bmxvYWRlZFJhbmdlc1swXSA9IF9pbmRleDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5sb2FkZWRSYW5nZXM7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgSW5maW5pdGVMb2FkZXIgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoSW5maW5pdGVMb2FkZXIsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbmZpbml0ZUxvYWRlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBJbmZpbml0ZUxvYWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBJbmZpbml0ZUxvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEluZmluaXRlTG9hZGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IC0xLCBfdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdLCBfdGhpcy5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmlzaWJsZVN0YXJ0SW5kZXggPSBfcmVmMi52aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4ID0gX3JlZjIudmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIodmlzaWJsZVN0YXJ0SW5kZXgpIHx8ICFpc0ludGVnZXIodmlzaWJsZVN0b3BJbmRleCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgb25JdGVtc1JlbmRlcmVkIHNpZ25hdHVyZTsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmxvYWRNb3JlUm93cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW5maW5pdGVMb2FkZXIgXCJsb2FkTW9yZVJvd3NcIiBwcm9wIGhhcyBiZWVuIHJlbmFtZWQgdG8gXCJsb2FkTW9yZUl0ZW1zXCIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSB2aXNpYmxlU3RhcnRJbmRleDtcbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSB2aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBfdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgfSwgX3RoaXMuX3NldFJlZiA9IGZ1bmN0aW9uIChsaXN0UmVmKSB7XG4gICAgICBfdGhpcy5fbGlzdFJlZiA9IGxpc3RSZWY7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEluZmluaXRlTG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0bG9hZE1vcmVJdGVtc0NhY2hlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUoKSB7XG4gICAgICB2YXIgYXV0b1JlbG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICAgICAgaWYgKGF1dG9SZWxvYWQpIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxpc3QgcmVmOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG5cblxuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgb25JdGVtc1JlbmRlcmVkOiB0aGlzLl9vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgIHJlZjogdGhpcy5fc2V0UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlUm93c0xvYWRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVSb3dzTG9hZGVkKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJdGVtTG9hZGVkID0gX3Byb3BzLmlzSXRlbUxvYWRlZCxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICAgIF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9IF9wcm9wcy5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcHJvcHMkbWluaW11bUJhdGNoU2kgPT09IHVuZGVmaW5lZCA/IDEwIDogX3Byb3BzJG1pbmltdW1CYXRjaFNpLFxuICAgICAgICAgIF9wcm9wcyR0aHJlc2hvbGQgPSBfcHJvcHMudGhyZXNob2xkLFxuICAgICAgICAgIHRocmVzaG9sZCA9IF9wcm9wcyR0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCA/IDE1IDogX3Byb3BzJHRocmVzaG9sZDtcblxuXG4gICAgICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoe1xuICAgICAgICBpc0l0ZW1Mb2FkZWQ6IGlzSXRlbUxvYWRlZCxcbiAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IG1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSB0aHJlc2hvbGQpLFxuICAgICAgICBzdG9wSW5kZXg6IE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIHRocmVzaG9sZClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIGxvYWQtcm93cyB1bmxlc3MgcmFuZ2UgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpcyBtYXliZSBuaWNlIHRvIGRvLlxuICAgICAgaWYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMubGVuZ3RoICE9PSB1bmxvYWRlZFJhbmdlcy5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uIChzdGFydE9yU3RvcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzW2luZGV4XSAhPT0gc3RhcnRPclN0b3A7XG4gICAgICB9KSkge1xuICAgICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gdW5sb2FkZWRSYW5nZXM7XG4gICAgICAgIHRoaXMuX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2xvYWRVbmxvYWRlZFJhbmdlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBsb2FkTW9yZVJvd3Mgd2FzIHJlbmFtZWQgdG8gbG9hZE1vcmVJdGVtcyBpbiB2MS4wLjM7IHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4gICAgICB2YXIgbG9hZE1vcmVJdGVtcyA9IHRoaXMucHJvcHMubG9hZE1vcmVJdGVtcyB8fCB0aGlzLnByb3BzLmxvYWRNb3JlUm93cztcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2ldO1xuICAgICAgICB2YXIgc3RvcEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaSArIDFdO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGxvYWRNb3JlSXRlbXMoc3RhcnRJbmRleCwgc3RvcEluZGV4KTtcbiAgICAgICAgaWYgKHByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSB2aXNpYmxlIHJvd3MgaWYgYW55IG9mIHRoZW0gaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgd2lsbCByZW1haW4gaW4gdGhlaXIgdW5sb2FkZWQgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgaWYgKGlzUmFuZ2VWaXNpYmxlKHtcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RhcnRJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICBzdG9wSW5kZXg6IHN0b3BJbmRleFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGFuIHVubW91bnQgd2hpbGUgcHJvbWlzZXMgYXJlIHN0aWxsIGluIGZsaWdodC5cbiAgICAgICAgICAgICAgaWYgKF90aGlzMi5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVzaXplIGNhY2hlZCByb3cgc2l6ZXMgZm9yIFZhcmlhYmxlU2l6ZUxpc3QsXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlLXJlbmRlciB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleChzdGFydEluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIHJlc2V0IHRlbXBvcmFyaWx5IGNhY2hlZCBpdGVtIHN0eWxlcyB0byBmb3JjZSBQdXJlQ29tcG9uZW50IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBncm9zcywgYnV0IEknbSBva2F5IHdpdGggaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAvLyBEb24ndCBqdWRnZSBtZS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubG9hZGVkUmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSW5maW5pdGVMb2FkZXI7XG59KFB1cmVDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZUxvYWRlcjtcbiIsInZhciBzYWZlSXNOYU4gPSBOdW1iZXIuaXNOYU4gfHxcbiAgICBmdW5jdGlvbiBwb255ZmlsbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWU7XG4gICAgfTtcbmZ1bmN0aW9uIGlzRXF1YWwoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmIChmaXJzdCA9PT0gc2Vjb25kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2FmZUlzTmFOKGZpcnN0KSAmJiBzYWZlSXNOYU4oc2Vjb25kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gICAgaWYgKG5ld0lucHV0cy5sZW5ndGggIT09IGxhc3RJbnB1dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG5ld0lucHV0c1tpXSwgbGFzdElucHV0c1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVtb2l6ZU9uZShyZXN1bHRGbiwgaXNFcXVhbCkge1xuICAgIGlmIChpc0VxdWFsID09PSB2b2lkIDApIHsgaXNFcXVhbCA9IGFyZUlucHV0c0VxdWFsOyB9XG4gICAgdmFyIGxhc3RUaGlzO1xuICAgIHZhciBsYXN0QXJncyA9IFtdO1xuICAgIHZhciBsYXN0UmVzdWx0O1xuICAgIHZhciBjYWxsZWRPbmNlID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxlZE9uY2UgJiYgbGFzdFRoaXMgPT09IHRoaXMgJiYgaXNFcXVhbChuZXdBcmdzLCBsYXN0QXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxhc3RSZXN1bHQgPSByZXN1bHRGbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgICAgICAgY2FsbGVkT25jZSA9IHRydWU7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdEFyZ3MgPSBuZXdBcmdzO1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplT25lO1xuIiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkJztcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSc7XG5cbi8vIEFuaW1hdGlvbiBmcmFtZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzZXRUaW1lb3V0LlxuLy8gSW5zcGlyZWQgYnkgSm9lIExhbWJlcnQsIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2pvZWxhbWJlcnQvMTAwMjExNiNmaWxlLXJlcXVlc3R0aW1lb3V0LWpzXG52YXIgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG52YXIgbm93ID0gaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbn0gOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBEYXRlLm5vdygpO1xufTtcbmZ1bmN0aW9uIGNhbmNlbFRpbWVvdXQodGltZW91dElEKSB7XG4gIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVvdXRJRC5pZCk7XG59XG5mdW5jdGlvbiByZXF1ZXN0VGltZW91dChjYWxsYmFjaywgZGVsYXkpIHtcbiAgdmFyIHN0YXJ0ID0gbm93KCk7XG5cbiAgZnVuY3Rpb24gdGljaygpIHtcbiAgICBpZiAobm93KCkgLSBzdGFydCA+PSBkZWxheSkge1xuICAgICAgY2FsbGJhY2suY2FsbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dElELmlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH1cbiAgfVxuXG4gIHZhciB0aW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICB9O1xuICByZXR1cm4gdGltZW91dElEO1xufVxuXG52YXIgc2l6ZSA9IC0xOyAvLyBUaGlzIHV0aWxpdHkgY29waWVkIGZyb20gXCJkb20taGVscGVyc1wiIHBhY2thZ2UuXG5cbmZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHNpemUgPT09IC0xIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gIH1cblxuICByZXR1cm4gc2l6ZTtcbn1cbnZhciBjYWNoZWRSVExSZXN1bHQgPSBudWxsOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cblxuZnVuY3Rpb24gZ2V0UlRMT2Zmc2V0VHlwZShyZWNhbGN1bGF0ZSkge1xuICBpZiAocmVjYWxjdWxhdGUgPT09IHZvaWQgMCkge1xuICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoY2FjaGVkUlRMUmVzdWx0ID09PSBudWxsIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIG91dGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuICAgIHZhciBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuICAgIG91dGVyRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcblxuICAgICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPT09IDApIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ25lZ2F0aXZlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1hc2NlbmRpbmcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuICAgIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xufVxuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG52YXIgZGVmYXVsdEl0ZW1LZXkgPSBmdW5jdGlvbiBkZWZhdWx0SXRlbUtleShfcmVmKSB7XG4gIHZhciBjb2x1bW5JbmRleCA9IF9yZWYuY29sdW1uSW5kZXgsXG4gICAgICBkYXRhID0gX3JlZi5kYXRhLFxuICAgICAgcm93SW5kZXggPSBfcmVmLnJvd0luZGV4O1xuICByZXR1cm4gcm93SW5kZXggKyBcIjpcIiArIGNvbHVtbkluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KF9yZWYyKSB7XG4gIHZhciBfY2xhc3M7XG5cbiAgdmFyIGdldENvbHVtbk9mZnNldCA9IF9yZWYyLmdldENvbHVtbk9mZnNldCxcbiAgICAgIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBnZXRDb2x1bW5XaWR0aCA9IF9yZWYyLmdldENvbHVtbldpZHRoLFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSBfcmVmMi5nZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBfcmVmMi5nZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50ID0gX3JlZjIuZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50LFxuICAgICAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50ID0gX3JlZjIuZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICAgICAgZ2V0Um93SGVpZ2h0ID0gX3JlZjIuZ2V0Um93SGVpZ2h0LFxuICAgICAgZ2V0Um93T2Zmc2V0ID0gX3JlZjIuZ2V0Um93T2Zmc2V0LFxuICAgICAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYyLmdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZjIuZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZjIuaW5pdEluc3RhbmNlUHJvcHMsXG4gICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlID0gX3JlZjIuc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgICAgIHZhbGlkYXRlUHJvcHMgPSBfcmVmMi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKEdyaWQsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBHcmlkKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICBzY3JvbGxMZWZ0OiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgOiAwLFxuICAgICAgICBzY3JvbGxUb3A6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnXG4gICAgICB9O1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCwgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsIG92ZXJzY2FuUm93U3RhcnRJbmRleCwgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsIHZpc2libGVDb2x1bW5TdGFydEluZGV4LCB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LCB2aXNpYmxlUm93U3RhcnRJbmRleCwgdmlzaWJsZVJvd1N0b3BJbmRleCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4OiB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiB2aXNpYmxlUm93U3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TY3JvbGwoe1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSB2b2lkIDA7XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbiAocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgY29sdW1uV2lkdGggPSBfdGhpcyRwcm9wcy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzLnJvd0hlaWdodDtcblxuICAgICAgICB2YXIgaXRlbVN0eWxlQ2FjaGUgPSBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBjb2x1bW5XaWR0aCwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24sIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgcm93SGVpZ2h0KTtcblxuICAgICAgICB2YXIga2V5ID0gcm93SW5kZXggKyBcIjpcIiArIGNvbHVtbkluZGV4O1xuICAgICAgICB2YXIgc3R5bGU7XG5cbiAgICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vZmZzZXQgPSBnZXRDb2x1bW5PZmZzZXQoX3RoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIGl0ZW1TdHlsZUNhY2hlW2tleV0gPSBzdHlsZSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBfb2Zmc2V0LFxuICAgICAgICAgICAgcmlnaHQ6IGlzUnRsID8gX29mZnNldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBnZXRSb3dIZWlnaHQoX3RoaXMucHJvcHMsIHJvd0luZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgICB3aWR0aDogZ2V0Q29sdW1uV2lkdGgoX3RoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoXywgX18sIF9fXykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxUb3AsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiYgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBfdGhpcy5wcm9wcy5kaXJlY3Rpb247IC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cblxuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKSk7XG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0OiBjYWxjdWxhdGVkU2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFRvcDogY2FsY3VsYXRlZFNjcm9sbFRvcCxcbiAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb3V0ZXJSZWZTZXR0ZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IF90aGlzLnByb3BzLm91dGVyUmVmO1xuICAgICAgICBfdGhpcy5fb3V0ZXJSZWYgPSByZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSBpZiAob3V0ZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsVGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nLCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBHcmlkLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIF9wcm90byA9IEdyaWQucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvID0gZnVuY3Rpb24gc2Nyb2xsVG8oX3JlZjMpIHtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gX3JlZjMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfcmVmMy5zY3JvbGxUb3A7XG5cbiAgICAgIGlmIChzY3JvbGxMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2Nyb2xsVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Nyb2xsVG9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxUb3AgPSBwcmV2U3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJ1xuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9wcm90by5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oX3JlZjQpIHtcbiAgICAgIHZhciBfcmVmNCRhbGlnbiA9IF9yZWY0LmFsaWduLFxuICAgICAgICAgIGFsaWduID0gX3JlZjQkYWxpZ24gPT09IHZvaWQgMCA/ICdhdXRvJyA6IF9yZWY0JGFsaWduLFxuICAgICAgICAgIGNvbHVtbkluZGV4ID0gX3JlZjQuY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93SW5kZXggPSBfcmVmNC5yb3dJbmRleDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHMyLmNvbHVtbkNvdW50LFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzMi5oZWlnaHQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczIucm93Q291bnQsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczIud2lkdGg7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlLnNjcm9sbFRvcDtcbiAgICAgIHZhciBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm93SW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dJbmRleCwgcm93Q291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsXG4gICAgICAvLyB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cblxuICAgICAgdmFyIGhvcml6b250YWxTY3JvbGxiYXJTaXplID0gZXN0aW1hdGVkVG90YWxXaWR0aCA+IHdpZHRoID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB2YXIgdmVydGljYWxTY3JvbGxiYXJTaXplID0gZXN0aW1hdGVkVG90YWxIZWlnaHQgPiBoZWlnaHQgPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OiBjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBhbGlnbiwgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcywgdmVydGljYWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDogcm93SW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCh0aGlzLnByb3BzLCByb3dJbmRleCwgYWxpZ24sIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcywgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUpIDogc2Nyb2xsVG9wXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsTGVmdCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsTGVmdCxcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsVG9wID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxUb3A7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5wcm9wcy5kaXJlY3Rpb247XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUyLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUyLnNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHZhciBjbGllbnRXaWR0aCA9IG91dGVyUmVmLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBvdXRlclJlZi5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM0LmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNC5jbGFzc05hbWUsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczQuY29sdW1uQ291bnQsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM0LmRpcmVjdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczQuaGVpZ2h0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHM0LmlubmVyUmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczQuaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBpbm5lclRhZ05hbWUgPSBfdGhpcyRwcm9wczQuaW5uZXJUYWdOYW1lLFxuICAgICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkcHJvcHM0Lml0ZW1EYXRhLFxuICAgICAgICAgIF90aGlzJHByb3BzNCRpdGVtS2V5ID0gX3RoaXMkcHJvcHM0Lml0ZW1LZXksXG4gICAgICAgICAgaXRlbUtleSA9IF90aGlzJHByb3BzNCRpdGVtS2V5ID09PSB2b2lkIDAgPyBkZWZhdWx0SXRlbUtleSA6IF90aGlzJHByb3BzNCRpdGVtS2V5LFxuICAgICAgICAgIG91dGVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczQub3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBvdXRlclRhZ05hbWUgPSBfdGhpcyRwcm9wczQub3V0ZXJUYWdOYW1lLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM0LnJvd0NvdW50LFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM0LnN0eWxlLFxuICAgICAgICAgIHVzZUlzU2Nyb2xsaW5nID0gX3RoaXMkcHJvcHM0LnVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM0LndpZHRoO1xuICAgICAgdmFyIGlzU2Nyb2xsaW5nID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZztcblxuICAgICAgdmFyIF90aGlzJF9nZXRIb3Jpem9udGFsUiA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgY29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUlswXSxcbiAgICAgICAgICBjb2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMV07XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICByb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuWzBdLFxuICAgICAgICAgIHJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblsxXTtcblxuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yICh2YXIgX3Jvd0luZGV4ID0gcm93U3RhcnRJbmRleDsgX3Jvd0luZGV4IDw9IHJvd1N0b3BJbmRleDsgX3Jvd0luZGV4KyspIHtcbiAgICAgICAgICBmb3IgKHZhciBfY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4OyBfY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4OyBfY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBfY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAga2V5OiBpdGVtS2V5KHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4OiBfcm93SW5kZXhcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHJvd0luZGV4OiBfcm93SW5kZXgsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoX3Jvd0luZGV4LCBfY29sdW1uSW5kZXgpXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb25TY3JvbGw6IHRoaXMuX29uU2Nyb2xsLFxuICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH0sIHN0eWxlKVxuICAgICAgfSwgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBlc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogZXN0aW1hdGVkVG90YWxXaWR0aFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2FsbFByb3BzQ2FsbGJhY2tzID0gZnVuY3Rpb24gX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM1LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZCA9IF90aGlzJHByb3BzNS5vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczUub25TY3JvbGwsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczUucm93Q291bnQ7XG5cbiAgICAgIGlmICh0eXBlb2Ygb25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQgPiAwKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRIb3Jpem9udGFsUjIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVDb2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVDb2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzNdO1xuXG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRWZXJ0aWNhbFJhbjIgPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuUm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlUm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlUm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlszXTtcblxuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCwgX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBfb3ZlcnNjYW5Sb3dTdGFydEluZGV4LCBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgsIF92aXNpYmxlUm93U3RhcnRJbmRleCwgX3Zpc2libGVSb3dTdG9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgICAgX3Njcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIF9zY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMy5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgICBfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMudmVydGljYWxTY3JvbGxEaXJlY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKF9zY3JvbGxMZWZ0LCBfc2Nyb2xsVG9wLCBfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKTtcbiAgICAgIH1cbiAgICB9IC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ291bnQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczYucm93Q291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU0ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU0Lmhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTQuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlNC5zY3JvbGxMZWZ0O1xuICAgICAgdmFyIG92ZXJzY2FuQ291bnRSZXNvbHZlZCA9IG92ZXJzY2FuQ29sdW1uQ291bnQgfHwgb3ZlcnNjYW5Db2x1bW5zQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNy5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd0NvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93c0NvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM3LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTUuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTUudmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGU1LnNjcm9sbFRvcDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEdyaWQ7XG4gIH0oUHVyZUNvbXBvbmVudCksIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZVxuICB9LCBfY2xhc3M7XG59XG5cbnZhciB2YWxpZGF0ZVNoYXJlZFByb3BzID0gZnVuY3Rpb24gdmFsaWRhdGVTaGFyZWRQcm9wcyhfcmVmNSwgX3JlZjYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmNS5kaXJlY3Rpb24sXG4gICAgICBoZWlnaHQgPSBfcmVmNS5oZWlnaHQsXG4gICAgICBpbm5lclRhZ05hbWUgPSBfcmVmNS5pbm5lclRhZ05hbWUsXG4gICAgICBvdXRlclRhZ05hbWUgPSBfcmVmNS5vdXRlclRhZ05hbWUsXG4gICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCA9IF9yZWY1Lm92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgb3ZlcnNjYW5Db3VudCA9IF9yZWY1Lm92ZXJzY2FuQ291bnQsXG4gICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF9yZWY1Lm92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgd2lkdGggPSBfcmVmNS53aWR0aDtcbiAgdmFyIGluc3RhbmNlID0gX3JlZjYuaW5zdGFuY2U7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db3VudCBwcm9wIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvdmVyc2NhblJvd3NDb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBvdmVyc2NhbkNvbHVtbnNDb3VudCBhbmQgb3ZlcnNjYW5Sb3dzQ291bnQgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArIChcIlxcXCJcIiArIChjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbikgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICsgKFwiXFxcIlwiICsgZGlyZWN0aW9uICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoXCJcXFwiXCIgKyAod2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgKyAoXCJcXFwiXCIgKyAoaGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChfcmVmLCBfcmVmMikge1xuICB2YXIgcm93Q291bnQgPSBfcmVmLnJvd0NvdW50O1xuICB2YXIgcm93TWV0YWRhdGFNYXAgPSBfcmVmMi5yb3dNZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWYyLmVzdGltYXRlZFJvd0hlaWdodCxcbiAgICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gX3JlZjIubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IHJvd0NvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSByb3dDb3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSByb3dNZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRSb3dJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZFJvd0hlaWdodDtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsV2lkdGgoX3JlZjMsIF9yZWY0KSB7XG4gIHZhciBjb2x1bW5Db3VudCA9IF9yZWYzLmNvbHVtbkNvdW50O1xuICB2YXIgY29sdW1uTWV0YWRhdGFNYXAgPSBfcmVmNC5jb2x1bW5NZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjQuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IF9yZWY0Lmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gY29sdW1uTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IGNvbHVtbkNvdW50IC0gbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgZ2V0SXRlbU1ldGFkYXRhID0gZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMuY29sdW1uV2lkdGg7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSBwcm9wcy5yb3dIZWlnaHQ7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIHZhciBzaXplID0gaXRlbVNpemUoaSk7XG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzaXplOiBzaXplXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIHZhciBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID0gbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBsYXN0TWVhc3VyZWRJbmRleCwgMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSwgb2Zmc2V0KTtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGhpZ2gsIGxvdywgb2Zmc2V0KSB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIHZhciBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgaW5kZXgsIG9mZnNldCkge1xuICB2YXIgaXRlbUNvdW50ID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMuY29sdW1uQ291bnQgOiBwcm9wcy5yb3dDb3VudDtcbiAgdmFyIGludGVydmFsID0gMTtcblxuICB3aGlsZSAoaW5kZXggPCBpdGVtQ291bnQgJiYgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldCkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLCBNYXRoLmZsb29yKGluZGV4IC8gMiksIG9mZnNldCk7XG59O1xuXG52YXIgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gIHZhciBzaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMud2lkdGggOiBwcm9wcy5oZWlnaHQ7XG4gIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7IC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG5cbiAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpIDogZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldCkpO1xuICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemUpO1xuXG4gIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChhbGlnbikge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICBjYXNlICdlbmQnOlxuICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICB9XG5cbiAgfVxufTtcblxudmFyIFZhcmlhYmxlU2l6ZUdyaWQgPSAvKiNfX1BVUkVfXyovY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uT2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpO1xuICB9LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gcHJvcHMuY29sdW1uQ291bnQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxMZWZ0ICsgd2lkdGg7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBjb2x1bW5Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgZ2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIGdldENvbHVtbldpZHRoKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KCdyb3cnLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpO1xuICB9LFxuICBnZXRSb3dPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd09mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Um93SGVpZ2h0OiBmdW5jdGlvbiBnZXRSb3dIZWlnaHQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApO1xuICB9LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgcm93Q291bnQgPSBwcm9wcy5yb3dDb3VudCxcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsVG9wICsgaGVpZ2h0O1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcywgaW5zdGFuY2UpIHtcbiAgICB2YXIgX3JlZjUgPSBwcm9wcyxcbiAgICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGggPSBfcmVmNS5lc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0ID0gX3JlZjUuZXN0aW1hdGVkUm93SGVpZ2h0O1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgY29sdW1uTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IGVzdGltYXRlZENvbHVtbldpZHRoIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodDogZXN0aW1hdGVkUm93SGVpZ2h0IHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiAtMSxcbiAgICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4OiAtMSxcbiAgICAgIHJvd01ldGFkYXRhTWFwOiB7fVxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyQ29sdW1uSW5kZXggPSBmdW5jdGlvbiAoY29sdW1uSW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHtcbiAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZTogc2hvdWxkRm9yY2VVcGRhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyUm93SW5kZXggPSBmdW5jdGlvbiAocm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHtcbiAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZTogc2hvdWxkRm9yY2VVcGRhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9IGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGNvbHVtbkluZGV4ID0gX3JlZjYuY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93SW5kZXggPSBfcmVmNi5yb3dJbmRleCxcbiAgICAgICAgICBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPSBfcmVmNi5zaG91bGRGb3JjZVVwZGF0ZSxcbiAgICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IF9yZWY2JHNob3VsZEZvcmNlVXBkYSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWY2JHNob3VsZEZvcmNlVXBkYTtcblxuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsIGNvbHVtbkluZGV4IC0gMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LCByb3dJbmRleCAtIDEpO1xuICAgICAgfSAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cblxuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY3KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjcuY29sdW1uV2lkdGgsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWY3LnJvd0hlaWdodDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAocm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5JDEgPSBmdW5jdGlvbiBkZWZhdWx0SXRlbUtleShpbmRleCwgZGF0YSkge1xuICByZXR1cm4gaW5kZXg7XG59OyAvLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cblxuXG52YXIgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBudWxsO1xudmFyIGRldldhcm5pbmdzVGFnTmFtZSQxID0gbnVsbDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSQxID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudChfcmVmKSB7XG4gIHZhciBfY2xhc3M7XG5cbiAgdmFyIGdldEl0ZW1PZmZzZXQgPSBfcmVmLmdldEl0ZW1PZmZzZXQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSBfcmVmLmdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgIGdldEl0ZW1TaXplID0gX3JlZi5nZXRJdGVtU2l6ZSxcbiAgICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gX3JlZi5nZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgICAgIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmLmdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZi5nZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgaW5pdEluc3RhbmNlUHJvcHMgPSBfcmVmLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYuc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgICAgIHZhbGlkYXRlUHJvcHMgPSBfcmVmLnZhbGlkYXRlUHJvcHM7XG4gIHJldHVybiBfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoTGlzdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIExpc3QocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfUHVyZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMuX2luc3RhbmNlUHJvcHMgPSBpbml0SW5zdGFuY2VQcm9wcyhfdGhpcy5wcm9wcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuX291dGVyUmVmID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGluc3RhbmNlOiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0IDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhblN0YXJ0SW5kZXgsIG92ZXJzY2FuU3RvcEluZGV4LCB2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkKHtcbiAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleDogb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXg6IHZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXg6IHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxPZmZzZXQsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TY3JvbGwoe1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICAgICAgaXRlbVNpemUgPSBfdGhpcyRwcm9wcy5pdGVtU2l6ZSxcbiAgICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzLmxheW91dDtcblxuICAgICAgICB2YXIgaXRlbVN0eWxlQ2FjaGUgPSBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBpdGVtU2l6ZSwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBsYXlvdXQsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uKTtcblxuICAgICAgICB2YXIgc3R5bGU7XG5cbiAgICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGluZGV4KSkge1xuICAgICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVbaW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0SXRlbU9mZnNldChfdGhpcy5wcm9wcywgaW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAgIHZhciBzaXplID0gZ2V0SXRlbVNpemUoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgICAgIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgICAgdmFyIG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMDtcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXRIb3Jpem9udGFsLFxuICAgICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRvcDogIWlzSG9yaXpvbnRhbCA/IF9vZmZzZXQgOiAwLFxuICAgICAgICAgICAgaGVpZ2h0OiAhaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbEhvcml6b250YWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBfdGhpcy5wcm9wcy5kaXJlY3Rpb247XG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IHNjcm9sbExlZnQ7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbE9mZnNldCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsVmVydGljYWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0MiA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxUb3A7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgTGlzdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMkMShuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIF9wcm90byA9IExpc3QucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvID0gZnVuY3Rpb24gc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbikge1xuICAgICAgaWYgKGFsaWduID09PSB2b2lkIDApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzMi5pdGVtQ291bnQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMyLmxheW91dDtcbiAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSB0aGlzLnN0YXRlLnNjcm9sbE9mZnNldDtcbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuXG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IDA7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbFdpZHRoID4gb3V0ZXJSZWYuY2xpZW50V2lkdGggPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxIZWlnaHQgPiBvdXRlclJlZi5jbGllbnRIZWlnaHQgPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczMuZGlyZWN0aW9uLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxPZmZzZXQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbE9mZnNldCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczMubGF5b3V0O1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNC5sYXlvdXQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBvdXRlclJlZi5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNS5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczUuY2xhc3NOYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNS5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM1LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNS5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczUuaXRlbUNvdW50LFxuICAgICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkcHJvcHM1Lml0ZW1EYXRhLFxuICAgICAgICAgIF90aGlzJHByb3BzNSRpdGVtS2V5ID0gX3RoaXMkcHJvcHM1Lml0ZW1LZXksXG4gICAgICAgICAgaXRlbUtleSA9IF90aGlzJHByb3BzNSRpdGVtS2V5ID09PSB2b2lkIDAgPyBkZWZhdWx0SXRlbUtleSQxIDogX3RoaXMkcHJvcHM1JGl0ZW1LZXksXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM1LmxheW91dCxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNS5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNS51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNS53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICB2YXIgb25TY3JvbGwgPSBpc0hvcml6b250YWwgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWwgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMF0sXG4gICAgICAgICAgc3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAga2V5OiBpdGVtS2V5KF9pbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgaW5kZXg6IF9pbmRleCxcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfaW5kZXgpXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZSh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6IGVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaXRlbUNvdW50ID0gdGhpcy5wcm9wcy5pdGVtQ291bnQ7XG5cbiAgICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kMiA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlszXTtcblxuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoX292ZXJzY2FuU3RhcnRJbmRleCwgX292ZXJzY2FuU3RvcEluZGV4LCBfdmlzaWJsZVN0YXJ0SW5kZXgsIF92aXNpYmxlU3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBfc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUyLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKF9zY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxPZmZzZXQsIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0UmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNi5pdGVtQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTMuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsT2Zmc2V0O1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0U3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gTGlzdDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgbGF5b3V0OiAndmVydGljYWwnLFxuICAgIG92ZXJzY2FuQ291bnQ6IDIsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn0gLy8gTk9URTogSSBjb25zaWRlcmVkIGZ1cnRoZXIgd3JhcHBpbmcgaW5kaXZpZHVhbCBpdGVtcyB3aXRoIGEgcHVyZSBMaXN0SXRlbSBjb21wb25lbnQuXG4vLyBUaGlzIHdvdWxkIGF2b2lkIGV2ZXIgY2FsbGluZyB0aGUgcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgc2FtZSBpbmRleCBtb3JlIHRoYW4gb25jZSxcbi8vIEJ1dCBpdCB3b3VsZCBhbHNvIGFkZCB0aGUgb3ZlcmhlYWQgb2YgYSBsb3Qgb2YgY29tcG9uZW50cy9maWJlcnMuXG4vLyBJIGFzc3VtZSBwZW9wbGUgYWxyZWFkeSBkbyB0aGlzIChyZW5kZXIgZnVuY3Rpb24gcmV0dXJuaW5nIGEgY2xhc3MgY29tcG9uZW50KSxcbi8vIFNvIG15IGRvaW5nIGl0IHdvdWxkIGp1c3QgdW5uZWNlc3NhcmlseSBkb3VibGUgdGhlIHdyYXBwZXJzLlxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyQxID0gZnVuY3Rpb24gdmFsaWRhdGVTaGFyZWRQcm9wcyhfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmMi5kaXJlY3Rpb24sXG4gICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQsXG4gICAgICBsYXlvdXQgPSBfcmVmMi5sYXlvdXQsXG4gICAgICBpbm5lclRhZ05hbWUgPSBfcmVmMi5pbm5lclRhZ05hbWUsXG4gICAgICBvdXRlclRhZ05hbWUgPSBfcmVmMi5vdXRlclRhZ05hbWUsXG4gICAgICB3aWR0aCA9IF9yZWYyLndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmMy5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSQxICYmICFkZXZXYXJuaW5nc1RhZ05hbWUkMS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZSQxLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIGlmIChkZXZXYXJuaW5nc0RpcmVjdGlvbiAmJiAhZGV2V2FybmluZ3NEaXJlY3Rpb24uaGFzKGluc3RhbmNlKSkge1xuICAgICAgICAgIGRldldhcm5pbmdzRGlyZWN0aW9uLmFkZChpbnN0YW5jZSk7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICsgKFwiXFxcIlwiICsgZGlyZWN0aW9uICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJsYXlvdXRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIi4gJyArIChcIlxcXCJcIiArIGxheW91dCArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoXCJcXFwiXCIgKyAod2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9IGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmVydGljYWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgKyAoXCJcXFwiXCIgKyAoaGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxID0gNTA7XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEkMSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgdmFyIF9yZWYgPSBwcm9wcyxcbiAgICAgIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSwgb2Zmc2V0KTtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaW5kZXgsIG9mZnNldCkge1xuICB2YXIgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldCkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IF9yZWYyLml0ZW1Db3VudDtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IF9yZWYzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjMuZXN0aW1hdGVkSXRlbVNpemUsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IF9yZWYzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gaXRlbUNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpdGVtQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIFZhcmlhYmxlU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAgIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG5cbiAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldCkpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBvZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgc2l6ZTtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcywgaW5zdGFuY2UpIHtcbiAgICB2YXIgX3JlZjQgPSBwcm9wcyxcbiAgICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmNC5lc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleDogLTFcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGV4ID0gZnVuY3Rpb24gKGluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCwgaW5kZXggLSAxKTsgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjUpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGluZGV4ICogY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KF9yZWYzLCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMy5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIGluZGV4ICogcm93SGVpZ2h0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChfcmVmNCwgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjQucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChfcmVmNSkge1xuICAgIHZhciByb3dDb3VudCA9IF9yZWY1LnJvd0NvdW50LFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNS5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodCAqIHJvd0NvdW50O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWY2KSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjYuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoICogY29sdW1uQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KF9yZWY3LCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNy5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgd2lkdGggPSBfcmVmNy53aWR0aDtcbiAgICB2YXIgbGFzdENvbHVtbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkNvdW50ICogY29sdW1uV2lkdGggLSB3aWR0aCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RDb2x1bW5PZmZzZXQsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGgpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoIC0gd2lkdGggKyBzY3JvbGxiYXJTaXplICsgY29sdW1uV2lkdGgpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgLSB3aWR0aCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCArIHdpZHRoKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdENvbHVtbk9mZnNldCArIE1hdGguZmxvb3Iod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Q29sdW1uT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQoX3JlZjgsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY4LnJvd0hlaWdodCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjguaGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWY4LnJvd0NvdW50O1xuICAgIHZhciBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93Q291bnQgKiByb3dIZWlnaHQgLSBoZWlnaHQpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Um93T2Zmc2V0LCByb3dJbmRleCAqIHJvd0hlaWdodCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIHJvd0luZGV4ICogcm93SGVpZ2h0IC0gaGVpZ2h0ICsgc2Nyb2xsYmFyU2l6ZSArIHJvd0hlaWdodCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxUb3AgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChfcmVmOSwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY5LmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWY5LmNvbHVtbkNvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsTGVmdCAvIGNvbHVtbldpZHRoKSkpO1xuICB9LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMCwgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMC5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmMTAuY29sdW1uQ291bnQsXG4gICAgICAgIHdpZHRoID0gX3JlZjEwLndpZHRoO1xuICAgIHZhciBsZWZ0ID0gc3RhcnRJbmRleCAqIGNvbHVtbldpZHRoO1xuICAgIHZhciBudW1WaXNpYmxlQ29sdW1ucyA9IE1hdGguY2VpbCgod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyBjb2x1bW5XaWR0aCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjExLCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjExLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTEucm93Q291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyByb3dIZWlnaHQpKSk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEyLCBzdGFydEluZGV4LCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjEyLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTIucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IF9yZWYxMi5oZWlnaHQ7XG4gICAgdmFyIHRvcCA9IHN0YXJ0SW5kZXggKiByb3dIZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVSb3dzID0gTWF0aC5jZWlsKChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gcm93SGVpZ2h0KTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWYxMykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjEzLnJvd0hlaWdodDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICAgIHJldHVybiBpbmRleCAqIGl0ZW1TaXplO1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjIuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMykge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmMy5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjMuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplICogaXRlbUNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoX3JlZjQsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY0LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjQuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNC5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjQuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY0LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbGFzdEl0ZW1PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtQ291bnQgKiBpdGVtU2l6ZSAtIHNpemUpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0SXRlbU9mZnNldCwgaW5kZXggKiBpdGVtU2l6ZSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGluZGV4ICogaXRlbVNpemUgLSBzaXplICsgaXRlbVNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RJdGVtT2Zmc2V0ICsgTWF0aC5mbG9vcihzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0SXRlbU9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjUsIG9mZnNldCkge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmNS5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIE1hdGguZmxvb3Iob2Zmc2V0IC8gaXRlbVNpemUpKSk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjYsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNi5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY2LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjYuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY2Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNi5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjYud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBvZmZzZXQgPSBzdGFydEluZGV4ICogaXRlbVNpemU7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZUl0ZW1zID0gTWF0aC5jZWlsKChzaXplICsgc2Nyb2xsT2Zmc2V0IC0gb2Zmc2V0KSAvIGl0ZW1TaXplKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVJdGVtcyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNy5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5mdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2LCBuZXh0KSB7XG4gIGZvciAodmFyIGF0dHJpYnV0ZSBpbiBwcmV2KSB7XG4gICAgaWYgKCEoYXR0cmlidXRlIGluIG5leHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfYXR0cmlidXRlIGluIG5leHQpIHtcbiAgICBpZiAocHJldltfYXR0cmlidXRlXSAhPT0gbmV4dFtfYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wic3R5bGVcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcInN0eWxlXCJdO1xuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdG1lbW9cblxuZnVuY3Rpb24gYXJlRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdHlsZSA9IHByZXZQcm9wcy5zdHlsZSxcbiAgICAgIHByZXZSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJldlByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBuZXh0U3R5bGUgPSBuZXh0UHJvcHMuc3R5bGUsXG4gICAgICBuZXh0UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG5leHRQcm9wcywgX2V4Y2x1ZGVkMik7XG5cbiAgcmV0dXJuICFzaGFsbG93RGlmZmVycyhwcmV2U3R5bGUsIG5leHRTdHlsZSkgJiYgIXNoYWxsb3dEaWZmZXJzKHByZXZSZXN0LCBuZXh0UmVzdCk7XG59XG5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtY29tcG9uZW50Lmh0bWwjc2hvdWxkY29tcG9uZW50dXBkYXRlXG5cbmZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICByZXR1cm4gIWFyZUVxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgc2hhbGxvd0RpZmZlcnModGhpcy5zdGF0ZSwgbmV4dFN0YXRlKTtcbn1cblxuZXhwb3J0IHsgRml4ZWRTaXplR3JpZCwgRml4ZWRTaXplTGlzdCwgVmFyaWFibGVTaXplR3JpZCwgVmFyaWFibGVTaXplTGlzdCwgYXJlRXF1YWwsIHNob3VsZENvbXBvbmVudFVwZGF0ZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguZXNtLmpzLm1hcFxuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuU2Nyb2xscGFyZW50ID0gZmFjdG9yeSgpO1xuICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZ2V4ID0gLyhhdXRvfHNjcm9sbCkvO1xuXG4gIHZhciBwYXJlbnRzID0gZnVuY3Rpb24gKG5vZGUsIHBzKSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgeyByZXR1cm4gcHM7IH1cblxuICAgIHJldHVybiBwYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgcHMuY29uY2F0KFtub2RlXSkpO1xuICB9O1xuXG4gIHZhciBzdHlsZSA9IGZ1bmN0aW9uIChub2RlLCBwcm9wKSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgfTtcblxuICB2YXIgb3ZlcmZsb3cgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBzdHlsZShub2RlLCBcIm92ZXJmbG93XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy15XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy14XCIpO1xuICB9O1xuXG4gIHZhciBzY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgcmV0dXJuIHJlZ2V4LnRlc3Qob3ZlcmZsb3cobm9kZSkpO1xuICB9O1xuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdmFyIHBzID0gcGFyZW50cyhub2RlLnBhcmVudE5vZGUsIFtdKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzY3JvbGwocHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBwc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH07XG5cbiAgcmV0dXJuIHNjcm9sbFBhcmVudDtcbn0pKTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgb25Qb2ludGVyRG93bj86IChldmVudDogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgb25Qb2ludGVyRG93bixcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uUG9pbnRlckRvd249e29uUG9pbnRlckRvd259XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBpbnZlcnRlZCA9IGZhbHNlLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmJ1dHRvbkJhZGdlLCB7W3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkfSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFJlZikge1xuICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jaGVja2JveCwgY2xhc3NOYW1lLCBzdHlsZXNbc2l6ZV1dKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgIC8+XG4gICk7XG5cbiAgaWYgKGxhYmVsKSB7XG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcbiAgY29sb3I6IENvbG9yO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ29sb3JTd2F0Y2goe1xuICBjb2xvcixcbiAgY29udGFpbmVyUmVmLFxuICBpc1NlbGVjdGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBvbkNsaWNrLFxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zZWxlY3RlZF06IGlzU2VsZWN0ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwiY29sb3Itc3dhdGNoXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cbiAgICA+XG4gICAgICB7Y29sb3IubGFiZWwgJiYgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JTd2F0Y2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpc09wZW46IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBDb25maXJtYXRpb25Nb2RhbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBpc09wZW4sXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgYmFzZVpJbmRleCA9IDEwMTksXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxuICAgICAgbm9TaGFkb3c9e25vU2hhZG93fVxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgICAgeyEhaGVhZGVyICYmIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPn1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsQ29udGVudCxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNMZWZ0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc1JpZ2h0fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvTW9kYWw+XG4gICk7XG59XG5cbkNvbmZpcm1hdGlvbk1vZGFsLmRpc3BsYXlOYW1lID0gXCJDb25maXJtYXRpb25Nb2RhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBDb25maXJtYXRpb25Nb2RhbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5leHBvcnQgdHlwZSBEcmF3ZXJDb250ZXh0VmFsdWUgPSB7XG4gIG5vQ2xvc2VJY29uPzogYm9vbGVhbjtcbiAgb25DbG9zZT8oKTogdm9pZDtcbn07XG5cbmV4cG9ydCBjb25zdCBEcmF3ZXJDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxEcmF3ZXJDb250ZXh0VmFsdWU+KFxuICB7fSBhcyBEcmF3ZXJDb250ZXh0VmFsdWVcbik7XG5cbmV4cG9ydCBmdW5jdGlvbiB1c2VEcmF3ZXJDb250ZXh0KCkge1xuICByZXR1cm4gUmVhY3QudXNlQ29udGV4dChEcmF3ZXJDb250ZXh0KTtcbn1cbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlTWVtbywgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gXCJyZWFjdC1kb21cIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9EcmF3ZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ1NTVHJhbnNpdGlvbiB9IGZyb20gXCJyZWFjdC10cmFuc2l0aW9uLWdyb3VwXCI7XG5pbXBvcnQgeyBDU1NUcmFuc2l0aW9uQ2xhc3NOYW1lcyB9IGZyb20gXCJyZWFjdC10cmFuc2l0aW9uLWdyb3VwL0NTU1RyYW5zaXRpb25cIjtcbmltcG9ydCB7IERyYXdlckZvb3RlciB9IGZyb20gXCIuL0RyYXdlckZvb3RlclwiO1xuaW1wb3J0IHsgRHJhd2VySGVhZGVyIH0gZnJvbSBcIi4vRHJhd2VySGVhZGVyXCI7XG5pbXBvcnQgeyBEcmF3ZXJDb250ZW50IH0gZnJvbSBcIi4vRHJhd2VyQ29udGVudFwiO1xuaW1wb3J0IHsgRHJhd2VyQ29udGV4dCB9IGZyb20gXCIuL0NvbnRleHRcIjtcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XG5cbnR5cGUgRHJhd2VyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBvcGVuOiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbiAgbm9DbG9zZUljb24/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICB1bm1vdW50T25FeGl0PzogYm9vbGVhbjtcbiAgbW91bnRPbkVudGVyPzogYm9vbGVhbjtcbiAgcG9ydGFsQ29udGFpbmVyPzogRWxlbWVudCB8IERvY3VtZW50RnJhZ21lbnQ7XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBvbkNsb3NlQW5pbWF0aW9uRW5kPzogKCkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IFRSQU5TSVRJT05fQ0xBU1NfTkFNRVM6IENTU1RyYW5zaXRpb25DbGFzc05hbWVzID0ge1xuICBlbnRlcjogc3R5bGVzLmRyYXdlclBhcGVyRW50ZXIsXG4gIGVudGVyQWN0aXZlOiBzdHlsZXMuZHJhd2VyUGFwZXJFbnRlckFjdGl2ZSxcbiAgZW50ZXJEb25lOiBzdHlsZXMuZHJhd2VyUGFwZXJFbnRlckRvbmUsXG4gIGV4aXQ6IHN0eWxlcy5kcmF3ZXJQYXBlckV4aXQsXG4gIGV4aXRBY3RpdmU6IHN0eWxlcy5kcmF3ZXJQYXBlckV4aXRBY3RpdmUsXG4gIGV4aXREb25lOiBzdHlsZXMuZHJhd2VyUGFwZXJFeGl0RG9uZSxcbn07XG5cbmZ1bmN0aW9uIGdldEN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lKFxuICBub2RlUmVmOiBSZWFjdC5SZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+XG4pIHtcbiAgcmV0dXJuIG5vZGVSZWYuY3VycmVudD8uY2xhc3NOYW1lLm1hdGNoKFxuICAgIE9iamVjdC52YWx1ZXMoVFJBTlNJVElPTl9DTEFTU19OQU1FUykuam9pbihcInxcIilcbiAgKT8uWzBdO1xufVxuXG5mdW5jdGlvbiBEcmF3ZXIoe1xuICBvcGVuLFxuICBjbGFzc05hbWUsXG4gIHN0eWxlLFxuICBub0Nsb3NlSWNvbiA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgY2hpbGRyZW4sXG4gIHVubW91bnRPbkV4aXQgPSBmYWxzZSxcbiAgbW91bnRPbkVudGVyID0gZmFsc2UsXG4gIHBvcnRhbENvbnRhaW5lciA9IGRvY3VtZW50LmJvZHksXG4gIG9uQ2xvc2UsXG4gIG9uQ2xvc2VBbmltYXRpb25FbmQsXG59OiBEcmF3ZXJQcm9wcykge1xuICBjb25zdCBbaXNEcmF3ZXJWaXNpYmxlLCBzZXREcmF3ZXJWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgW2lzT3ZlcmxheVZpc2libGUsIHNldElzT3ZlcmxheVZpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IG5vZGVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCBjdXJyZW50VHJhbnNpdGlvbkNsYXNzTmFtZSA9IGdldEN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lKG5vZGVSZWYpO1xuXG4gIGNvbnN0IGNvbnRleHQgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7IG9uQ2xvc2UsIG5vQ2xvc2VJY29uIH0pLFxuICAgIFtvbkNsb3NlLCBub0Nsb3NlSWNvbl1cbiAgKTtcblxuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZUVudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERyYXdlclZpc2libGUodHJ1ZSk7XG4gICAgc2V0SXNPdmVybGF5VmlzaWJsZSh0cnVlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUV4aXQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0SXNPdmVybGF5VmlzaWJsZShmYWxzZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVFeGl0ZWQgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0RHJhd2VyVmlzaWJsZShmYWxzZSk7XG4gICAgb25DbG9zZUFuaW1hdGlvbkVuZD8uKCk7XG4gIH0sIFtvbkNsb3NlQW5pbWF0aW9uRW5kXSk7XG5cbiAgcmV0dXJuIFJlYWN0RE9NLmNyZWF0ZVBvcnRhbChcbiAgICA8Q1NTVHJhbnNpdGlvblxuICAgICAgbm9kZVJlZj17bm9kZVJlZn1cbiAgICAgIGluPXtvcGVufVxuICAgICAgdGltZW91dD17MzAwfVxuICAgICAgY2xhc3NOYW1lcz17VFJBTlNJVElPTl9DTEFTU19OQU1FU31cbiAgICAgIHVubW91bnRPbkV4aXQ9e3VubW91bnRPbkV4aXR9XG4gICAgICBtb3VudE9uRW50ZXI9e21vdW50T25FbnRlcn1cbiAgICAgIG9uRXhpdGVkPXtoYW5kbGVFeGl0ZWR9XG4gICAgICBvbkVudGVyPXtoYW5kbGVFbnRlcn1cbiAgICAgIG9uRXhpdD17aGFuZGxlRXhpdH1cbiAgICA+XG4gICAgICA8RHJhd2VyQ29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dH0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5kcmF3ZXIsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudmlzaWJsZV06IGlzRHJhd2VyVmlzaWJsZSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICByZWY9e25vZGVSZWZ9XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgc3R5bGVzLmRyYXdlclBhcGVyLFxuICAgICAgICAgICAgICAvLyB3ZSBuZWVkIHRvIGFkZCB0aGUgY3VycmVudCB0cmFuc2l0aW9uIGNsYXNzIG5hbWUgaGVyZSBiZWNhdXNlIGl0IGdldHMgZGlzYXBwZWFyZWQgYWxvbmcgd2l0aCB0aGUgZHJhd2VyXG4gICAgICAgICAgICAgIC8vIHdoZW4gY2xhc3NOYW1lIGNoYW5nZXNcbiAgICAgICAgICAgICAgY3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUsXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlclBhcGVyQ29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZHJhd2VyT3ZlcmxheSxcbiAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgIFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5LFxuICAgICAgICAgICAgICAgIFtzdHlsZXMudmlzaWJsZV06IGlzT3ZlcmxheVZpc2libGUsXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e29uQ2xvc2V9XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L0RyYXdlckNvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9DU1NUcmFuc2l0aW9uPixcbiAgICBwb3J0YWxDb250YWluZXJcbiAgKTtcbn1cblxuRHJhd2VyLkhlYWRlciA9IERyYXdlckhlYWRlcjtcbkRyYXdlci5Db250ZW50ID0gRHJhd2VyQ29udGVudDtcbkRyYXdlci5Gb290ZXIgPSBEcmF3ZXJGb290ZXI7XG5cbmV4cG9ydCBkZWZhdWx0IERyYXdlcjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9EcmF3ZXJDb250ZW50Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBEcmF3ZXJDb250ZW50UHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBEcmF3ZXJDb250ZW50KHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9OiBEcmF3ZXJDb250ZW50UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5kcmF3ZXJDb250ZW50LCBjbGFzc05hbWVdKX0+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYXdlckNvbnRlbnQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERyYXdlckNvbnRlbnQgfSBmcm9tIFwiLi9EcmF3ZXJDb250ZW50XCI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRHJhd2VyRm9vdGVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBEcmF3ZXJGb290ZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdC5SZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIERyYXdlckZvb3Rlcih7IGNoaWxkcmVuLCBjbGFzc05hbWUgfTogRHJhd2VyRm9vdGVyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5kcmF3ZXJGb290ZXIsIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYXdlckZvb3RlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VyRm9vdGVyIH0gZnJvbSBcIi4vRHJhd2VyRm9vdGVyXCI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL0ljb25cIjtcbmltcG9ydCBjbG9zZUljb24gZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9jbG9zZS5zdmdcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9EcmF3ZXJIZWFkZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgdXNlRHJhd2VyQ29udGV4dCB9IGZyb20gXCIuLi9Db250ZXh0XCI7XG5cbnR5cGUgRHJhd2VySGVhZGVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBEcmF3ZXJIZWFkZXIoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IERyYXdlckhlYWRlclByb3BzKSB7XG4gIGNvbnN0IHsgb25DbG9zZSwgbm9DbG9zZUljb24gfSA9IHVzZURyYXdlckNvbnRleHQoKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmRyYXdlckhlYWRlciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyFub0Nsb3NlSWNvbiAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VySGVhZGVyQ2xvc2V9PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuZHJhd2VySGVhZGVyQ2xvc2VJY29ufSBvbkNsaWNrPXtvbkNsb3NlfT5cbiAgICAgICAgICAgIDxJY29uIHNyYz17Y2xvc2VJY29ufSBzaXplPXtcInhsYXJnZVwifSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IERyYXdlckhlYWRlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRHJhd2VySGVhZGVyIH0gZnJvbSBcIi4vRHJhd2VySGVhZGVyXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERyYXdlciB9IGZyb20gXCIuL0RyYXdlclwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB7IEl0ZW0sIFJlbmRlckRpc3BsYXlQcm9wcyB9IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vQ2xpY2thYmxlLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGljb25NZW51IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcblxuZXhwb3J0IHR5cGUgQ2xpY2thYmxlUHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gT21pdDxcbiAgUmVuZGVyRGlzcGxheVByb3BzPFQ+LFxuICBcInNlbGVjdGVkSXRlbVwiIHwgXCJ0b2dnbGVJc09wZW5cIlxuPiAmIHtcbiAgb25DbGljazogUmVuZGVyRGlzcGxheVByb3BzPFQ+W1widG9nZ2xlSXNPcGVuXCJdO1xufTtcblxuZXhwb3J0IGZ1bmN0aW9uIENsaWNrYWJsZTxUIGV4dGVuZHMgSXRlbT4oe1xuICBkaXNwbGF5LFxuICBpc0Rpc2FibGVkLFxuICBvbkNsaWNrOiBoYW5kbGVDbGljayxcbn06IENsaWNrYWJsZVByb3BzPFQ+KSB7XG4gIHJldHVybiAoXG4gICAgPEJ1dHRvblxuICAgICAgYWxpZ249XCJsZWZ0XCJcbiAgICAgIGRpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgb25DbGljaz17aGFuZGxlQ2xpY2t9XG4gICAgICBzaXplPVwibWVkaXVtXCJcbiAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLmNvbnRhaW5lcn0+XG4gICAgICAgIHtkaXNwbGF5fVxuICAgICAgICA8SWNvbiBhbHQ9XCJEcm9wZG93blwiIHNyYz17aWNvbk1lbnV9IC8+XG4gICAgICA8L2Rpdj5cbiAgICA8L0J1dHRvbj5cbiAgKTtcbn1cbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdENoaWxkLCBSZWFjdEVsZW1lbnQsIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2sgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcblxuaW1wb3J0IHsgQ2xpY2thYmxlIH0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG5pbXBvcnQgeyBNZW51LCBNZW51Q29udGFpbmVyLCBNZW51SXRlbSwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuLi9NZW51XCI7XG5cbmV4cG9ydCB0eXBlIEl0ZW0gPSB7IGlkOiBudW1iZXIgfCBzdHJpbmc7IG5hbWU6IHN0cmluZyB9O1xuXG5leHBvcnQgdHlwZSBSZW5kZXJEaXNwbGF5UHJvcHM8VCBleHRlbmRzIEl0ZW0+ID0gUGljazxcbiAgRHJvcGRvd25Qcm9wczxUPixcbiAgXCJkaXNwbGF5XCIgfCBcInNlbGVjdGVkSXRlbVwiXG4+ICYgeyBpc0Rpc2FibGVkOiBib29sZWFuOyB0b2dnbGVJc09wZW46ICgpID0+IHZvaWQgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyQ2xpY2thYmxlRm48VCBleHRlbmRzIEl0ZW0+ID0gKFxuICBwcm9wczogUmVuZGVyRGlzcGxheVByb3BzPFQ+XG4pID0+IFJlYWN0RWxlbWVudDtcblxuZXhwb3J0IHR5cGUgSXRlbUJvZHlSZW5kZXJlckZuPFQgZXh0ZW5kcyBJdGVtPiA9IChzdGF0ZToge1xuICBpdGVtOiBUO1xuICBpc1NlbGVjdGVkOiBib29sZWFuO1xufSkgPT4gUmVhY3RDaGlsZDtcblxuZXhwb3J0IGludGVyZmFjZSBEcm9wZG93blByb3BzPFQgZXh0ZW5kcyBJdGVtPiB7XG4gIGl0ZW1Cb2R5UmVuZGVyZXI/OiBJdGVtQm9keVJlbmRlcmVyRm48VD47XG4gIGl0ZW1zOiBUW107XG4gIG9uU2VsZWN0OiAoaXRlbTogVCkgPT4gdm9pZDtcbiAgZGlzcGxheTogUmVhY3RDaGlsZDtcbiAgcmVuZGVyQ2xpY2thYmxlPzogUmVuZGVyQ2xpY2thYmxlRm48VD47XG4gIHNlbGVjdGVkSXRlbTogVCB8IG51bGw7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBEcm9wZG93bjxUIGV4dGVuZHMgSXRlbT4oe1xuICBpdGVtQm9keVJlbmRlcmVyLFxuICBpdGVtcyxcbiAgb25TZWxlY3Q6IGhhbmRsZVNlbGVjdCxcbiAgZGlzcGxheSxcbiAgcmVuZGVyQ2xpY2thYmxlLFxuICBzZWxlY3RlZEl0ZW0sXG4gIHBsYWNlbWVudCA9IHsgdmVydGljYWw6IFwiYm90dG9tXCIsIGhvcml6b250YWw6IFwibGVmdFwiIH1cbn06IERyb3Bkb3duUHJvcHM8VD4pIHtcbiAgY29uc3QgW2lzT3Blbiwgc2V0SXNPcGVuXSA9IHVzZVN0YXRlKGZhbHNlKTtcbiAgY29uc3QgcmVmID0gdXNlT3V0c2lkZUNsaWNrKCgpID0+IHNldElzT3BlbihmYWxzZSkpO1xuICBjb25zdCBoYW5kbGVDbGljayA9IChpdGVtOiBUKSA9PiB7XG4gICAgaGFuZGxlU2VsZWN0KGl0ZW0pO1xuICAgIHNldElzT3BlbihmYWxzZSk7XG4gIH07XG4gIGNvbnN0IGlzRGlzYWJsZWQgPSAhaXRlbXMgfHwgaXRlbXMubGVuZ3RoID09PSAwO1xuICBjb25zdCB0b2dnbGVJc09wZW4gPSAoKSA9PiBzZXRJc09wZW4oIWlzT3Blbik7XG5cbiAgcmV0dXJuIChcbiAgICA8TWVudUNvbnRhaW5lclxuICAgICAgYnV0dG9uPXtcbiAgICAgICAgdHlwZW9mIHJlbmRlckNsaWNrYWJsZSA9PT0gXCJmdW5jdGlvblwiID8gKFxuICAgICAgICAgIHJlbmRlckNsaWNrYWJsZSh7XG4gICAgICAgICAgICBkaXNwbGF5LFxuICAgICAgICAgICAgaXNEaXNhYmxlZCxcbiAgICAgICAgICAgIHNlbGVjdGVkSXRlbSxcbiAgICAgICAgICAgIHRvZ2dsZUlzT3BlbixcbiAgICAgICAgICB9KVxuICAgICAgICApIDogKFxuICAgICAgICAgIDxDbGlja2FibGVcbiAgICAgICAgICAgIGRpc3BsYXk9e2Rpc3BsYXl9XG4gICAgICAgICAgICBpc0Rpc2FibGVkPXtpc0Rpc2FibGVkfVxuICAgICAgICAgICAgb25DbGljaz17dG9nZ2xlSXNPcGVufVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgIH1cbiAgICAgIHBsYWNlbWVudD17cGxhY2VtZW50fVxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAgPE1lbnUgaXNPcGVuPXtpc09wZW59PlxuICAgICAgICB7aXRlbXMgJiZcbiAgICAgICAgICBpdGVtcy5tYXAoKGl0ZW0pID0+IChcbiAgICAgICAgICAgIDxNZW51SXRlbVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17aXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZH1cbiAgICAgICAgICAgICAga2V5PXtpdGVtLmlkfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiBoYW5kbGVDbGljayhpdGVtKX1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2l0ZW1Cb2R5UmVuZGVyZXJcbiAgICAgICAgICAgICAgICA/IGl0ZW1Cb2R5UmVuZGVyZXIoe1xuICAgICAgICAgICAgICAgICAgICBpdGVtLFxuICAgICAgICAgICAgICAgICAgICBpc1NlbGVjdGVkOiBpdGVtLmlkID09PSBzZWxlY3RlZEl0ZW0/LmlkLFxuICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICA6IGl0ZW0ubmFtZX1cbiAgICAgICAgICAgIDwvTWVudUl0ZW0+XG4gICAgICAgICAgKSl9XG4gICAgICA8L01lbnU+XG4gICAgPC9NZW51Q29udGFpbmVyPlxuICApO1xufVxuIiwiZXhwb3J0IHtcbiAgRHJvcGRvd24sXG4gIERyb3Bkb3duUHJvcHMsXG4gIEl0ZW0gYXMgRHJvcGRvd25JdGVtLFxuICBJdGVtQm9keVJlbmRlcmVyRm4gYXMgRHJvcGRvd25JdGVtQm9keVJlbmRlcmVyRm4sXG4gIFJlbmRlckNsaWNrYWJsZUZuIGFzIERyb3Bkb3duUmVuZGVyQ2xpY2thYmxlRm4sXG4gIFJlbmRlckRpc3BsYXlQcm9wcyBhcyBEcm9wZG93blJlbmRlckRpc3BsYXlQcm9wcyxcbn0gZnJvbSBcIi4vRHJvcGRvd25cIjtcbmV4cG9ydCB7XG4gIENsaWNrYWJsZSBhcyBEcm9wZG93bkNsaWNrYWJsZSxcbiAgQ2xpY2thYmxlUHJvcHMgYXMgRHJvcGRvd25DbGlja2FibGVQcm9wc1xufSBmcm9tIFwiLi9DbGlja2FibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBDaGFuZ2VFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ZpbGVJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEZpbGVJbnB1dFNpemUgPSBTaXplO1xuXG50eXBlIFByb3BzID0ge1xuICBvbkNoYW5nZTogKGU6IENoYW5nZUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBhY2NlcHQ/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IEZpbGVJbnB1dFNpemU7XG59O1xuXG5mdW5jdGlvbiBGaWxlSW5wdXQoe1xuICBjaGlsZHJlbixcbiAgYWNjZXB0LFxuICBvbkNoYW5nZSxcbiAgaW5wdXRSZWYsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5sYWJlbCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICA+XG4gICAgICA8aW5wdXRcbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuaW5wdXR9XG4gICAgICAgIHR5cGU9XCJmaWxlXCJcbiAgICAgICAgaWQ9XCJmaWxlXCJcbiAgICAgICAgYWNjZXB0PXthY2NlcHR9XG4gICAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBvbkNoYW5nZT17b25DaGFuZ2V9XG4gICAgICAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZpbGVJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgRmlsZUlucHV0IH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG5leHBvcnQgeyBGaWxlSW5wdXRTaXplIH0gZnJvbSBcIi4vRmlsZUlucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6XG4gICAgfCBcInJpZ2h0XCJcbiAgICB8IFwicmlnaHRFZGdlXCJcbiAgICB8IFwicmlnaHRPbkVkZ2VcIlxuICAgIHwgXCJsZWZ0XCJcbiAgICB8IFwibGVmdEVkZ2VcIlxuICAgIHwgXCJsZWZ0T25FZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImNlbnRlclwiO1xuICB2ZXJ0aWNhbDpcbiAgICB8IFwidG9wXCJcbiAgICB8IFwidG9wRWRnZVwiXG4gICAgfCBcInRvcE9uRWRnZVwiXG4gICAgfCBcImJvdHRvbVwiXG4gICAgfCBcImJvdHRvbUVkZ2VcIlxuICAgIHwgXCJib3R0b21PbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgcGFyZW50OiBcInZpZXdwb3J0XCIgfCBcImNvbnRhaW5lclwiO1xufTtcblxudHlwZSBGbG9hdGluZ1BhbmVsUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb2x1bW5cIiB8IFwicm93XCI7XG4gIHBsYWNlbWVudD86IFBsYWNlbWVudDtcbn07XG5cbmZ1bmN0aW9uIEZsb2F0aW5nUGFuZWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29sdW1uXCIsXG4gIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJjZW50ZXJcIiwgdmVydGljYWw6IFwiYm90dG9tXCIsIHBhcmVudDogXCJ2aWV3cG9ydFwiIH0sXG59OiBGbG9hdGluZ1BhbmVsUHJvcHMpIHtcbiAgY29uc3QgaG9yaXpvbnRhbFBsYWNlbWVudCA9XG4gICAgcGxhY2VtZW50Lmhvcml6b250YWwgPT09IFwiY2VudGVyXCJcbiAgICAgID8gXCJob3Jpem9udGFsQ2VudGVyXCJcbiAgICAgIDogcGxhY2VtZW50Lmhvcml6b250YWw7XG5cbiAgY29uc3QgdmVydGljYWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJjZW50ZXJcIiA/IFwidmVydGljYWxDZW50ZXJcIiA6IHBsYWNlbWVudC52ZXJ0aWNhbDtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJmbG9hdGluZy1wYW5lbFwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW2hvcml6b250YWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbdmVydGljYWxQbGFjZW1lbnRdLFxuICAgICAgICBzdHlsZXNbbGF5b3V0XSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuZml4ZWRdOiBwbGFjZW1lbnQucGFyZW50ICE9PSBcImNvbnRhaW5lclwiLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZsb2F0aW5nUGFuZWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZsb2F0aW5nUGFuZWwgfSBmcm9tIFwiLi9GbG9hdGluZ1BhbmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ljb24ubW9kdWxlLmNzc1wiO1xuXG50eXBlIEljb25Qcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEltYWdlRWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNpemU/OiBcInNtYWxsXCIgfCBcIm1lZGl1bVwiIHwgXCJsYXJnZVwiIHwgXCJ4bGFyZ2VcIjtcbn07XG5cbmZ1bmN0aW9uIEljb24oe1xuICBzcmMsXG4gIGFsdCxcbiAgY29udGFpbmVyUmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbn06IEljb25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxpbWdcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5pY29uLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkIH0sXG4gICAgICBdKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvblwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgIC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb24gfSBmcm9tIFwiLi9JY29uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4uL0J1dHRvbkJhZGdlXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgSWNvbkJ1dHRvblByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBzcmM6IHN0cmluZztcbiAgYWx0OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgb2Zmc2V0U2lkZXM/OiBBcnJheTxcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiPjtcbn07XG5cbmZ1bmN0aW9uIEljb25CdXR0b24oe1xuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgY2hpbGRyZW4sXG4gIHNyYyxcbiAgYWx0LFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcImJ1dHRvblwiLFxufTogSWNvbkJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy50b3BPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwidG9wXCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgICAgW3N0eWxlcy5ib3R0b21PZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwiYm90dG9tXCIpLFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgcm9sZT1cImJ1dHRvblwiXG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEljb25CdXR0b24gfSBmcm9tIFwiLi9JY29uQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xuXG50eXBlIE9mZnNldFNpZGUgPSBcInRvcFwiIHwgXCJyaWdodFwiIHwgXCJib3R0b21cIiB8IFwibGVmdFwiO1xuXG50eXBlIEljb25CdXR0b25MaW5rUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgc3JjOiBzdHJpbmc7XG4gICAgICBhbHQ6IHN0cmluZztcbiAgICAgIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBkaXNhYmxlZD86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gSWNvbkJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjb250YWluZXJSZWYsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIHNyYyxcbiAgYWx0LFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogSWNvbkJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiaWNvbi1idXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAgPEljb24gc3JjPXtzcmN9IGFsdD17YWx0fSBzaXplPXtzaXplfSBpbnZlcnRlZD17aW52ZXJ0ZWR9IC8+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uTGluayB9IGZyb20gXCIuL0ljb25CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgSW1nSFRNTEF0dHJpYnV0ZXMsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IEltZ0hUTUxBdHRyaWJ1dGVzPEhUTUxJbWFnZUVsZW1lbnQ+ICYge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuICBzcmM6IHN0cmluZztcbiAgc3JjV2lkdGg/OiBudW1iZXI7XG4gIHNyY0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiO1xuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCI7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcbiAgc3JjLFxuICBhbHQsXG4gIHNyY1dpZHRoLFxuICBzcmNIZWlnaHQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxuICBkZWNvZGluZyA9IFwiYXV0b1wiLFxuICBsb2FkaW5nID0gXCJlYWdlclwiLFxuICBzdHlsZSxcbiAgLi4ub3RoZXJJbWFnZVByb3BzXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgICB7Li4ub3RoZXJJbWFnZVByb3BzfVxuICAgIC8+XG4gICk7XG5cbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICB7aW1hZ2VFbGVtZW50fVxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICBpbWFnZUVsZW1lbnRcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgSW1hZ2VDb21wb25lbnQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEltYWdlLCBJbWFnZVByb3BzIH0gZnJvbSBcIi4vSW1hZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xhYmVsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMYWJlbElucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MTGFiZWxFbGVtZW50PjtcbiAgdmFsdWU6IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExhYmVsKHsgY2xhc3NOYW1lLCBjaGlsZHJlbiwgdmFsdWUsIGNvbnRhaW5lclJlZiB9OiBMYWJlbElucHV0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9XG4gICAgPlxuICAgICAge3ZhbHVlfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExhYmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMYWJlbCB9IGZyb20gXCIuL0xhYmVsXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlldy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiB7IHRleHQ6IHN0cmluZzsgaWQ6IHN0cmluZyB9O1xuICBoZWFkZXJBY3Rpb25zPzogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaGVhZGVyQWN0aW9ucyxcbn06IExpc3RWaWV3UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7KGhlYWRlciB8fCBoZWFkZXJBY3Rpb25zKSAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT5cbiAgICAgICAgICB7aGVhZGVyICYmIChcbiAgICAgICAgICAgIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJMYWJlbH0gaWQ9e2hlYWRlci5pZH0+XG4gICAgICAgICAgICAgIHtoZWFkZXIudGV4dH1cbiAgICAgICAgICAgIDwvaDM+XG4gICAgICAgICAgKX1cbiAgICAgICAgICB7aGVhZGVyQWN0aW9uc31cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAgPHVsIGFyaWEtbGFiZWxsZWRieT17aGVhZGVyPy5pZH0gY2xhc3NOYW1lPXtzdHlsZXMubGlzdH0+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvdWw+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGlzdFZpZXdJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGFjdGl2ZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTGlzdFZpZXdJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgb25DbGljayA9ICgpID0+IHt9LFxufTogTGlzdFZpZXdJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25cbiAgICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b24+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uTGluayB9IGZyb20gXCIuLi9CdXR0b25MaW5rXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgTGlzdFZpZXdMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGFjdGl2ZTogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50OiBib29sZWFuO1xuICAgICAgbm9QYWRkaW5nOiBib29sZWFuO1xuICAgICAgYWxpZ246IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICAgIHNpemU6IFNpemU7XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTGlzdFZpZXdMaW5rSXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhczogQ29tcG9uZW50LFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIC4uLnByb3BzXG59OiBMaXN0Vmlld0xpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uTGlua1xuICAgICAgICBhcz17Q29tcG9uZW50fVxuICAgICAgICBpbnZlcnRlZD17YWN0aXZlfVxuICAgICAgICB0cmFuc3BhcmVudD17dHJhbnNwYXJlbnR9XG4gICAgICAgIG5vUGFkZGluZz17bm9QYWRkaW5nfVxuICAgICAgICBhbGlnbj17YWxpZ259XG4gICAgICAgIHNpemU9e3NpemV9XG4gICAgICAgIHN0cmV0Y2hIb3Jpem9udGFsbHlcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgey4uLnByb3BzfVxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbkxpbms+XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXdMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXcgfSBmcm9tIFwiLi9MaXN0Vmlld1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0l0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdMaW5rSXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlZk9iamVjdCxcbiAgdXNlQ29udGV4dCxcbiAgdXNlTGF5b3V0RWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBQbGFjZW1lbnRDb250ZXh0IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNPcGVuPzogYm9vbGVhbjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBmb290ZXI/OiBSZWFjdE5vZGU7XG4gIHNtYXJ0TGF5b3V0PzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIE1lbnUoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBjbGFzc05hbWUsXG4gIGlzT3BlbiA9IHRydWUsXG4gIGhlYWRlcixcbiAgZm9vdGVyLFxuICBzbWFydExheW91dCA9IHRydWUsXG59OiBNZW51UHJvcHMpIHtcbiAgY29uc3QgbWVudVBsYWNlbWVudCA9IHVzZUNvbnRleHQoUGxhY2VtZW50Q29udGV4dCk7XG4gIGNvbnN0IGlubmVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50IHwgbnVsbD4obnVsbCk7XG4gIGNvbnN0IHJlZiA9IGNvbnRhaW5lclJlZiB8fCBpbm5lclJlZjtcblxuICBpZiAoIW1lbnVQbGFjZW1lbnQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJNZW51IGNvbXBvbmVudCBtdXN0IGJlIHdyYXBwZWQgYnkgYSBNZW51Q29udGFpbmVyIGNvbXBvbmVudC5cIlxuICAgICk7XG5cbiAgdXNlTGF5b3V0RWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc21hcnRMYXlvdXQgJiYgcmVmLmN1cnJlbnQpIHtcbiAgICAgIGNvbnN0IHsgdG9wLCBib3R0b20gfSA9IHJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgY29uc3QgZGlzdGFuY2VUb0VkZ2UgPVxuICAgICAgICBtZW51UGxhY2VtZW50LnZlcnRpY2FsID09PSBcInRvcFwiID8gdG9wIDogd2luZG93LmlubmVySGVpZ2h0IC0gYm90dG9tO1xuXG4gICAgICBpZiAoZGlzdGFuY2VUb0VkZ2UgPCAwKSB7XG4gICAgICAgIGNvbnN0IHVsRWwgPSByZWYuY3VycmVudC5xdWVyeVNlbGVjdG9yKFwidWxcIik7XG4gICAgICAgIGNvbnN0IGNoaWxkRWxlbWVudHMgPSB1bEVsLnF1ZXJ5U2VsZWN0b3JBbGwoXCJsaSxhXCIpO1xuICAgICAgICBjb25zdCBuZXdIZWlnaHQgPSB1bEVsLmNsaWVudEhlaWdodCArIGRpc3RhbmNlVG9FZGdlO1xuICAgICAgICBjb25zdCBvZmZzZXQgPSBjaGlsZEVsZW1lbnRzLmxlbmd0aFxuICAgICAgICAgID8gZ2V0Q29tcHV0ZWRTdHlsZShjaGlsZEVsZW1lbnRzWzBdKS5taW5IZWlnaHRcbiAgICAgICAgICA6IDA7XG4gICAgICAgIHVsRWwuc3R5bGUubWF4SGVpZ2h0ID0gYGNhbGMoJHtuZXdIZWlnaHR9cHggLSAke29mZnNldH0pYDtcbiAgICAgIH1cbiAgICB9XG4gIH0sIFtpc09wZW4sIG1lbnVQbGFjZW1lbnQsIHNtYXJ0TGF5b3V0XSk7XG5cbiAgaWYgKCFpc09wZW4pIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5tZW51LFxuICAgICAgICAgIHsgW3N0eWxlcy5vcGVuXTogaXNPcGVuIH0sXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAgPGRpdj5cbiAgICAgICAgICB7aGVhZGVyICYmIGlzT3BlbiAmJiA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfT57aGVhZGVyfTwvaDM+fVxuICAgICAgICAgIDx1bD57Y2hpbGRyZW59PC91bD5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtmb290ZXIgJiYgaXNPcGVuICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgc3R5bGVzLmZvb3RlcixcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogIWNoaWxkcmVuIH0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7Zm9vdGVyfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnU7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWFjdEVsZW1lbnQsXG4gIGZvcndhcmRSZWYsXG4gIEZvcndhcmRlZFJlZixcbiAgdXNlTWVtbyxcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUNvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIE1lbnVQbGFjZW1lbnQgPSB7XG4gIGhvcml6b250YWw6IFwicmlnaHRcIiB8IFwibGVmdFwiO1xuICB2ZXJ0aWNhbDogXCJ0b3BcIiB8IFwiYm90dG9tXCI7XG59O1xuXG50eXBlIE1lbnVDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYnV0dG9uPzogUmVhY3RFbGVtZW50O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHBsYWNlbWVudD86IE1lbnVQbGFjZW1lbnQ7XG59O1xuXG5leHBvcnQgY29uc3QgUGxhY2VtZW50Q29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8XG4gIE1lbnVDb250YWluZXJQcm9wc1tcInBsYWNlbWVudFwiXSB8IHVuZGVmaW5lZFxuPih1bmRlZmluZWQpO1xuXG5mdW5jdGlvbiBNZW51Q29udGFpbmVyKFxuICB7XG4gICAgY2hpbGRyZW4sXG4gICAgYnV0dG9uLFxuICAgIGNsYXNzTmFtZSxcbiAgICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwibGVmdFwiLCB2ZXJ0aWNhbDogXCJib3R0b21cIiB9LFxuICB9OiBNZW51Q29udGFpbmVyUHJvcHMsXG4gIHJlZjogRm9yd2FyZGVkUmVmPEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e3JlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAge2J1dHRvbn1cbiAgICAgIDxQbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXt1c2VNZW1vKCgpID0+IHBsYWNlbWVudCwgW3BsYWNlbWVudF0pfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1lbnVDb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50Lmhvcml6b250YWxdLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC52ZXJ0aWNhbF0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9QbGFjZW1lbnRDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmb3J3YXJkUmVmKE1lbnVDb250YWluZXIpO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgU3ludGhldGljRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51SXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUl0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MTElFbGVtZW50PikgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE1lbnVJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIGlzQWN0aXZlID0gZmFsc2UsXG59OiBNZW51SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVJdGVtLFxuICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUgfSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVJdGVtO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgRWxlbWVudFR5cGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51TGlua0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVMaW5rSXRlbVByb3BzID1cbiAgfCB7XG4gICAgICBhczogRWxlbWVudFR5cGU7XG4gICAgICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICAgICAgY2xhc3NOYW1lOiBzdHJpbmc7XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIE1lbnVMaW5rSXRlbSh7XG4gIGFzOiBDb21wb25lbnQsXG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICAuLi5wcm9wc1xufTogTWVudUxpbmtJdGVtUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgZGF0YS10ZXN0aWQ9XCJtZW51LWxpbmstaXRlbVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm1lbnVMaW5rSXRlbSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1lbnVMaW5rSXRlbTtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudSB9IGZyb20gXCIuL01lbnVcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUNvbnRhaW5lciwgTWVudVBsYWNlbWVudCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUl0ZW0gfSBmcm9tIFwiLi9NZW51SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51TGlua0l0ZW0gfSBmcm9tIFwiLi9NZW51TGlua0l0ZW1cIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZUhvdGtleXMgfSBmcm9tIFwicmVhY3QtaG90a2V5cy1ob29rXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTW9kYWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1vZGFsUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGlzT3BlbixcbiAgYnV0dG9uLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBiYXNlWkluZGV4ID0gMTAwOSxcbn06IE1vZGFsUHJvcHMpIHtcbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcblxuICBjb25zdCBoYW5kbGVPdmVybGF5Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgb25DbG9zZSgpO1xuICB9LCBbb25DbG9zZV0pO1xuXG4gIHJldHVybiAoXG4gICAgaXNPcGVuICYmIChcbiAgICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub092ZXJsYXldOiBub092ZXJsYXkgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsLW92ZXJsYXlcIlxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU92ZXJsYXlDbGlja31cbiAgICAgICAgLz5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDEgfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbCxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWxcIlxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2J1dHRvbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMiB9fVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b259XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2J1dHRvbn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIClcbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1vZGFsIH0gZnJvbSBcIi4vTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vTnVtcGFkLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGJhY2tzcGFjZUljb24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9iYWNrc3BhY2Uuc3ZnXCI7XG5cbnR5cGUgRGlnaXQgPSAwIHwgMSB8IDIgfCAzIHwgNCB8IDUgfCA2IHwgNyB8IDggfCA5O1xuXG5jb25zdCBhcHBlbmREaWdpdCA9IChudW1iZXI6IG51bWJlciwgZGlnaXQ6IERpZ2l0KSA9PiB7XG4gIHJldHVybiBudW1iZXIgKiAxMCArIGRpZ2l0O1xufTtcblxuY29uc3QgcG9wRGlnaXQgPSAobnVtYmVyOiBudW1iZXIpID0+IHtcbiAgcmV0dXJuIE1hdGguZmxvb3IobnVtYmVyIC8gMTApO1xufTtcblxuY29uc3QgZXZlbnREaWdpdEtleXMgPSBbXCIwXCIsIFwiMVwiLCBcIjJcIiwgXCIzXCIsIFwiNFwiLCBcIjVcIiwgXCI2XCIsIFwiN1wiLCBcIjhcIiwgXCI5XCJdO1xuXG5leHBvcnQgaW50ZXJmYWNlIE51bXBhZFByb3BzIHtcbiAgbnVtYmVyOiBudW1iZXI7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U6IChuZXdOdW1iZXI6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGNvbnN0IE51bXBhZCA9IFJlYWN0LmZvcndhcmRSZWY8SFRNTERpdkVsZW1lbnQsIE51bXBhZFByb3BzPihcbiAgKHsgbnVtYmVyLCBvbkNoYW5nZSwgZGlzYWJsZWQgPSBmYWxzZSB9LCByZWYpID0+IHtcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShwb3BEaWdpdChudW1iZXIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnREaWdpdEtleXMuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGlnaXQgPSBwYXJzZUludChlLmtleSwgMTApIGFzIERpZ2l0O1xuICAgICAgICBvbkNoYW5nZShhcHBlbmREaWdpdChudW1iZXIsIGRpZ2l0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyID1cbiAgICAgIChuZXdOdW1iZXI6IG51bWJlcikgPT4gKGU6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShuZXdOdW1iZXIpO1xuICAgICAgfTtcblxuICAgIGNvbnN0IE51bXBhZEtleXMgPSBBcnJheSgxMClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBudW1wYWRWYWx1ZSA9ICgoaW5kZXggKyAxKSAlIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihcbiAgICAgICAgICAgICAgYXBwZW5kRGlnaXQobnVtYmVyLCBudW1wYWRWYWx1ZSlcbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdlxuICAgICAgICBjbGFzc05hbWU9e2Nzcy5udW1wYWR9XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICB0YWJJbmRleD17LTF9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJudW1wYWRcIlxuICAgICAgPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bWJlcnN9PlxuICAgICAgICAgIHtOdW1wYWRLZXlzfVxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y3NzLmJ1dHRvbn1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKHBvcERpZ2l0KG51bWJlcikpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGFsdD1cIkJhY2tzcGFjZVwiIHNyYz17YmFja3NwYWNlSWNvbn0gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuIiwiZXhwb3J0IHsgTnVtcGFkIH0gZnJvbSBcIi4vTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgT3ZlcmxheVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE92ZXJsYXkoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBpc0ZpeGVkID0gZmFsc2UsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IE92ZXJsYXlQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Hcm91cE9wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuLi9PcHRpb25cIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmdcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGxhYmVsOiBzdHJpbmc7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xufTtcblxuZnVuY3Rpb24gR3JvdXBPcHRpb24oeyBjbGFzc05hbWUsIGxhYmVsLCBvcHRpb25zIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2hvd0V4cGFuZGVkR3JvdXAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG4gIGNvbnN0IFtleHBhbmRlZCwgdG9nZ2xlRXhwYW5kXSA9IHVzZVRvZ2dsZShzaG93RXhwYW5kZWRHcm91cCk7XG5cbiAgY29uc3QgaGFuZGxlR3JvdXBDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVFeHBhbmQoKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzTmFtZX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0gb25DbGljaz17aGFuZGxlR3JvdXBDbGlja30+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PntsYWJlbH08L2Rpdj5cbiAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFt7IFtzdHlsZXMuZXhwYW5kZWRdOiBleHBhbmRlZCB9XSl9XG4gICAgICAgICAgc3JjPXtpY29uQ2FyZXREb3dufVxuICAgICAgICAgIGFsdD17ZXhwYW5kZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgLz5cbiAgICAgIDwvZGl2PlxuICAgICAge2V4cGFuZGVkICYmXG4gICAgICAgIG9wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8T3B0aW9uIGtleT17YCR7b3B0aW9uLnZhbHVlfS0ke29wdGlvbi5sYWJlbH1gfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyb3VwT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBHcm91cE9wdGlvbiB9IGZyb20gXCIuL0dyb3VwT3B0aW9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PcHRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vLi4vQ2hlY2tib3hcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IEljb25DaGVja01hcmsgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zdmdyL2NoZWNrLW1hcmsuc3ZnXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YTogT3B0aW9uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbih7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGRhdGEgfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG11bHRpcGxlLFxuICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICBzaG93U2VsZWN0ZWRXaXRoVGljayxcbiAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaXNDaGVja2VkID0gdXNlTWVtbyhcbiAgICAoKSA9PiBzZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKS5pbmNsdWRlcyhkYXRhLnZhbHVlKSxcbiAgICBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKGRhdGEpO1xuICB9LCBbZGF0YSwgc2VsZWN0ZWRPcHRpb25zXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc0NoZWNrZWQgJiYgIW11bHRpcGxlLFxuICAgICAgICAgIFtzdHlsZXMuc2hvd1NlbGVjdGVkV2l0aFRpY2tDb250YWluZXJdOlxuICAgICAgICAgICAgc2hvd1NlbGVjdGVkV2l0aFRpY2sgJiYgaXNDaGVja2VkLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgID5cbiAgICAgIHttdWx0aXBsZSAmJiAhc2hvd1NlbGVjdGVkV2l0aFRpY2sgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5sYWJlbCxcbiAgICAgICAgICB7IFtzdHlsZXMuc2VsZWN0ZWRMYWJlbF06IHNob3dTZWxlY3RlZFdpdGhUaWNrICYmIGlzQ2hlY2tlZCB9LFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge2RhdGE/Lm5vZGUgJiYgZGF0YS5ub2RlfVxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3NwYW4+XG4gICAgICB7c2hvd1NlbGVjdGVkV2l0aFRpY2sgJiYgaXNDaGVja2VkICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50aWNrQ29udGFpbmVyfT5cbiAgICAgICAgICA8SWNvbkNoZWNrTWFyayAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uXCI7XG4iLCJpbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlRWZmZWN0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQ2hlY2tib3ggfSBmcm9tIFwiLi4vLi4vQ2hlY2tib3hcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uIH0gZnJvbSBcIi4uL0dyb3VwT3B0aW9uXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9PcHRpb25MaXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG59O1xuXG4vLyBzZWUgZG9jcyB0byB1bmRlcnN0YW5kIG5lZWQgb2YgdGhlIGZ1bmN0aW9uIGJlbG93IGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rLzIvbmFycm93aW5nLmh0bWwjdXNpbmctdHlwZS1wcmVkaWNhdGVzXG5leHBvcnQgY29uc3QgaXNPcHRpb24gPSAoXG4gIG9wdGlvbjogT3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZVxuKTogb3B0aW9uIGlzIE9wdGlvblR5cGUgPT4ge1xuICByZXR1cm4gKG9wdGlvbiBhcyBPcHRpb25UeXBlKS52YWx1ZSAhPT0gdW5kZWZpbmVkO1xufTtcblxuZnVuY3Rpb24gT3B0aW9uTGlzdCh7IG9wdGlvbnMsIG9uRmlsdGVyLCBvbkNoYW5nZSB9OiBQcm9wcykge1xuICBjb25zdCBbc2VsZWN0QWxsQ2hlY2tlZCwgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuICBjb25zdCB7XG4gICAgbXVsdGlwbGUsXG4gICAgc2VhcmNoS2V5d29yZCxcbiAgICBzZWxlY3RBbGwsXG4gICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFzR3JvdXBPcHRpb24gPSBvcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gIWlzT3B0aW9uKG9wdGlvbikpO1xuXG4gIGNvbnN0IGZpbHRlck9wdGlvbnMgPSAob3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT4pID0+IHtcbiAgICBjb25zdCBrZXl3b3JkID0gc2VhcmNoS2V5d29yZC50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcblxuICAgIHJldHVybiBrZXl3b3JkLmxlbmd0aFxuICAgICAgPyBvcHRpb25zLmZpbHRlcigob3B0aW9uKSA9PlxuICAgICAgICAgIG9uRmlsdGVyXG4gICAgICAgICAgICA/IG9uRmlsdGVyKG9wdGlvbiwga2V5d29yZClcbiAgICAgICAgICAgIDogb3B0aW9uLmxhYmVsLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoa2V5d29yZClcbiAgICAgICAgKVxuICAgICAgOiBvcHRpb25zO1xuICB9O1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9ucyA9IHVzZU1lbW88QXJyYXk8R3JvdXBPcHRpb25UeXBlIHwgT3B0aW9uVHlwZT4+KCgpID0+IHtcbiAgICBpZiAoaGFzR3JvdXBPcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgKGZpbHRlcmVkOiBBcnJheTxHcm91cE9wdGlvblR5cGU+LCBncm91cE9wdGlvbjogR3JvdXBPcHRpb25UeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9wdGlvbnMgPSBmaWx0ZXJPcHRpb25zKGdyb3VwT3B0aW9uLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlcmVkR3JvdXBPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4uZmlsdGVyZWQsXG4gICAgICAgICAgICAgIHsgLi4uZ3JvdXBPcHRpb24sIG9wdGlvbnM6IGZpbHRlcmVkR3JvdXBPcHRpb25zIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb25zKG9wdGlvbnMgYXMgQXJyYXk8T3B0aW9uVHlwZT4pO1xuICAgIH1cbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBvcHRpb25zLCBzZWFyY2hLZXl3b3JkXSk7XG5cbiAgY29uc3QgZmlsdGVyZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gZmlsdGVyZWRPcHRpb25zLnJlZHVjZSgobGVuZ3RoOiBudW1iZXIsIG5leHRPcHRpb24pID0+IHtcbiAgICAgIGlmIChpc09wdGlvbihuZXh0T3B0aW9uKSkge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgMTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBsZW5ndGggKyBuZXh0T3B0aW9uLm9wdGlvbnMubGVuZ3RoO1xuICAgICAgfVxuICAgIH0sIDApO1xuICB9LCBbaGFzR3JvdXBPcHRpb24sIGZpbHRlcmVkT3B0aW9ucywgaXNPcHRpb25dKTtcblxuICBjb25zdCBzZWxlY3RlZE9wdGlvbnNDb3VudCA9IHVzZU1lbW8oKCkgPT4ge1xuICAgIHJldHVybiBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKChzZWxlY3RlZE9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5maW5kKChmaWx0ZXJlZE9wdGlvbikgPT4ge1xuICAgICAgICByZXR1cm4gaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pXG4gICAgICAgICAgPyBmaWx0ZXJlZE9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICA6IGZpbHRlcmVkT3B0aW9uLm9wdGlvbnMuZmluZChcbiAgICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSBzZWxlY3RlZE9wdGlvbi52YWx1ZVxuICAgICAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgIH0pLmxlbmd0aDtcbiAgfSwgW3NlbGVjdGVkT3B0aW9ucywgZmlsdGVyZWRPcHRpb25zXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICBjb25zdCBvcHRpb25zVG9TZWxlY3QgPSBmaWx0ZXJlZE9wdGlvbnNcbiAgICAgICAgLm1hcCgoZmlsdGVyZWRPcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24oZmlsdGVyZWRPcHRpb24pID8gZmlsdGVyZWRPcHRpb24gOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zXG4gICAgICAgIClcbiAgICAgICAgLmZsYXQoKTtcblxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKG9wdGlvbnNUb1NlbGVjdCk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShvcHRpb25zVG9TZWxlY3QubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShbXSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCgpO1xuICB9LCBbXG4gICAgZmlsdGVyZWRPcHRpb25zLFxuICAgIGlzT3B0aW9uLFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9uc0NvdW50ID09PSBmaWx0ZXJlZE9wdGlvbnNDb3VudCkge1xuICAgICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCh0cnVlKTtcbiAgICB9IGVsc2UgaWYgKHNlbGVjdEFsbENoZWNrZWQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoZmFsc2UpO1xuICAgIH1cbiAgfSwgW1xuICAgIHNlbGVjdGVkT3B0aW9uc0NvdW50LFxuICAgIGZpbHRlcmVkT3B0aW9uc0NvdW50LFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCxcbiAgXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+XG4gICAgICB7c2VsZWN0QWxsICYmIG11bHRpcGxlICYmICEhZmlsdGVyZWRPcHRpb25zLmxlbmd0aCAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RBbGxDb250YWluZXJ9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0QWxsQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdEFsbENoZWNrZWR9XG4gICAgICAgICAgICAgIGluZGV0ZXJtaW5hdGU9e1xuICAgICAgICAgICAgICAgICEhc2VsZWN0ZWRPcHRpb25zQ291bnQgJiZcbiAgICAgICAgICAgICAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCAhPT0gZmlsdGVyZWRPcHRpb25zQ291bnRcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9PlNlbGVjdCBBbGw8L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIHshIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICAgIGZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgICBpc09wdGlvbihvcHRpb24pID8gKFxuICAgICAgICAgICAgPE9wdGlvbiBrZXk9e2Ake29wdGlvbi52YWx1ZX0tJHtvcHRpb24ubGFiZWx9YH0gZGF0YT17b3B0aW9ufT5cbiAgICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgIDwvT3B0aW9uPlxuICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICA8R3JvdXBPcHRpb25cbiAgICAgICAgICAgICAga2V5PXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIGxhYmVsPXtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbi5vcHRpb25zfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApXG4gICAgICAgIClcbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubm9PcHRpb25zfT5cbiAgICAgICAgICBObyBtYXRjaGVzIGZvclxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaEtleXdvcmR9PntgICR7c2VhcmNoS2V5d29yZH1gfTwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb25MaXN0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPcHRpb25MaXN0LCBpc09wdGlvbiB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlYXJjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IFRleHRJbnB1dCB9IGZyb20gXCIuLi8uLi9UZXh0SW5wdXRcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vLi4vSWNvblwiO1xuaW1wb3J0IGljb25TZWFyY2ggZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWFyY2guc3ZnXCI7XG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbkJ1dHRvbiB9IGZyb20gXCIuLi8uLi9JY29uQnV0dG9uXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFNlYXJjaCh7IGNsYXNzTmFtZSB9OiBQcm9wcykge1xuICBjb25zdCB7IHNlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmQgfSA9IHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBzZXRTZWFyY2hLZXl3b3JkKHZhbHVlKTtcbiAgICB9LFxuICAgIFtzZWFyY2hLZXl3b3JkXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldFNlYXJjaEtleXdvcmQoXCJcIik7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5pY29uU2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgPEljb24gc3JjPXtpY29uU2VhcmNofSAvPlxuICAgICAgPC9kaXY+XG4gICAgICA8VGV4dElucHV0XG4gICAgICAgIHZhbHVlPXtzZWFyY2hLZXl3b3JkfVxuICAgICAgICBwbGFjZWhvbGRlcj1cIlR5cGUgdG8gc2VhcmNoLi4uXCJcbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2V9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAvPlxuICAgICAgPEljb25CdXR0b25cbiAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucmVzZXRCdXR0b259XG4gICAgICAgIHNyYz17aWNvbkNyb3NzZWR9XG4gICAgICAgIGFsdD1cIkNsZWFyXCJcbiAgICAgICAgb25DbGljaz17aGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXshc2VhcmNoS2V5d29yZH1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgIC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUxheW91dEVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljaywgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwiLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBPcHRpb25MaXN0IH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VsZWN0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgaWNvblNwaW5uZXIgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9zcGlubmVyLWNpcmNsZS5zdmdcIjtcblxudHlwZSBTZWxlY3RQcm9wcyA9IHtcbiAgZGVmYXVsdFZhbHVlPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd1NlbGVjdGVkQXNUYWdzPzogYm9vbGVhbjtcbiAgc2hvd1NlYXJjaD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgc2Nyb2xsTWVudUludG9WaWV3PzogYm9vbGVhbjtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIHdpZHRoOiBzdHJpbmc7XG4gIGxvYWRpbmc/OiBib29sZWFuO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xuICBzaG93U2VsZWN0ZWRXaXRoVGljaz86IGJvb2xlYW47XG4gIGVuYWJsZVNpbmdsZURlbGV0aW9uPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdCh7XG4gIGNsYXNzTmFtZSxcbiAgZGVmYXVsdFZhbHVlLFxuICBkaXNhYmxlZCxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgb3B0aW9ucyxcbiAgcGxhY2Vob2xkZXIsXG4gIGxhYmVsLFxuICBzZWxlY3RBbGwsXG4gIHNob3dFeHBhbmRlZEdyb3VwLFxuICBzY3JvbGxNZW51SW50b1ZpZXcgPSBmYWxzZSxcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHNob3dTZWxlY3RlZEFzVGFncyA9IGZhbHNlLFxuICBzaG93U2VhcmNoID0gZmFsc2UsXG4gIHNob3dTZWxlY3RlZFdpdGhUaWNrID0gZmFsc2UsXG4gIGVuYWJsZVNpbmdsZURlbGV0aW9uID0gZmFsc2UsXG4gIHdpZHRoLFxuICBsb2FkaW5nLFxuICBvbkNoYW5nZSxcbiAgb25GaWx0ZXIsXG59OiBTZWxlY3RQcm9wcykge1xuICBjb25zdCBbb3BlbmVkLCB0b2dnbGVPcGVuZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gdG9nZ2xlT3BlbmVkKGZhbHNlKSk7XG4gIGNvbnN0IGNvbnRlbnRSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KCk7XG5cbiAgY29uc3Qgb25SZXNpemUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29udGVudFJlZi5jdXJyZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6IFwic21vb3RoXCIsIGJsb2NrOiBcIm5lYXJlc3RcIiB9KTtcbiAgfSwgW10pO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKCFjb250ZW50UmVmLmN1cnJlbnQgfHwgIW9wZW5lZCB8fCAhc2Nyb2xsTWVudUludG9WaWV3KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgbGV0IFJPID0gbmV3IFJlc2l6ZU9ic2VydmVyKG9uUmVzaXplKTtcbiAgICBSTy5vYnNlcnZlKGNvbnRlbnRSZWYuY3VycmVudCk7XG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgUk8uZGlzY29ubmVjdCgpO1xuICAgICAgUk8gPSBudWxsO1xuICAgIH07XG4gIH0sIFtvcGVuZWQsIHNjcm9sbE1lbnVJbnRvVmlldywgb25SZXNpemVdKTtcblxuICBjb25zdCBoYW5kbGVPcGVuU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZU9wZW5lZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgICAgaWYgKCFtdWx0aXBsZSkgdG9nZ2xlT3BlbmVkKGZhbHNlKTtcblxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UodmFsdWVzKTtcbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0UHJvdmlkZXJcbiAgICAgIGRlZmF1bHRWYWx1ZT17ZGVmYXVsdFZhbHVlfVxuICAgICAgbXVsdGlwbGU9e211bHRpcGxlfVxuICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBzZWxlY3RBbGw9e3NlbGVjdEFsbH1cbiAgICAgIHNob3dFeHBhbmRlZEdyb3VwPXtzaG93RXhwYW5kZWRHcm91cH1cbiAgICAgIHNob3dTZWxlY3RlZFdpdGhUaWNrPXtzaG93U2VsZWN0ZWRXaXRoVGlja31cbiAgICAgIGVuYWJsZVNpbmdsZURlbGV0aW9uPXtlbmFibGVTaW5nbGVEZWxldGlvbn1cbiAgICA+XG4gICAgICA8ZGl2IHJlZj17cmVmfT5cbiAgICAgICAge2xhYmVsID8gPExhYmVsIHZhbHVlPXtsYWJlbH0gLz4gOiBudWxsfVxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgICAgID5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaGVhZGVyLCB7IFtzdHlsZXMuYWN0aXZlXTogb3BlbmVkIH1dKX1cbiAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZU9wZW5TZWxlY3R9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPFNlbGVjdG9yXG4gICAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgc2hvd1NlbGVjdGVkQXNUYWdzPXtzaG93U2VsZWN0ZWRBc1RhZ3N9XG4gICAgICAgICAgICAgIGlzRHJvcGRvd25PcGVuZWQ9e29wZW5lZH1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgICBzdHlsZXMuaWNvbkJ1dHRvbixcbiAgICAgICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiBvcGVuZWQgfSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICAgICAgYWx0PXtvcGVuZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgICAgLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICB7b3BlbmVkICYmIChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmNvbnRlbnQsXG4gICAgICAgICAgICAgICAgeyBbc3R5bGVzLmlzTG9hZGluZ106IGxvYWRpbmcgfSxcbiAgICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICAgIHJlZj17Y29udGVudFJlZn1cbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAge2xvYWRpbmcgPyAoXG4gICAgICAgICAgICAgICAgPEljb24gc2l6ZT1cImxhcmdlXCIgc3JjPXtpY29uU3Bpbm5lcn0gLz5cbiAgICAgICAgICAgICAgKSA6IChcbiAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAge29wdGlvbnMubGVuZ3RoID09PSAwID8gKFxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5vT3B0aW9uc30+Tm8gb3B0aW9ucyBhdmFpbGFibGU8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgICAgIDw+XG4gICAgICAgICAgICAgICAgICAgICAge3Nob3dTZWFyY2ggJiYgKFxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hDb250YWluZXJ9PlxuICAgICAgICAgICAgICAgICAgICAgICAgICA8U2VhcmNoIC8+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgICAgICAgIDxPcHRpb25MaXN0XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25GaWx0ZXI9e29uRmlsdGVyfVxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgICAgICA8Lz5cbiAgICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICl9XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICApfVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VsZWN0Q29udGV4dFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dFeHBhbmRlZEdyb3VwPzogYm9vbGVhbjtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbiAgc2hvd1NlbGVjdGVkV2l0aFRpY2s/OiBib29sZWFuO1xuICBlbmFibGVTaW5nbGVEZWxldGlvbj86IGJvb2xlYW47XG59O1xuXG50eXBlIFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIHNlbGVjdGVkT3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB2b2lkO1xuICBzZWFyY2hLZXl3b3JkOiBzdHJpbmc7XG4gIHNldFNlYXJjaEtleXdvcmQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4gdm9pZDtcbiAgc2hvd1NlbGVjdGVkV2l0aFRpY2s/OiBib29sZWFuO1xufTtcblxuY29uc3QgaW5pdGlhbFN0YXRlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlOiBmYWxzZSxcbiAgc2VsZWN0QWxsOiBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXA6IHRydWUsXG4gIHNlbGVjdGVkT3B0aW9uczogW10sXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAodmFsdWU6IE9wdGlvblR5cGUpID0+IHt9LFxuICBzZWFyY2hLZXl3b3JkOiBcIlwiLFxuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4ge30sXG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB7fSxcbiAgc2hvd1NlbGVjdGVkV2l0aFRpY2s6IGZhbHNlLFxufTtcblxuY29uc3QgU2VsZWN0Q29udGV4dCA9IGNyZWF0ZUNvbnRleHQ8U2VsZWN0Q29udGV4dFN0YXRlPihpbml0aWFsU3RhdGUpO1xuXG5jb25zdCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgPSAoe1xuICBjaGlsZHJlbixcbiAgZGVmYXVsdFZhbHVlLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBzZWxlY3RBbGwgPSBmYWxzZSxcbiAgc2hvd0V4cGFuZGVkR3JvdXAgPSB0cnVlLFxuICBvcHRpb25zLFxuICBvbkNoYW5nZSxcbiAgc2hvd1NlbGVjdGVkV2l0aFRpY2sgPSBmYWxzZSxcbiAgZW5hYmxlU2luZ2xlRGVsZXRpb24gPSBmYWxzZSxcbn06IFByb3BzKSA9PiB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxPcHRpb25UeXBlW10+KFxuICAgIGluaXRpYWxTdGF0ZS5zZWxlY3RlZE9wdGlvbnNcbiAgKTtcbiAgY29uc3QgW3NlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmRdID0gdXNlU3RhdGUoXG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaEtleXdvcmRcbiAgKTtcblxuICBjb25zdCB1cGRhdGVTZWxlY3RlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IE9wdGlvblR5cGUpID0+IHtcbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zO1xuICAgICAgY29uc3QgaXNPcHRpb25TZWxlY3RlZCA9IHNlbGVjdGVkT3B0aW9ucy5zb21lKFxuICAgICAgICAoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgICApO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBpc09wdGlvblNlbGVjdGVkXG4gICAgICAgICAgPyBzZWxlY3RlZE9wdGlvbnMuZmlsdGVyKCh7IHZhbHVlIH0pID0+IHZhbHVlICE9PSBvcHRpb24udmFsdWUpXG4gICAgICAgICAgOiBbLi4uc2VsZWN0ZWRPcHRpb25zLCBvcHRpb25dO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9XG4gICAgICAgICAgaXNPcHRpb25TZWxlY3RlZCAmJiBlbmFibGVTaW5nbGVEZWxldGlvbiAvLyBBbGxvdyBkZWxldGlvbiBvZiBzZWxlY3RlZCBvcHRpb24gaW4gc2luZ2xlIHNlbGVjdCBtb2RlXG4gICAgICAgICAgICA/IChbXSBhcyBPcHRpb25UeXBlW10pXG4gICAgICAgICAgICA6IFtvcHRpb25dO1xuICAgICAgfVxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMpO1xuXG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0sXG4gICAgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zLCBvbkNoYW5nZV1cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgICAgOiBbZGVmYXVsdFZhbHVlXTtcblxuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoKGFsbCwgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIGl0ZW1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4uaXRlbS5vcHRpb25zXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gYWxsT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0VmFsdWUsIG9wdGlvbnNdKTtcblxuICBjb25zdCBjb250ZXh0VmFsdWU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIG11bHRpcGxlLFxuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2hvd0V4cGFuZGVkR3JvdXAsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgICAgc2hvd1NlbGVjdGVkV2l0aFRpY2ssXG4gICAgICBlbmFibGVTaW5nbGVEZWxldGlvbixcbiAgICB9KSxcbiAgICBbXG4gICAgICBzZWxlY3RBbGwsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU2VsZWN0Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IFNlbGVjdENvbnRleHQsIFNlbGVjdENvbnRleHRQcm92aWRlciB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VsZWN0b3IubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vLi4vVGFnXCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHNob3dTZWxlY3RlZEFzVGFnczogYm9vbGVhbjtcbiAgaXNEcm9wZG93bk9wZW5lZDogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdG9yKHtcbiAgcGxhY2Vob2xkZXIsXG4gIHNob3dTZWxlY3RlZEFzVGFncyxcbiAgaXNEcm9wZG93bk9wZW5lZCxcbn06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2VsZWN0ZWRPcHRpb25zLCBtdWx0aXBsZSwgdXBkYXRlU2VsZWN0ZWRPcHRpb24gfSA9XG4gICAgdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVUYWdDbGljayA9IHVzZUNhbGxiYWNrKChldmVudDogUmVhY3QuTW91c2VFdmVudCkgPT4ge1xuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xvc2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+LCB2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9uID0gc2VsZWN0ZWRPcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLnZhbHVlID09PSB2YWx1ZSk7XG5cbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uKG9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH0sXG4gICAgW3NlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBwbGFjZWhvbGRlclRvU2hvdyA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKFxuICAgICAgPHNwYW5cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLnBsYWNlaG9sZGVyLFxuICAgICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0Ryb3Bkb3duT3BlbmVkIH0sXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICB7cGxhY2Vob2xkZXJ9XG4gICAgICA8L3NwYW4+XG4gICAgKSxcbiAgICBbcGxhY2Vob2xkZXIsIGlzRHJvcGRvd25PcGVuZWRdXG4gICk7XG5cbiAgY29uc3Qgc2hvd0FzVGFncyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgICBwbGFjZWhvbGRlclRvU2hvd1xuICAgICAgKSA6IChcbiAgICAgICAgPD5cbiAgICAgICAgICB7c2VsZWN0ZWRPcHRpb25zLm1hcCgoeyBsYWJlbCwgdmFsdWUgfSkgPT4gKFxuICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAga2V5PXt2YWx1ZX1cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudGFnV3JhcHBlcn1cbiAgICAgICAgICAgICAgb25DbGljaz17aGFuZGxlVGFnQ2xpY2t9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIDxUYWcga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfSBjbG9zYWJsZSBvbkNsb3NlPXtoYW5kbGVUYWdDbG9zZX0+XG4gICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICA8L1RhZz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC8+XG4gICAgICApLFxuICAgIFtzZWxlY3RlZE9wdGlvbnMsIHBsYWNlaG9sZGVyVG9TaG93XVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RleHQgPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgIDxzcGFuXG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RlZE9wdGlvbnN9XG4gICAgPntgJHtwbGFjZWhvbGRlcn0gKCR7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0pYH08L3NwYW4+XG4gICkgOiAoXG4gICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgKTtcblxuICBsZXQgY29udGVudDtcbiAgaWYgKG11bHRpcGxlKSB7XG4gICAgY29udGVudCA9IHNob3dTZWxlY3RlZEFzVGFncyA/IHNob3dBc1RhZ3MgOiBzaG93QXNUZXh0O1xuICB9IGVsc2Uge1xuICAgIGNvbnRlbnQgPSAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICAgKSA6IChcbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNlbGVjdGVkT3B0aW9ufT5cbiAgICAgICAge3NlbGVjdGVkT3B0aW9uc1swXS5ub2RlICYmIHNlbGVjdGVkT3B0aW9uc1swXS5ub2RlfVxuICAgICAgICB7c2VsZWN0ZWRPcHRpb25zWzBdLmxhYmVsfVxuICAgICAgPC9zcGFuPlxuICAgICk7XG4gIH1cblxuICByZXR1cm4gY29udGVudDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0b3I7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdG9yIH0gZnJvbSBcIi4vU2VsZWN0b3JcIjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0IH0gZnJvbSBcIi4vU2VsZWN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgRml4ZWRTaXplTGlzdCwgTGlzdE9uU2Nyb2xsUHJvcHMgfSBmcm9tIFwicmVhY3Qtd2luZG93XCI7XG5pbXBvcnQgSW5maW5pdGVMb2FkZXIgZnJvbSBcInJlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXJcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyIGZyb20gXCIuL1RhYmxlSGVhZGVyXCI7XG5pbXBvcnQgVGFibGVSb3cgZnJvbSBcIi4vVGFibGVSb3dcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgVGFibGVDb25maWcgfSBmcm9tIFwiLi4vLi4vY29uc3RhbnRzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGUubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlID0ge1xuICBrZXk6IHN0cmluZztcbiAgdGl0bGU6IEpTWC5FbGVtZW50IHwgc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGFJbmRleDogc3RyaW5nO1xuICByZW5kZXI/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZykgPT4gSlNYLkVsZW1lbnQ7XG4gIHdpZHRoPzogc3RyaW5nO1xuICBkZWZhdWx0U29ydE9yZGVyPzogU29ydE9yZGVyO1xuICBzb3J0ZWQ/OiBib29sZWFuO1xuICBzb3J0YWJsZT86IGJvb2xlYW47XG4gIG9uU29ydD86IChzb3J0T3JkZXI6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgZGF0YVNvdXJjZTogUmVjb3JkPHN0cmluZywgYW55PltdO1xuICB0YWJsZUhlaWdodDogbnVtYmVyO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgb25Mb2FkTW9yZT86IChwYWdlOiBudW1iZXIpID0+IHZvaWQ7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHNldFBhZ2U/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlU2l6ZT86IG51bWJlcjtcbiAgcGxhY2Vob2xkZXI/OiBSZWFjdC5SZWFjdEVsZW1lbnQ7XG4gIHJvd0hlaWdodD86IG51bWJlcjtcbiAgaGVhZGVySGVpZ2h0PzogbnVtYmVyO1xuICBkaXNhYmxlTGF6eUxvYWRlcj86IGJvb2xlYW47XG4gIGFjdGl2ZVJvd3M/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+O1xuICBpdGVtc0NvdW50PzogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG4gIGhhc1ZpcnR1YWxTY3JvbGw/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIHNjcm9sbFRvVG9wPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlKHtcbiAgY29sdW1ucyxcbiAgZGF0YVNvdXJjZSxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIG9uTG9hZE1vcmUsXG4gIHBhZ2UsXG4gIHNldFBhZ2UsXG4gIHBhZ2VTaXplID0gVGFibGVDb25maWcuUEFHRV9TSVpFLFxuICB0YWJsZUhlaWdodCxcbiAgcGxhY2Vob2xkZXIsXG4gIHJvd0hlaWdodCA9IFRhYmxlQ29uZmlnLlJPV19IRUlHSFQsXG4gIGhlYWRlckhlaWdodCA9IFRhYmxlQ29uZmlnLkhFQURFUl9IRUlHSFQsXG4gIGRpc2FibGVMYXp5TG9hZGVyLFxuICBhY3RpdmVSb3dzLFxuICBpdGVtc0NvdW50LFxuICBpc0hlYWRlclN0aWNreSA9IGZhbHNlLFxuICBoYXNWaXJ0dWFsU2Nyb2xsID0gdHJ1ZSxcbiAgc2Nyb2xsVG9Ub3AgPSBmYWxzZSxcbiAgY2xhc3NOYW1lLFxufTogUHJvcHMpIHtcbiAgY29uc3QgW3Njcm9sbFRvcCwgc2V0U2Nyb2xsVG9wXSA9IHVzZVN0YXRlKDApO1xuXG4gIGNvbnN0IHJlbmRlclJvdyA9IHVzZUNhbGxiYWNrKFxuICAgICh7IGRhdGEsIGluZGV4LCBzdHlsZSB9OiB7IGRhdGE6IGFueTsgaW5kZXg6IG51bWJlcjsgc3R5bGU6IGFueSB9KSA9PiB7XG4gICAgICBjb25zdCByb3cgPSBkYXRhW2luZGV4XTtcbiAgICAgIHJldHVybiAoXG4gICAgICAgIDxkaXYgc3R5bGU9e3sgLi4uc3R5bGUsIHRvcDogc3R5bGUudG9wIH19PlxuICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3cuaWRdfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKTtcbiAgICB9LFxuICAgIFtjb2x1bW5zLCBhY3RpdmVSb3dzLCBoYXNBcnJvdywgcm93SGVpZ2h0LCBvblJvd0NsaWNrXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZUxpc3RTY3JvbGwgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBzY3JvbGxPZmZzZXQgfTogTGlzdE9uU2Nyb2xsUHJvcHMpID0+IHtcbiAgICAgIHNldFNjcm9sbFRvcChzY3JvbGxPZmZzZXQpO1xuICAgIH0sXG4gICAgW11cbiAgKTtcblxuICBjb25zdCBsb2FkTW9yZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPT09IGl0ZW1zQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoZGF0YVNvdXJjZS5sZW5ndGggPCBwYWdlU2l6ZSAqIHBhZ2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAoc2V0UGFnZSAmJiBvbkxvYWRNb3JlKSB7XG4gICAgICBzZXRQYWdlKHBhZ2UgKyAxKTtcbiAgICAgIG9uTG9hZE1vcmUocGFnZSArIDEpO1xuICAgIH1cbiAgfSwgW1xuICAgIGRpc2FibGVMYXp5TG9hZGVyLFxuICAgIGRhdGFTb3VyY2UubGVuZ3RoLFxuICAgIGl0ZW1zQ291bnQsXG4gICAgcGFnZVNpemUsXG4gICAgcGFnZSxcbiAgICBzZXRQYWdlLFxuICAgIG9uTG9hZE1vcmUsXG4gIF0pO1xuXG4gIGNvbnN0IGlzSXRlbUxvYWRlZCA9IHVzZUNhbGxiYWNrKFxuICAgIChpbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICBpZiAoZGlzYWJsZUxhenlMb2FkZXIpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gaW5kZXggPCBkYXRhU291cmNlLmxlbmd0aCAtIFRhYmxlQ29uZmlnLklURU1TX0xPQURFRDtcbiAgICB9LFxuICAgIFtkYXRhU291cmNlLmxlbmd0aCwgZGlzYWJsZUxhenlMb2FkZXJdXG4gICk7XG5cbiAgY29uc3QgbGlzdFJlZiA9IHVzZVJlZihudWxsKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzY3JvbGxUb1RvcCAmJiBsaXN0UmVmLmN1cnJlbnQpIHtcbiAgICAgIGxpc3RSZWYuY3VycmVudC5zY3JvbGxUb0l0ZW0oMCk7XG4gICAgfVxuICB9LCBbZGF0YVNvdXJjZV0pO1xuXG4gIHJldHVybiAoXG4gICAgPD5cbiAgICAgIHtoYXNWaXJ0dWFsU2Nyb2xsID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhYmxlfT5cbiAgICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBzY3JvbGxUb3A9e3Njcm9sbFRvcH1cbiAgICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXtoZWFkZXJIZWlnaHR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgeyEhcGxhY2Vob2xkZXIgJiYgIWRhdGFTb3VyY2UubGVuZ3RoID8gKFxuICAgICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMucGxhY2Vob2xkZXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgIDxJbmZpbml0ZUxvYWRlclxuICAgICAgICAgICAgICAgIGlzSXRlbUxvYWRlZD17aXNJdGVtTG9hZGVkfVxuICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgbG9hZE1vcmVJdGVtcz17bG9hZE1vcmV9XG4gICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICB7KHsgb25JdGVtc1JlbmRlcmVkIH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxGaXhlZFNpemVMaXN0XG4gICAgICAgICAgICAgICAgICAgIHJlZj17bGlzdFJlZn1cbiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PXt0YWJsZUhlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgd2lkdGg9XCIxMDAlXCJcbiAgICAgICAgICAgICAgICAgICAgaXRlbVNpemU9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbUNvdW50PXtkYXRhU291cmNlLmxlbmd0aH1cbiAgICAgICAgICAgICAgICAgICAgaXRlbURhdGE9e2RhdGFTb3VyY2V9XG4gICAgICAgICAgICAgICAgICAgIG9uU2Nyb2xsPXtoYW5kbGVMaXN0U2Nyb2xsfVxuICAgICAgICAgICAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ9e29uSXRlbXNSZW5kZXJlZH1cbiAgICAgICAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICB7cmVuZGVyUm93fVxuICAgICAgICAgICAgICAgICAgPC9GaXhlZFNpemVMaXN0PlxuICAgICAgICAgICAgICAgICl9XG4gICAgICAgICAgICAgIDwvSW5maW5pdGVMb2FkZXI+XG4gICAgICAgICAgICApfVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgICAgICBzdHlsZXMuc2Nyb2xsYmFyQ29udGFpbmVyLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgPlxuICAgICAgICAgIDxUYWJsZUhlYWRlclxuICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgIHNjcm9sbFRvcD17c2Nyb2xsVG9wfVxuICAgICAgICAgICAgaXNIZWFkZXJTdGlja3k9e2lzSGVhZGVyU3RpY2t5fVxuICAgICAgICAgICAgaGVhZGVySGVpZ2h0PXtoZWFkZXJIZWlnaHR9XG4gICAgICAgICAgLz5cbiAgICAgICAgICB7ZGF0YVNvdXJjZS5tYXAoKHJvdywgaW5kZXgpID0+IChcbiAgICAgICAgICAgIDxUYWJsZVJvd1xuICAgICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICAgIG9uUm93Q2xpY2s9e29uUm93Q2xpY2t9XG4gICAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgIGlzQWN0aXZlPXshIWFjdGl2ZVJvd3M/Lltyb3c/LmlkXX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGU7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlckNlbGwgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgc2Nyb2xsVG9wOiBudW1iZXI7XG4gIGlzSGVhZGVyU3RpY2t5PzogYm9vbGVhbjtcbiAgaGVhZGVySGVpZ2h0PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXIoe1xuICBjb2x1bW5zLFxuICBzY3JvbGxUb3AsXG4gIGlzSGVhZGVyU3RpY2t5LFxuICBoZWFkZXJIZWlnaHQsXG59OiBQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuYm9yZGVyQm90dG9tXTogISFzY3JvbGxUb3AgfSxcbiAgICAgICAgeyBbc3R5bGVzLmlzSGVhZGVyU3RpY2t5XTogaXNIZWFkZXJTdGlja3kgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiBoZWFkZXJIZWlnaHQgfX1cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPFRhYmxlSGVhZGVyQ2VsbFxuICAgICAgICAgIGtleT17YHRhYmxlLWhlYWQtY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IGljb25DYXJldFVwIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtdXAuc3ZnXCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyQ2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyQ2VsbCh7IGNvbHVtbiB9OiBQcm9wcykge1xuICBjb25zdCB7XG4gICAgb25Tb3J0LFxuICAgIHNvcnRhYmxlLFxuICAgIHNvcnRlZCxcbiAgICBkZWZhdWx0U29ydE9yZGVyLFxuICAgIHRpdGxlLFxuICAgIHdpZHRoLFxuICAgIGNsYXNzTmFtZSxcbiAgfSA9IGNvbHVtbjtcblxuICBjb25zdCBbc29ydE9yZGVyLCBzZXRTb3J0T3JkZXJdID0gdXNlU3RhdGUoXG4gICAgKCkgPT4gZGVmYXVsdFNvcnRPcmRlciB8fCBTb3J0T3JkZXIuREVTQ1xuICApO1xuXG4gIGNvbnN0IGhhbmRsZVNvcnRDb2x1bW4gPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzb3J0ZWQpIHtcbiAgICAgIHJldHVybiBvblNvcnQoc29ydE9yZGVyKTtcbiAgICB9XG4gICAgY29uc3QgbmV3U29ydE9yZGVyID1cbiAgICAgIHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MgPyBTb3J0T3JkZXIuQVNDIDogU29ydE9yZGVyLkRFU0M7XG4gICAgc2V0U29ydE9yZGVyKG5ld1NvcnRPcmRlcik7XG4gICAgb25Tb3J0KG5ld1NvcnRPcmRlcik7XG4gIH0sIFtvblNvcnQsIHNvcnRPcmRlciwgc29ydGVkXSk7XG5cbiAgY29uc3QgY2VsbFByb3BzID1cbiAgICBvblNvcnQgJiYgc29ydGFibGVcbiAgICAgID8ge1xuICAgICAgICAgIG9uQ2xpY2s6IGhhbmRsZVNvcnRDb2x1bW4sXG4gICAgICAgIH1cbiAgICAgIDoge307XG5cbiAgY29uc3QgZGlzcGxheUFycm93ID0gKCk6IHN0cmluZyA9PiB7XG4gICAgaWYgKHNvcnRPcmRlciA9PT0gU29ydE9yZGVyLkRFU0MpIHtcbiAgICAgIHJldHVybiBpY29uQ2FyZXREb3duO1xuICAgIH1cbiAgICByZXR1cm4gaWNvbkNhcmV0VXA7XG4gIH07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICB7Li4uY2VsbFByb3BzfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50YWJsZUhlYWRlckNlbGwsXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc29ydEljb25WaXNpYmxlXTogc29ydGFibGUgJiYgc29ydGVkLFxuICAgICAgICAgIFtzdHlsZXMuc29ydGFibGVdOiBzb3J0YWJsZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgc3R5bGU9e3sgd2lkdGggfX1cbiAgICA+XG4gICAgICB7dGl0bGV9XG4gICAgICB7c29ydGFibGUgPyAoXG4gICAgICAgIDxJY29uIGFsdD17XCJTb3J0IGJ1dHRvblwifSBzaXplPVwic21hbGxcIiBzcmM9e2Rpc3BsYXlBcnJvdygpfSAvPlxuICAgICAgKSA6IG51bGx9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyQ2VsbDtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgVGFibGVSb3dDZWxsIGZyb20gXCIuL1RhYmxlUm93Q2VsbFwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3cubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIG9uUm93Q2xpY2s/OiAoZGF0YTogUmVjb3JkPHN0cmluZywgYW55PikgPT4gdm9pZDtcbiAgaGFzQXJyb3c/OiBib29sZWFuO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gVGFibGVSb3coe1xuICBkYXRhLFxuICBjb2x1bW5zLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgcm93SGVpZ2h0LFxuICBpc0FjdGl2ZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZVJvd0NsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChvblJvd0NsaWNrICYmIHR5cGVvZiBkYXRhICE9PSBcInN0cmluZ1wiKSB7XG4gICAgICBvblJvd0NsaWNrKGRhdGEpO1xuICAgIH1cbiAgfSwgW2RhdGEsIG9uUm93Q2xpY2tdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5oYXNBcnJvd106IGhhc0Fycm93LFxuICAgICAgICAgIFtzdHlsZXMuYWN0aXZlXTogaXNBY3RpdmUsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZVJvd0NsaWNrfVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVSb3dDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtcm93LWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIGl0ZW09e2RhdGF9XG4gICAgICAgICAgY29sdW1uPXtjb2x1bW59XG4gICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgIC8+XG4gICAgICApKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3c7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGl0ZW06IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbjogQ29sdW1uVHlwZTtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvd0NlbGwoeyBpdGVtLCBjb2x1bW4sIHJvd0hlaWdodCB9OiBQcm9wcyk6IEpTWC5FbGVtZW50IHtcbiAgY29uc3QgZGF0YSA9IHR5cGVvZiBpdGVtID09PSBcInN0cmluZ1wiID8gaXRlbSA6IGl0ZW1bY29sdW1uLmRhdGFJbmRleF07XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjb2x1bW4uY2xhc3NOYW1lXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IHJvd0hlaWdodCwgd2lkdGg6IGNvbHVtbj8ud2lkdGggfX1cbiAgICA+XG4gICAgICB7Y29sdW1uLnJlbmRlciA/IGNvbHVtbi5yZW5kZXIoZGF0YSkgOiBkYXRhfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvd0NlbGw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhYmxlIH0gZnJvbSBcIi4vVGFibGVcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNyb3NzZWQgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jcm9zc2VkLnN2Z1wiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhZy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY2xvc2FibGU/OiBib29sZWFuO1xuICB2YWx1ZT86IHN0cmluZztcbiAgaWQ/OiBzdHJpbmc7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgb25EZWxldGU/OiAoaWQ6IHN0cmluZykgPT4gdm9pZDtcbiAgb25DbG9zZT86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUYWcoe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBjbG9zYWJsZSxcbiAgdmFsdWUsXG4gIG9uQ2xvc2UsXG4gIGRpc2FibGVkLFxuICBvbkRlbGV0ZSxcbiAgaWQsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MU3BhbkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAodHlwZW9mIG9uRGVsZXRlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25EZWxldGUoaWQpO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBvbkNsb3NlID09PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgb25DbG9zZShldmVudCwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2xvc2UsIG9uRGVsZXRlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgeyBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQgfV0pfVxuICAgID5cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L3NwYW4+XG4gICAgICB7Y2xvc2FibGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jbG9zZUJ1dHRvbn0gb25DbGljaz17aGFuZGxlQ2xpY2t9PlxuICAgICAgICAgIDxJY29uIHNyYz17aWNvbkNyb3NzZWR9IGFsdD1cIkNsb3NlXCIgc2l6ZT1cInNtYWxsXCIgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFnO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWcgfSBmcm9tIFwiLi9UYWdcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgdjQgYXMgdXVpZHY0IH0gZnJvbSBcInV1aWRcIjtcbmltcG9ydCB7IEhpbnQgfSBmcm9tIFwicmVhY3QtYXV0b2NvbXBsZXRlLWhpbnRcIjtcblxuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vVGFnXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlLCBUYWdUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnc0lucHV0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUYWdzSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IHN0cmluZ1tdKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmdbXTtcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIHdpdGhTY3JvbGw/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0YWdPcHRpb25zPzogc3RyaW5nW107XG59O1xuXG5mdW5jdGlvbiBUYWdzSW5wdXQoe1xuICBjbGFzc05hbWUsXG4gIG9uQ2hhbmdlLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJzbWFsbFwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB3aXRoU2Nyb2xsID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbiAgZGlzYWJsZWQsXG4gIHRhZ09wdGlvbnMgPSBbXSxcbn06IFRhZ3NJbnB1dFByb3BzKSB7XG4gIGNvbnN0IFt0ZXh0LCBzZXRUZXh0XSA9IHVzZVN0YXRlPHN0cmluZz4oXCJcIik7XG4gIGNvbnN0IFt0YWdzLCBzZXRUYWdzXSA9IHVzZVN0YXRlPFRhZ1R5cGVbXT4oKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICh2YWx1ZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHZhbHVlLm1hcCgodGFnKSA9PiAoeyBpZDogdXVpZHY0KCksIGxhYmVsOiB0YWcgfSkpO1xuICAgICAgc2V0VGFncyh0YWdzQXJyKTtcbiAgICB9XG4gIH0sIFt2YWx1ZSwgc2V0VGFnc10pO1xuXG4gIGNvbnN0IGhhbmRsZVRleHRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZTtcblxuICAgICAgc2V0VGV4dCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2V0VGV4dF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVUYWdEZWxldGUgPSB1c2VDYWxsYmFjayhcbiAgICAoaWQ6IHN0cmluZykgPT4ge1xuICAgICAgY29uc3QgdXBkYXRlZFRhZ3MgPSB0YWdzLmZpbHRlcigodGFnKSA9PiB0YWcuaWQgIT09IGlkKTtcbiAgICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKTtcbiAgICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgICB9XG4gICAgfSxcbiAgICBbdGFncywgc2V0VGFncywgb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQWRkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWRUZXh0ID0gdGV4dC50cmltKCk7XG4gICAgbGV0IHVwZGF0ZWRUYWdzID0gWy4uLnRhZ3NdO1xuXG4gICAgaWYgKHRyaW1tZWRUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHRhZyA9IHsgaWQ6IHV1aWR2NCgpLCBsYWJlbDogdHJpbW1lZFRleHQgfTtcbiAgICAgIHVwZGF0ZWRUYWdzID0gWy4uLnRhZ3MsIHRhZ107XG4gICAgfVxuXG4gICAgc2V0VGFncyh1cGRhdGVkVGFncyk7XG4gICAgc2V0VGV4dChcIlwiKTtcblxuICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgY29uc3QgdGFnc0FyciA9IHVwZGF0ZWRUYWdzLm1hcCgodGFnKSA9PiB0YWcubGFiZWwpO1xuICAgICAgb25DaGFuZ2UodGFnc0Fycik7XG4gICAgfVxuICB9LCBbdGFncywgdGV4dCwgc2V0VGFncywgc2V0VGV4dF0pO1xuXG4gIGNvbnN0IGhhbmRsZUtleURvd24gPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmNvZGUgPT09IFwiRW50ZXJcIiB8fCBlLmNvZGUgPT09IFwiTnVtcGFkRW50ZXJcIikge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGhhbmRsZVRhZ0FkZCgpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW2hhbmRsZVRhZ0FkZF1cbiAgKTtcblxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4ge1xuICAgIGNvbnN0IHRyaW1tZWRUZXh0ID0gdGV4dC50cmltKCk7XG5cbiAgICBpZiAodHJpbW1lZFRleHQubGVuZ3RoID4gMCkge1xuICAgICAgaGFuZGxlVGFnQWRkKCk7XG4gICAgfVxuICB9KTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPEhpbnQgb3B0aW9ucz17dGFnT3B0aW9uc30gYWxsb3dFbnRlckZpbGw9e3RydWV9IGFsbG93VGFiRmlsbD17dHJ1ZX0+XG4gICAgICA8aW5wdXRcbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICAgIF0pfVxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlVGV4dENoYW5nZX1cbiAgICAgICAgb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufVxuICAgICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgIG5hbWU9e25hbWV9XG4gICAgICAgIHR5cGU9e3R5cGV9XG4gICAgICAgIHZhbHVlPXt0ZXh0fVxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIC8+XG4gICAgPC9IaW50PlxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLCBbc3R5bGVzLnNjcm9sbGFibGVdOiB3aXRoU2Nyb2xsIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgcmVmPXtyZWZ9XG4gICAgPlxuICAgICAge3RhZ3M/Lm1hcCgoeyBpZCwgbGFiZWwgfSkgPT4gKFxuICAgICAgICA8VGFnIGtleT17aWR9IHZhbHVlPXtsYWJlbH0gaWQ9e2lkfSBvbkRlbGV0ZT17aGFuZGxlVGFnRGVsZXRlfSBjbG9zYWJsZT5cbiAgICAgICAgICB7bGFiZWx9XG4gICAgICAgIDwvVGFnPlxuICAgICAgKSl9XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnRhZ0lucHV0fT57aW5wdXRFbGVtZW50fTwvZGl2PlxuICAgIDwvZGl2PlxuICApO1xufVxuZXhwb3J0IGRlZmF1bHQgVGFnc0lucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWdzSW5wdXQgfSBmcm9tIFwiLi9UYWdzSW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBMYWJlbCB9IGZyb20gXCIuLi9MYWJlbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UZXh0SW5wdXQubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0TW9kZSwgVGV4dElucHV0VHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIFRleHRJbnB1dFByb3BzID0ge1xuICBsYWJlbD86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgb25CbHVyPzogKCkgPT4gdm9pZDtcbiAgb25LZXlEb3duPzogKGV2ZW50OiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbnB1dFJlZj86IFJlYWN0LlJlZk9iamVjdDxIVE1MSW5wdXRFbGVtZW50PjtcbiAgaW5wdXRNb2RlPzogVGV4dElucHV0TW9kZTtcbn07XG5cbmZ1bmN0aW9uIFRleHRJbnB1dCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgb25CbHVyLFxuICBvbktleURvd24sXG4gIHBsYWNlaG9sZGVyLFxuICB2YWx1ZSxcbiAgbmFtZSxcbiAgcGF0dGVybixcbiAgaW5wdXRSZWYsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJ0ZXh0XCIsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG59OiBUZXh0SW5wdXRQcm9wcykge1xuICBjb25zdCBoYW5kbGVDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAoZTogUmVhY3QuRm9ybUV2ZW50PEhUTUxJbnB1dEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgICAgb25DaGFuZ2UoKGUudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImlucHV0XCJcbiAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRleHRJbnB1dCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgXSl9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgb25CbHVyPXtvbkJsdXJ9XG4gICAgICBvbktleURvd249e29uS2V5RG93bn1cbiAgICAgIHBhdHRlcm49e3BhdHRlcm59XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHZhbHVlPXt2YWx1ZX1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgaW5wdXRNb2RlPXtpbnB1dE1vZGV9XG4gICAgLz5cbiAgKTtcbiAgaWYgKGxhYmVsKSB7XG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XG4gIH1cbn1cbmV4cG9ydCBkZWZhdWx0IFRleHRJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGV4dElucHV0IH0gZnJvbSBcIi4vVGV4dElucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBUb2FzdCh7IGNoaWxkcmVuLCBjb250YWluZXJSZWYsIG9uQ2xpY2sgPSAoKSA9PiB7fSB9OiBUb2FzdFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e3N0eWxlcy50b2FzdH1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0XCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0O1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdENvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5mdW5jdGlvbiBUb2FzdENvbnRhaW5lcih7IGNoaWxkcmVuLCBiYXNlWkluZGV4IH06IFRvYXN0Q29udGFpbmVyUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudG9hc3RDb250YWluZXJdKX1cbiAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdC1jb250YWluZXJcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RDb250YWluZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0IH0gZnJvbSBcIi4vVG9hc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3RDb250YWluZXIgfSBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUVmZmVjdCxcbiAgdXNlU3RhdGUsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBjcmVhdGVQb3J0YWwgfSBmcm9tIFwicmVhY3QtZG9tXCI7XG5pbXBvcnQgc2Nyb2xsUGFyZW50IGZyb20gXCJzY3JvbGxwYXJlbnRcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub29sdGlwLm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb29sdGlwUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIHRleHQ6IHN0cmluZztcbiAgcGxhY2VtZW50OiBcImxlZnRcIiB8IFwicmlnaHRcIiB8IFwidG9wXCIgfCBcImJvdHRvbVwiO1xuICBwb3NpdGlvbj86IFwiYWJzb2x1dGVcIiB8IFwiZml4ZWRcIjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICB0b3VjaFNjcmVlbkhpZGluZ0RlbGF5PzogbnVtYmVyO1xuICBzaG93VG9vbHRpcDogYm9vbGVhbjtcbn07XG5cbmNvbnN0IG1hcFBsYWNlbWVudFRvUG9zaXRpb25TdHlsZXMgPSAoXG4gIHBsYWNlbWVudDogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIixcbiAgcG9zaXRpb246IFwiYWJzb2x1dGVcIiB8IFwiZml4ZWRcIixcbiAgcmVjdDogRE9NUmVjdFxuKSA9PiB7XG4gIGNvbnN0IHsgdG9wLCBsZWZ0LCBoZWlnaHQsIHdpZHRoIH0gPSByZWN0O1xuICBsZXQgcG9zaXRpb25TdHlsZXMgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuICBzd2l0Y2ggKHBsYWNlbWVudCkge1xuICAgIGNhc2UgXCJsZWZ0XCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AgKyBoZWlnaHQgLyAyLFxuICAgICAgICBsZWZ0OiBsZWZ0LFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wICsgaGVpZ2h0IC8gMixcbiAgICAgICAgbGVmdDogbGVmdCArIHdpZHRoLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJib3R0b21cIjpcbiAgICAgIHBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCArIGhlaWdodCxcbiAgICAgICAgbGVmdDogbGVmdCArIHdpZHRoIC8gMixcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwidG9wXCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCAvIDIsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gcG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIlxuICAgID8ge1xuICAgICAgICB0b3A6IHBvc2l0aW9uU3R5bGVzLnRvcCArIHdpbmRvdy5zY3JvbGxZLFxuICAgICAgICBsZWZ0OiBwb3NpdGlvblN0eWxlcy5sZWZ0ICsgd2luZG93LnNjcm9sbFgsXG4gICAgICB9XG4gICAgOiBwb3NpdGlvblN0eWxlcztcbn07XG5cbmZ1bmN0aW9uIFRvb2x0aXAoe1xuICBjaGlsZHJlbixcbiAgdGV4dCxcbiAgcGxhY2VtZW50LFxuICBwb3NpdGlvbiA9IFwiYWJzb2x1dGVcIixcbiAgc2hvd1Rvb2x0aXAsXG4gIGNsYXNzTmFtZSxcbiAgdG91Y2hTY3JlZW5IaWRpbmdEZWxheSA9IDUwMDAsXG59OiBUb29sdGlwUHJvcHMpIHtcbiAgY29uc3QgW3Bvc2l0aW9uU3R5bGVzLCBzZXRQb3NpdGlvblN0eWxlc10gPSB1c2VTdGF0ZSh7XG4gICAgbGVmdDogMCxcbiAgICB0b3A6IDAsXG4gIH0pO1xuICBjb25zdCBbdG9vbHRpcElzVmlzaWJsZSwgc2V0VG9vbHRpcElzVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG5cbiAgY29uc3QgdGltZXJSZWYgPSB1c2VSZWY8Tm9kZUpTLlRpbWVvdXQ+KG51bGwpO1xuICBjb25zdCBjb250YWluZXJSZWYgPSB1c2VSZWY8SFRNTFNwYW5FbGVtZW50PihudWxsKTtcblxuICBjb25zdCB1cGRhdGVQb3NpdGlvblN0eWxlcyA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lclJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmVjdCA9IGNvbnRhaW5lclJlZi5jdXJyZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uU3R5bGVzID0gbWFwUGxhY2VtZW50VG9Qb3NpdGlvblN0eWxlcyhcbiAgICAgIHBsYWNlbWVudCxcbiAgICAgIHBvc2l0aW9uLFxuICAgICAgcmVjdFxuICAgICk7XG4gICAgc2V0UG9zaXRpb25TdHlsZXMobmV3UG9zaXRpb25TdHlsZXMpO1xuICAgIHNldFRvb2x0aXBJc1Zpc2libGUodHJ1ZSk7XG4gIH0sIFtwbGFjZW1lbnQsIHBvc2l0aW9uXSk7XG5cbiAgY29uc3Qgb25Nb3VzZUVudGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uTW91c2VMZWF2ZSA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IG9uVG91Y2hTdGFydEhhbmRsZXIgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKHRpbWVyUmVmLmN1cnJlbnQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aW1lclJlZi5jdXJyZW50KTtcbiAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH1cblxuICAgIHVwZGF0ZVBvc2l0aW9uU3R5bGVzKCk7XG4gIH0sIFt1cGRhdGVQb3NpdGlvblN0eWxlc10pO1xuXG4gIGNvbnN0IG9uVG91Y2hFbmRIYW5kbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpO1xuICAgICAgdGltZXJSZWYuY3VycmVudCA9IG51bGw7XG4gICAgfSwgdG91Y2hTY3JlZW5IaWRpbmdEZWxheSk7XG4gIH0sIFt0b3VjaFNjcmVlbkhpZGluZ0RlbGF5XSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICByZXR1cm4gKCkgPT4gdGltZXJSZWYuY3VycmVudCAmJiBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XG4gIH0sIFtdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29udGFpbmVyUmVmLmN1cnJlbnQgfHwgcG9zaXRpb24gIT09IFwiYWJzb2x1dGVcIikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHNjcm9sbGFibGVQYXJlbnQgPSBzY3JvbGxQYXJlbnQoY29udGFpbmVyUmVmLmN1cnJlbnQpO1xuICAgIGlmICghc2Nyb2xsYWJsZVBhcmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IGhpZGVUb29sdGlwID0gKCkgPT4gc2V0VG9vbHRpcElzVmlzaWJsZShmYWxzZSk7XG4gICAgc2Nyb2xsYWJsZVBhcmVudC5hZGRFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGhpZGVUb29sdGlwKTtcbiAgICBzY3JvbGxhYmxlUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJyZXNpemVcIiwgaGlkZVRvb2x0aXApO1xuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBzY3JvbGxhYmxlUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJzY3JvbGxcIiwgaGlkZVRvb2x0aXApO1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhpZGVUb29sdGlwKTtcbiAgICB9O1xuICB9LCBbcG9zaXRpb25dKTtcblxuICByZXR1cm4gKFxuICAgIDxzcGFuXG4gICAgICBvblRvdWNoU3RhcnQ9e29uVG91Y2hTdGFydEhhbmRsZXJ9XG4gICAgICBvbk1vdXNlRW50ZXI9e29uTW91c2VFbnRlcn1cbiAgICAgIG9uTW91c2VMZWF2ZT17b25Nb3VzZUxlYXZlfVxuICAgICAgb25Ub3VjaEVuZD17b25Ub3VjaEVuZEhhbmRsZXJ9XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgICB7Y3JlYXRlUG9ydGFsKFxuICAgICAgICA8PlxuICAgICAgICAgIHtzaG93VG9vbHRpcCAmJiB0b29sdGlwSXNWaXNpYmxlID8gKFxuICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICBzdHlsZT17cG9zaXRpb25TdHlsZXN9XG4gICAgICAgICAgICAgIGRhdGEtdGV4dD17dGV4dH1cbiAgICAgICAgICAgICAgZGF0YS10ZXN0aWQ9XCJ0b29sdGlwXCJcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLnRvb2x0aXAsXG4gICAgICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudF0sXG4gICAgICAgICAgICAgICAgc3R5bGVzW3Bvc2l0aW9uXSxcbiAgICAgICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApIDogbnVsbH1cbiAgICAgICAgPC8+LFxuICAgICAgICBkb2N1bWVudC5ib2R5XG4gICAgICApfVxuICAgIDwvc3Bhbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9vbHRpcDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9vbHRpcCB9IGZyb20gXCIuL1Rvb2x0aXBcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCwgVmlkZW9IVE1MQXR0cmlidXRlcyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1ZpZGVvLm1vZHVsZS5jc3NcIjtcblxuLyoqXG4gKiBUaGVyZSBpcyBhIGtub3duIGlzc3VlIGluIFJlYWN0IGluIHJlZ2FyZHMgdG8gdGhlICdtdXRlZCcgcHJvcGVydHkgd2hpY2ggY2F1c2VzIHRoZSB3YXJuaW5nOlxuICogXCJXYXJuaW5nOiB1bnN0YWJsZV9mbHVzaERpc2NyZXRlVXBkYXRlczogQ2Fubm90IGZsdXNoIHVwZGF0ZXMgd2hlbiBSZWFjdCBpcyBhbHJlYWR5IHJlbmRlcmluZy5cIlxuICpcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMTAzODlcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvNjU0NFxuICogaHR0cHM6Ly9naXRodWIuY29tL3Rlc3RpbmctbGlicmFyeS9yZWFjdC10ZXN0aW5nLWxpYnJhcnkvaXNzdWVzLzQ3MFxuICovXG5cbnR5cGUgTGF5b3V0ID0gXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcblxuZXhwb3J0IHR5cGUgVmlkZW9Qcm9wcyA9IFZpZGVvSFRNTEF0dHJpYnV0ZXM8SFRNTFZpZGVvRWxlbWVudD4gJiB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgLi4ub3RoZXJWaWRlb1Byb3BzXG59OiBWaWRlb1Byb3BzKSB7XG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAgPHZpZGVvXG4gICAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgICBsb29wPXtsb29wfVxuICAgICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgICBwbGF5c0lubGluZVxuICAgICAgICB7Li4ub3RoZXJWaWRlb1Byb3BzfVxuICAgICAgPlxuICAgICAgICA8c291cmNlIGRhdGEtdGVzdGlkPVwic291cmNlXCIgc3JjPXtzcmN9IHR5cGU9e3R5cGV9IC8+XG4gICAgICA8L3ZpZGVvPlxuICAgICAge2NoaWxkcmVuICYmIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMub3ZlcmxheX0+e2NoaWxkcmVufTwvZGl2Pn1cbiAgICA8L2Rpdj5cbiAgKSA6IChcbiAgICA8dmlkZW9cbiAgICAgIGRhdGEtdGVzdGlkPVwidmlkZW9cIlxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgbXV0ZWQ9e211dGVkfVxuICAgICAgbG9vcD17bG9vcH1cbiAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgIHBvc3Rlcj17cG9zdGVyfVxuICAgICAgcGxheXNJbmxpbmVcbiAgICAgIHsuLi5vdGhlclZpZGVvUHJvcHN9XG4gICAgPlxuICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgIDwvdmlkZW8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFZpZGVvO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBWaWRlbywgVmlkZW9Qcm9wcyB9IGZyb20gXCIuL1ZpZGVvXCI7XG4iLCJleHBvcnQgZW51bSBUYWJsZUNvbmZpZyB7XG4gIFJPV19IRUlHSFQgPSA0OCxcbiAgSEVBREVSX0hFSUdIVD0zMixcbiAgUEFHRV9TSVpFID0gMTAwLFxuICBJVEVNU19MT0FERUQgPSA1LFxufVxuIiwiZXhwb3J0ICogZnJvbSBcIi4uL2NvbnN0YW50cy9UYWJsZVwiO1xuIiwiZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uTGlua1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9DaGVja2JveFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclBpY2tlclwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db2xvclN3YXRjaFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ecm9wZG93blwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9GaWxlSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvbkJ1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSW1hZ2VcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGFiZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTGlzdFZpZXdcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTWVudVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Nb2RhbFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9TZWxlY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFibGVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhZ3NJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UZXh0SW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9hc3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVG9vbHRpcFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9EcmF3ZXJcIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzIwJyBoZWlnaHQ9JzIwJyB2aWV3Qm94PScwIDAgMjAgMjAnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMC4zOTg0MzggMC4zOTk5MDJMMTkuNTk4NCAxOS41OTk5TTAuMzk4NDM4IDE5LjU5OTlMMTkuNTk4NCAwLjM5OTkwMicgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xLjUgMS41TDEzLjUgMTMuNU0xLjUgMTMuNUwxMy41IDEuNScgc3Ryb2tlPSdibGFjaycvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNS40Njg1IDE1LjQ2NjVMMTEuMjAxOCAxMS4xOTk5TTYuOTM1MTYgMTMuMzMzMkMzLjQwMDUzIDEzLjMzMzIgMC41MzUxNTYgMTAuNDY3OCAwLjUzNTE1NiA2LjkzMzJDMC41MzUxNTYgMy4zOTg1OCAzLjQwMDUzIDAuNTMzMjAzIDYuOTM1MTYgMC41MzMyMDNDMTAuNDY5OCAwLjUzMzIwMyAxMy4zMzUyIDMuMzk4NTggMTMuMzM1MiA2LjkzMzJDMTMuMzM1MiAxMC40Njc4IDEwLjQ2OTggMTMuMzMzMiA2LjkzNTE2IDEzLjMzMzJaJyBzdHJva2U9JyUyMzg5ODg5MScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTYnIGhlaWdodD0nMTYnIHZpZXdCb3g9JzAgMCAxNiAxNicgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC45MzMxIDQuMjY3NThMNy45OTk3NCAxMS43MzQyTDEuMDY2NDEgNC4yNjc1OCcgc3Ryb2tlPSclMjM4OTg4OTEnIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2MlM2Z4bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnIHN0YW5kYWxvbmU9J25vJyUzZiUzZSAlM2MhRE9DVFlQRSBzdmcgUFVCTElDICctLy9XM0MvL0RURCBTVkcgMS4xLy9FTicgJ2h0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCclM2UgJTNjc3ZnIHdpZHRoPScxMDAlMjUnIGhlaWdodD0nMTAwJTI1JyB2aWV3Qm94PScwIDAgNDYgNDYnIHZlcnNpb249JzEuMScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyB4bWxuczp4bGluaz0naHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluaycgeG1sOnNwYWNlPSdwcmVzZXJ2ZScgeG1sbnM6c2VyaWY9J2h0dHA6Ly93d3cuc2VyaWYuY29tLycgc3R5bGU9J2ZpbGwtcnVsZTpldmVub2RkJTNiY2xpcC1ydWxlOmV2ZW5vZGQlM2JzdHJva2UtbGluZWpvaW46cm91bmQlM2JzdHJva2UtbWl0ZXJsaW1pdDoyJTNiJyUzZSAlM2NnIHRyYW5zZm9ybT0nbWF0cml4KDElMmMwJTJjMCUyYzElMmMtMjclMmMtMjcpJyUzZSAlM2NwYXRoIGQ9J003MyUyYzUwQzczJTJjMzcuMyA2Mi43JTJjMjcgNTAlMmMyN0MzNy4zJTJjMjcgMjclMmMzNy4zIDI3JTJjNTBNMzAuOSUyYzUwQzMwLjklMmMzOS41IDM5LjQlMmMzMC45IDUwJTJjMzAuOUM2MC42JTJjMzAuOSA2OS4xJTJjMzkuNSA2OS4xJTJjNTAnIHN0eWxlPSdmaWxsLXJ1bGU6bm9uemVybyUzYiclM2UgJTNjYW5pbWF0ZVRyYW5zZm9ybSBhdHRyaWJ1dGVOYW1lPSd0cmFuc2Zvcm0nIGF0dHJpYnV0ZVR5cGU9J1hNTCcgdHlwZT0ncm90YXRlJyBkdXI9JzFzJyBmcm9tPScwIDUwIDUwJyB0bz0nMzYwIDUwIDUwJyByZXBlYXRDb3VudD0naW5kZWZpbml0ZScgLyUzZSAlM2MvcGF0aCUzZSAlM2MvZyUzZSAlM2Mvc3ZnJTNlXCIiLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIk5JTFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfbmlsLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwicGFyc2VcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3BhcnNlLmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwic3RyaW5naWZ5XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9zdHJpbmdpZnkuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2MVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInYzXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92Mi5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY0XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92My5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInY1XCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92NC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZhbGlkYXRlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92YWxpZGF0ZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInZlcnNpb25cIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3ZlcnNpb24uZGVmYXVsdDtcbiAgfVxufSk7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjEuanNcIikpO1xuXG52YXIgX3YyID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92My5qc1wiKSk7XG5cbnZhciBfdjMgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y0LmpzXCIpKTtcblxudmFyIF92NCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjUuanNcIikpO1xuXG52YXIgX25pbCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbmlsLmpzXCIpKTtcblxudmFyIF92ZXJzaW9uID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92ZXJzaW9uLmpzXCIpKTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vKlxuICogQnJvd3Nlci1jb21wYXRpYmxlIEphdmFTY3JpcHQgTUQ1XG4gKlxuICogTW9kaWZpY2F0aW9uIG9mIEphdmFTY3JpcHQgTUQ1XG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9KYXZhU2NyaXB0LU1ENVxuICpcbiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqXG4gKiBCYXNlZCBvblxuICogQSBKYXZhU2NyaXB0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZVxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cbiAqIFZlcnNpb24gMi4yIENvcHlyaWdodCAoQykgUGF1bCBKb2huc3RvbiAxOTk5IC0gMjAwOVxuICogT3RoZXIgY29udHJpYnV0b3JzOiBHcmVnIEhvbHQsIEFuZHJldyBLZXBlcnQsIFlkbmFyLCBMb3N0aW5ldFxuICogRGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxuICovXG5mdW5jdGlvbiBtZDUoYnl0ZXMpIHtcbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobXNnLmxlbmd0aCk7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXNbaV0gPSBtc2cuY2hhckNvZGVBdChpKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWQ1VG9IZXhFbmNvZGVkQXJyYXkod29yZHNUb01kNShieXRlc1RvV29yZHMoYnl0ZXMpLCBieXRlcy5sZW5ndGggKiA4KSk7XG59XG4vKlxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGFuIGFycmF5IG9mIGJ5dGVzXG4gKi9cblxuXG5mdW5jdGlvbiBtZDVUb0hleEVuY29kZWRBcnJheShpbnB1dCkge1xuICBjb25zdCBvdXRwdXQgPSBbXTtcbiAgY29uc3QgbGVuZ3RoMzIgPSBpbnB1dC5sZW5ndGggKiAzMjtcbiAgY29uc3QgaGV4VGFiID0gJzAxMjM0NTY3ODlhYmNkZWYnO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoMzI7IGkgKz0gOCkge1xuICAgIGNvbnN0IHggPSBpbnB1dFtpID4+IDVdID4+PiBpICUgMzIgJiAweGZmO1xuICAgIGNvbnN0IGhleCA9IHBhcnNlSW50KGhleFRhYi5jaGFyQXQoeCA+Pj4gNCAmIDB4MGYpICsgaGV4VGFiLmNoYXJBdCh4ICYgMHgwZiksIDE2KTtcbiAgICBvdXRwdXQucHVzaChoZXgpO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cbi8qKlxuICogQ2FsY3VsYXRlIG91dHB1dCBsZW5ndGggd2l0aCBwYWRkaW5nIGFuZCBiaXQgbGVuZ3RoXG4gKi9cblxuXG5mdW5jdGlvbiBnZXRPdXRwdXRMZW5ndGgoaW5wdXRMZW5ndGg4KSB7XG4gIHJldHVybiAoaW5wdXRMZW5ndGg4ICsgNjQgPj4+IDkgPDwgNCkgKyAxNCArIDE7XG59XG4vKlxuICogQ2FsY3VsYXRlIHRoZSBNRDUgb2YgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcywgYW5kIGEgYml0IGxlbmd0aC5cbiAqL1xuXG5cbmZ1bmN0aW9uIHdvcmRzVG9NZDUoeCwgbGVuKSB7XG4gIC8qIGFwcGVuZCBwYWRkaW5nICovXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgbGVuICUgMzI7XG4gIHhbZ2V0T3V0cHV0TGVuZ3RoKGxlbikgLSAxXSA9IGxlbjtcbiAgbGV0IGEgPSAxNzMyNTg0MTkzO1xuICBsZXQgYiA9IC0yNzE3MzM4Nzk7XG4gIGxldCBjID0gLTE3MzI1ODQxOTQ7XG4gIGxldCBkID0gMjcxNzMzODc4O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgeC5sZW5ndGg7IGkgKz0gMTYpIHtcbiAgICBjb25zdCBvbGRhID0gYTtcbiAgICBjb25zdCBvbGRiID0gYjtcbiAgICBjb25zdCBvbGRjID0gYztcbiAgICBjb25zdCBvbGRkID0gZDtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpXSwgNywgLTY4MDg3NjkzNik7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDFdLCAxMiwgLTM4OTU2NDU4Nik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDJdLCAxNywgNjA2MTA1ODE5KTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgM10sIDIyLCAtMTA0NDUyNTMzMCk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA3LCAtMTc2NDE4ODk3KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgNV0sIDEyLCAxMjAwMDgwNDI2KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDddLCAyMiwgLTQ1NzA1OTgzKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgOF0sIDcsIDE3NzAwMzU0MTYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyA5XSwgMTIsIC0xOTU4NDE0NDE3KTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNywgLTQyMDYzKTtcbiAgICBiID0gbWQ1ZmYoYiwgYywgZCwgYSwgeFtpICsgMTFdLCAyMiwgLTE5OTA0MDQxNjIpO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDcsIDE4MDQ2MDM2ODIpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxM10sIDEyLCAtNDAzNDExMDEpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDE1XSwgMjIsIDEyMzY1MzUzMjkpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNSwgLTE2NTc5NjUxMCk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDZdLCA5LCAtMTA2OTUwMTYzMik7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTQsIDY0MzcxNzcxMyk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaV0sIDIwLCAtMzczODk3MzAyKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgNV0sIDUsIC03MDE1NTg2OTEpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxMF0sIDksIDM4MDE2MDgzKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDRdLCAyMCwgLTQwNTUzNzg0OCk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDldLCA1LCA1Njg0NDY0MzgpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAxNF0sIDksIC0xMDE5ODAzNjkwKTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgM10sIDE0LCAtMTg3MzYzOTYxKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgOF0sIDIwLCAxMTYzNTMxNTAxKTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMTNdLCA1LCAtMTQ0NDY4MTQ2Nyk7XG4gICAgZCA9IG1kNWdnKGQsIGEsIGIsIGMsIHhbaSArIDJdLCA5LCAtNTE0MDM3ODQpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTQsIDE3MzUzMjg0NzMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyAxMl0sIDIwLCAtMTkyNjYwNzczNCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA0LCAtMzc4NTU4KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgOF0sIDExLCAtMjAyMjU3NDQ2Myk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDExXSwgMTYsIDE4MzkwMzA1NjIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxNF0sIDIzLCAtMzUzMDk1NTYpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxXSwgNCwgLTE1MzA5OTIwNjApO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyA0XSwgMTEsIDEyNzI4OTMzNTMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyAxMF0sIDIzLCAtMTA5NDczMDY0MCk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNCwgNjgxMjc5MTc0KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpXSwgMTEsIC0zNTg1MzcyMjIpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xuICAgIGIgPSBtZDVoaChiLCBjLCBkLCBhLCB4W2kgKyA2XSwgMjMsIDc2MDI5MTg5KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgOV0sIDQsIC02NDAzNjQ0ODcpO1xuICAgIGQgPSBtZDVoaChkLCBhLCBiLCBjLCB4W2kgKyAxMl0sIDExLCAtNDIxODE1ODM1KTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgMTVdLCAxNiwgNTMwNzQyNTIwKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMl0sIDIzLCAtOTk1MzM4NjUxKTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpXSwgNiwgLTE5ODYzMDg0NCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDddLCAxMCwgMTEyNjg5MTQxNSk7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDE0XSwgMTUsIC0xNDE2MzU0OTA1KTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgNV0sIDIxLCAtNTc0MzQwNTUpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyAxMl0sIDYsIDE3MDA0ODU1NzEpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMTBdLCAxNSwgLTEwNTE1MjMpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgOF0sIDYsIDE4NzMzMTMzNTkpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyAxNV0sIDEwLCAtMzA2MTE3NDQpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyA2XSwgMTUsIC0xNTYwMTk4MzgwKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMTNdLCAyMSwgMTMwOTE1MTY0OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDRdLCA2LCAtMTQ1NTIzMDcwKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTFdLCAxMCwgLTExMjAyMTAzNzkpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTUsIDcxODc4NzI1OSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDldLCAyMSwgLTM0MzQ4NTU1MSk7XG4gICAgYSA9IHNhZmVBZGQoYSwgb2xkYSk7XG4gICAgYiA9IHNhZmVBZGQoYiwgb2xkYik7XG4gICAgYyA9IHNhZmVBZGQoYywgb2xkYyk7XG4gICAgZCA9IHNhZmVBZGQoZCwgb2xkZCk7XG4gIH1cblxuICByZXR1cm4gW2EsIGIsIGMsIGRdO1xufVxuLypcbiAqIENvbnZlcnQgYW4gYXJyYXkgYnl0ZXMgdG8gYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3Jkc1xuICogQ2hhcmFjdGVycyA+MjU1IGhhdmUgdGhlaXIgaGlnaC1ieXRlIHNpbGVudGx5IGlnbm9yZWQuXG4gKi9cblxuXG5mdW5jdGlvbiBieXRlc1RvV29yZHMoaW5wdXQpIHtcbiAgaWYgKGlucHV0Lmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuXG4gIGNvbnN0IGxlbmd0aDggPSBpbnB1dC5sZW5ndGggKiA4O1xuICBjb25zdCBvdXRwdXQgPSBuZXcgVWludDMyQXJyYXkoZ2V0T3V0cHV0TGVuZ3RoKGxlbmd0aDgpKTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDg7IGkgKz0gOCkge1xuICAgIG91dHB1dFtpID4+IDVdIHw9IChpbnB1dFtpIC8gOF0gJiAweGZmKSA8PCBpICUgMzI7XG4gIH1cblxuICByZXR1cm4gb3V0cHV0O1xufVxuLypcbiAqIEFkZCBpbnRlZ2Vycywgd3JhcHBpbmcgYXQgMl4zMi4gVGhpcyB1c2VzIDE2LWJpdCBvcGVyYXRpb25zIGludGVybmFsbHlcbiAqIHRvIHdvcmsgYXJvdW5kIGJ1Z3MgaW4gc29tZSBKUyBpbnRlcnByZXRlcnMuXG4gKi9cblxuXG5mdW5jdGlvbiBzYWZlQWRkKHgsIHkpIHtcbiAgY29uc3QgbHN3ID0gKHggJiAweGZmZmYpICsgKHkgJiAweGZmZmYpO1xuICBjb25zdCBtc3cgPSAoeCA+PiAxNikgKyAoeSA+PiAxNikgKyAobHN3ID4+IDE2KTtcbiAgcmV0dXJuIG1zdyA8PCAxNiB8IGxzdyAmIDB4ZmZmZjtcbn1cbi8qXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXG4gKi9cblxuXG5mdW5jdGlvbiBiaXRSb3RhdGVMZWZ0KG51bSwgY250KSB7XG4gIHJldHVybiBudW0gPDwgY250IHwgbnVtID4+PiAzMiAtIGNudDtcbn1cbi8qXG4gKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxuICovXG5cblxuZnVuY3Rpb24gbWQ1Y21uKHEsIGEsIGIsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIHNhZmVBZGQoYml0Um90YXRlTGVmdChzYWZlQWRkKHNhZmVBZGQoYSwgcSksIHNhZmVBZGQoeCwgdCkpLCBzKSwgYik7XG59XG5cbmZ1bmN0aW9uIG1kNWZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgYyB8IH5iICYgZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWdnKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiICYgZCB8IGMgJiB+ZCwgYSwgYiwgeCwgcywgdCk7XG59XG5cbmZ1bmN0aW9uIG1kNWhoKGEsIGIsIGMsIGQsIHgsIHMsIHQpIHtcbiAgcmV0dXJuIG1kNWNtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVpaShhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYyBeIChiIHwgfmQpLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxudmFyIF9kZWZhdWx0ID0gbWQ1O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5jb25zdCByYW5kb21VVUlEID0gdHlwZW9mIGNyeXB0byAhPT0gJ3VuZGVmaW5lZCcgJiYgY3J5cHRvLnJhbmRvbVVVSUQgJiYgY3J5cHRvLnJhbmRvbVVVSUQuYmluZChjcnlwdG8pO1xudmFyIF9kZWZhdWx0ID0ge1xuICByYW5kb21VVUlEXG59O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHBhcnNlKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuXG4gIGxldCB2O1xuICBjb25zdCBhcnIgPSBuZXcgVWludDhBcnJheSgxNik7IC8vIFBhcnNlICMjIyMjIyMjLS4uLi4tLi4uLi0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFyclswXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgwLCA4KSwgMTYpKSA+Pj4gMjQ7XG4gIGFyclsxXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzJdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclszXSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0jIyMjLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbNF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoOSwgMTMpLCAxNikpID4+PiA4O1xuICBhcnJbNV0gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0jIyMjLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzZdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE0LCAxOCksIDE2KSkgPj4+IDg7XG4gIGFycls3XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tIyMjIy0uLi4uLi4uLi4uLi5cblxuICBhcnJbOF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMTksIDIzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzldID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tLi4uLi0uLi4uLSMjIyMjIyMjIyMjI1xuICAvLyAoVXNlIFwiL1wiIHRvIGF2b2lkIDMyLWJpdCB0cnVuY2F0aW9uIHdoZW4gYml0LXNoaWZ0aW5nIGhpZ2gtb3JkZXIgYnl0ZXMpXG5cbiAgYXJyWzEwXSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgyNCwgMzYpLCAxNikpIC8gMHgxMDAwMDAwMDAwMCAmIDB4ZmY7XG4gIGFyclsxMV0gPSB2IC8gMHgxMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTJdID0gdiA+Pj4gMjQgJiAweGZmO1xuICBhcnJbMTNdID0gdiA+Pj4gMTYgJiAweGZmO1xuICBhcnJbMTRdID0gdiA+Pj4gOCAmIDB4ZmY7XG4gIGFyclsxNV0gPSB2ICYgMHhmZjtcbiAgcmV0dXJuIGFycjtcbn1cblxudmFyIF9kZWZhdWx0ID0gcGFyc2U7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbnZhciBfZGVmYXVsdCA9IC9eKD86WzAtOWEtZl17OH0tWzAtOWEtZl17NH0tWzEtNV1bMC05YS1mXXszfS1bODlhYl1bMC05YS1mXXszfS1bMC05YS1mXXsxMn18MDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwKSQvaTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gcm5nO1xuLy8gVW5pcXVlIElEIGNyZWF0aW9uIHJlcXVpcmVzIGEgaGlnaCBxdWFsaXR5IHJhbmRvbSAjIGdlbmVyYXRvci4gSW4gdGhlIGJyb3dzZXIgd2UgdGhlcmVmb3JlXG4vLyByZXF1aXJlIHRoZSBjcnlwdG8gQVBJIGFuZCBkbyBub3Qgc3VwcG9ydCBidWlsdC1pbiBmYWxsYmFjayB0byBsb3dlciBxdWFsaXR5IHJhbmRvbSBudW1iZXJcbi8vIGdlbmVyYXRvcnMgKGxpa2UgTWF0aC5yYW5kb20oKSkuXG5sZXQgZ2V0UmFuZG9tVmFsdWVzO1xuY29uc3Qgcm5kczggPSBuZXcgVWludDhBcnJheSgxNik7XG5cbmZ1bmN0aW9uIHJuZygpIHtcbiAgLy8gbGF6eSBsb2FkIHNvIHRoYXQgZW52aXJvbm1lbnRzIHRoYXQgbmVlZCB0byBwb2x5ZmlsbCBoYXZlIGEgY2hhbmNlIHRvIGRvIHNvXG4gIGlmICghZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gZ2V0UmFuZG9tVmFsdWVzIG5lZWRzIHRvIGJlIGludm9rZWQgaW4gYSBjb250ZXh0IHdoZXJlIFwidGhpc1wiIGlzIGEgQ3J5cHRvIGltcGxlbWVudGF0aW9uLlxuICAgIGdldFJhbmRvbVZhbHVlcyA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMgJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcy5iaW5kKGNyeXB0byk7XG5cbiAgICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKCkgbm90IHN1cHBvcnRlZC4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCNnZXRyYW5kb212YWx1ZXMtbm90LXN1cHBvcnRlZCcpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBnZXRSYW5kb21WYWx1ZXMocm5kczgpO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG4vLyBBZGFwdGVkIGZyb20gQ2hyaXMgVmVuZXNzJyBTSEExIGNvZGUgYXRcbi8vIGh0dHA6Ly93d3cubW92YWJsZS10eXBlLmNvLnVrL3NjcmlwdHMvc2hhMS5odG1sXG5mdW5jdGlvbiBmKHMsIHgsIHksIHopIHtcbiAgc3dpdGNoIChzKSB7XG4gICAgY2FzZSAwOlxuICAgICAgcmV0dXJuIHggJiB5IF4gfnggJiB6O1xuXG4gICAgY2FzZSAxOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcblxuICAgIGNhc2UgMjpcbiAgICAgIHJldHVybiB4ICYgeSBeIHggJiB6IF4geSAmIHo7XG5cbiAgICBjYXNlIDM6XG4gICAgICByZXR1cm4geCBeIHkgXiB6O1xuICB9XG59XG5cbmZ1bmN0aW9uIFJPVEwoeCwgbikge1xuICByZXR1cm4geCA8PCBuIHwgeCA+Pj4gMzIgLSBuO1xufVxuXG5mdW5jdGlvbiBzaGExKGJ5dGVzKSB7XG4gIGNvbnN0IEsgPSBbMHg1YTgyNzk5OSwgMHg2ZWQ5ZWJhMSwgMHg4ZjFiYmNkYywgMHhjYTYyYzFkNl07XG4gIGNvbnN0IEggPSBbMHg2NzQ1MjMwMSwgMHhlZmNkYWI4OSwgMHg5OGJhZGNmZSwgMHgxMDMyNTQ3NiwgMHhjM2QyZTFmMF07XG5cbiAgaWYgKHR5cGVvZiBieXRlcyA9PT0gJ3N0cmluZycpIHtcbiAgICBjb25zdCBtc2cgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoYnl0ZXMpKTsgLy8gVVRGOCBlc2NhcGVcblxuICAgIGJ5dGVzID0gW107XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1zZy5sZW5ndGg7ICsraSkge1xuICAgICAgYnl0ZXMucHVzaChtc2cuY2hhckNvZGVBdChpKSk7XG4gICAgfVxuICB9IGVsc2UgaWYgKCFBcnJheS5pc0FycmF5KGJ5dGVzKSkge1xuICAgIC8vIENvbnZlcnQgQXJyYXktbGlrZSB0byBBcnJheVxuICAgIGJ5dGVzID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYnl0ZXMpO1xuICB9XG5cbiAgYnl0ZXMucHVzaCgweDgwKTtcbiAgY29uc3QgbCA9IGJ5dGVzLmxlbmd0aCAvIDQgKyAyO1xuICBjb25zdCBOID0gTWF0aC5jZWlsKGwgLyAxNik7XG4gIGNvbnN0IE0gPSBuZXcgQXJyYXkoTik7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyArK2kpIHtcbiAgICBjb25zdCBhcnIgPSBuZXcgVWludDMyQXJyYXkoMTYpO1xuXG4gICAgZm9yIChsZXQgaiA9IDA7IGogPCAxNjsgKytqKSB7XG4gICAgICBhcnJbal0gPSBieXRlc1tpICogNjQgKyBqICogNF0gPDwgMjQgfCBieXRlc1tpICogNjQgKyBqICogNCArIDFdIDw8IDE2IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAyXSA8PCA4IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAzXTtcbiAgICB9XG5cbiAgICBNW2ldID0gYXJyO1xuICB9XG5cbiAgTVtOIC0gMV1bMTRdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAvIE1hdGgucG93KDIsIDMyKTtcbiAgTVtOIC0gMV1bMTRdID0gTWF0aC5mbG9vcihNW04gLSAxXVsxNF0pO1xuICBNW04gLSAxXVsxNV0gPSAoYnl0ZXMubGVuZ3RoIC0gMSkgKiA4ICYgMHhmZmZmZmZmZjtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IE47ICsraSkge1xuICAgIGNvbnN0IFcgPSBuZXcgVWludDMyQXJyYXkoODApO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCAxNjsgKyt0KSB7XG4gICAgICBXW3RdID0gTVtpXVt0XTtcbiAgICB9XG5cbiAgICBmb3IgKGxldCB0ID0gMTY7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBXW3RdID0gUk9UTChXW3QgLSAzXSBeIFdbdCAtIDhdIF4gV1t0IC0gMTRdIF4gV1t0IC0gMTZdLCAxKTtcbiAgICB9XG5cbiAgICBsZXQgYSA9IEhbMF07XG4gICAgbGV0IGIgPSBIWzFdO1xuICAgIGxldCBjID0gSFsyXTtcbiAgICBsZXQgZCA9IEhbM107XG4gICAgbGV0IGUgPSBIWzRdO1xuXG4gICAgZm9yIChsZXQgdCA9IDA7IHQgPCA4MDsgKyt0KSB7XG4gICAgICBjb25zdCBzID0gTWF0aC5mbG9vcih0IC8gMjApO1xuICAgICAgY29uc3QgVCA9IFJPVEwoYSwgNSkgKyBmKHMsIGIsIGMsIGQpICsgZSArIEtbc10gKyBXW3RdID4+PiAwO1xuICAgICAgZSA9IGQ7XG4gICAgICBkID0gYztcbiAgICAgIGMgPSBST1RMKGIsIDMwKSA+Pj4gMDtcbiAgICAgIGIgPSBhO1xuICAgICAgYSA9IFQ7XG4gICAgfVxuXG4gICAgSFswXSA9IEhbMF0gKyBhID4+PiAwO1xuICAgIEhbMV0gPSBIWzFdICsgYiA+Pj4gMDtcbiAgICBIWzJdID0gSFsyXSArIGMgPj4+IDA7XG4gICAgSFszXSA9IEhbM10gKyBkID4+PiAwO1xuICAgIEhbNF0gPSBIWzRdICsgZSA+Pj4gMDtcbiAgfVxuXG4gIHJldHVybiBbSFswXSA+PiAyNCAmIDB4ZmYsIEhbMF0gPj4gMTYgJiAweGZmLCBIWzBdID4+IDggJiAweGZmLCBIWzBdICYgMHhmZiwgSFsxXSA+PiAyNCAmIDB4ZmYsIEhbMV0gPj4gMTYgJiAweGZmLCBIWzFdID4+IDggJiAweGZmLCBIWzFdICYgMHhmZiwgSFsyXSA+PiAyNCAmIDB4ZmYsIEhbMl0gPj4gMTYgJiAweGZmLCBIWzJdID4+IDggJiAweGZmLCBIWzJdICYgMHhmZiwgSFszXSA+PiAyNCAmIDB4ZmYsIEhbM10gPj4gMTYgJiAweGZmLCBIWzNdID4+IDggJiAweGZmLCBIWzNdICYgMHhmZiwgSFs0XSA+PiAyNCAmIDB4ZmYsIEhbNF0gPj4gMTYgJiAweGZmLCBIWzRdID4+IDggJiAweGZmLCBIWzRdICYgMHhmZl07XG59XG5cbnZhciBfZGVmYXVsdCA9IHNoYTE7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcbmV4cG9ydHMudW5zYWZlU3RyaW5naWZ5ID0gdW5zYWZlU3RyaW5naWZ5O1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8qKlxuICogQ29udmVydCBhcnJheSBvZiAxNiBieXRlIHZhbHVlcyB0byBVVUlEIHN0cmluZyBmb3JtYXQgb2YgdGhlIGZvcm06XG4gKiBYWFhYWFhYWC1YWFhYLVhYWFgtWFhYWC1YWFhYWFhYWFhYWFhcbiAqL1xuY29uc3QgYnl0ZVRvSGV4ID0gW107XG5cbmZvciAobGV0IGkgPSAwOyBpIDwgMjU2OyArK2kpIHtcbiAgYnl0ZVRvSGV4LnB1c2goKGkgKyAweDEwMCkudG9TdHJpbmcoMTYpLnNsaWNlKDEpKTtcbn1cblxuZnVuY3Rpb24gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICAvLyBOb3RlOiBCZSBjYXJlZnVsIGVkaXRpbmcgdGhpcyBjb2RlISAgSXQncyBiZWVuIHR1bmVkIGZvciBwZXJmb3JtYW5jZVxuICAvLyBhbmQgd29ya3MgaW4gd2F5cyB5b3UgbWF5IG5vdCBleHBlY3QuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQvcHVsbC80MzRcbiAgcmV0dXJuIChieXRlVG9IZXhbYXJyW29mZnNldCArIDBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMV1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDNdXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA1XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDZdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgN11dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA4XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDldXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTBdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTJdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTNdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMTVdXSkudG9Mb3dlckNhc2UoKTtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5KGFyciwgb2Zmc2V0ID0gMCkge1xuICBjb25zdCB1dWlkID0gdW5zYWZlU3RyaW5naWZ5KGFyciwgb2Zmc2V0KTsgLy8gQ29uc2lzdGVuY3kgY2hlY2sgZm9yIHZhbGlkIFVVSUQuICBJZiB0aGlzIHRocm93cywgaXQncyBsaWtlbHkgZHVlIHRvIG9uZVxuICAvLyBvZiB0aGUgZm9sbG93aW5nOlxuICAvLyAtIE9uZSBvciBtb3JlIGlucHV0IGFycmF5IHZhbHVlcyBkb24ndCBtYXAgdG8gYSBoZXggb2N0ZXQgKGxlYWRpbmcgdG9cbiAgLy8gXCJ1bmRlZmluZWRcIiBpbiB0aGUgdXVpZClcbiAgLy8gLSBJbnZhbGlkIGlucHV0IHZhbHVlcyBmb3IgdGhlIFJGQyBgdmVyc2lvbmAgb3IgYHZhcmlhbnRgIGZpZWxkc1xuXG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignU3RyaW5naWZpZWQgVVVJRCBpcyBpbnZhbGlkJyk7XG4gIH1cblxuICByZXR1cm4gdXVpZDtcbn1cblxudmFyIF9kZWZhdWx0ID0gc3RyaW5naWZ5O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfcm5nID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9ybmcuanNcIikpO1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuLy8gKipgdjEoKWAgLSBHZW5lcmF0ZSB0aW1lLWJhc2VkIFVVSUQqKlxuLy9cbi8vIEluc3BpcmVkIGJ5IGh0dHBzOi8vZ2l0aHViLmNvbS9MaW9zSy9VVUlELmpzXG4vLyBhbmQgaHR0cDovL2RvY3MucHl0aG9uLm9yZy9saWJyYXJ5L3V1aWQuaHRtbFxubGV0IF9ub2RlSWQ7XG5cbmxldCBfY2xvY2tzZXE7IC8vIFByZXZpb3VzIHV1aWQgY3JlYXRpb24gdGltZVxuXG5cbmxldCBfbGFzdE1TZWNzID0gMDtcbmxldCBfbGFzdE5TZWNzID0gMDsgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS91dWlkanMvdXVpZCBmb3IgQVBJIGRldGFpbHNcblxuZnVuY3Rpb24gdjEob3B0aW9ucywgYnVmLCBvZmZzZXQpIHtcbiAgbGV0IGkgPSBidWYgJiYgb2Zmc2V0IHx8IDA7XG4gIGNvbnN0IGIgPSBidWYgfHwgbmV3IEFycmF5KDE2KTtcbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG4gIGxldCBub2RlID0gb3B0aW9ucy5ub2RlIHx8IF9ub2RlSWQ7XG4gIGxldCBjbG9ja3NlcSA9IG9wdGlvbnMuY2xvY2tzZXEgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMuY2xvY2tzZXEgOiBfY2xvY2tzZXE7IC8vIG5vZGUgYW5kIGNsb2Nrc2VxIG5lZWQgdG8gYmUgaW5pdGlhbGl6ZWQgdG8gcmFuZG9tIHZhbHVlcyBpZiB0aGV5J3JlIG5vdFxuICAvLyBzcGVjaWZpZWQuICBXZSBkbyB0aGlzIGxhemlseSB0byBtaW5pbWl6ZSBpc3N1ZXMgcmVsYXRlZCB0byBpbnN1ZmZpY2llbnRcbiAgLy8gc3lzdGVtIGVudHJvcHkuICBTZWUgIzE4OVxuXG4gIGlmIChub2RlID09IG51bGwgfHwgY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgIGNvbnN0IHNlZWRCeXRlcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7XG5cbiAgICBpZiAobm9kZSA9PSBudWxsKSB7XG4gICAgICAvLyBQZXIgNC41LCBjcmVhdGUgYW5kIDQ4LWJpdCBub2RlIGlkLCAoNDcgcmFuZG9tIGJpdHMgKyBtdWx0aWNhc3QgYml0ID0gMSlcbiAgICAgIG5vZGUgPSBfbm9kZUlkID0gW3NlZWRCeXRlc1swXSB8IDB4MDEsIHNlZWRCeXRlc1sxXSwgc2VlZEJ5dGVzWzJdLCBzZWVkQnl0ZXNbM10sIHNlZWRCeXRlc1s0XSwgc2VlZEJ5dGVzWzVdXTtcbiAgICB9XG5cbiAgICBpZiAoY2xvY2tzZXEgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuMi4yLCByYW5kb21pemUgKDE0IGJpdCkgY2xvY2tzZXFcbiAgICAgIGNsb2Nrc2VxID0gX2Nsb2Nrc2VxID0gKHNlZWRCeXRlc1s2XSA8PCA4IHwgc2VlZEJ5dGVzWzddKSAmIDB4M2ZmZjtcbiAgICB9XG4gIH0gLy8gVVVJRCB0aW1lc3RhbXBzIGFyZSAxMDAgbmFuby1zZWNvbmQgdW5pdHMgc2luY2UgdGhlIEdyZWdvcmlhbiBlcG9jaCxcbiAgLy8gKDE1ODItMTAtMTUgMDA6MDApLiAgSlNOdW1iZXJzIGFyZW4ndCBwcmVjaXNlIGVub3VnaCBmb3IgdGhpcywgc29cbiAgLy8gdGltZSBpcyBoYW5kbGVkIGludGVybmFsbHkgYXMgJ21zZWNzJyAoaW50ZWdlciBtaWxsaXNlY29uZHMpIGFuZCAnbnNlY3MnXG4gIC8vICgxMDAtbmFub3NlY29uZHMgb2Zmc2V0IGZyb20gbXNlY3MpIHNpbmNlIHVuaXggZXBvY2gsIDE5NzAtMDEtMDEgMDA6MDAuXG5cblxuICBsZXQgbXNlY3MgPSBvcHRpb25zLm1zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm1zZWNzIDogRGF0ZS5ub3coKTsgLy8gUGVyIDQuMi4xLjIsIHVzZSBjb3VudCBvZiB1dWlkJ3MgZ2VuZXJhdGVkIGR1cmluZyB0aGUgY3VycmVudCBjbG9ja1xuICAvLyBjeWNsZSB0byBzaW11bGF0ZSBoaWdoZXIgcmVzb2x1dGlvbiBjbG9ja1xuXG4gIGxldCBuc2VjcyA9IG9wdGlvbnMubnNlY3MgIT09IHVuZGVmaW5lZCA/IG9wdGlvbnMubnNlY3MgOiBfbGFzdE5TZWNzICsgMTsgLy8gVGltZSBzaW5jZSBsYXN0IHV1aWQgY3JlYXRpb24gKGluIG1zZWNzKVxuXG4gIGNvbnN0IGR0ID0gbXNlY3MgLSBfbGFzdE1TZWNzICsgKG5zZWNzIC0gX2xhc3ROU2VjcykgLyAxMDAwMDsgLy8gUGVyIDQuMi4xLjIsIEJ1bXAgY2xvY2tzZXEgb24gY2xvY2sgcmVncmVzc2lvblxuXG4gIGlmIChkdCA8IDAgJiYgb3B0aW9ucy5jbG9ja3NlcSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgY2xvY2tzZXEgPSBjbG9ja3NlcSArIDEgJiAweDNmZmY7XG4gIH0gLy8gUmVzZXQgbnNlY3MgaWYgY2xvY2sgcmVncmVzc2VzIChuZXcgY2xvY2tzZXEpIG9yIHdlJ3ZlIG1vdmVkIG9udG8gYSBuZXdcbiAgLy8gdGltZSBpbnRlcnZhbFxuXG5cbiAgaWYgKChkdCA8IDAgfHwgbXNlY3MgPiBfbGFzdE1TZWNzKSAmJiBvcHRpb25zLm5zZWNzID09PSB1bmRlZmluZWQpIHtcbiAgICBuc2VjcyA9IDA7XG4gIH0gLy8gUGVyIDQuMi4xLjIgVGhyb3cgZXJyb3IgaWYgdG9vIG1hbnkgdXVpZHMgYXJlIHJlcXVlc3RlZFxuXG5cbiAgaWYgKG5zZWNzID49IDEwMDAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwidXVpZC52MSgpOiBDYW4ndCBjcmVhdGUgbW9yZSB0aGFuIDEwTSB1dWlkcy9zZWNcIik7XG4gIH1cblxuICBfbGFzdE1TZWNzID0gbXNlY3M7XG4gIF9sYXN0TlNlY3MgPSBuc2VjcztcbiAgX2Nsb2Nrc2VxID0gY2xvY2tzZXE7IC8vIFBlciA0LjEuNCAtIENvbnZlcnQgZnJvbSB1bml4IGVwb2NoIHRvIEdyZWdvcmlhbiBlcG9jaFxuXG4gIG1zZWNzICs9IDEyMjE5MjkyODAwMDAwOyAvLyBgdGltZV9sb3dgXG5cbiAgY29uc3QgdGwgPSAoKG1zZWNzICYgMHhmZmZmZmZmKSAqIDEwMDAwICsgbnNlY3MpICUgMHgxMDAwMDAwMDA7XG4gIGJbaSsrXSA9IHRsID4+PiAyNCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiAxNiAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdGwgJiAweGZmOyAvLyBgdGltZV9taWRgXG5cbiAgY29uc3QgdG1oID0gbXNlY3MgLyAweDEwMDAwMDAwMCAqIDEwMDAwICYgMHhmZmZmZmZmO1xuICBiW2krK10gPSB0bWggPj4+IDggJiAweGZmO1xuICBiW2krK10gPSB0bWggJiAweGZmOyAvLyBgdGltZV9oaWdoX2FuZF92ZXJzaW9uYFxuXG4gIGJbaSsrXSA9IHRtaCA+Pj4gMjQgJiAweGYgfCAweDEwOyAvLyBpbmNsdWRlIHZlcnNpb25cblxuICBiW2krK10gPSB0bWggPj4+IDE2ICYgMHhmZjsgLy8gYGNsb2NrX3NlcV9oaV9hbmRfcmVzZXJ2ZWRgIChQZXIgNC4yLjIgLSBpbmNsdWRlIHZhcmlhbnQpXG5cbiAgYltpKytdID0gY2xvY2tzZXEgPj4+IDggfCAweDgwOyAvLyBgY2xvY2tfc2VxX2xvd2BcblxuICBiW2krK10gPSBjbG9ja3NlcSAmIDB4ZmY7IC8vIGBub2RlYFxuXG4gIGZvciAobGV0IG4gPSAwOyBuIDwgNjsgKytuKSB7XG4gICAgYltpICsgbl0gPSBub2RlW25dO1xuICB9XG5cbiAgcmV0dXJuIGJ1ZiB8fCAoMCwgX3N0cmluZ2lmeS51bnNhZmVTdHJpbmdpZnkpKGIpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2MTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YzNS5qc1wiKSk7XG5cbnZhciBfbWQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL21kNS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHYzID0gKDAsIF92LmRlZmF1bHQpKCd2MycsIDB4MzAsIF9tZC5kZWZhdWx0KTtcbnZhciBfZGVmYXVsdCA9IHYzO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLlVSTCA9IGV4cG9ydHMuRE5TID0gdm9pZCAwO1xuZXhwb3J0cy5kZWZhdWx0ID0gdjM1O1xuXG52YXIgX3N0cmluZ2lmeSA9IHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKTtcblxudmFyIF9wYXJzZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcGFyc2UuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBzdHJpbmdUb0J5dGVzKHN0cikge1xuICBzdHIgPSB1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoc3RyKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgY29uc3QgYnl0ZXMgPSBbXTtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGJ5dGVzLnB1c2goc3RyLmNoYXJDb2RlQXQoaSkpO1xuICB9XG5cbiAgcmV0dXJuIGJ5dGVzO1xufVxuXG5jb25zdCBETlMgPSAnNmJhN2I4MTAtOWRhZC0xMWQxLTgwYjQtMDBjMDRmZDQzMGM4JztcbmV4cG9ydHMuRE5TID0gRE5TO1xuY29uc3QgVVJMID0gJzZiYTdiODExLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnRzLlVSTCA9IFVSTDtcblxuZnVuY3Rpb24gdjM1KG5hbWUsIHZlcnNpb24sIGhhc2hmdW5jKSB7XG4gIGZ1bmN0aW9uIGdlbmVyYXRlVVVJRCh2YWx1ZSwgbmFtZXNwYWNlLCBidWYsIG9mZnNldCkge1xuICAgIHZhciBfbmFtZXNwYWNlO1xuXG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHZhbHVlID0gc3RyaW5nVG9CeXRlcyh2YWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBuYW1lc3BhY2UgPT09ICdzdHJpbmcnKSB7XG4gICAgICBuYW1lc3BhY2UgPSAoMCwgX3BhcnNlLmRlZmF1bHQpKG5hbWVzcGFjZSk7XG4gICAgfVxuXG4gICAgaWYgKCgoX25hbWVzcGFjZSA9IG5hbWVzcGFjZSkgPT09IG51bGwgfHwgX25hbWVzcGFjZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX25hbWVzcGFjZS5sZW5ndGgpICE9PSAxNikge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdOYW1lc3BhY2UgbXVzdCBiZSBhcnJheS1saWtlICgxNiBpdGVyYWJsZSBpbnRlZ2VyIHZhbHVlcywgMC0yNTUpJyk7XG4gICAgfSAvLyBDb21wdXRlIGhhc2ggb2YgbmFtZXNwYWNlIGFuZCB2YWx1ZSwgUGVyIDQuM1xuICAgIC8vIEZ1dHVyZTogVXNlIHNwcmVhZCBzeW50YXggd2hlbiBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3JtcywgZS5nLiBgYnl0ZXMgPVxuICAgIC8vIGhhc2hmdW5jKFsuLi5uYW1lc3BhY2UsIC4uLiB2YWx1ZV0pYFxuXG5cbiAgICBsZXQgYnl0ZXMgPSBuZXcgVWludDhBcnJheSgxNiArIHZhbHVlLmxlbmd0aCk7XG4gICAgYnl0ZXMuc2V0KG5hbWVzcGFjZSk7XG4gICAgYnl0ZXMuc2V0KHZhbHVlLCBuYW1lc3BhY2UubGVuZ3RoKTtcbiAgICBieXRlcyA9IGhhc2hmdW5jKGJ5dGVzKTtcbiAgICBieXRlc1s2XSA9IGJ5dGVzWzZdICYgMHgwZiB8IHZlcnNpb247XG4gICAgYnl0ZXNbOF0gPSBieXRlc1s4XSAmIDB4M2YgfCAweDgwO1xuXG4gICAgaWYgKGJ1Zikge1xuICAgICAgb2Zmc2V0ID0gb2Zmc2V0IHx8IDA7XG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgICBidWZbb2Zmc2V0ICsgaV0gPSBieXRlc1tpXTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGJ1ZjtcbiAgICB9XG5cbiAgICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShieXRlcyk7XG4gIH0gLy8gRnVuY3Rpb24jbmFtZSBpcyBub3Qgc2V0dGFibGUgb24gc29tZSBwbGF0Zm9ybXMgKCMyNzApXG5cblxuICB0cnkge1xuICAgIGdlbmVyYXRlVVVJRC5uYW1lID0gbmFtZTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5XG4gIH0gY2F0Y2ggKGVycikge30gLy8gRm9yIENvbW1vbkpTIGRlZmF1bHQgZXhwb3J0IHN1cHBvcnRcblxuXG4gIGdlbmVyYXRlVVVJRC5ETlMgPSBETlM7XG4gIGdlbmVyYXRlVVVJRC5VUkwgPSBVUkw7XG4gIHJldHVybiBnZW5lcmF0ZVVVSUQ7XG59IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfbmF0aXZlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9uYXRpdmUuanNcIikpO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHY0KG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGlmIChfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCAmJiAhYnVmICYmICFvcHRpb25zKSB7XG4gICAgcmV0dXJuIF9uYXRpdmUuZGVmYXVsdC5yYW5kb21VVUlEKCk7XG4gIH1cblxuICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuICBjb25zdCBybmRzID0gb3B0aW9ucy5yYW5kb20gfHwgKG9wdGlvbnMucm5nIHx8IF9ybmcuZGVmYXVsdCkoKTsgLy8gUGVyIDQuNCwgc2V0IGJpdHMgZm9yIHZlcnNpb24gYW5kIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYFxuXG5cbiAgcm5kc1s2XSA9IHJuZHNbNl0gJiAweDBmIHwgMHg0MDtcbiAgcm5kc1s4XSA9IHJuZHNbOF0gJiAweDNmIHwgMHg4MDsgLy8gQ29weSBieXRlcyB0byBidWZmZXIsIGlmIHByb3ZpZGVkXG5cbiAgaWYgKGJ1Zikge1xuICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNjsgKytpKSB7XG4gICAgICBidWZbb2Zmc2V0ICsgaV0gPSBybmRzW2ldO1xuICAgIH1cblxuICAgIHJldHVybiBidWY7XG4gIH1cblxuICByZXR1cm4gKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShybmRzKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjQ7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX3NoYSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vc2hhMS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmNvbnN0IHY1ID0gKDAsIF92LmRlZmF1bHQpKCd2NScsIDB4NTAsIF9zaGEuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2NTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JlZ2V4ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9yZWdleC5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZhbGlkYXRlKHV1aWQpIHtcbiAgcmV0dXJuIHR5cGVvZiB1dWlkID09PSAnc3RyaW5nJyAmJiBfcmVnZXguZGVmYXVsdC50ZXN0KHV1aWQpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2YWxpZGF0ZTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3ZhbGlkYXRlID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92YWxpZGF0ZS5qc1wiKSk7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbmZ1bmN0aW9uIHZlcnNpb24odXVpZCkge1xuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0ludmFsaWQgVVVJRCcpO1xuICB9XG5cbiAgcmV0dXJuIHBhcnNlSW50KHV1aWQuc2xpY2UoMTQsIDE1KSwgMTYpO1xufVxuXG52YXIgX2RlZmF1bHQgPSB2ZXJzaW9uO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3QtZG9tXCIpOyIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0uY2FsbChtb2R1bGUuZXhwb3J0cywgbW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCIvLyBkZWZpbmUgX19lc01vZHVsZSBvbiBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLnIgPSAoZXhwb3J0cykgPT4ge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCIvLyBzdGFydHVwXG4vLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbi8vIFRoaXMgZW50cnkgbW9kdWxlIGlzIHJlZmVyZW5jZWQgYnkgb3RoZXIgbW9kdWxlcyBzbyBpdCBjYW4ndCBiZSBpbmxpbmVkXG52YXIgX193ZWJwYWNrX2V4cG9ydHNfXyA9IF9fd2VicGFja19yZXF1aXJlX18oMzYwNyk7XG4iXSwibmFtZXMiOlsiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsInNlbGYiLCJSZWZlcmVuY2VFcnJvciIsIl9leHRlbmRzIiwiT2JqZWN0IiwiYXNzaWduIiwidGFyZ2V0IiwiaSIsImFyZ3VtZW50cyIsImxlbmd0aCIsInNvdXJjZSIsImtleSIsInByb3RvdHlwZSIsImhhc093blByb3BlcnR5IiwiY2FsbCIsImFwcGx5IiwidGhpcyIsIl9pbmhlcml0c0xvb3NlIiwic3ViQ2xhc3MiLCJzdXBlckNsYXNzIiwiY3JlYXRlIiwiY29uc3RydWN0b3IiLCJfX3Byb3RvX18iLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsImtleXMiLCJpbmRleE9mIiwiX3BhdGgiLCJiaW5kIiwicHJvcHMiLCJ4bWxucyIsIndpZHRoIiwiaGVpZ2h0IiwiZmlsbCIsInN0cm9rZSIsInN0cm9rZUxpbmVjYXAiLCJkIiwib3B0aW9ucyIsImNhcHR1cmUiLCJ1c2VPdXRzaWRlQ2xpY2siLCJjYWxsYmFjayIsInJlZiIsInVzZVJlZiIsInVzZUVmZmVjdCIsImhhbmRsZUNsaWNrIiwiZXZlbnQiLCJjdXJyZW50IiwiY29udGFpbnMiLCJkb2N1bWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiX19yZWFkIiwibyIsIm4iLCJtIiwiU3ltYm9sIiwiaXRlcmF0b3IiLCJyIiwiZSIsImFyIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnJvciIsInVzZVByb21pc2UiLCJfdGhpcyIsIl9hIiwidXNlU3RhdGUiLCJkYXRhIiwidW5kZWZpbmVkIiwiaXNQZW5kaW5nIiwiaXNSZXNvbHZlZCIsImlzUmVqZWN0ZWQiLCJpc1NldHRsZWQiLCJyZXN1bHQiLCJzZXRSZXN1bHQiLCJoYXNVbm1vdW50ZWQiLCJkaXNwYXRjaCIsInVzZUNhbGxiYWNrIiwicHJvbWlzZSIsInRoaXNBcmciLCJfYXJndW1lbnRzIiwiZ2VuZXJhdG9yIiwiZXJyb3JfMSIsImJvZHkiLCJmIiwieSIsInQiLCJnIiwiXyIsImxhYmVsIiwic2VudCIsInRyeXMiLCJvcHMiLCJ2ZXJiIiwidiIsIm9wIiwiVHlwZUVycm9yIiwicG9wIiwic3RlcCIsIl9fZ2VuZXJhdG9yIiwiUCIsIlByb21pc2UiLCJyZXNvbHZlIiwicmVqZWN0IiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJ0aGVuIiwiU1dSR2xvYmFsU3RhdGUiLCJXZWFrTWFwIiwiRU1QVFlfQ0FDSEUiLCJJTklUSUFMX0NBQ0hFIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImEiLCJiIiwiU1RSX1VOREVGSU5FRCIsImlzV2luZG93RGVmaW5lZCIsIndpbmRvdyIsImlzRG9jdW1lbnREZWZpbmVkIiwiY3JlYXRlQ2FjaGVIZWxwZXIiLCJjYWNoZSIsInN0YXRlIiwiZ2V0IiwiaW5mbyIsInByZXYiLCJ0YWJsZSIsImNvdW50ZXIiLCJzdGFibGVIYXNoIiwiYXJnIiwidHlwZSIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwic29ydCIsIm9ubGluZSIsIm9uV2luZG93RXZlbnQiLCJvZmZXaW5kb3dFdmVudCIsInByZXNldCIsImlzT25saW5lIiwiaXNWaXNpYmxlIiwidmlzaWJpbGl0eVN0YXRlIiwiZGVmYXVsdENvbmZpZ09wdGlvbnMiLCJpbml0Rm9jdXMiLCJpbml0UmVjb25uZWN0Iiwib25PbmxpbmUiLCJvbk9mZmxpbmUiLCJJU19SRUFDVF9MRUdBQ1kiLCJJU19TRVJWRVIiLCJ1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0IiwidXNlTGF5b3V0RWZmZWN0IiwibmF2aWdhdG9yQ29ubmVjdGlvbiIsIm5hdmlnYXRvciIsImNvbm5lY3Rpb24iLCJzbG93Q29ubmVjdGlvbiIsImluY2x1ZGVzIiwiZWZmZWN0aXZlVHlwZSIsInNhdmVEYXRhIiwiZXJyIiwiYXJncyIsImlzQXJyYXkiLCJfX3RpbWVzdGFtcCIsImdldFRpbWVzdGFtcCIsIk1VVEFURV9FVkVOVCIsImNvbnN0YW50cyIsImFzeW5jIiwiaW50ZXJuYWxNdXRhdGUiLCJfa2V5IiwiX2RhdGEiLCJfb3B0cyIsInBvcHVsYXRlQ2FjaGUiLCJ0aHJvd09uRXJyb3IiLCJyZXZhbGlkYXRlIiwicm9sbGJhY2tPbkVycm9yT3B0aW9uIiwicm9sbGJhY2tPbkVycm9yIiwib3B0aW1pc3RpY0RhdGEiLCJrZXlGaWx0ZXIiLCJtYXRjaGVkS2V5cyIsIml0Iiwia2V5SXQiLCJ0ZXN0IiwiX2siLCJhbGwiLCJtYXAiLCJtdXRhdGVCeUtleSIsIkVWRU5UX1JFVkFMSURBVE9SUyIsIk1VVEFUSU9OIiwiRkVUQ0giLCJyZXZhbGlkYXRvcnMiLCJzdGFydFJldmFsaWRhdGUiLCJiZWZvcmVNdXRhdGlvblRzIiwiaGFzT3B0aW1pc3RpY0RhdGEiLCJkaXNwbGF5ZWREYXRhIiwiY3VycmVudERhdGEiLCJfYyIsImNvbW1pdHRlZERhdGEiLCJjYXRjaCIsInJlcyIsInJldmFsaWRhdGVBbGxLZXlzIiwiaW5pdENhY2hlIiwicHJvdmlkZXIiLCJoYXMiLCJvcHRzIiwibXV0YXRlIiwidW5tb3VudCIsInN1YnNjcmlwdGlvbnMiLCJzdWJzY3JpYmUiLCJzdWJzIiwic3BsaWNlIiwic2V0dGVyIiwiZm4iLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJzZXRUaW1lb3V0IiwicmVsZWFzZVJlY29ubmVjdCIsImRlbGV0ZSIsIk1hcCIsImRlZmF1bHRDb25maWciLCJvbkxvYWRpbmdTbG93Iiwib25TdWNjZXNzIiwib25FcnJvciIsIm9uRXJyb3JSZXRyeSIsIl9fIiwiY29uZmlnIiwibWF4UmV0cnlDb3VudCIsImVycm9yUmV0cnlDb3VudCIsImN1cnJlbnRSZXRyeUNvdW50IiwicmV0cnlDb3VudCIsInRpbWVvdXQiLCJNYXRoIiwicmFuZG9tIiwiZXJyb3JSZXRyeUludGVydmFsIiwib25EaXNjYXJkZWQiLCJyZXZhbGlkYXRlT25Gb2N1cyIsInJldmFsaWRhdGVPblJlY29ubmVjdCIsInJldmFsaWRhdGVJZlN0YWxlIiwic2hvdWxkUmV0cnlPbkVycm9yIiwiZm9jdXNUaHJvdHRsZUludGVydmFsIiwiZGVkdXBpbmdJbnRlcnZhbCIsImxvYWRpbmdUaW1lb3V0IiwiY29tcGFyZSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwiU1dSQ29uZmlnQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJlbmFibGVEZXZ0b29scyIsIl9fU1dSX0RFVlRPT0xTX1VTRV9fIiwidXNlIiwidXNlU1dSQ29uZmlnIiwidXNlQ29udGV4dCIsImNvbmNhdCIsInVzZVNXUk5leHQiLCJrZXlfIiwiZmV0Y2hlcl8iLCJQUkVMT0FEIiwicmVxIiwiX19TV1JfREVWVE9PTFNfUkVBQ1RfXyIsIldJVEhfREVEVVBFIiwiZGVkdXBlIiwidXNlU1dSSG9va3NDb25maWciLCJzd3JDb25maWciLCJ1c2VNZW1vIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImRlZmluZVByb3BlcnR5IiwicGFyZW50Q29uZmlnIiwiaXNGdW5jdGlvbmFsQ29uZmlnIiwiZXh0ZW5kZWRDb25maWciLCJ1MSIsImYxIiwidTIiLCJmMiIsIm1lcmdlQ29uZmlncyIsImNhY2hlQ29udGV4dFJlZiIsImNhY2hlQ29udGV4dCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsIl9fYXNzaWduIiwicyIsInAiLCJfX2NyZWF0ZUJpbmRpbmciLCJrMiIsImVudW1lcmFibGUiLCJfX3NldE1vZHVsZURlZmF1bHQiLCJfX2ltcG9ydFN0YXIiLCJtb2QiLCJfX2VzTW9kdWxlIiwiZXhwb3J0cyIsIkhpbnQiLCJyZWFjdF8xIiwidXRpbHNfMSIsIl9iIiwiY2hpbGQiLCJkZWZhdWx0IiwiQ2hpbGRyZW4iLCJvbmx5IiwiY2hpbGRyZW4iLCJ0b0xvd2VyQ2FzZSIsImRpc2FibGVIaW50IiwiYWxsb3dUYWJGaWxsIiwiYWxsb3dFbnRlckZpbGwiLCJvbkZpbGwiLCJvbkhpbnQiLCJ2YWx1ZU1vZGlmaWVyIiwiY2hpbGRQcm9wcyIsIm1haW5JbnB1dFJlZiIsImhpbnRXcmFwcGVyUmVmIiwiaGludFJlZiIsInVuTW9kaWZpZWRJbnB1dFRleHQiLCJzZXRVbm1vZGlmaWVkSW5wdXRUZXh0IiwiX2QiLCJ0ZXh0Iiwic2V0VGV4dCIsIl9lIiwiaGludCIsInNldEhpbnQiLCJfZiIsIm1hdGNoIiwic2V0TWF0Y2giLCJfZyIsImNoYW5nZUV2ZW50Iiwic2V0Q2hhbmdlRXZlbnQiLCJkdXBsaWNhdGUiLCJnZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiIsImNvbnNvbGUiLCJ3YXJuIiwiaW5wdXRTdHlsZSIsImdldENvbXB1dGVkU3R5bGUiLCJzdHlsZUhpbnQiLCJzZXRIaW50VGV4dEFuZElkIiwiZmlsdGVyIiwieCIsInN0YXJ0c1dpdGgiLCJzb3J0QXNjIiwiZ2V0TWF0Y2giLCJzbGljZSIsImhhbmRsZU9uRmlsbCIsIm5ld1VuTW9kaWZpZWRUZXh0Iiwib25DaGFuZ2UiLCJzdHlsZSIsImZvbnRGYW1pbHkiLCJmb250U2l6ZSIsImxpbmVIZWlnaHQiLCJib3hTaXppbmciLCJtYXJnaW4iLCJpbnRlcnBvbGF0ZVN0eWxlIiwicGFkZGluZyIsImJvcmRlclN0eWxlIiwiYm9yZGVyV2lkdGgiLCJjaGlsZFJlZiIsImNsb25lRWxlbWVudCIsIm1haW5JbnB1dCIsInBlcnNpc3QiLCJtb2RpZmllZFZhbHVlIiwib25CbHVyIiwicmVsYXRlZFRhcmdldCIsIm9uRm9jdXMiLCJvbktleURvd24iLCJjYXJldElzQXRUZXh0RW5kIiwiY3VycmVudFRhcmdldCIsInNlbGVjdGlvbkVuZCIsInByZXZlbnREZWZhdWx0IiwibWVyZ2VSZWZzIiwiY2xhc3NOYW1lIiwicG9zaXRpb24iLCJGcmFnbWVudCIsImRpc3BsYXkiLCJwb2ludGVyRXZlbnRzIiwiYmFja2dyb3VuZENvbG9yIiwiYm9yZGVyQ29sb3IiLCJib3hTaGFkb3ciLCJjb2xvciIsInRvcCIsImxlZnQiLCJ2aXNpYmlsaXR5Iiwid2hpdGVTcGFjZSIsIm9uQ2xpY2siLCJoaW50Q2FyZXRQb3NpdGlvbiIsImZvY3VzIiwiY2FyZXRQb3NpdGlvbiIsInNldFNlbGVjdGlvblJhbmdlIiwiYmFja2dyb3VuZCIsIm91dGxpbmUiLCJib3JkZXIiLCJjYXJldENvbG9yIiwiZGVmYXVsdFZhbHVlIiwidGFiSW5kZXgiLCJyZWZzIiwiX2kiLCJmaWx0ZXJlZFJlZnMiLCJCb29sZWFuIiwiaW5zdCIsImZpbHRlcmVkUmVmc18xIiwic3R5bGVzIiwiYXR0ciIsInN1YmF0dHIiLCJyZXBsYWNlIiwidG9VcHBlckNhc2UiLCJkaXIiLCJqb2luIiwiYXJyYXkiLCJ0cmFja2VyIiwiaXNmZiIsInVzZXJBZ2VudCIsImFkZEV2ZW50Iiwib2JqZWN0IiwibWV0aG9kIiwidXNlQ2FwdHVyZSIsImF0dGFjaEV2ZW50IiwiZ2V0TW9kcyIsIm1vZGlmaWVyIiwibW9kcyIsImdldEtleXMiLCJzcGxpdCIsImxhc3RJbmRleE9mIiwiX2tleU1hcCIsImJhY2tzcGFjZSIsInRhYiIsImNsZWFyIiwiZW50ZXIiLCJyZXR1cm4iLCJlc2MiLCJlc2NhcGUiLCJzcGFjZSIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCJfbW9kaWZpZXIiLCJzaGlmdCIsImFsdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJzaG9ydGN1dCIsInJldHVyblZhbHVlIiwic3RvcFByb3BhZ2F0aW9uIiwiY2FuY2VsQnViYmxlIiwiYXN0ZXJpc2siLCJ3aGljaCIsImNoYXJDb2RlIiwiaG90a2V5cyIsImtleU5hbWUiLCJrZXlOdW0iLCJnZXRNb2RpZmllclN0YXRlIiwia2V5ZG93biIsImtleXVwIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50IiwiaXNFbGVtZW50QmluZCIsImNsZWFyTW9kaWZpZXIiLCJfYXBpIiwiZGVsZXRlU2NvcGUiLCJuZXdTY29wZSIsImhhbmRsZXJzIiwiZ2V0UHJlc3NlZEtleUNvZGVzIiwiaXNQcmVzc2VkIiwic3JjRWxlbWVudCIsInRhZ05hbWUiLCJmbGFnIiwiaXNDb250ZW50RWRpdGFibGUiLCJyZWFkT25seSIsInRyaWdnZXIiLCJmaW5kIiwiaXRlbSIsInVuYmluZCIsImtleXNJbmZvIiwiX2xlbiIsImtleU1hcCIsIl9ob3RrZXlzIiwibm9Db25mbGljdCIsImRlZXAiLCJ1c2VJc0hvdGtleVByZXNzZWQiLCJ0YWdGaWx0ZXIiLCJlbmFibGVPblRhZ3MiLCJ0YXJnZXRUYWdOYW1lIiwiaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCIsImV2IiwidXNlSG90a2V5cyIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiX3JlZiRjdXJyZW50IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCIsInJlcGxhY2VDbGFzc05hbWUiLCJvcmlnQ2xhc3MiLCJjbGFzc1RvUmVtb3ZlIiwiZGlzYWJsZWQiLCJmb3JjZVJlZmxvdyIsIm5vZGUiLCJzY3JvbGxUb3AiLCJVTk1PVU5URUQiLCJFWElURUQiLCJFTlRFUklORyIsIkVOVEVSRUQiLCJFWElUSU5HIiwiVHJhbnNpdGlvbiIsIl9SZWFjdCRDb21wb25lbnQiLCJjb250ZXh0IiwiaW5pdGlhbFN0YXR1cyIsImFwcGVhciIsImlzTW91bnRpbmciLCJhcHBlYXJTdGF0dXMiLCJpbiIsInVubW91bnRPbkV4aXQiLCJtb3VudE9uRW50ZXIiLCJzdGF0dXMiLCJuZXh0Q2FsbGJhY2siLCJnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMiLCJwcmV2U3RhdGUiLCJfcHJvdG8iLCJjb21wb25lbnREaWRNb3VudCIsInVwZGF0ZVN0YXR1cyIsImNvbXBvbmVudERpZFVwZGF0ZSIsInByZXZQcm9wcyIsIm5leHRTdGF0dXMiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsImNhbmNlbE5leHRDYWxsYmFjayIsImdldFRpbWVvdXRzIiwiZXhpdCIsIm1vdW50aW5nIiwibm9kZVJlZiIsInBlcmZvcm1FbnRlciIsInBlcmZvcm1FeGl0Iiwic2V0U3RhdGUiLCJfdGhpczIiLCJhcHBlYXJpbmciLCJtYXliZU5vZGUiLCJtYXliZUFwcGVhcmluZyIsInRpbWVvdXRzIiwiZW50ZXJUaW1lb3V0Iiwic2FmZVNldFN0YXRlIiwib25FbnRlcmVkIiwib25FbnRlciIsIm9uRW50ZXJpbmciLCJvblRyYW5zaXRpb25FbmQiLCJfdGhpczMiLCJvbkV4aXQiLCJvbkV4aXRpbmciLCJvbkV4aXRlZCIsImNhbmNlbCIsIm5leHRTdGF0ZSIsInNldE5leHRDYWxsYmFjayIsIl90aGlzNCIsImFjdGl2ZSIsImRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIiLCJhZGRFbmRMaXN0ZW5lciIsIl9yZWYzIiwibWF5YmVOZXh0Q2FsbGJhY2siLCJyZW5kZXIiLCJfdGhpcyRwcm9wcyIsIlRyYW5zaXRpb25Hcm91cENvbnRleHQiLCJjb250ZXh0VHlwZSIsInByb3BUeXBlcyIsImRlZmF1bHRQcm9wcyIsInJlbW92ZUNsYXNzIiwiY2xhc3NlcyIsImMiLCJjbGFzc0xpc3QiLCJyZW1vdmUiLCJzZXRBdHRyaWJ1dGUiLCJiYXNlVmFsIiwiQ1NTVHJhbnNpdGlvbiIsImFwcGxpZWRDbGFzc2VzIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50IiwicmVzb2x2ZUFyZ3VtZW50cyIsInJlbW92ZUNsYXNzZXMiLCJhZGRDbGFzcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudDIiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQzIiwiZ2V0Q2xhc3NOYW1lcyIsImNsYXNzTmFtZXMiLCJpc1N0cmluZ0NsYXNzTmFtZXMiLCJiYXNlQ2xhc3NOYW1lIiwiYWN0aXZlQ2xhc3NOYW1lIiwiZG9uZUNsYXNzTmFtZSIsInBoYXNlIiwiYWRkIiwiaGFzQ2xhc3MiLCJfYWRkQ2xhc3MiLCJfdGhpcyRhcHBsaWVkQ2xhc3NlcyQiLCJiYXNlIiwiZ2V0Q2hpbGRNYXBwaW5nIiwibWFwRm4iLCJpc1ZhbGlkRWxlbWVudCIsIm1hcHBlciIsImdldFByb3AiLCJwcm9wIiwiZ2V0TmV4dENoaWxkTWFwcGluZyIsIm5leHRQcm9wcyIsInByZXZDaGlsZE1hcHBpbmciLCJuZXh0Q2hpbGRNYXBwaW5nIiwiZ2V0VmFsdWVGb3JLZXkiLCJuZXh0S2V5c1BlbmRpbmciLCJwZW5kaW5nS2V5cyIsInByZXZLZXkiLCJjaGlsZE1hcHBpbmciLCJuZXh0S2V5IiwicGVuZGluZ05leHRLZXkiLCJtZXJnZUNoaWxkTWFwcGluZ3MiLCJoYXNQcmV2IiwiaGFzTmV4dCIsInByZXZDaGlsZCIsImlzTGVhdmluZyIsInZhbHVlcyIsIlRyYW5zaXRpb25Hcm91cCIsImhhbmRsZUV4aXRlZCIsImNvbnRleHRWYWx1ZSIsImZpcnN0UmVuZGVyIiwibW91bnRlZCIsImN1cnJlbnRDaGlsZE1hcHBpbmciLCJDb21wb25lbnQiLCJjb21wb25lbnQiLCJjaGlsZEZhY3RvcnkiLCJSZXBsYWNlVHJhbnNpdGlvbiIsIl9hcmdzIiwiaGFuZGxlRW50ZXIiLCJfbGVuMiIsIl9rZXkyIiwiaGFuZGxlTGlmZWN5Y2xlIiwiaGFuZGxlRW50ZXJpbmciLCJfbGVuMyIsIl9rZXkzIiwiaGFuZGxlRW50ZXJlZCIsIl9sZW40IiwiX2tleTQiLCJoYW5kbGVFeGl0IiwiX2xlbjUiLCJfa2V5NSIsImhhbmRsZUV4aXRpbmciLCJfbGVuNiIsIl9rZXk2IiwiX2xlbjciLCJfa2V5NyIsImlkeCIsIm9yaWdpbmFsQXJncyIsIl9jaGlsZCRwcm9wcyIsImluUHJvcCIsIl9SZWFjdCRDaGlsZHJlbiR0b0FyciIsImZpcnN0Iiwic2Vjb25kIiwiX2xlYXZlUmVuZGVycyIsIl9lbnRlclJlbmRlcnMiLCJtb2RlcyIsImNhbGxIb29rIiwibmFtZSIsImNiIiwiX2VsZW1lbnQkcHJvcHMiLCJsZWF2ZVJlbmRlcnMiLCJjaGFuZ2VTdGF0ZSIsImVudGVyUmVuZGVycyIsIl9yZWY0IiwiU3dpdGNoVHJhbnNpdGlvbiIsImFwcGVhcmVkIiwibW9kZSIsIm9sZENoaWxkcmVuIiwibmV3Q2hpbGRyZW4iLCJfdGhpcyRzdGF0ZSIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIkNvbnN0cnVjdG9yIiwicHJvdG9Qcm9wcyIsInN0YXRpY1Byb3BzIiwicG9zc2libGVDb25zdHJ1Y3RvclJldHVybiIsIkluZmluaXRlTG9hZGVyIiwiX1B1cmVDb21wb25lbnQiLCJfdGVtcCIsImluc3RhbmNlIiwiY2xhc3NDYWxsQ2hlY2siLCJnZXRQcm90b3R5cGVPZiIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsInZpc2libGVTdGFydEluZGV4IiwidmlzaWJsZVN0b3BJbmRleCIsIl9lbnN1cmVSb3dzTG9hZGVkIiwiX3NldFJlZiIsImxpc3RSZWYiLCJfbGlzdFJlZiIsInNldFByb3RvdHlwZU9mIiwiaW5oZXJpdHMiLCJhdXRvUmVsb2FkIiwib25JdGVtc1JlbmRlcmVkIiwic3RhcnRJbmRleCIsInN0b3BJbmRleCIsIl9wcm9wcyIsImlzSXRlbUxvYWRlZCIsIml0ZW1Db3VudCIsIl9wcm9wcyRtaW5pbXVtQmF0Y2hTaSIsIm1pbmltdW1CYXRjaFNpemUiLCJfcHJvcHMkdGhyZXNob2xkIiwidGhyZXNob2xkIiwidW5sb2FkZWRSYW5nZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZVN0b3BJbmRleCIsIl9pbmRleCIsInBvdGVudGlhbFN0b3BJbmRleCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsImxvYWRNb3JlSXRlbXMiLCJsb2FkTW9yZVJvd3MiLCJfbG9vcCIsImxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJsYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsIlB1cmVDb21wb25lbnQiLCJzYWZlSXNOYU4iLCJOdW1iZXIiLCJpc05hTiIsImFyZUlucHV0c0VxdWFsIiwibmV3SW5wdXRzIiwibGFzdElucHV0cyIsInJlc3VsdEZuIiwiaXNFcXVhbCIsImxhc3RUaGlzIiwibGFzdFJlc3VsdCIsImxhc3RBcmdzIiwiY2FsbGVkT25jZSIsIm5ld0FyZ3MiLCJub3ciLCJwZXJmb3JtYW5jZSIsImNhbmNlbFRpbWVvdXQiLCJ0aW1lb3V0SUQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlkIiwicmVxdWVzdFRpbWVvdXQiLCJkZWxheSIsInN0YXJ0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGljayIsInNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicmVjYWxjdWxhdGUiLCJkaXYiLCJvdmVyZmxvdyIsImFwcGVuZENoaWxkIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiY2FjaGVkUlRMUmVzdWx0IiwiZ2V0UlRMT2Zmc2V0VHlwZSIsIm91dGVyRGl2Iiwib3V0ZXJTdHlsZSIsImRpcmVjdGlvbiIsImlubmVyRGl2IiwiaW5uZXJTdHlsZSIsInNjcm9sbExlZnQiLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCJkZWZhdWx0SXRlbUtleSIsImNvbHVtbkluZGV4Iiwicm93SW5kZXgiLCJjcmVhdGVHcmlkQ29tcG9uZW50IiwiX2NsYXNzIiwiZ2V0Q29sdW1uT2Zmc2V0IiwiZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCIsImdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJnZXRDb2x1bW5XaWR0aCIsImdldEVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCIsImdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCIsImdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCIsImdldFJvd0hlaWdodCIsImdldFJvd09mZnNldCIsImdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiaW5pdEluc3RhbmNlUHJvcHMiLCJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwidmFsaWRhdGVQcm9wcyIsIkdyaWQiLCJfaW5zdGFuY2VQcm9wcyIsIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwiX291dGVyUmVmIiwiaXNTY3JvbGxpbmciLCJob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbExlZnQiLCJpbml0aWFsU2Nyb2xsVG9wIiwic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwidmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsIm92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIm92ZXJzY2FuQ29sdW1uU3RvcEluZGV4Iiwib3ZlcnNjYW5Sb3dTdGFydEluZGV4Iiwib3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsInZpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJ2aXNpYmxlUm93U3RhcnRJbmRleCIsInZpc2libGVSb3dTdG9wSW5kZXgiLCJfY2FsbE9uU2Nyb2xsIiwib25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiY29sdW1uV2lkdGgiLCJyb3dIZWlnaHQiLCJpdGVtU3R5bGVDYWNoZSIsIl9vZmZzZXQiLCJpc1J0bCIsIl9fXyIsIl9vblNjcm9sbCIsIl9ldmVudCRjdXJyZW50VGFyZ2V0IiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJjYWxjdWxhdGVkU2Nyb2xsTGVmdCIsImNhbGN1bGF0ZWRTY3JvbGxUb3AiLCJfcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCIsIl9vdXRlclJlZlNldHRlciIsIm91dGVyUmVmIiwiX3Jlc2V0SXNTY3JvbGxpbmciLCJ2YWxpZGF0ZVNoYXJlZFByb3BzIiwic2Nyb2xsVG8iLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCRhbGlnbiIsImFsaWduIiwiX3RoaXMkcHJvcHMyIiwiY29sdW1uQ291bnQiLCJyb3dDb3VudCIsInNjcm9sbGJhclNpemUiLCJlc3RpbWF0ZWRUb3RhbEhlaWdodCIsImhvcml6b250YWxTY3JvbGxiYXJTaXplIiwidmVydGljYWxTY3JvbGxiYXJTaXplIiwiX3RoaXMkcHJvcHMzIiwiX2NhbGxQcm9wc0NhbGxiYWNrcyIsIl90aGlzJHN0YXRlMiIsIl90aGlzJHByb3BzNCIsImlubmVyUmVmIiwiaW5uZXJFbGVtZW50VHlwZSIsImlubmVyVGFnTmFtZSIsIml0ZW1EYXRhIiwiX3RoaXMkcHJvcHM0JGl0ZW1LZXkiLCJpdGVtS2V5Iiwib3V0ZXJFbGVtZW50VHlwZSIsIm91dGVyVGFnTmFtZSIsInVzZUlzU2Nyb2xsaW5nIiwiX3RoaXMkX2dldEhvcml6b250YWxSIiwiX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyIiwiY29sdW1uU3RhcnRJbmRleCIsImNvbHVtblN0b3BJbmRleCIsIl90aGlzJF9nZXRWZXJ0aWNhbFJhbiIsIl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIiLCJyb3dTdGFydEluZGV4Iiwicm93U3RvcEluZGV4IiwiaXRlbXMiLCJfcm93SW5kZXgiLCJfY29sdW1uSW5kZXgiLCJlc3RpbWF0ZWRUb3RhbFdpZHRoIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJ3aWxsQ2hhbmdlIiwiX3RoaXMkcHJvcHM1IiwiX3RoaXMkX2dldEhvcml6b250YWxSMiIsIl9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgiLCJfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgiLCJfdmlzaWJsZUNvbHVtblN0b3BJbmRleCIsIl90aGlzJF9nZXRWZXJ0aWNhbFJhbjIiLCJfb3ZlcnNjYW5Sb3dTdGFydEluZGV4IiwiX292ZXJzY2FuUm93U3RvcEluZGV4IiwiX3Zpc2libGVSb3dTdGFydEluZGV4IiwiX3Zpc2libGVSb3dTdG9wSW5kZXgiLCJfdGhpcyRzdGF0ZTMiLCJfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiIsIl9zY3JvbGxMZWZ0IiwiX3Njcm9sbFRvcCIsIl9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQiLCJfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfdGhpcyRwcm9wczYiLCJvdmVyc2NhbkNvbHVtbkNvdW50Iiwib3ZlcnNjYW5Db2x1bW5zQ291bnQiLCJvdmVyc2NhbkNvdW50IiwiX3RoaXMkc3RhdGU0Iiwib3ZlcnNjYW5Db3VudFJlc29sdmVkIiwib3ZlcnNjYW5CYWNrd2FyZCIsIm92ZXJzY2FuRm9yd2FyZCIsIl90aGlzJHByb3BzNyIsIm92ZXJzY2FuUm93Q291bnQiLCJvdmVyc2NhblJvd3NDb3VudCIsIl90aGlzJHN0YXRlNSIsIl9yZWY1IiwiX3JlZjYiLCJyb3dNZXRhZGF0YU1hcCIsImVzdGltYXRlZFJvd0hlaWdodCIsImxhc3RNZWFzdXJlZFJvd0luZGV4IiwidG90YWxTaXplT2ZNZWFzdXJlZFJvd3MiLCJpdGVtTWV0YWRhdGEiLCJvZmZzZXQiLCJjb2x1bW5NZXRhZGF0YU1hcCIsImVzdGltYXRlZENvbHVtbldpZHRoIiwibGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgiLCJnZXRJdGVtTWV0YWRhdGEiLCJpdGVtVHlwZSIsImluc3RhbmNlUHJvcHMiLCJpdGVtTWV0YWRhdGFNYXAiLCJpdGVtU2l6ZSIsImxhc3RNZWFzdXJlZEluZGV4IiwiZmluZE5lYXJlc3RJdGVtIiwiZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoIiwiZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2giLCJoaWdoIiwibG93IiwibWlkZGxlIiwiZmxvb3IiLCJjdXJyZW50T2Zmc2V0IiwiaW50ZXJ2YWwiLCJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsInNjcm9sbE9mZnNldCIsImVzdGltYXRlZFRvdGFsU2l6ZSIsIm1heE9mZnNldCIsIm1pbk9mZnNldCIsInJvdW5kIiwiVmFyaWFibGVTaXplR3JpZCIsInJlc2V0QWZ0ZXJDb2x1bW5JbmRleCIsInNob3VsZEZvcmNlVXBkYXRlIiwicmVzZXRBZnRlckluZGljZXMiLCJyZXNldEFmdGVyUm93SW5kZXgiLCJfcmVmNiRzaG91bGRGb3JjZVVwZGEiLCJfcmVmNyIsIklTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxIiwiZGVmYXVsdEl0ZW1LZXkkMSIsImNyZWF0ZUxpc3RDb21wb25lbnQiLCJnZXRJdGVtT2Zmc2V0IiwiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwiZ2V0SXRlbVNpemUiLCJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsIkxpc3QiLCJzY3JvbGxEaXJlY3Rpb24iLCJpbml0aWFsU2Nyb2xsT2Zmc2V0Iiwib3ZlcnNjYW5TdGFydEluZGV4Iiwib3ZlcnNjYW5TdG9wSW5kZXgiLCJsYXlvdXQiLCJpc0hvcml6b250YWwiLCJvZmZzZXRIb3Jpem9udGFsIiwiX29uU2Nyb2xsSG9yaXpvbnRhbCIsIl9vblNjcm9sbFZlcnRpY2FsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQyIiwidmFsaWRhdGVTaGFyZWRQcm9wcyQxIiwiX3RoaXMkcHJvcHM1JGl0ZW1LZXkiLCJfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQiLCJfZ2V0UmFuZ2VUb1JlbmRlciIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZDIiLCJfb3ZlcnNjYW5TdGFydEluZGV4IiwiX292ZXJzY2FuU3RvcEluZGV4IiwiX3Zpc2libGVTdGFydEluZGV4IiwiX3Zpc2libGVTdG9wSW5kZXgiLCJfc2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbE9mZnNldCIsImdldEl0ZW1NZXRhZGF0YSQxIiwiZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEiLCJlc3RpbWF0ZWRJdGVtU2l6ZSIsInRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyIsIlZhcmlhYmxlU2l6ZUxpc3QiLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxIiwiZmluZE5lYXJlc3RJdGVtJDEiLCJGaXhlZFNpemVHcmlkIiwibGFzdENvbHVtbk9mZnNldCIsIm1pZGRsZU9mZnNldCIsImNlaWwiLCJfcmVmOCIsImxhc3RSb3dPZmZzZXQiLCJfcmVmOSIsIl9yZWYxMCIsIm51bVZpc2libGVDb2x1bW5zIiwiX3JlZjExIiwiX3JlZjEyIiwibnVtVmlzaWJsZVJvd3MiLCJfcmVmMTMiLCJGaXhlZFNpemVMaXN0IiwibGFzdEl0ZW1PZmZzZXQiLCJudW1WaXNpYmxlSXRlbXMiLCJzaGFsbG93RGlmZmVycyIsImF0dHJpYnV0ZSIsIl9hdHRyaWJ1dGUiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiYXJlRXF1YWwiLCJwcmV2U3R5bGUiLCJwcmV2UmVzdCIsIm5leHRTdHlsZSIsIm5leHRSZXN0Iiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwicmVnZXgiLCJwYXJlbnRzIiwicHMiLCJwYXJlbnROb2RlIiwiZ2V0UHJvcGVydHlWYWx1ZSIsInNjcm9sbCIsIkhUTUxFbGVtZW50IiwiU1ZHRWxlbWVudCIsInNjcm9sbGluZ0VsZW1lbnQiLCJkb2N1bWVudEVsZW1lbnQiLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiaW52ZXJ0ZWQiLCJyb3VuZGVkIiwibm9TaGFkb3ciLCJub1BhZGRpbmciLCJub0JvcmRlciIsInRyYW5zcGFyZW50Iiwic3RyZXRjaEhvcml6b250YWxseSIsInN0cmV0Y2hWZXJ0aWNhbGx5IiwiYXV0b0ZvY3VzIiwib2Zmc2V0U2lkZXMiLCJjb250YWluZXIiLCJsZWZ0T2Zmc2V0IiwicmlnaHRPZmZzZXQiLCJyb2xlIiwiY29udGVudCIsImJ1dHRvbkJhZGdlIiwicGxhY2Vob2xkZXIiLCJjaGVja2VkIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsImlucHV0RWxlbWVudCIsImlucHV0UmVmIiwiY2hlY2tib3giLCJMYWJlbCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwiQ29sb3JTd2F0Y2giLCJpc1NlbGVjdGVkIiwiY29sb3JTd2F0Y2giLCJzZWxlY3RlZCIsImhleENvZGUiLCJzck9ubHkiLCJDb25maXJtYXRpb25Nb2RhbCIsImhlYWRlciIsImlzT3BlbiIsImJ1dHRvbnNMZWZ0IiwiYnV0dG9uc1JpZ2h0Iiwib25DbG9zZSIsIm5vT3ZlcmxheSIsImJhc2VaSW5kZXgiLCJNb2RhbCIsIm1vZGFsSGVhZGVyIiwibW9kYWxDb250ZW50IiwibW9kYWxCdXR0b25zQ29udGFpbmVyIiwibW9kYWxCdXR0b25zIiwiZGlzcGxheU5hbWUiLCJEcmF3ZXJDb250ZXh0IiwiVFJBTlNJVElPTl9DTEFTU19OQU1FUyIsImRyYXdlclBhcGVyRW50ZXIiLCJlbnRlckFjdGl2ZSIsImRyYXdlclBhcGVyRW50ZXJBY3RpdmUiLCJlbnRlckRvbmUiLCJkcmF3ZXJQYXBlckVudGVyRG9uZSIsImRyYXdlclBhcGVyRXhpdCIsImV4aXRBY3RpdmUiLCJkcmF3ZXJQYXBlckV4aXRBY3RpdmUiLCJleGl0RG9uZSIsImRyYXdlclBhcGVyRXhpdERvbmUiLCJEcmF3ZXIiLCJvcGVuIiwibm9DbG9zZUljb24iLCJwb3J0YWxDb250YWluZXIiLCJvbkNsb3NlQW5pbWF0aW9uRW5kIiwiaXNEcmF3ZXJWaXNpYmxlIiwic2V0RHJhd2VyVmlzaWJsZSIsImlzT3ZlcmxheVZpc2libGUiLCJzZXRJc092ZXJsYXlWaXNpYmxlIiwiY3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUiLCJnZXRDdXJyZW50VHJhbnNpdGlvbkNsYXNzTmFtZSIsImNyZWF0ZVBvcnRhbCIsImRyYXdlciIsInZpc2libGUiLCJkcmF3ZXJQYXBlciIsImRyYXdlclBhcGVyQ29udGVudCIsImRyYXdlck92ZXJsYXkiLCJIZWFkZXIiLCJEcmF3ZXJIZWFkZXIiLCJDb250ZW50IiwiRHJhd2VyQ29udGVudCIsIkZvb3RlciIsIkRyYXdlckZvb3RlciIsImRyYXdlckNvbnRlbnQiLCJkcmF3ZXJGb290ZXIiLCJ1c2VEcmF3ZXJDb250ZXh0IiwiZHJhd2VySGVhZGVyIiwiZHJhd2VySGVhZGVyQ2xvc2UiLCJkcmF3ZXJIZWFkZXJDbG9zZUljb24iLCJJY29uIiwic3JjIiwiaXNEaXNhYmxlZCIsIkJ1dHRvbiIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJwbGFjZW1lbnQiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJzZXRJc09wZW4iLCJ0b2dnbGVJc09wZW4iLCJNZW51Q29udGFpbmVyIiwiYnV0dG9uIiwiQ2xpY2thYmxlIiwiTWVudSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJEcm9wZG93biIsImFjY2VwdCIsIm11bHRpcGxlIiwiaW5wdXQiLCJwYXJlbnQiLCJob3Jpem9udGFsUGxhY2VtZW50IiwidmVydGljYWxQbGFjZW1lbnQiLCJmaXhlZCIsImljb24iLCJjcm9zc09yaWdpbiIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiZGVjb2RpbmciLCJsb2FkaW5nIiwib3RoZXJJbWFnZVByb3BzIiwiaW1hZ2VFbGVtZW50IiwiaW1hZ2UiLCJoYXNPdmVybGF5Iiwib3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsImxpc3QiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJmb290ZXIiLCJzbWFydExheW91dCIsIm1lbnVQbGFjZW1lbnQiLCJQbGFjZW1lbnRDb250ZXh0IiwiRXJyb3IiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIm5ld0hlaWdodCIsIm1pbkhlaWdodCIsIm1heEhlaWdodCIsIm1lbnUiLCJmb3J3YXJkUmVmIiwibWVudUNvbnRhaW5lciIsIm1lbnVJdGVtIiwibWVudUxpbmtJdGVtIiwiaGFuZGxlT3ZlcmxheUNsaWNrIiwiekluZGV4IiwibW9kYWwiLCJtb2RhbEJ1dHRvbiIsImFwcGVuZERpZ2l0IiwibnVtYmVyIiwiZGlnaXQiLCJwb3BEaWdpdCIsImV2ZW50RGlnaXRLZXlzIiwiTnVtcGFkIiwiY3JlYXRlRW1pdE51bWJlckhhbmRsZXIiLCJuZXdOdW1iZXIiLCJOdW1wYWRLZXlzIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJwYXJzZUludCIsIm51bWJlcnMiLCJpc0ZpeGVkIiwic2hvd0V4cGFuZGVkR3JvdXAiLCJTZWxlY3RDb250ZXh0IiwiZXhwYW5kZWQiLCJ0b2dnbGVFeHBhbmQiLCJoYW5kbGVHcm91cENsaWNrIiwiSWNvbkJ1dHRvbiIsIk9wdGlvbiIsInNlbGVjdGVkT3B0aW9ucyIsInVwZGF0ZVNlbGVjdGVkT3B0aW9uIiwic2hvd1NlbGVjdGVkV2l0aFRpY2siLCJpc0NoZWNrZWQiLCJzaG93U2VsZWN0ZWRXaXRoVGlja0NvbnRhaW5lciIsImNoZWNrYm94Q29udGFpbmVyIiwiQ2hlY2tib3giLCJzZWxlY3RlZExhYmVsIiwidGlja0NvbnRhaW5lciIsImlzT3B0aW9uIiwib25GaWx0ZXIiLCJzZWxlY3RBbGxDaGVja2VkIiwidG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCIsInNlYXJjaEtleXdvcmQiLCJzZWxlY3RBbGwiLCJzZXRTZWxlY3RlZE9wdGlvbnMiLCJoYXNHcm91cE9wdGlvbiIsImZpbHRlck9wdGlvbnMiLCJrZXl3b3JkIiwidHJpbSIsImZpbHRlcmVkT3B0aW9ucyIsInJlZHVjZSIsImZpbHRlcmVkIiwiZ3JvdXBPcHRpb24iLCJmaWx0ZXJlZEdyb3VwT3B0aW9ucyIsImZpbHRlcmVkT3B0aW9uc0NvdW50IiwibmV4dE9wdGlvbiIsInNlbGVjdGVkT3B0aW9uc0NvdW50Iiwic2VsZWN0ZWRPcHRpb24iLCJmaWx0ZXJlZE9wdGlvbiIsImhhbmRsZVNlbGVjdEFsbENsaWNrIiwib3B0aW9uc1RvU2VsZWN0IiwiZmxhdCIsInNlbGVjdEFsbENvbnRhaW5lciIsIkdyb3VwT3B0aW9uIiwibm9PcHRpb25zIiwic2V0U2VhcmNoS2V5d29yZCIsImhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UiLCJoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayIsImljb25TZWFyY2hDb250YWluZXIiLCJUZXh0SW5wdXQiLCJyZXNldEJ1dHRvbiIsInNjcm9sbE1lbnVJbnRvVmlldyIsInNob3dTZWxlY3RlZEFzVGFncyIsInNob3dTZWFyY2giLCJlbmFibGVTaW5nbGVEZWxldGlvbiIsIm9wZW5lZCIsInRvZ2dsZU9wZW5lZCIsImNvbnRlbnRSZWYiLCJvblJlc2l6ZSIsInNjcm9sbEludG9WaWV3IiwiYmVoYXZpb3IiLCJibG9jayIsIlJPIiwiUmVzaXplT2JzZXJ2ZXIiLCJvYnNlcnZlIiwiZGlzY29ubmVjdCIsImhhbmRsZU9wZW5TZWxlY3QiLCJTZWxlY3RDb250ZXh0UHJvdmlkZXIiLCJTZWxlY3RvciIsImlzRHJvcGRvd25PcGVuZWQiLCJpY29uQnV0dG9uIiwiaXNMb2FkaW5nIiwic2VhcmNoQ29udGFpbmVyIiwiU2VhcmNoIiwiT3B0aW9uTGlzdCIsImluaXRpYWxTdGF0ZSIsInVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMiLCJpc09wdGlvblNlbGVjdGVkIiwiaGFuZGxlVGFnQ2xpY2siLCJoYW5kbGVUYWdDbG9zZSIsInBsYWNlaG9sZGVyVG9TaG93Iiwic2hvd0FzVGFncyIsInRhZ1dyYXBwZXIiLCJUYWciLCJjbG9zYWJsZSIsInNob3dBc1RleHQiLCJjb2x1bW5zIiwiZGF0YVNvdXJjZSIsIm9uUm93Q2xpY2siLCJoYXNBcnJvdyIsIm9uTG9hZE1vcmUiLCJwYWdlIiwic2V0UGFnZSIsInBhZ2VTaXplIiwiVGFibGVDb25maWciLCJQQUdFX1NJWkUiLCJ0YWJsZUhlaWdodCIsIlJPV19IRUlHSFQiLCJoZWFkZXJIZWlnaHQiLCJIRUFERVJfSEVJR0hUIiwiZGlzYWJsZUxhenlMb2FkZXIiLCJhY3RpdmVSb3dzIiwiaXRlbXNDb3VudCIsImlzSGVhZGVyU3RpY2t5IiwiaGFzVmlydHVhbFNjcm9sbCIsInNjcm9sbFRvVG9wIiwic2V0U2Nyb2xsVG9wIiwicmVuZGVyUm93Iiwicm93IiwiaGFuZGxlTGlzdFNjcm9sbCIsImxvYWRNb3JlIiwiSVRFTVNfTE9BREVEIiwicGxhY2Vob2xkZXJDb250YWluZXIiLCJzY3JvbGxiYXJDb250YWluZXIiLCJib3JkZXJCb3R0b20iLCJjb2x1bW4iLCJvblNvcnQiLCJzb3J0YWJsZSIsInNvcnRlZCIsImRlZmF1bHRTb3J0T3JkZXIiLCJ0aXRsZSIsIlNvcnRPcmRlciIsIkRFU0MiLCJzb3J0T3JkZXIiLCJzZXRTb3J0T3JkZXIiLCJoYW5kbGVTb3J0Q29sdW1uIiwibmV3U29ydE9yZGVyIiwiQVNDIiwiY2VsbFByb3BzIiwidGFibGVIZWFkZXJDZWxsIiwic29ydEljb25WaXNpYmxlIiwiaGFuZGxlUm93Q2xpY2siLCJkYXRhSW5kZXgiLCJvbkRlbGV0ZSIsImNsb3NlQnV0dG9uIiwicGF0dGVybiIsIndpdGhTY3JvbGwiLCJpbnB1dE1vZGUiLCJ0YWdPcHRpb25zIiwidGFncyIsInNldFRhZ3MiLCJ0YWdzQXJyIiwidGFnIiwiaGFuZGxlVGV4dENoYW5nZSIsImhhbmRsZVRhZ0RlbGV0ZSIsInVwZGF0ZWRUYWdzIiwiaGFuZGxlVGFnQWRkIiwidHJpbW1lZFRleHQiLCJoYW5kbGVLZXlEb3duIiwidGV4dElucHV0Iiwic2Nyb2xsYWJsZSIsInRhZ0lucHV0IiwidG9hc3QiLCJ0b2FzdENvbnRhaW5lciIsInNob3dUb29sdGlwIiwidG91Y2hTY3JlZW5IaWRpbmdEZWxheSIsInBvc2l0aW9uU3R5bGVzIiwic2V0UG9zaXRpb25TdHlsZXMiLCJ0b29sdGlwSXNWaXNpYmxlIiwic2V0VG9vbHRpcElzVmlzaWJsZSIsInRpbWVyUmVmIiwidXBkYXRlUG9zaXRpb25TdHlsZXMiLCJyZWN0IiwibmV3UG9zaXRpb25TdHlsZXMiLCJzY3JvbGxZIiwic2Nyb2xsWCIsIm1hcFBsYWNlbWVudFRvUG9zaXRpb25TdHlsZXMiLCJvbk1vdXNlRW50ZXIiLCJvbk1vdXNlTGVhdmUiLCJvblRvdWNoU3RhcnRIYW5kbGVyIiwiY2xlYXJUaW1lb3V0Iiwib25Ub3VjaEVuZEhhbmRsZXIiLCJzY3JvbGxhYmxlUGFyZW50IiwiaGlkZVRvb2x0aXAiLCJvblRvdWNoU3RhcnQiLCJvblRvdWNoRW5kIiwidG9vbHRpcCIsInBvc3RlciIsIm11dGVkIiwibG9vcCIsImF1dG9QbGF5Iiwib3RoZXJWaWRlb1Byb3BzIiwidmlkZW8iLCJwbGF5c0lubGluZSIsImlzIiwibCIsInVzZURlYnVnVmFsdWUiLCJnZXRTbmFwc2hvdCIsInUiLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIm1vZHVsZSIsIl9uaWwiLCJfcGFyc2UiLCJfc3RyaW5naWZ5IiwiX3YiLCJfdjIiLCJfdjMiLCJfdjQiLCJfdmFsaWRhdGUiLCJfdmVyc2lvbiIsIl9pbnRlcm9wUmVxdWlyZURlZmF1bHQiLCJnZXRPdXRwdXRMZW5ndGgiLCJpbnB1dExlbmd0aDgiLCJzYWZlQWRkIiwibHN3IiwibWQ1Y21uIiwicSIsIm51bSIsImNudCIsIm1kNWZmIiwibWQ1Z2ciLCJtZDVoaCIsIm1kNWlpIiwiYnl0ZXMiLCJtc2ciLCJ1bmVzY2FwZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIlVpbnQ4QXJyYXkiLCJvdXRwdXQiLCJsZW5ndGgzMiIsImhleFRhYiIsImhleCIsImNoYXJBdCIsIm1kNVRvSGV4RW5jb2RlZEFycmF5Iiwib2xkYSIsIm9sZGIiLCJvbGRjIiwib2xkZCIsIndvcmRzVG9NZDUiLCJsZW5ndGg4IiwiVWludDMyQXJyYXkiLCJieXRlc1RvV29yZHMiLCJfZGVmYXVsdCIsInJhbmRvbVVVSUQiLCJjcnlwdG8iLCJ1dWlkIiwiYXJyIiwiZ2V0UmFuZG9tVmFsdWVzIiwicm5kczgiLCJ6IiwiUk9UTCIsIksiLCJIIiwiTiIsIk0iLCJqIiwicG93IiwiVyIsIlQiLCJ1bnNhZmVTdHJpbmdpZnkiLCJieXRlVG9IZXgiLCJfcm5nIiwiX25vZGVJZCIsIl9jbG9ja3NlcSIsIl9sYXN0TVNlY3MiLCJfbGFzdE5TZWNzIiwiYnVmIiwiY2xvY2tzZXEiLCJzZWVkQnl0ZXMiLCJybmciLCJtc2VjcyIsIm5zZWNzIiwiZHQiLCJ0bCIsInRtaCIsIl9tZCIsIlVSTCIsIkROUyIsInZlcnNpb24iLCJoYXNoZnVuYyIsImdlbmVyYXRlVVVJRCIsIm5hbWVzcGFjZSIsIl9uYW1lc3BhY2UiLCJzdHIiLCJzdHJpbmdUb0J5dGVzIiwiX25hdGl2ZSIsInJuZHMiLCJfc2hhIiwiX3JlZ2V4IiwicmVxdWlyZSIsIl9fd2VicGFja19tb2R1bGVfY2FjaGVfXyIsIl9fd2VicGFja19yZXF1aXJlX18iLCJtb2R1bGVJZCIsImNhY2hlZE1vZHVsZSIsIl9fd2VicGFja19tb2R1bGVzX18iLCJnZXR0ZXIiLCJkZWZpbml0aW9uIiwidG9TdHJpbmdUYWciLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ==
2
+ (()=>{var e={3349:(e,t,n)=>{"use strict";function r(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}n.d(t,{Z:()=>r})},2122:(e,t,n)=>{"use strict";function r(){return r=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},1788:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.d(t,{Z:()=>r})},9756:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},2565:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(6689);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=function(e){return o.createElement("svg",a({xmlns:"http://www.w3.org/2000/svg",width:15,height:15,fill:"none"},e),r||(r=o.createElement("path",{stroke:"currentColor",strokeLinecap:"square",d:"m1 7 4.5 4.5L14 3"})))}},5348:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useOutsideClick:()=>a,usePromise:()=>l,useSWRHooksConfig:()=>X,useToggle:()=>J});var r=n(6689),o={capture:!0};function a(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){var n=function(n){t.current&&!t.current.contains(n.target)&&e(n)};return document.addEventListener("mouseup",n,o),document.addEventListener("touchend",n,o),function(){document.removeEventListener("mouseup",n,o),document.removeEventListener("touchend",n,o)}}),[e]),t}function i(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(e){o={error:e}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function l(){var e=this,t=i((0,r.useState)({data:void 0,error:void 0,isPending:!1,isResolved:!1,isRejected:!1,isSettled:!1}),2),n=t[0],o=t[1],a=(0,r.useRef)(!1);(0,r.useEffect)((function(){return a.current=!1,function(){a.current=!0}}),[]);var l=(0,r.useCallback)((function(t){return n=e,r=void 0,l=function(){var e,n;return function(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(l){return function(u){return function(l){if(n)throw new TypeError("Generator is already executing.");for(;a&&(a=0,l[0]&&(i=0)),i;)try{if(n=1,r&&(o=2&l[0]?r.return:l[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,l[1])).done)return o;switch(r=0,o&&(l=[2&l[0],o.value]),l[0]){case 0:case 1:o=l;break;case 4:return i.label++,{value:l[1],done:!1};case 5:i.label++,r=l[1],l=[0];continue;case 7:l=i.ops.pop(),i.trys.pop();continue;default:if(!((o=(o=i.trys).length>0&&o[o.length-1])||6!==l[0]&&2!==l[0])){i=0;continue}if(3===l[0]&&(!o||l[1]>o[0]&&l[1]<o[3])){i.label=l[1];break}if(6===l[0]&&i.label<o[1]){i.label=o[1],o=l;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(l);break}o[2]&&i.ops.pop(),i.trys.pop();continue}l=t.call(e,i)}catch(e){l=[6,e],r=0}finally{n=o=0}if(5&l[0])throw l[1];return{value:l[0]?l[1]:void 0,done:!0}}([l,u])}}}(this,(function(r){switch(r.label){case 0:return r.trys.push([0,2,,3]),o({data:void 0,error:void 0,isPending:!0,isResolved:!1,isRejected:!1,isSettled:!1}),[4,t];case 1:return e=r.sent(),!1===a.current&&o({data:e,error:void 0,isPending:!1,isResolved:!0,isRejected:!1,isSettled:!0}),[2,e];case 2:return n=r.sent(),!1===a.current&&o({error:n,data:void 0,isPending:!1,isResolved:!1,isRejected:!0,isSettled:!0}),[3,3];case 3:return[2]}}))},new((i=void 0)||(i=Promise))((function(e,t){function o(e){try{u(l.next(e))}catch(e){t(e)}}function a(e){try{u(l.throw(e))}catch(e){t(e)}}function u(t){var n;t.done?e(t.value):(n=t.value,n instanceof i?n:new i((function(e){e(n)}))).then(o,a)}u((l=l.apply(n,r||[])).next())}));var n,r,i,l}),[a]);return[n,l]}Object.create,Object.create;var u=n(1688);const s=new WeakMap,c={},d={},f=()=>{},p=f(),v=Object,h=e=>e===p,m=e=>"function"==typeof e,g=(e,t)=>({...e,...t}),_="undefined",b=typeof window!=_,y=typeof document!=_,O=(e,t)=>{const n=s.get(e);return[()=>e.get(t)||c,r=>{if(!h(t)){const o=e.get(t);t in d||(d[t]=o),n[5](t,g(o,r),o||c)}},n[6],()=>!h(t)&&t in d?d[t]:e.get(t)||c]},w=new WeakMap;let E=0;const M=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(v(e)!==e||r||n==RegExp)o=r?e.toJSON():"symbol"==t?e.toString():"string"==t?JSON.stringify(e):""+e;else{if(o=w.get(e),o)return o;if(o=++E+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=M(e[a])+",";w.set(e,o)}if(n==v){o="#";const t=v.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+M(e[a])+",");w.set(e,o)}}return o};let S=!0;const[x,C]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],P={isOnline:()=>S,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},j={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),x("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),C("focus",e)}),initReconnect:e=>{const t=()=>{S=!0,e()},n=()=>{S=!1};return x("online",t),x("offline",n),()=>{C("online",t),C("offline",n)}}},I=!r.useId,k=!b||"Deno"in window,D=k?r.useEffect:r.useLayoutEffect,R="undefined"!=typeof navigator&&navigator.connection,N=!k&&R&&(["slow-2g","2g"].includes(R.effectiveType)||R.saveData),T=e=>{if(m(e))try{e=e()}catch(t){e=""}const t=e;return[e="string"==typeof e?e:(Array.isArray(e)?e.length:e)?M(e):"",t]};let L=0;const z=()=>++L,A=2;var H=A;async function B(...e){const[t,n,r,o]=e,a=g({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const c=!1!==a.revalidate,d=e=>"function"==typeof l?l(e):!1!==l,f=a.throwOnError;if(m(n)){const e=n,r=[],o=t.keys();for(let n=o.next();!n.done;n=o.next()){const o=n.value;!/^\$(inf|sub)\$/.test(o)&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(v))}return v(n);async function v(n){const[o]=T(n);if(!o)return;const[a,l]=O(t,o),[v,g,_]=s.get(t),b=v[o],y=()=>c&&(delete _[o],b&&b[0])?b[0](A).then((()=>a().data)):a().data;if(e.length<3)return y();let w,E=r;const M=z();g[o]=[M,0];const S=!h(u),x=a(),C=x.data,P=x._c,j=h(P)?C:P;if(S&&(u=m(u)?u(j):u,l({data:u,_c:j})),m(E))try{E=E(j)}catch(e){w=e}if(E&&m(E.then)){if(E=await E.catch((e=>{w=e})),M!==g[o][0]){if(w)throw w;return E}w&&S&&d(w)&&(i=!0,E=j,l({data:E,_c:p}))}i&&(w||(m(i)&&(E=i(E,j)),l({data:E,_c:p}))),g[o][1]=z();const I=await y();if(l({_c:p}),!w)return i?I:E;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},V=(e,t)=>{if(!s.has(e)){const n=g(j,t),r={},o=B.bind(p,e);let a=f;const i={},l=(e,t)=>{const n=i[e]||[];return i[e]=n,n.push(t),()=>n.splice(n.indexOf(t),1)},u=(t,n,r)=>{e.set(t,n);const o=i[t];if(o)for(const e of o)e(n,r)},c=()=>{if(!s.has(e)&&(s.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(p,F.bind(p,r,0))),o=n.initReconnect(setTimeout.bind(p,F.bind(p,r,1)));a=()=>{t&&t(),o&&o(),s.delete(e)}}};return c(),[e,o,c,a]}return[e,s.get(e)[4]]},[W,G]=V(new Map),U=g({onLoadingSlow:f,onSuccess:f,onError:f,onErrorRetry:(e,t,n,r,o)=>{const a=n.errorRetryCount,i=o.retryCount,l=~~((Math.random()+.5)*(1<<(i<8?i:8)))*n.errorRetryInterval;!h(a)&&i>a||setTimeout(r,l,o)},onDiscarded:f,revalidateOnFocus:!0,revalidateOnReconnect:!0,revalidateIfStale:!0,shouldRetryOnError:!0,errorRetryInterval:N?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:N?5e3:3e3,compare:(e,t)=>M(e)==M(t),isPaused:()=>!1,cache:W,mutate:G,fallback:{}},P),Z=(0,r.createContext)({}),K=b&&window.__SWR_DEVTOOLS_USE__,q=K?window.__SWR_DEVTOOLS_USE__:[],Q=()=>g(U,(0,r.useContext)(Z));q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=T(t)[0],[,,,o]=s.get(W),a=o[r];return a?(delete o[r],a):n(...e)}),r)));K&&(window.__SWR_DEVTOOLS_REACT__=r);const Y={dedupe:!0};function X(){var e=Q();return(0,r.useMemo)((function(){return{mutate:e.mutate,cache:e.cache}}),[e.mutate,e.cache])}function J(e){void 0===e&&(e=!1);var t=i((0,r.useState)(e),2),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o("boolean"==typeof e?e:function(e){return!e})}),[])]}v.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(Z),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=g(e,t);if(t){const{use:r,fallback:o}=e,{use:a,fallback:i}=t;r&&a&&(n.use=r.concat(a)),o&&i&&(n.fallback=g(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,u=(0,r.useRef)(p);l&&!u.current&&(u.current=V(l(i.cache||W),a));const s=u.current;return s&&(i.cache=s[0],i.mutate=s[1]),D((()=>{if(s)return s[2]&&s[2](),s[3]}),[]),(0,r.createElement)(Z.Provider,g(e,{value:i}))}),"defaultValue",{value:U})},7659:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});var r=Array.isArray;function o(e){var t="";if("string"==typeof e||"number"==typeof e)return e||"";if(r(e))for(var n,a=0;a<e.length;a++)""!==(n=o(e[a]))&&(t+=(t&&" ")+n);else for(var a in e)e.hasOwnProperty(a)&&e[a]&&(t+=(t&&" ")+a);return t}},5580:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"umKAZmLkARLzX3gnuKkp",left:"u1l5AJGbUiP6RVFIKxOI",small:"hxZpK9CpBK1wR0W0v4SD",large:"o9DYmt4xfLaImiVzI9dQ",xlarge:"qmEVxSZS5kfL3aVbee1n",inverted:"CNOZHLd9XbokzOW6LYBP",rounded:"jJCAzw2SyaH4tIWXrAlR",rightOffset:"KGCu7aPjQy_aFNjHWNuw",leftOffset:"dDHYyGzXNi773FAl13GX",noShadow:"lQF1YcUqM0OHvPSlSwl_",noBorder:"sEo25Eiv6zs1D_x5q8Vy",transparent:"vm3cmANNuYlaQM5Yqz9G",stretchHorizontally:"Pikfzj7zYg2IntdJymuK",stretchVertically:"oSgV5cwX6inkSbCG98w8",noPadding:"gSZrGR1xqm8Q1iRUfGga",content:"pYLUj9noAqT8WytjDOOb"}},3391:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Unj4rp1Dy71ACruzXl75",left:"EXWMRvveRvQifixzTH02",small:"_U0znUk5QTAzPnS2gaLC",medium:"aH8u4s2MtYc5y4vyubDw",large:"c306yV78al_eGwBSkmFm",xlarge:"xvA1meUmE28AEOpjsWc9",inverted:"WB77YIDOSwJoX68NjlUG",rounded:"k2nJCsENNgCz2Hlsj_bG",rightOffset:"jAe5EVE37OrKYvkXdc1s",leftOffset:"DgbtB6G4LoBDd04P_MzO",noShadow:"KpQI95_f8nHvk7G2J6h8",transparent:"L8PnxUQogzgFMMT7QI4d",stretchHorizontally:"JulaxSccoGmqtgTNJmk9",stretchVertically:"zTYr9W7g2SqbVjPFAokG",noPadding:"UHzTm51kVyll52_S7sGB",noBorder:"hRP1XYfuJ49TsYU_cO5A",disabled:"lwWITPhM9TMo585Dsaw8",content:"MyT_PufJdEvsZE3hSW8P"}},7941:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={checkbox:"sy8lKVWP56AlOR7ys_9A",small:"XjfpcuPtguFZvKrxxt7y",medium:"tLP3dZWepXH3HKg17sOH",large:"Wgp9qHWDrQi9fmcxQIVK",xlarge:"lUA6tpLkWcGFgnoqCFvu"}},4560:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorSwatch:"PvbeBm4SMtMqlQNTyQjQ",small:"S7E3EPy_AWQukEexuvTf",large:"a1FsItKPQEOBeTqBCuDl",xlarge:"sFhgQEN_UOL3ZxOAR1Ie",selected:"aUx2uSBSs14VqwPqjvlQ",srOnly:"JIQmeZdd9TFl5I_gifPi"}},7855:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},2838:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawer:"U3dCzqTyynyzBn2mFkmW",visible:"sTcJdQUaZPOeseD_2fe0",drawerPaper:"I3Z0jA85NrYHJ1wDZHWb",drawerPaperEnter:"MWLbaUZIM1JbDLE3H0_Q",drawerPaperEnterActive:"reBHfkDZXiKwiRvYTfHu",drawerPaperEnterDone:"J5dmw7woKvwgujgbB0qV",drawerPaperExit:"rm7jH2Sq7wf2d9IlSevk",drawerPaperExitActive:"nbeoVr9VpIXAH1GWfphC",drawerPaperExitDone:"sgNb6nOhF35lWQE9jQKE",drawerPaperContent:"CsqC6wvlLYDsKBsZ0GdT",drawerOverlay:"e34gBjx3k3bRYPZlf9wZ",noOverlay:"b3ucNpEtNq2OrQKwvqqw"}},8930:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerContent:"gF1_WnOrrPKWEQoXJmgf"}},6282:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerFooter:"nk69HulhPkeFsEMuZOrB"}},713:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={drawerHeader:"vdwkPIGxzELdYhmiZPq2",drawerHeaderClose:"uz4NM_XvNZaqxVZYvSYA",drawerHeaderCloseIcon:"ZdNjx6DpeWEI2pAVL18t"}},6114:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={input:"KWk7oZ8tvPfQicgQYlVa",label:"e6zrx7UOP_BSoMM3GrjQ",small:"ihSnDQg0ygxcVLIySJkM",large:"FpwhbD7HXx_uFT3l01wb",xlarge:"YVds4u_DfWSG1r0SAGnS",inverted:"CKynoLhiLd6KzAYi5NtG",rounded:"v72mzJumFSiDOOE1MnXH",noShadow:"EoewJEDbGdteJ_NRfS5F",noBorder:"cb7l4xvcNnHNlQZmLjkb",noPadding:"vcOwDYuGF2etoPfyFDX5",transparent:"l08khaXIUOcruBFHws7X",stretchHorizontally:"I0xvJbB0LNT0S15jTMWW",stretchVertically:"X6fqUcVH1BlCRJBiiJii"}},7800:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j1mfiYEGolTRmbBmGKlQ",row:"EGaKvmqM2SawiFrW8Ctu",column:"NMi0MT1b7rp1Zjye8UVA",fixed:"g0j3kkQr_AjCKFd94S1s",plain:"Fr1q7WnF1nFnnbfgpaRz",transparent:"udRZe9H0bKUHXjOwG1Fn",top:"uYiKw6VvDEkhjZHzvo7e",topEdge:"tRbEcYjE3KncsNwTbvVM",topOnEdge:"LGunG37X1_HReuw3qzua",right:"lw27rGVlo34axCxw3QHi",rightEdge:"PZItvleFIIj0Jx2MikRE",rightOnEdge:"KNuGaDPq9rmXfgmO3pcb",bottom:"dn1uh1tasGxDGqmU18HN",bottomEdge:"eD0UCrBRpsRTPPwwIoVg",bottomOnEdge:"IrhH5gfyGsQ6kdcP94RQ",left:"D5fGHnAGCMR4Ltb9y4Hr",leftEdge:"_AtAd2tr7t1kXusRbXSz",leftOnEdge:"_8C9dd0X_JXY4uHzw5Nj",horizontalCenter:"QDks8ovt9RVcFWeEB8wb",verticalCenter:"CVuQRE652GH2VJn8zOTs"}},7060:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={icon:"fp_BLJ2FW4Oyyb0bHiD4",small:"zsVDNfNRkos0Q5uv9FR9",medium:"eSlil3evPtPBswWF80C5",large:"T7ULyq1yE9AVXEMknV4G",xlarge:"QPAceVQdZ6QIQ2Qvijwg",inverted:"mFTGbhLa4NlUO16nvJrk"}},2844:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"Wcemyr2Gr8ZCGc6Bjbqw",small:"T_pa8CcpL1GvuDsdvsqq",medium:"nLLErjOgfa5b2sOeZrQ5",large:"Q71NFBHrSxQLQE4AGD2h",xlarge:"EbBiyF1rg6wRaxSMK8so",rounded:"tLjuwRSsIiLJGVsrarbd",topOffset:"d4KLpI79CuSU6gkPPInA",rightOffset:"G7hJZoYv8qIrNmFCygME",bottomOffset:"DZs3AvGkVdOvJfLeJ8Gh",leftOffset:"wEEnWRcvuvomh_OLO5iq",inverted:"K9WGCFpUadO9WIXwFaj_",noShadow:"eAQJ10kEkPmDxMGvlYzy",noBorder:"OlENR9ntuWYLGOKKKrGR",transparent:"KOcsPrivr94rxnfHVlfe"}},6299:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gUSTy3_Np1mGJHW1N3gx",small:"IYuVzh1HBzgoTCi2WQ_p",medium:"JNg3_bCEfIvi4geEcsS3",large:"n61saxA20_EwMgt9Gw4s",xlarge:"gqGnvnH9X6mGvzwl4aGz",rounded:"DkzuqhEaiMR3XMs1M1If",topOffset:"sGnvevvsxBZUaXrpZQpI",rightOffset:"hgY3ZpkyD70p7E8rn3bi",bottomOffset:"ROoQY6OaRnQzDOfX_QDF",leftOffset:"Kevm582e3gXPJE3ODopa",inverted:"OOznCbAbjOLc4_bCEqfy",noShadow:"xrHxfce034dgYNEknlVM",noBorder:"eHt_RIq8JGoYHc4iCoeg",transparent:"nfgqtSgfrtrGFDWfZonQ",disabled:"I_nhJ9u6pTD_2SF3ql_l"}},1513:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"rO5W6DQk4NtoWrwmKMWg",hasOverlay:"llvnmI8K13g9PTBiCNz3",overlay:"GVk2j8wV1t3gY5uXQ4qI",image:"gXjYqKe9w3NgYurYwUQp",cover:"_l7ONOWayr8tyuGiyUsc",contain:"SYjOb8lAhmDbdylFIQY9",stretchHorizontally:"HkrozSfllTFlkkbqxXWh",stretchVertically:"xyHXhhHEYXMYeavWZw_N"}},8197:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menu:"xQ9Bfk0X1HmZgihCutZV",open:"utv9FYOU7Q0JNnZW1ejv",entrance:"yYKjcCvD2L94FpPgOigQ",header:"wNL86s9zGFi8XK11KloR",footer:"mu4Jev1c4KcifeF8Mzqg",noBorder:"EaPSjL1nXsz7TCx11Lrf"}},2752:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"kYh7DKYqH6jdLXd7PdJw",menuContainer:"QleAO3ymTliU6ZNBQxfg",top:"axfcrjSH4lvujzrsk2Qp",right:"LtVltW3BPZ5gNXVxxkrP",left:"PRb5f8XcMZOcY5ufPMdq",bottom:"__MZ5OoiIrVidFXbQfju"}},754:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"j0h9hd_glvI9xdOnaauY",noOverlay:"SL48SzZufKgdMiGY3YTN",modal:"hTXcZevGyyI0AcvprXVJ",transparent:"ibqloG1HxHx3stdkVZSj",noShadow:"IEo5vEeftvLpmwi0VyjD",flexCenter:"Vbg1QWWsxIKGAUgqLVO8",modalButton:"FoPfC3j7cIg2BYfzqQGE"}},3733:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4",button:"nyR3cGEmw3QkYMtiem3S"}},186:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",showSelectedWithTickContainer:"O5npD0lT3FbBCwjy31SE",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz",selectedLabel:"ngI3SJJjUmfca4niQkhQ",tickContainer:"ZPkrksmvBQCboYA1hzNE"}},4822:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn",noOptions:"ovKvB5H8EoFznuMqUujl",searchKeyword:"TwcVaRDz8cokIK9D9DxJ"}},2396:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",disabled:"nECgGdXOspUrQWHjzwkg",header:"XAoJhxTApcR9lGegyp9A",active:"ebemztZEWIV4_6AsKPQH",content:"rRDWv2qqwSrBy3evZ7Dw",isLoading:"IsxSe9oasdMK9fmg_6At",noOptions:"fLP4x4IxnyiWhp5BP5sT",searchContainer:"yOECDJeDVT5z5YaXpeJn",iconButton:"aVKp3H3JWraBf7G5UdaP",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={placeholder:"ddlRidnIzYhQC9DGpgIt",active:"shHsEJGtbz4cmA6x1G1l",tagWrapper:"BGEShc7qu2fk9DZE2RUs",selectedOption:"ma9BIjuGCQeKF44sgucT",selectedOptions:"nRpAwv97CesqQbDLcet9"}},6684:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",content:"o_21r_EjLKB3xhgGy74s",closeButton:"ZZPRZLUq9MQyifD8x2jH",disabled:"uCLz0vbNnQZFX8kVuUiG"}},9067:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"gwYKRPpGdIMVXkiN0H9B",scrollable:"ovdjwhr21awv2AgiQEd2",tagInput:"avImGs3XcLeDLGhxD8bw",disabled:"yT8Pp8TUvP7sQSGeGLNJ",textInput:"ZiNNf2oLVjExxp9RT2s_",small:"LemMUTseigxHbmIYVVTc",medium:"PUHJdM7ZEb3LFReM1_Ug",large:"j9mk52hGhoFwjw4FWHQ9",xlarge:"EiWqeFqQXE9LHUh1vxpX",noBorder:"O6WsOpUZoZeThUb_ViXn"}},7792:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={textInput:"NPZrksCpnXVJSq_snHjR",small:"jQGriQJSa04zsoG1a2u9",medium:"lVoY9Dp17HOBinMj0Q7o",large:"QlUaPbX8EaIi7rZ4Fb8o",xlarge:"rYPOM9fNtVLdPFyWKkGE",noBorder:"KDTINsHdolYReSbLcooH"}},9220:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},8907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={tooltip:"Km6UUy0jpqM0LA2eXccc",absolute:"e50zEjtfQK00lf_884OY",fixed:"jqxT4McOeUDDnGseZkBL",left:"yBv1lwDHpexxO3DPpd1v",right:"v852ExxmQ6AtSQF2sX8A",top:"iV2yzPizoou9omW811hg",bottom:"VmmE8ENsCkzbwLpL3XJg"}},6504:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={container:"yY9HV40ITTWgAV8qLw1w",hasOverlay:"zub5bqdVXm4NFxpI4HBf",video:"MVCDVjfgmHE7QemcYxGl",cover:"V4nEcm179vZe2MLgRVaM",contain:"u2_MfeCjMSl_aBNJn5nL",stretchHorizontally:"ljfsYs8BQqleKzbLkkad",stretchVertically:"HJtRqbAFLOnXVyGz8iFU",overlay:"ALHhOHAeLlBDy1DpYqiv"}},1914:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n),Object.defineProperty(e,r,{enumerable:!0,get:function(){return t[n]}})}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Hint=void 0;var l=i(n(6689)),u=n(2394);t.Hint=function(e){var t,n,o=l.default.Children.only(e.children);if("input"!==(null===(n=null===(t=o.type)||void 0===t?void 0:t.toString())||void 0===n?void 0:n.toLowerCase()))throw new TypeError("react-autocomplete-hint: 'Hint' only accepts an 'input' element as child.");var a=e.options,i=e.disableHint,s=e.allowTabFill,c=e.allowEnterFill,d=e.onFill,f=e.onHint,p=e.valueModifier,v=o.props,h=l.useRef(null),m=l.useRef(null),g=l.useRef(null),_=l.useState(""),b=_[0],y=_[1],O=l.useState(""),w=O[0],E=O[1],M=l.useState(""),S=M[0],x=M[1],C=l.useState(),P=C[0],j=C[1],I=l.useState(),k=I[0],D=I[1];l.useEffect((function(){if("object"==typeof a[0]){var e=u.getFirstDuplicateOption(a);e&&console.warn('react-autocomplete-hint: "'+e+'" occurs more than once and may cause errors. Options should not contain duplicate values!')}}),[a]),l.useEffect((function(){if(!i){var e=h.current&&window.getComputedStyle(h.current);e&&T(m,g,e)}}));var R=function(e){E(e);var t,n=function(e){if(e&&""!==e)return"string"==typeof a[0]?a.filter((function(t){return t.toLowerCase()!==e.toLowerCase()&&t.toLowerCase().startsWith(e.toLowerCase())})).sort()[0]:a.filter((function(t){return t.label.toLowerCase()!==e.toLowerCase()&&t.label.toLowerCase().startsWith(e.toLowerCase())})).sort((function(e,t){return u.sortAsc(e.label,t.label)}))[0]}(e);t=n?"string"==typeof n?n.slice(e.length):n.label.slice(e.length):"",x(t),j(n),f&&f(n)},N=function(){if(""!==S&&k){var e=b+S;k.target.value=e,v.onChange&&v.onChange(k),R(""),d&&d(P),y(e)}},T=function(e,t,n){var r,o;(null===(r=null==e?void 0:e.current)||void 0===r?void 0:r.style)&&(e.current.style.fontFamily=n.fontFamily,e.current.style.fontSize=n.fontSize,e.current.style.width=n.width,e.current.style.height=n.height,e.current.style.lineHeight=n.lineHeight,e.current.style.boxSizing=n.boxSizing,e.current.style.margin=u.interpolateStyle(n,"margin"),e.current.style.padding=u.interpolateStyle(n,"padding"),e.current.style.borderStyle=u.interpolateStyle(n,"border","style"),e.current.style.borderWidth=u.interpolateStyle(n,"border","width")),(null===(o=null==t?void 0:t.current)||void 0===o?void 0:o.style)&&(t.current.style.fontFamily=n.fontFamily,t.current.style.fontSize=n.fontSize,t.current.style.lineHeight=n.lineHeight)},L=l.cloneElement(o).ref,z=l.cloneElement(o,r(r({},v),{onChange:function(e){D(e),e.persist(),y(e.target.value);var t=p?p(e.target.value):e.target.value;R(t),v.onChange&&v.onChange(e)},onBlur:function(e){(null==g?void 0:g.current)!==e.relatedTarget&&(R(""),v.onBlur&&v.onBlur(e))},onFocus:function(e){R(e.target.value),v.onFocus&&v.onFocus(e)},onKeyDown:function(e){var t=null===e.currentTarget.selectionEnd||e.currentTarget.selectionEnd===e.currentTarget.value.length;t&&"ArrowRight"===e.key?N():(t&&s&&"Tab"===e.key&&""!==S||t&&c&&"Enter"===e.key&&""!==S)&&(e.preventDefault(),N()),v.onKeyDown&&v.onKeyDown(e)},ref:L&&"string"!=typeof L?u.mergeRefs(L,h):h}));return l.default.createElement("div",{className:"rah-input-wrapper",style:{position:"relative"}},i?o:l.default.createElement(l.default.Fragment,null,z,l.default.createElement("span",{className:"rah-hint-wrapper",ref:m,style:{display:"flex",pointerEvents:"none",backgroundColor:"transparent",borderColor:"transparent",boxShadow:"none",color:"rgba(0, 0, 0, 0.35)",position:"absolute",top:0,left:0}},l.default.createElement("span",{className:"rah-text-filler",style:{visibility:"hidden",pointerEvents:"none",whiteSpace:"pre"}},w),l.default.createElement("input",{className:"rah-hint",ref:g,onClick:function(e){var t,n=e.currentTarget.selectionEnd||0;0!==n?S&&""!==S&&(N(),setTimeout((function(){var e,t;null===(e=h.current)||void 0===e||e.focus();var r=w.length+n;null===(t=h.current)||void 0===t||t.setSelectionRange(r,r)}),0)):null===(t=h.current)||void 0===t||t.focus()},style:{pointerEvents:S&&""!==S?"visible":"none",background:"transparent",width:"100%",outline:"none",border:"none",boxShadow:"none",padding:0,margin:0,color:"rgba(0, 0, 0, 0.30)",caretColor:"transparent"},defaultValue:S,tabIndex:-1}))))}},2394:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getFirstDuplicateOption=t.sortAsc=t.interpolateStyle=t.mergeRefs=void 0,t.mergeRefs=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=e.filter(Boolean);return function(e){for(var t=0,r=n;t<r.length;t++){var o=r[t];"function"==typeof o?o(e):o&&(o.current=e)}}},t.interpolateStyle=function(e,t,n){return void 0===n&&(n=""),n&&(n=n.replace(n[0],n[0].toUpperCase())),["Top","Right","Bottom","Left"].map((function(r){return e[t+r+n]})).join(" ")},t.sortAsc=function(e,t){return e>t?1:e<t?-1:0},t.getFirstDuplicateOption=function(e){for(var t={},n=0;n<e.length;n++){if(t[e[n].label])return e[n].label;t[e[n].label]=!0}return null}},5172:(e,t,n)=>{"use strict";n.r(t),n.d(t,{isHotkeyPressed:()=>D,useHotkeys:()=>k,useIsHotkeyPressed:()=>P});var r="undefined"!=typeof navigator&&navigator.userAgent.toLowerCase().indexOf("firefox")>0;function o(e,t,n,r){e.addEventListener?e.addEventListener(t,n,r):e.attachEvent&&e.attachEvent("on".concat(t),(function(){n(window.event)}))}function a(e,t){for(var n=t.slice(0,t.length-1),r=0;r<n.length;r++)n[r]=e[n[r].toLowerCase()];return n}function i(e){"string"!=typeof e&&(e="");for(var t=(e=e.replace(/\s/g,"")).split(","),n=t.lastIndexOf("");n>=0;)t[n-1]+=",",t.splice(n,1),n=t.lastIndexOf("");return t}for(var l={backspace:8,tab:9,clear:12,enter:13,return:13,esc:27,escape:27,space:32,left:37,up:38,right:39,down:40,del:46,delete:46,ins:45,insert:45,home:36,end:35,pageup:33,pagedown:34,capslock:20,num_0:96,num_1:97,num_2:98,num_3:99,num_4:100,num_5:101,num_6:102,num_7:103,num_8:104,num_9:105,num_multiply:106,num_add:107,num_enter:108,num_subtract:109,num_decimal:110,num_divide:111,"⇪":20,",":188,".":190,"/":191,"`":192,"-":r?173:189,"=":r?61:187,";":r?59:186,"'":222,"[":219,"]":221,"\\":220},u={"⇧":16,shift:16,"⌥":18,alt:18,option:18,"⌃":17,ctrl:17,control:17,"⌘":91,cmd:91,command:91},s={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},c={16:!1,18:!1,17:!1,91:!1},d={},f=1;f<20;f++)l["f".concat(f)]=111+f;var p=[],v=!1,h="all",m=[],g=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function _(e){h=e||"all"}function b(){return h||"all"}var y=function(e){var t=e.key,n=e.scope,r=e.method,o=e.splitKey,l=void 0===o?"+":o;i(t).forEach((function(e){var t=e.split(l),o=t.length,i=t[o-1],s="*"===i?"*":g(i);if(d[s]){n||(n=b());var c=o>1?a(u,t):[];d[s]=d[s].filter((function(e){return!((!r||e.method===r)&&e.scope===n&&function(e,t){for(var n=e.length>=t.length?e:t,r=e.length>=t.length?t:e,o=!0,a=0;a<n.length;a++)-1===r.indexOf(n[a])&&(o=!1);return o}(e.mods,c))}))}}))};function O(e,t,n,r){var o;if(t.element===r&&(t.scope===n||"all"===t.scope)){for(var a in o=t.mods.length>0,c)Object.prototype.hasOwnProperty.call(c,a)&&(!c[a]&&t.mods.indexOf(+a)>-1||c[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||c[16]||c[18]||c[17]||c[91])&&!o&&"*"!==t.shortcut||!1===t.method(e,t)&&(e.preventDefault?e.preventDefault():e.returnValue=!1,e.stopPropagation&&e.stopPropagation(),e.cancelBubble&&(e.cancelBubble=!0))}}function w(e,t){var n=d["*"],r=e.keyCode||e.which||e.charCode;if(E.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===p.indexOf(r)&&229!==r&&p.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=s[t];e[t]&&-1===p.indexOf(n)?p.push(n):!e[t]&&p.indexOf(n)>-1?p.splice(p.indexOf(n),1):"metaKey"===t&&e[t]&&3===p.length&&(e.ctrlKey||e.shiftKey||e.altKey||(p=p.slice(p.indexOf(n))))})),r in c){for(var o in c[r]=!0,u)u[o]===r&&(E[o]=!0);if(!n)return}for(var a in c)Object.prototype.hasOwnProperty.call(c,a)&&(c[a]=e[s[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===p.indexOf(17)&&p.push(17),-1===p.indexOf(18)&&p.push(18),c[17]=!0,c[18]=!0);var i=b();if(n)for(var l=0;l<n.length;l++)n[l].scope===i&&("keydown"===e.type&&n[l].keydown||"keyup"===e.type&&n[l].keyup)&&O(e,n[l],i,t);if(r in d)for(var f=0;f<d[r].length;f++)if(("keydown"===e.type&&d[r][f].keydown||"keyup"===e.type&&d[r][f].keyup)&&d[r][f].key){for(var v=d[r][f],h=v.splitKey,m=v.key.split(h),_=[],y=0;y<m.length;y++)_.push(g(m[y]));_.sort().join("")===p.sort().join("")&&O(e,v,i,t)}}}function E(e,t,n){p=[];var r=i(e),l=[],s="all",f=document,h=0,_=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(s=t.scope),t.element&&(f=t.element),t.keyup&&(_=t.keyup),void 0!==t.keydown&&(b=t.keydown),void 0!==t.capture&&(O=t.capture),"string"==typeof t.splitKey&&(y=t.splitKey)),"string"==typeof t&&(s=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":g(e))in d||(d[e]=[]),d[e].push({keyup:_,keydown:b,scope:s,mods:l,shortcut:r[h],method:n,key:r[h],splitKey:y,element:f});void 0!==f&&!function(e){return m.indexOf(e)>-1}(f)&&window&&(m.push(f),o(f,"keydown",(function(e){w(e,f)}),O),v||(v=!0,o(window,"focus",(function(){p=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=p.indexOf(t);if(n>=0&&p.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&p.splice(0,p.length),93!==t&&224!==t||(t=91),t in c)for(var r in c[t]=!1,u)u[r]===t&&(E[r]=!1)}(e)}),O))}var M={setScope:_,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),d)if(Object.prototype.hasOwnProperty.call(d,o))for(n=d[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&_(t||"all")},getPressedKeyCodes:function(){return p.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=g(e)),-1!==p.indexOf(e)},filter:function(e){var t=e.target||e.srcElement,n=t.tagName,r=!0;return!t.isContentEditable&&("INPUT"!==n&&"TEXTAREA"!==n&&"SELECT"!==n||t.readOnly)||(r=!1),r},trigger:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all";Object.keys(d).forEach((function(n){var r=d[n].find((function(n){return n.scope===t&&n.shortcut===e}));r&&r.method&&r.method()}))},unbind:function(e){if(void 0===e)Object.keys(d).forEach((function(e){return delete d[e]}));else if(Array.isArray(e))e.forEach((function(e){e.key&&y(e)}));else if("object"==typeof e)e.key&&y(e);else if("string"==typeof e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];var o=n[0],a=n[1];"function"==typeof o&&(a=o,o=""),y({key:e,scope:o,method:a,splitKey:"+"})}},keyMap:l,modifier:u,modifierMap:s};for(var S in M)Object.prototype.hasOwnProperty.call(M,S)&&(E[S]=M[S]);if("undefined"!=typeof window){var x=window.hotkeys;E.noConflict=function(e){return e&&window.hotkeys===E&&(window.hotkeys=x),E},window.hotkeys=E}var C=n(6689);function P(){return E.isPressed}E.filter=function(){return!0};var j=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},I=function(e){return j(e,["INPUT","TEXTAREA","SELECT"])};function k(e,t,n,r){n instanceof Array&&(r=n,n=void 0);var o=n||{},a=o.enableOnTags,i=o.filter,l=o.keyup,u=o.keydown,s=o.filterPreventDefault,c=void 0===s||s,d=o.enabled,f=void 0===d||d,p=o.enableOnContentEditable,v=void 0!==p&&p,h=(0,C.useRef)(null),m=(0,C.useCallback)((function(e,n){var r,o;return i&&!i(e)?!c:!!(I(e)&&!j(e,a)||null!=(r=e.target)&&r.isContentEditable&&!v)||!!(null===h.current||document.activeElement===h.current||null!=(o=h.current)&&o.contains(document.activeElement))&&(t(e,n),!0)}),r?[h,a,i].concat(r):[h,a,i]);return(0,C.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),E(e,n||{},m),function(){return E.unbind(e,m)};E.unbind(e,m)}),[m,e,f]),h}var D=E.isPressed},8744:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CSSTransition:()=>M,ReplaceTransition:()=>R,SwitchTransition:()=>V,Transition:()=>O,TransitionGroup:()=>k,config:()=>d});var r=n(2122),o=n(9756),a=n(1788);function i(e,t){return e.replace(new RegExp("(^|\\s)"+t+"(?:\\s|$)","g"),"$1").replace(/\s+/g," ").replace(/^\s*|\s*$/g,"")}var l=n(6689),u=n.n(l),s=n(6405),c=n.n(s);const d={disabled:!1},f=u().createContext(null);var p=function(e){return e.scrollTop},v="unmounted",h="exited",m="entering",g="entered",_="exiting",b=function(e){function t(t,n){var r;r=e.call(this,t,n)||this;var o,a=n&&!n.isMounting?t.enter:t.appear;return r.appearStatus=null,t.in?a?(o=h,r.appearStatus=m):o=g:o=t.unmountOnExit||t.mountOnEnter?v:h,r.state={status:o},r.nextCallback=null,r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return e.in&&t.status===v?{status:h}:null};var n=t.prototype;return n.componentDidMount=function(){this.updateStatus(!0,this.appearStatus)},n.componentDidUpdate=function(e){var t=null;if(e!==this.props){var n=this.state.status;this.props.in?n!==m&&n!==g&&(t=m):n!==m&&n!==g||(t=_)}this.updateStatus(!1,t)},n.componentWillUnmount=function(){this.cancelNextCallback()},n.getTimeouts=function(){var e,t,n,r=this.props.timeout;return e=t=n=r,null!=r&&"number"!=typeof r&&(e=r.exit,t=r.enter,n=void 0!==r.appear?r.appear:t),{exit:e,enter:t,appear:n}},n.updateStatus=function(e,t){if(void 0===e&&(e=!1),null!==t)if(this.cancelNextCallback(),t===m){if(this.props.unmountOnExit||this.props.mountOnEnter){var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this);n&&p(n)}this.performEnter(e)}else this.performExit();else this.props.unmountOnExit&&this.state.status===h&&this.setState({status:v})},n.performEnter=function(e){var t=this,n=this.props.enter,r=this.context?this.context.isMounting:e,o=this.props.nodeRef?[r]:[c().findDOMNode(this),r],a=o[0],i=o[1],l=this.getTimeouts(),u=r?l.appear:l.enter;!e&&!n||d.disabled?this.safeSetState({status:g},(function(){t.props.onEntered(a)})):(this.props.onEnter(a,i),this.safeSetState({status:m},(function(){t.props.onEntering(a,i),t.onTransitionEnd(u,(function(){t.safeSetState({status:g},(function(){t.props.onEntered(a,i)}))}))})))},n.performExit=function(){var e=this,t=this.props.exit,n=this.getTimeouts(),r=this.props.nodeRef?void 0:c().findDOMNode(this);t&&!d.disabled?(this.props.onExit(r),this.safeSetState({status:_},(function(){e.props.onExiting(r),e.onTransitionEnd(n.exit,(function(){e.safeSetState({status:h},(function(){e.props.onExited(r)}))}))}))):this.safeSetState({status:h},(function(){e.props.onExited(r)}))},n.cancelNextCallback=function(){null!==this.nextCallback&&(this.nextCallback.cancel(),this.nextCallback=null)},n.safeSetState=function(e,t){t=this.setNextCallback(t),this.setState(e,t)},n.setNextCallback=function(e){var t=this,n=!0;return this.nextCallback=function(r){n&&(n=!1,t.nextCallback=null,e(r))},this.nextCallback.cancel=function(){n=!1},this.nextCallback},n.onTransitionEnd=function(e,t){this.setNextCallback(t);var n=this.props.nodeRef?this.props.nodeRef.current:c().findDOMNode(this),r=null==e&&!this.props.addEndListener;if(n&&!r){if(this.props.addEndListener){var o=this.props.nodeRef?[this.nextCallback]:[n,this.nextCallback],a=o[0],i=o[1];this.props.addEndListener(a,i)}null!=e&&setTimeout(this.nextCallback,e)}else setTimeout(this.nextCallback,0)},n.render=function(){var e=this.state.status;if(e===v)return null;var t=this.props,n=t.children,r=(t.in,t.mountOnEnter,t.unmountOnExit,t.appear,t.enter,t.exit,t.timeout,t.addEndListener,t.onEnter,t.onEntering,t.onEntered,t.onExit,t.onExiting,t.onExited,t.nodeRef,(0,o.Z)(t,["children","in","mountOnEnter","unmountOnExit","appear","enter","exit","timeout","addEndListener","onEnter","onEntering","onEntered","onExit","onExiting","onExited","nodeRef"]));return u().createElement(f.Provider,{value:null},"function"==typeof n?n(e,r):u().cloneElement(u().Children.only(n),r))},t}(u().Component);function y(){}b.contextType=f,b.propTypes={},b.defaultProps={in:!1,mountOnEnter:!1,unmountOnExit:!1,appear:!1,enter:!0,exit:!0,onEnter:y,onEntering:y,onEntered:y,onExit:y,onExiting:y,onExited:y},b.UNMOUNTED=v,b.EXITED=h,b.ENTERING=m,b.ENTERED=g,b.EXITING=_;const O=b;var w=function(e,t){return e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.remove(r):"string"==typeof n.className?n.className=i(n.className,r):n.setAttribute("class",i(n.className&&n.className.baseVal||"",r)));var n,r}))},E=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).appliedClasses={appear:{},enter:{},exit:{}},t.onEnter=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1];t.removeClasses(o,"exit"),t.addClass(o,a?"appear":"enter","base"),t.props.onEnter&&t.props.onEnter(e,n)},t.onEntering=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.addClass(o,a,"active"),t.props.onEntering&&t.props.onEntering(e,n)},t.onEntered=function(e,n){var r=t.resolveArguments(e,n),o=r[0],a=r[1]?"appear":"enter";t.removeClasses(o,a),t.addClass(o,a,"done"),t.props.onEntered&&t.props.onEntered(e,n)},t.onExit=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"appear"),t.removeClasses(n,"enter"),t.addClass(n,"exit","base"),t.props.onExit&&t.props.onExit(e)},t.onExiting=function(e){var n=t.resolveArguments(e)[0];t.addClass(n,"exit","active"),t.props.onExiting&&t.props.onExiting(e)},t.onExited=function(e){var n=t.resolveArguments(e)[0];t.removeClasses(n,"exit"),t.addClass(n,"exit","done"),t.props.onExited&&t.props.onExited(e)},t.resolveArguments=function(e,n){return t.props.nodeRef?[t.props.nodeRef.current,e]:[e,n]},t.getClassNames=function(e){var n=t.props.classNames,r="string"==typeof n,o=r?(r&&n?n+"-":"")+e:n[e];return{baseClassName:o,activeClassName:r?o+"-active":n[e+"Active"],doneClassName:r?o+"-done":n[e+"Done"]}},t}(0,a.Z)(t,e);var n=t.prototype;return n.addClass=function(e,t,n){var r=this.getClassNames(t)[n+"ClassName"],o=this.getClassNames("enter").doneClassName;"appear"===t&&"done"===n&&o&&(r+=" "+o),"active"===n&&e&&p(e),r&&(this.appliedClasses[t][n]=r,function(e,t){e&&t&&t.split(" ").forEach((function(t){return r=t,void((n=e).classList?n.classList.add(r):function(e,t){return e.classList?!!t&&e.classList.contains(t):-1!==(" "+(e.className.baseVal||e.className)+" ").indexOf(" "+t+" ")}(n,r)||("string"==typeof n.className?n.className=n.className+" "+r:n.setAttribute("class",(n.className&&n.className.baseVal||"")+" "+r)));var n,r}))}(e,r))},n.removeClasses=function(e,t){var n=this.appliedClasses[t],r=n.base,o=n.active,a=n.done;this.appliedClasses[t]={},r&&w(e,r),o&&w(e,o),a&&w(e,a)},n.render=function(){var e=this.props,t=(e.classNames,(0,o.Z)(e,["classNames"]));return u().createElement(O,(0,r.Z)({},t,{onEnter:this.onEnter,onEntered:this.onEntered,onEntering:this.onEntering,onExit:this.onExit,onExiting:this.onExiting,onExited:this.onExited}))},t}(u().Component);E.defaultProps={classNames:""},E.propTypes={};const M=E;var S=n(3349);function x(e,t){var n=Object.create(null);return e&&l.Children.map(e,(function(e){return e})).forEach((function(e){n[e.key]=function(e){return t&&(0,l.isValidElement)(e)?t(e):e}(e)})),n}function C(e,t,n){return null!=n[t]?n[t]:e.props[t]}function P(e,t,n){var r=x(e.children),o=function(e,t){function n(n){return n in t?t[n]:e[n]}e=e||{},t=t||{};var r,o=Object.create(null),a=[];for(var i in e)i in t?a.length&&(o[i]=a,a=[]):a.push(i);var l={};for(var u in t){if(o[u])for(r=0;r<o[u].length;r++){var s=o[u][r];l[o[u][r]]=n(s)}l[u]=n(u)}for(r=0;r<a.length;r++)l[a[r]]=n(a[r]);return l}(t,r);return Object.keys(o).forEach((function(a){var i=o[a];if((0,l.isValidElement)(i)){var u=a in t,s=a in r,c=t[a],d=(0,l.isValidElement)(c)&&!c.props.in;!s||u&&!d?s||!u||d?s&&u&&(0,l.isValidElement)(c)&&(o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:c.props.in,exit:C(i,"exit",e),enter:C(i,"enter",e)})):o[a]=(0,l.cloneElement)(i,{in:!1}):o[a]=(0,l.cloneElement)(i,{onExited:n.bind(null,i),in:!0,exit:C(i,"exit",e),enter:C(i,"enter",e)})}})),o}var j=Object.values||function(e){return Object.keys(e).map((function(t){return e[t]}))},I=function(e){function t(t,n){var r,o=(r=e.call(this,t,n)||this).handleExited.bind((0,S.Z)(r));return r.state={contextValue:{isMounting:!0},handleExited:o,firstRender:!0},r}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.mounted=!0,this.setState({contextValue:{isMounting:!1}})},n.componentWillUnmount=function(){this.mounted=!1},t.getDerivedStateFromProps=function(e,t){var n,r,o=t.children,a=t.handleExited;return{children:t.firstRender?(n=e,r=a,x(n.children,(function(e){return(0,l.cloneElement)(e,{onExited:r.bind(null,e),in:!0,appear:C(e,"appear",n),enter:C(e,"enter",n),exit:C(e,"exit",n)})}))):P(e,o,a),firstRender:!1}},n.handleExited=function(e,t){var n=x(this.props.children);e.key in n||(e.props.onExited&&e.props.onExited(t),this.mounted&&this.setState((function(t){var n=(0,r.Z)({},t.children);return delete n[e.key],{children:n}})))},n.render=function(){var e=this.props,t=e.component,n=e.childFactory,r=(0,o.Z)(e,["component","childFactory"]),a=this.state.contextValue,i=j(this.state.children).map(n);return delete r.appear,delete r.enter,delete r.exit,null===t?u().createElement(f.Provider,{value:a},i):u().createElement(f.Provider,{value:a},u().createElement(t,r,i))},t}(u().Component);I.propTypes={},I.defaultProps={component:"div",childFactory:function(e){return e}};const k=I;var D=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).handleEnter=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEnter",0,n)},t.handleEntering=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntering",0,n)},t.handleEntered=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onEntered",0,n)},t.handleExit=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExit",1,n)},t.handleExiting=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExiting",1,n)},t.handleExited=function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return t.handleLifecycle("onExited",1,n)},t}(0,a.Z)(t,e);var n=t.prototype;return n.handleLifecycle=function(e,t,n){var r,o=this.props.children,a=u().Children.toArray(o)[t];if(a.props[e]&&(r=a.props)[e].apply(r,n),this.props[e]){var i=a.props.nodeRef?void 0:c().findDOMNode(this);this.props[e](i)}},n.render=function(){var e=this.props,t=e.children,n=e.in,r=(0,o.Z)(e,["children","in"]),a=u().Children.toArray(t),i=a[0],l=a[1];return delete r.onEnter,delete r.onEntering,delete r.onEntered,delete r.onExit,delete r.onExiting,delete r.onExited,u().createElement(k,r,n?u().cloneElement(i,{key:"first",onEnter:this.handleEnter,onEntering:this.handleEntering,onEntered:this.handleEntered}):u().cloneElement(l,{key:"second",onEnter:this.handleExit,onEntering:this.handleExiting,onEntered:this.handleExited}))},t}(u().Component);D.propTypes={};const R=D;var N,T,L="out-in",z="in-out",A=function(e,t,n){return function(){var r;e.props[t]&&(r=e.props)[t].apply(r,arguments),n()}},H=((N={})[L]=function(e){var t=e.current,n=e.changeState;return u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){n(m,null)}))})},N[z]=function(e){var t=e.current,n=e.changeState,r=e.children;return[t,u().cloneElement(r,{in:!0,onEntered:A(r,"onEntered",(function(){n(m)}))})]},N),B=((T={})[L]=function(e){var t=e.children,n=e.changeState;return u().cloneElement(t,{in:!0,onEntered:A(t,"onEntered",(function(){n(g,u().cloneElement(t,{in:!0}))}))})},T[z]=function(e){var t=e.current,n=e.children,r=e.changeState;return[u().cloneElement(t,{in:!1,onExited:A(t,"onExited",(function(){r(g,u().cloneElement(n,{in:!0}))}))}),u().cloneElement(n,{in:!0})]},T),F=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).state={status:g,current:null},t.appeared=!1,t.changeState=function(e,n){void 0===n&&(n=t.state.current),t.setState({status:e,current:n})},t}(0,a.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.appeared=!0},t.getDerivedStateFromProps=function(e,t){return null==e.children?{current:null}:t.status===m&&e.mode===z?{status:m}:!t.current||((n=t.current)===(r=e.children)||u().isValidElement(n)&&u().isValidElement(r)&&null!=n.key&&n.key===r.key)?{current:u().cloneElement(e.children,{in:!0})}:{status:_};var n,r},n.render=function(){var e,t=this.props,n=t.children,r=t.mode,o=this.state,a=o.status,i=o.current,l={children:n,current:i,changeState:this.changeState,status:a};switch(a){case m:e=B[r](l);break;case _:e=H[r](l);break;case g:e=i}return u().createElement(f.Provider,{value:{isMounting:!this.appeared}},e)},t}(u().Component);F.propTypes={},F.defaultProps={mode:L};const V=F},5691:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(6689),o=function(){function e(e,t){for(var n=0;n<t.length;n++){var r=t[n];r.enumerable=r.enumerable||!1,r.configurable=!0,"value"in r&&(r.writable=!0),Object.defineProperty(e,r.key,r)}}return function(t,n,r){return n&&e(t.prototype,n),r&&e(t,r),t}}(),a=function(e,t){if(!e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return!t||"object"!=typeof t&&"function"!=typeof t?e:t},i=function(e){function t(){var e,n,r;!function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}(this,t);for(var o=arguments.length,i=Array(o),l=0;l<o;l++)i[l]=arguments[l];return n=r=a(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(i))),r._lastRenderedStartIndex=-1,r._lastRenderedStopIndex=-1,r._memoizedUnloadedRanges=[],r._onItemsRendered=function(e){var t=e.visibleStartIndex,n=e.visibleStopIndex;r._lastRenderedStartIndex=t,r._lastRenderedStopIndex=n,r._ensureRowsLoaded(t,n)},r._setRef=function(e){r._listRef=e},a(r,n)}return function(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Super expression must either be null or a function, not "+typeof t);e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}}),t&&(Object.setPrototypeOf?Object.setPrototypeOf(e,t):e.__proto__=t)}(t,e),o(t,[{key:"resetloadMoreItemsCache",value:function(){var e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];this._memoizedUnloadedRanges=[],e&&this._ensureRowsLoaded(this._lastRenderedStartIndex,this._lastRenderedStopIndex)}},{key:"componentDidMount",value:function(){}},{key:"render",value:function(){return(0,this.props.children)({onItemsRendered:this._onItemsRendered,ref:this._setRef})}},{key:"_ensureRowsLoaded",value:function(e,t){var n=this.props,r=n.isItemLoaded,o=n.itemCount,a=n.minimumBatchSize,i=void 0===a?10:a,l=n.threshold,u=void 0===l?15:l,s=function(e){for(var t=e.isItemLoaded,n=e.itemCount,r=e.minimumBatchSize,o=e.stopIndex,a=[],i=null,l=null,u=e.startIndex;u<=o;u++)t(u)?null!==l&&(a.push(i,l),i=l=null):(l=u,null===i&&(i=u));if(null!==l){for(var s=Math.min(Math.max(l,i+r-1),n-1),c=l+1;c<=s&&!t(c);c++)l=c;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var d=a[0]-1;if(t(d))break;a[0]=d}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==s.length||this._memoizedUnloadedRanges.some((function(e,t){return s[t]!==e})))&&(this._memoizedUnloadedRanges=s,this._loadUnloadedRanges(s))}},{key:"_loadUnloadedRanges",value:function(e){for(var t=this,n=this.props.loadMoreItems||this.props.loadMoreRows,r=function(r){var o=e[r],a=e[r+1],i=n(o,a);null!=i&&i.then((function(){if(!((e={lastRenderedStartIndex:t._lastRenderedStartIndex,lastRenderedStopIndex:t._lastRenderedStopIndex,startIndex:o,stopIndex:a}).startIndex>e.lastRenderedStopIndex||e.stopIndex<e.lastRenderedStartIndex)){if(null==t._listRef)return;"function"==typeof t._listRef.resetAfterIndex?t._listRef.resetAfterIndex(o,!0):("function"==typeof t._listRef._getItemStyleCache&&t._listRef._getItemStyleCache(-1),t._listRef.forceUpdate())}var e}))},o=0;o<e.length;o+=2)r(o)}}]),t}(r.PureComponent);const l=i},4356:(e,t,n)=>{"use strict";n.r(t),n.d(t,{FixedSizeGrid:()=>A,FixedSizeList:()=>H,VariableSizeGrid:()=>j,VariableSizeList:()=>z,areEqual:()=>W,shouldComponentUpdate:()=>G});var r=n(2122),o=n(3349),a=n(1788),i=Number.isNaN||function(e){return"number"==typeof e&&e!=e};function l(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(!((r=e[n])===(o=t[n])||i(r)&&i(o)))return!1;var r,o;return!0}const u=function(e,t){var n;void 0===t&&(t=l);var r,o=[],a=!1;return function(){for(var i=[],l=0;l<arguments.length;l++)i[l]=arguments[l];return a&&n===this&&t(i,o)||(r=e.apply(this,i),a=!0,n=this,o=i),r}};var s=n(6689),c=n(9756),d="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function p(e,t){var n=d(),r={id:requestAnimationFrame((function o(){d()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var v=-1;function h(e){if(void 0===e&&(e=!1),-1===v||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),v=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return v}var m=null;function g(e){if(void 0===e&&(e=!1),null===m||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",n.direction="rtl";var r=document.createElement("div"),o=r.style;return o.width="100px",o.height="100px",t.appendChild(r),document.body.appendChild(t),t.scrollLeft>0?m="positive-descending":(t.scrollLeft=1,m=0===t.scrollLeft?"negative":"positive-ascending"),document.body.removeChild(t),m}return m}var _=150,b=function(e){var t=e.columnIndex;return e.data,e.rowIndex+":"+t};function y(e){var t,n=e.getColumnOffset,i=e.getColumnStartIndexForOffset,l=e.getColumnStopIndexForStartIndex,c=e.getColumnWidth,d=e.getEstimatedTotalHeight,v=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,E=e.getRowOffset,M=e.getRowStartIndexForOffset,S=e.getRowStopIndexForStartIndex,x=e.initInstanceProps,C=e.shouldResetStyleCacheOnItemSizeChange,P=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=x(r.props,(0,o.Z)(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:(0,o.Z)(r),isScrolling:!1,horizontalScrollDirection:"forward",scrollLeft:"number"==typeof r.props.initialScrollLeft?r.props.initialScrollLeft:0,scrollTop:"number"==typeof r.props.initialScrollTop?r.props.initialScrollTop:0,scrollUpdateWasRequested:!1,verticalScrollDirection:"forward"},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o,a,i,l,u){return r.props.onItemsRendered({overscanColumnStartIndex:e,overscanColumnStopIndex:t,overscanRowStartIndex:n,overscanRowStopIndex:o,visibleColumnStartIndex:a,visibleColumnStopIndex:i,visibleRowStartIndex:l,visibleRowStopIndex:u})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n,o,a){return r.props.onScroll({horizontalScrollDirection:n,scrollLeft:e,scrollTop:t,verticalScrollDirection:o,scrollUpdateWasRequested:a})})),r._getItemStyle=void 0,r._getItemStyle=function(e,t){var o,a=r.props,i=a.columnWidth,l=a.direction,u=a.rowHeight,s=r._getItemStyleCache(C&&i,C&&l,C&&u),d=e+":"+t;if(s.hasOwnProperty(d))o=s[d];else{var f=n(r.props,t,r._instanceProps),p="rtl"===l;s[d]=o={position:"absolute",left:p?void 0:f,right:p?f:void 0,top:E(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:c(r.props,t,r._instanceProps)}}return o},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScroll=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.clientWidth,a=t.scrollLeft,i=t.scrollTop,l=t.scrollHeight,u=t.scrollWidth;r.setState((function(e){if(e.scrollLeft===a&&e.scrollTop===i)return null;var t=r.props.direction,s=a;if("rtl"===t)switch(g()){case"negative":s=-a;break;case"positive-descending":s=u-o-a}s=Math.max(0,Math.min(s,u-o));var c=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:s,scrollTop:c,verticalScrollDirection:e.scrollTop<i?"forward":"backward",scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,_)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),P(e),null};var j=t.prototype;return j.scrollTo=function(e){var t=e.scrollLeft,n=e.scrollTop;void 0!==t&&(t=Math.max(0,t)),void 0!==n&&(n=Math.max(0,n)),this.setState((function(e){return void 0===t&&(t=e.scrollLeft),void 0===n&&(n=e.scrollTop),e.scrollLeft===t&&e.scrollTop===n?null:{horizontalScrollDirection:e.scrollLeft<t?"forward":"backward",scrollLeft:t,scrollTop:n,scrollUpdateWasRequested:!0,verticalScrollDirection:e.scrollTop<n?"forward":"backward"}}),this._resetIsScrollingDebounced)},j.scrollToItem=function(e){var t=e.align,n=void 0===t?"auto":t,r=e.columnIndex,o=e.rowIndex,a=this.props,i=a.columnCount,l=a.height,u=a.rowCount,s=a.width,c=this.state,f=c.scrollLeft,p=c.scrollTop,g=h();void 0!==r&&(r=Math.max(0,Math.min(r,i-1))),void 0!==o&&(o=Math.max(0,Math.min(o,u-1)));var _=d(this.props,this._instanceProps),b=v(this.props,this._instanceProps)>s?g:0,O=_>l?g:0;this.scrollTo({scrollLeft:void 0!==r?m(this.props,r,n,f,this._instanceProps,O):f,scrollTop:void 0!==o?y(this.props,o,n,p,this._instanceProps,b):p})},j.componentDidMount=function(){var e=this.props,t=e.initialScrollLeft,n=e.initialScrollTop;if(null!=this._outerRef){var r=this._outerRef;"number"==typeof t&&(r.scrollLeft=t),"number"==typeof n&&(r.scrollTop=n)}this._callPropsCallbacks()},j.componentDidUpdate=function(){var e=this.props.direction,t=this.state,n=t.scrollLeft,r=t.scrollTop;if(t.scrollUpdateWasRequested&&null!=this._outerRef){var o=this._outerRef;if("rtl"===e)switch(g()){case"negative":o.scrollLeft=-n;break;case"positive-ascending":o.scrollLeft=n;break;default:var a=o.clientWidth,i=o.scrollWidth;o.scrollLeft=i-a-n}else o.scrollLeft=Math.max(0,n);o.scrollTop=Math.max(0,r)}this._callPropsCallbacks()},j.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},j.render=function(){var e=this.props,t=e.children,n=e.className,o=e.columnCount,a=e.direction,i=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,f=e.itemData,p=e.itemKey,h=void 0===p?b:p,m=e.outerElementType,g=e.outerTagName,_=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,E=this.state.isScrolling,M=this._getHorizontalRangeToRender(),S=M[0],x=M[1],C=this._getVerticalRangeToRender(),P=C[0],j=C[1],I=[];if(o>0&&_)for(var k=P;k<=j;k++)for(var D=S;D<=x;D++)I.push((0,s.createElement)(t,{columnIndex:D,data:f,isScrolling:O?E:void 0,key:h({columnIndex:D,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,D)}));var R=d(this.props,this._instanceProps),N=v(this.props,this._instanceProps);return(0,s.createElement)(m||g||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,s.createElement)(u||c||"div",{children:I,ref:l,style:{height:R,pointerEvents:E?"none":void 0,width:N}}))},j._callPropsCallbacks=function(){var e=this.props,t=e.columnCount,n=e.onItemsRendered,r=e.onScroll,o=e.rowCount;if("function"==typeof n&&t>0&&o>0){var a=this._getHorizontalRangeToRender(),i=a[0],l=a[1],u=a[2],s=a[3],c=this._getVerticalRangeToRender(),d=c[0],f=c[1],p=c[2],v=c[3];this._callOnItemsRendered(i,l,d,f,u,s,p,v)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,g=h.scrollLeft,_=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(g,_,m,y,b)}},j._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,s=u.horizontalScrollDirection,c=u.isScrolling,d=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var p=i(this.props,d,this._instanceProps),v=l(this.props,p,d,this._instanceProps),h=c&&"backward"!==s?1:Math.max(1,f),m=c&&"forward"!==s?1:Math.max(1,f);return[Math.max(0,p-h),Math.max(0,Math.min(t-1,v+m)),p,v]},j._getVerticalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanCount,r=e.overscanRowCount,o=e.overscanRowsCount,a=e.rowCount,i=this.state,l=i.isScrolling,u=i.verticalScrollDirection,s=i.scrollTop,c=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var d=M(this.props,s,this._instanceProps),f=S(this.props,d,s,this._instanceProps),p=l&&"backward"!==u?1:Math.max(1,c),v=l&&"forward"!==u?1:Math.max(1,c);return[Math.max(0,d-p),Math.max(0,Math.min(a-1,f+v)),d,f]},t}(s.PureComponent)).defaultProps={direction:"ltr",itemData:void 0,useIsScrolling:!1},t}var O=function(e,t){e.children,e.direction,e.height,e.innerTagName,e.outerTagName,e.overscanColumnsCount,e.overscanCount,e.overscanRowsCount,e.width,t.instance},w=function(e,t){var n=e.rowCount,r=t.rowMetadataMap,o=t.estimatedRowHeight,a=t.lastMeasuredRowIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},E=function(e,t){var n=e.columnCount,r=t.columnMetadataMap,o=t.estimatedColumnWidth,a=t.lastMeasuredColumnIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},M=function(e,t,n,r){var o,a,i;if("column"===e?(o=r.columnMetadataMap,a=t.columnWidth,i=r.lastMeasuredColumnIndex):(o=r.rowMetadataMap,a=t.rowHeight,i=r.lastMeasuredRowIndex),n>i){var l=0;if(i>=0){var u=o[i];l=u.offset+u.size}for(var s=i+1;s<=n;s++){var c=a(s);o[s]={offset:l,size:c},l+=c}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},S=function(e,t,n,r){var o,a;return"column"===e?(o=n.columnMetadataMap,a=n.lastMeasuredColumnIndex):(o=n.rowMetadataMap,a=n.lastMeasuredRowIndex),(a>0?o[a].offset:0)>=r?x(e,t,n,a,0,r):C(e,t,n,Math.max(0,a),r)},x=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=M(e,t,i,n).offset;if(l===a)return i;l<a?o=i+1:l>a&&(r=i-1)}return o>0?o-1:0},C=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&M(e,t,r,n).offset<o;)r+=i,i*=2;return x(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},P=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=M(e,t,n,a),s="column"===e?E(t,a):w(t,a),c=Math.max(0,Math.min(s-l,u.offset)),d=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=d-l&&o<=c+l?"auto":"center"),r){case"start":return c;case"end":return d;case"center":return Math.round(d+(c-d)/2);default:return o>=d&&o<=c?o:d>c||o<d?d:c}},j=y({getColumnOffset:function(e,t,n){return M("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return S("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=M("column",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("column",e,s,r).size;return s},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:E,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return P("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return P("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return M("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return S("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=M("row",e,t,r),l=n+a,u=i.offset+i.size,s=t;s<o-1&&u<l;)s++,u+=M("row",e,s,r).size;return s},initInstanceProps:function(e,t){var n=e,r={columnMetadataMap:{},estimatedColumnWidth:n.estimatedColumnWidth||50,estimatedRowHeight:n.estimatedRowHeight||50,lastMeasuredColumnIndex:-1,lastMeasuredRowIndex:-1,rowMetadataMap:{}};return t.resetAfterColumnIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({columnIndex:e,shouldForceUpdate:n})},t.resetAfterRowIndex=function(e,n){void 0===n&&(n=!0),t.resetAfterIndices({rowIndex:e,shouldForceUpdate:n})},t.resetAfterIndices=function(e){var n=e.columnIndex,o=e.rowIndex,a=e.shouldForceUpdate,i=void 0===a||a;"number"==typeof n&&(r.lastMeasuredColumnIndex=Math.min(r.lastMeasuredColumnIndex,n-1)),"number"==typeof o&&(r.lastMeasuredRowIndex=Math.min(r.lastMeasuredRowIndex,o-1)),t._getItemStyleCache(-1),i&&t.forceUpdate()},r},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.columnWidth,e.rowHeight}}),I=150,k=function(e,t){return e};function D(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,c=e.getOffsetForIndexAndAlignment,d=e.getStartIndexForOffset,v=e.getStopIndexForStartIndex,m=e.initInstanceProps,_=e.shouldResetStyleCacheOnItemSizeChange,b=e.validateProps;return t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=m(r.props,(0,o.Z)(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:(0,o.Z)(r),isScrolling:!1,scrollDirection:"forward",scrollOffset:"number"==typeof r.props.initialScrollOffset?r.props.initialScrollOffset:0,scrollUpdateWasRequested:!1},r._callOnItemsRendered=void 0,r._callOnItemsRendered=u((function(e,t,n,o){return r.props.onItemsRendered({overscanStartIndex:e,overscanStopIndex:t,visibleStartIndex:n,visibleStopIndex:o})})),r._callOnScroll=void 0,r._callOnScroll=u((function(e,t,n){return r.props.onScroll({scrollDirection:e,scrollOffset:t,scrollUpdateWasRequested:n})})),r._getItemStyle=void 0,r._getItemStyle=function(e){var t,o=r.props,a=o.direction,i=o.itemSize,u=o.layout,s=r._getItemStyleCache(_&&i,_&&u,_&&a);if(s.hasOwnProperty(e))t=s[e];else{var c=n(r.props,e,r._instanceProps),d=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,p="rtl"===a,v=f?c:0;s[e]=t={position:"absolute",left:p?void 0:v,right:p?v:void 0,top:f?0:c,height:f?"100%":d,width:f?d:"100%"}}return t},r._getItemStyleCache=void 0,r._getItemStyleCache=u((function(e,t,n){return{}})),r._onScrollHorizontal=function(e){var t=e.currentTarget,n=t.clientWidth,o=t.scrollLeft,a=t.scrollWidth;r.setState((function(e){if(e.scrollOffset===o)return null;var t=r.props.direction,i=o;if("rtl"===t)switch(g()){case"negative":i=-o;break;case"positive-descending":i=a-n-o}return i=Math.max(0,Math.min(i,a-n)),{isScrolling:!0,scrollDirection:e.scrollOffset<o?"forward":"backward",scrollOffset:i,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._onScrollVertical=function(e){var t=e.currentTarget,n=t.clientHeight,o=t.scrollHeight,a=t.scrollTop;r.setState((function(e){if(e.scrollOffset===a)return null;var t=Math.max(0,Math.min(a,o-n));return{isScrolling:!0,scrollDirection:e.scrollOffset<t?"forward":"backward",scrollOffset:t,scrollUpdateWasRequested:!1}}),r._resetIsScrollingDebounced)},r._outerRefSetter=function(e){var t=r.props.outerRef;r._outerRef=e,"function"==typeof t?t(e):null!=t&&"object"==typeof t&&t.hasOwnProperty("current")&&(t.current=e)},r._resetIsScrollingDebounced=function(){null!==r._resetIsScrollingTimeoutId&&f(r._resetIsScrollingTimeoutId),r._resetIsScrollingTimeoutId=p(r._resetIsScrolling,I)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}(0,a.Z)(t,e),t.getDerivedStateFromProps=function(e,t){return R(e,t),b(e),null};var y=t.prototype;return y.scrollTo=function(e){e=Math.max(0,e),this.setState((function(t){return t.scrollOffset===e?null:{scrollDirection:t.scrollOffset<e?"forward":"backward",scrollOffset:e,scrollUpdateWasRequested:!0}}),this._resetIsScrollingDebounced)},y.scrollToItem=function(e,t){void 0===t&&(t="auto");var n=this.props,r=n.itemCount,o=n.layout,a=this.state.scrollOffset;e=Math.max(0,Math.min(e,r-1));var i=0;if(this._outerRef){var l=this._outerRef;i="vertical"===o?l.scrollWidth>l.clientWidth?h():0:l.scrollHeight>l.clientHeight?h():0}this.scrollTo(c(this.props,e,t,a,this._instanceProps,i))},y.componentDidMount=function(){var e=this.props,t=e.direction,n=e.initialScrollOffset,r=e.layout;if("number"==typeof n&&null!=this._outerRef){var o=this._outerRef;"horizontal"===t||"horizontal"===r?o.scrollLeft=n:o.scrollTop=n}this._callPropsCallbacks()},y.componentDidUpdate=function(){var e=this.props,t=e.direction,n=e.layout,r=this.state,o=r.scrollOffset;if(r.scrollUpdateWasRequested&&null!=this._outerRef){var a=this._outerRef;if("horizontal"===t||"horizontal"===n)if("rtl"===t)switch(g()){case"negative":a.scrollLeft=-o;break;case"positive-ascending":a.scrollLeft=o;break;default:var i=a.clientWidth,l=a.scrollWidth;a.scrollLeft=l-i-o}else a.scrollLeft=o;else a.scrollTop=o}this._callPropsCallbacks()},y.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},y.render=function(){var e=this.props,t=e.children,n=e.className,o=e.direction,a=e.height,l=e.innerRef,u=e.innerElementType,c=e.innerTagName,d=e.itemCount,f=e.itemData,p=e.itemKey,v=void 0===p?k:p,h=e.layout,m=e.outerElementType,g=e.outerTagName,_=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,E=w?this._onScrollHorizontal:this._onScrollVertical,M=this._getRangeToRender(),S=M[0],x=M[1],C=[];if(d>0)for(var P=S;P<=x;P++)C.push((0,s.createElement)(t,{data:f,key:v(P,f),index:P,isScrolling:b?O:void 0,style:this._getItemStyle(P)}));var j=i(this.props,this._instanceProps);return(0,s.createElement)(m||g||"div",{className:n,onScroll:E,ref:this._outerRefSetter,style:(0,r.Z)({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},_)},(0,s.createElement)(u||c||"div",{children:C,ref:l,style:{height:w?"100%":j,pointerEvents:O?"none":void 0,width:w?j:"100%"}}))},y._callPropsCallbacks=function(){if("function"==typeof this.props.onItemsRendered&&this.props.itemCount>0){var e=this._getRangeToRender(),t=e[0],n=e[1],r=e[2],o=e[3];this._callOnItemsRendered(t,n,r,o)}if("function"==typeof this.props.onScroll){var a=this.state,i=a.scrollDirection,l=a.scrollOffset,u=a.scrollUpdateWasRequested;this._callOnScroll(i,l,u)}},y._getRangeToRender=function(){var e=this.props,t=e.itemCount,n=e.overscanCount,r=this.state,o=r.isScrolling,a=r.scrollDirection,i=r.scrollOffset;if(0===t)return[0,0,0,0];var l=d(this.props,i,this._instanceProps),u=v(this.props,l,i,this._instanceProps),s=o&&"backward"!==a?1:Math.max(1,n),c=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-s),Math.max(0,Math.min(t-1,u+c)),l,u]},t}(s.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var R=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},N=function(e,t,n){var r=e.itemSize,o=n.itemMetadataMap,a=n.lastMeasuredIndex;if(t>a){var i=0;if(a>=0){var l=o[a];i=l.offset+l.size}for(var u=a+1;u<=t;u++){var s=r(u);o[u]={offset:i,size:s},i+=s}n.lastMeasuredIndex=t}return o[t]},T=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=N(e,a,t).offset;if(i===o)return a;i<o?r=a+1:i>o&&(n=a-1)}return r>0?r-1:0},L=function(e,t){var n=e.itemCount,r=t.itemMetadataMap,o=t.estimatedItemSize,a=t.lastMeasuredIndex,i=0;if(a>=n&&(a=n-1),a>=0){var l=r[a];i=l.offset+l.size}return i+(n-a-1)*o},z=D({getItemOffset:function(e,t,n){return N(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:L,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,s=e.width,c="horizontal"===i||"horizontal"===u?s:l,d=N(e,t,o),f=L(e,o),p=Math.max(0,Math.min(f-c,d.offset)),v=Math.max(0,d.offset-c+d.size+a);switch("smart"===n&&(n=r>=v-c&&r<=p+c?"auto":"center"),n){case"start":return p;case"end":return v;case"center":return Math.round(v+(p-v)/2);default:return r>=v&&r<=p?r:r<v?v:p}},getStartIndexForOffset:function(e,t,n){return function(e,t,n){var r=t.itemMetadataMap,o=t.lastMeasuredIndex;return(o>0?r[o].offset:0)>=n?T(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&N(e,n,t).offset<r;)n+=a,a*=2;return T(e,t,Math.min(n,o-1),Math.floor(n/2),r)}(e,t,Math.max(0,o),n)}(e,n,t)},getStopIndexForStartIndex:function(e,t,n,r){for(var o=e.direction,a=e.height,i=e.itemCount,l=e.layout,u=e.width,s="horizontal"===o||"horizontal"===l?u:a,c=N(e,t,r),d=n+s,f=c.offset+c.size,p=t;p<i-1&&f<d;)p++,f+=N(e,p,r).size;return p},initInstanceProps:function(e,t){var n={itemMetadataMap:{},estimatedItemSize:e.estimatedItemSize||50,lastMeasuredIndex:-1};return t.resetAfterIndex=function(e,r){void 0===r&&(r=!0),n.lastMeasuredIndex=Math.min(n.lastMeasuredIndex,e-1),t._getItemStyleCache(-1),r&&t.forceUpdate()},n},shouldResetStyleCacheOnItemSizeChange:!1,validateProps:function(e){e.itemSize}}),A=y({getColumnOffset:function(e,t){return t*e.columnWidth},getColumnWidth:function(e,t){return e.columnWidth},getRowOffset:function(e,t){return t*e.rowHeight},getRowHeight:function(e,t){return e.rowHeight},getEstimatedTotalHeight:function(e){var t=e.rowCount;return e.rowHeight*t},getEstimatedTotalWidth:function(e){var t=e.columnCount;return e.columnWidth*t},getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){var i=e.columnCount,l=e.columnWidth,u=e.width,s=Math.max(0,i*l-u),c=Math.min(s,t*l),d=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=d-u&&r<=c+u?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(u/2)?0:f>s+Math.floor(u/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,s=Math.max(0,u*i-l),c=Math.min(s,t*i),d=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=d-l&&r<=c+l?"auto":"center"),n){case"start":return c;case"end":return d;case"center":var f=Math.round(d+(c-d)/2);return f<Math.ceil(l/2)?0:f>s+Math.floor(l/2)?s:f;default:return r>=d&&r<=c?r:d>c||r<d?d:c}},getColumnStartIndexForOffset:function(e,t){var n=e.columnWidth,r=e.columnCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getColumnStopIndexForStartIndex:function(e,t,n){var r=e.columnWidth,o=e.columnCount,a=e.width,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},getRowStartIndexForOffset:function(e,t){var n=e.rowHeight,r=e.rowCount;return Math.max(0,Math.min(r-1,Math.floor(t/n)))},getRowStopIndexForStartIndex:function(e,t,n){var r=e.rowHeight,o=e.rowCount,a=e.height,i=t*r,l=Math.ceil((a+n-i)/r);return Math.max(0,Math.min(o-1,t+l-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.columnWidth,e.rowHeight}}),H=D({getItemOffset:function(e,t){return t*e.itemSize},getItemSize:function(e,t){return e.itemSize},getEstimatedTotalSize:function(e){var t=e.itemCount;return e.itemSize*t},getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.itemCount,s=e.itemSize,c=e.layout,d=e.width,f="horizontal"===i||"horizontal"===c?d:l,p=Math.max(0,u*s-f),v=Math.min(p,t*s),h=Math.max(0,t*s-f+s+a);switch("smart"===n&&(n=r>=h-f&&r<=v+f?"auto":"center"),n){case"start":return v;case"end":return h;case"center":var m=Math.round(h+(v-h)/2);return m<Math.ceil(f/2)?0:m>p+Math.floor(f/2)?p:m;default:return r>=h&&r<=v?r:r<h?h:v}},getStartIndexForOffset:function(e,t){var n=e.itemCount,r=e.itemSize;return Math.max(0,Math.min(n-1,Math.floor(t/r)))},getStopIndexForStartIndex:function(e,t,n){var r=e.direction,o=e.height,a=e.itemCount,i=e.itemSize,l=e.layout,u=e.width,s=t*i,c="horizontal"===r||"horizontal"===l?u:o,d=Math.ceil((c+n-s)/i);return Math.max(0,Math.min(a-1,t+d-1))},initInstanceProps:function(e){},shouldResetStyleCacheOnItemSizeChange:!0,validateProps:function(e){e.itemSize}});function B(e,t){for(var n in e)if(!(n in t))return!0;for(var r in t)if(e[r]!==t[r])return!0;return!1}var F=["style"],V=["style"];function W(e,t){var n=e.style,r=(0,c.Z)(e,F),o=t.style,a=(0,c.Z)(t,V);return!B(n,o)&&!B(r,a)}function G(e,t){return!W(this.props,e)||B(this.state,t)}},7274:function(e,t){var n,r;n=function(){var e=/(auto|scroll)/,t=function(e,n){return null===e.parentNode?n:t(e.parentNode,n.concat([e]))},n=function(e,t){return getComputedStyle(e,null).getPropertyValue(t)},r=function(t){return e.test(function(e){return n(e,"overflow")+n(e,"overflow-y")+n(e,"overflow-x")}(t))};return function(e){if(e instanceof HTMLElement||e instanceof SVGElement){for(var n=t(e.parentNode,[]),o=0;o<n.length;o+=1)if(r(n[o]))return n[o];return document.scrollingElement||document.documentElement}}},void 0===(r=n.apply(t,[]))||(e.exports=r)},7237:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5580));t.default=function(e){var t,n=e.children,r=e.className,l=e.onClick,u=e.onPointerDown,s=e.containerRef,c=e.disabled,d=void 0!==c&&c,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noPadding,b=void 0!==_&&_,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.autoFocus,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=e.size,T=void 0===N?"medium":N,L=e.type;return o.default.createElement("button",{ref:s,className:(0,a.default)([i.default.container,i.default[T],i.default[R],(t={},t[i.default.inverted]=p,t[i.default.rounded]=h,t[i.default.noShadow]=g,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=E,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:d,autoFocus:j,type:L,role:"button",onClick:l,onPointerDown:u},"string"!=typeof n&&Array.isArray(n)&&n.length?o.default.createElement("div",{className:i.default.content},n):n)}},9508:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Button=void 0;var o=n(7237);Object.defineProperty(t,"Button",{enumerable:!0,get:function(){return r(o).default}})},289:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(3391));t.default=function(e){var t,n=e.children,r=e.inverted,l=void 0!==r&&r,u=e.className;return o.default.createElement("div",{className:(0,a.default)([i.default.buttonBadge,(t={},t[i.default.inverted]=l,t),u])},n)}},4127:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonBadge=void 0;var o=n(289);Object.defineProperty(t,"ButtonBadge",{enumerable:!0,get:function(){return r(o).default}})},5798:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(2457));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.size,d=e.containerRef,f=e.inverted,p=void 0!==f&&f,v=e.rounded,h=void 0!==v&&v,m=e.transparent,g=void 0!==m&&m,_=e.noShadow,b=void 0!==_&&_,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,E=void 0!==w&&w,M=e.stretchHorizontally,S=void 0!==M&&M,x=e.stretchVertically,C=void 0!==x&&x,P=e.disabled,j=void 0!==P&&P,I=e.offsetSides,k=void 0===I?[]:I,D=e.align,R=void 0===D?"center":D,N=o(e,["as","children","className","size","containerRef","inverted","rounded","transparent","noShadow","noPadding","noBorder","stretchHorizontally","stretchVertically","disabled","offsetSides","align"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:d,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[c],u.default[R],(t={},t[u.default.inverted]=p,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=E,t[u.default.disabled]=j,t[u.default.transparent]=g,t[u.default.stretchHorizontally]=S,t[u.default.stretchVertically]=C,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),s])},N),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ButtonLink=void 0;var o=n(5798);Object.defineProperty(t,"ButtonLink",{enumerable:!0,get:function(){return r(o).default}})},819:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7941));t.default=function(e){var t=e.label,n=e.onChange,r=e.placeholder,o=e.checked,a=e.disabled,i=e.name,d=e.className,f=e.indeterminate,p=e.size,v=void 0===p?"medium":p,h=e.autoFocus,m=void 0!==h&&h,g=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]),_=l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([c.default.checkbox,d,c.default[v]]),onChange:g,placeholder:r,name:i,type:"checkbox",autoFocus:m});return t?l.default.createElement(s.Label,{value:t},_):l.default.createElement(l.default.Fragment,null,_)}},4616:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Checkbox=void 0;var o=n(819);Object.defineProperty(t,"Checkbox",{enumerable:!0,get:function(){return r(o).default}})},5801:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(2554),l=r(n(4560));t.default=function(e){var t=e.colors,n=e.containerRef,r=e.onSelect,u=e.selectedColor,s=e.direction,c=void 0===s?"vertical":s,d=e.canToggle,f=void 0!==d&&d;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[c]])},t.map((function(e){return o.default.createElement(i.ColorSwatch,{key:e.key,color:e,isSelected:e.key===(null==u?void 0:u.key),onClick:function(){f&&e.key===(null==u?void 0:u.key)?r(null):r(e)}})})))}},7429:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorPicker=void 0;var o=n(5801);Object.defineProperty(t,"ColorPicker",{enumerable:!0,get:function(){return r(o).default}})},5324:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(5057));t.default=function(e){var t,n=e.color,r=e.containerRef,l=e.isSelected,u=void 0!==l&&l,s=e.size,c=void 0===s?"medium":s,d=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[c],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:d,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ColorSwatch=void 0;var o=n(5324);Object.defineProperty(t,"ColorSwatch",{enumerable:!0,get:function(){return r(o).default}})},4619:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(1391),l=r(n(7855));function u(e){var t,n=e.className,r=e.children,u=e.containerRef,s=e.header,c=e.isOpen,d=e.buttonsLeft,f=void 0===d?[]:d,p=e.buttonsRight,v=void 0===p?[]:p,h=e.onClose,m=void 0===h?function(){}:h,g=e.noPadding,_=void 0!==g&&g,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,E=e.baseZIndex,M=void 0===E?1019:E,S=e.modalClassName,x=e.flexCenter;return o.default.createElement(i.Modal,{modalClassName:S,flexCenter:x,containerRef:u,isOpen:c,onClose:m,noOverlay:y,noShadow:w,baseZIndex:M},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!s&&o.default.createElement("h1",{className:l.default.modalHeader},s),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=_,t)])},r),o.default.createElement("div",{className:l.default.modalButtonsContainer},o.default.createElement("div",{className:l.default.modalButtons},f),o.default.createElement("div",{className:l.default.modalButtons},v))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ConfirmationModal=void 0;var o=n(4619);Object.defineProperty(t,"ConfirmationModal",{enumerable:!0,get:function(){return r(o).default}})},9745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.useDrawerContext=t.DrawerContext=void 0;var o=r(n(6689));t.DrawerContext=o.default.createContext({}),t.useDrawerContext=function(){return o.default.useContext(t.DrawerContext)}},3096:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=i(n(7659)),u=a(n(6689)),s=i(n(6405)),c=i(n(2838)),d=n(8744),f=n(6790),p=n(60),v=n(5089),h=n(9745),m=n(5172),g={enter:c.default.drawerPaperEnter,enterActive:c.default.drawerPaperEnterActive,enterDone:c.default.drawerPaperEnterDone,exit:c.default.drawerPaperExit,exitActive:c.default.drawerPaperExitActive,exitDone:c.default.drawerPaperExitDone};function _(e){var t,n,r=e.open,o=e.className,a=e.style,i=e.noCloseIcon,f=void 0!==i&&i,p=e.noOverlay,v=void 0!==p&&p,_=e.children,b=e.unmountOnExit,y=void 0!==b&&b,O=e.mountOnEnter,w=void 0!==O&&O,E=e.portalContainer,M=void 0===E?document.body:E,S=e.onClose,x=e.onCloseAnimationEnd,C=(0,u.useState)(!1),P=C[0],j=C[1],I=(0,u.useState)(!1),k=I[0],D=I[1],R=(0,u.useRef)(null),N=function(e){var t,n;return null===(n=null===(t=e.current)||void 0===t?void 0:t.className.match(Object.values(g).join("|")))||void 0===n?void 0:n[0]}(R),T=(0,u.useMemo)((function(){return{onClose:S,noCloseIcon:f}}),[S,f]);(0,m.useHotkeys)("Escape",S);var L=(0,u.useCallback)((function(){j(!0),D(!0)}),[]),z=(0,u.useCallback)((function(){D(!1)}),[]),A=(0,u.useCallback)((function(){j(!1),null==x||x()}),[x]);return s.default.createPortal(u.default.createElement(d.CSSTransition,{nodeRef:R,in:r,timeout:300,classNames:g,unmountOnExit:y,mountOnEnter:w,onExited:A,onEnter:L,onExit:z},u.default.createElement(h.DrawerContext.Provider,{value:T},u.default.createElement("div",{className:(0,l.default)([c.default.drawer,o,(t={},t[c.default.visible]=P,t)])},u.default.createElement("div",{ref:R,className:(0,l.default)([c.default.drawerPaper,N]),style:a},u.default.createElement("div",{className:c.default.drawerPaperContent},_)),u.default.createElement("div",{className:(0,l.default)([c.default.drawerOverlay,(n={},n[c.default.noOverlay]=v,n[c.default.visible]=k,n)]),onClick:S})))),M)}_.Header=p.DrawerHeader,_.Content=v.DrawerContent,_.Footer=f.DrawerFooter,t.default=_},4190:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(8930));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerContent,n])},t)}},5089:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerContent=void 0;var o=n(4190);Object.defineProperty(t,"DrawerContent",{enumerable:!0,get:function(){return r(o).default}})},1848:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=r(n(6282));t.default=function(e){var t=e.children,n=e.className;return a.default.createElement("div",{className:(0,o.default)([i.default.drawerFooter,n])},t)}},6790:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerFooter=void 0;var o=n(1848);Object.defineProperty(t,"DrawerFooter",{enumerable:!0,get:function(){return r(o).default}})},7365:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(7659)),a=r(n(6689)),i=n(4958),l=r(n(8799)),u=r(n(713)),s=n(9745);t.default=function(e){var t=e.children,n=e.className,r=(0,s.useDrawerContext)(),c=r.onClose,d=r.noCloseIcon;return a.default.createElement("div",{className:(0,o.default)([u.default.drawerHeader,n])},!d&&a.default.createElement("div",{className:u.default.drawerHeaderClose},a.default.createElement("div",{className:u.default.drawerHeaderCloseIcon,onClick:c},a.default.createElement(i.Icon,{src:l.default,size:"xlarge"}))),t)}},60:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.DrawerHeader=void 0;var o=n(7365);Object.defineProperty(t,"DrawerHeader",{enumerable:!0,get:function(){return r(o).default}})},3212:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Drawer=void 0;var o=n(3096);Object.defineProperty(t,"Drawer",{enumerable:!0,get:function(){return r(o).default}})},943:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Clickable=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(6114)),u=r(n(3210));t.Clickable=function(e){var t=e.display,n=e.isDisabled,r=e.onClick;return o.default.createElement(a.Button,{align:"left",disabled:n,onClick:r,size:"medium",stretchHorizontally:!0},o.default.createElement("div",{className:l.default.container},t,o.default.createElement(i.Icon,{alt:"Dropdown",src:u.default})))}},3064:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t};Object.defineProperty(t,"__esModule",{value:!0}),t.Dropdown=void 0;var i=a(n(6689)),l=n(5348),u=n(943),s=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,c=e.selectedItem,d=e.placement,f=void 0===d?{vertical:"bottom",horizontal:"left"}:d,p=(0,i.useState)(!1),v=p[0],h=p[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),g=!n||0===n.length,_=function(){return h(!v)};return i.default.createElement(s.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:g,selectedItem:c,toggleIsOpen:_}):i.default.createElement(u.Clickable,{display:o,isDisabled:g,onClick:_}),placement:f,ref:m},i.default.createElement(s.Menu,{isOpen:v},n&&n.map((function(e){return i.default.createElement(s.MenuItem,{isActive:e.id===(null==c?void 0:c.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==c?void 0:c.id)}):e.name)}))))}},1889:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.DropdownClickable=t.Dropdown=void 0;var r=n(3064);Object.defineProperty(t,"Dropdown",{enumerable:!0,get:function(){return r.Dropdown}});var o=n(943);Object.defineProperty(t,"DropdownClickable",{enumerable:!0,get:function(){return o.Clickable}})},2205:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8117));t.default=function(e){var t,n=e.children,r=e.accept,l=e.onChange,u=e.inputRef,s=e.multiple,c=void 0!==s&&s,d=e.disabled,f=void 0!==d&&d,p=e.inverted,v=void 0!==p&&p,h=e.noShadow,m=void 0!==h&&h,g=e.noBorder,_=void 0!==g&&g,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,E=e.stretchHorizontally,M=void 0!==E&&E,S=e.stretchVertically,x=void 0!==S&&S,C=e.rounded,P=void 0!==C&&C,j=e.size,I=void 0===j?"medium":j;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[I],(t={},t[i.default.inverted]=v,t[i.default.rounded]=P,t[i.default.noShadow]=m,t[i.default.noBorder]=_,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=M,t[i.default.stretchVertically]=x,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:c,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FileInput=void 0;var o=n(2205);Object.defineProperty(t,"FileInput",{enumerable:!0,get:function(){return r(o).default}})},4200:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7800));t.default=function(e){var t,n=e.className,r=e.children,l=e.containerRef,u=e.layout,s=void 0===u?"column":u,c=e.placement,d=void 0===c?{horizontal:"center",vertical:"bottom",parent:"viewport"}:c,f="center"===d.horizontal?"horizontalCenter":d.horizontal,p="center"===d.vertical?"verticalCenter":d.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[p],i.default[s],(t={},t[i.default.fixed]="container"!==d.parent,t),n])},r)}},6384:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.FloatingPanel=void 0;var o=n(4200);Object.defineProperty(t,"FloatingPanel",{enumerable:!0,get:function(){return r(o).default}})},6535:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(7060));t.default=function(e){var t,n=e.src,r=e.alt,l=e.containerRef,u=e.size,s=void 0===u?"medium":u,c=e.inverted,d=void 0!==c&&c;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[s],(t={},t[i.default.inverted]=d,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Icon=void 0;var o=n(6535);Object.defineProperty(t,"Icon",{enumerable:!0,get:function(){return r(o).default}})},6698:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(4958),l=r(n(2844));t.default=function(e){var t,n=e.className,r=e.containerRef,u=e.children,s=e.src,c=e.alt,d=e.offsetSides,f=void 0===d?[]:d,p=e.onClick,v=void 0===p?function(){}:p,h=e.disabled,m=void 0!==h&&h,g=e.inverted,_=void 0!==g&&g,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.transparent,M=void 0!==E&&E,S=e.rounded,x=void 0!==S&&S,C=e.size,P=void 0===C?"medium":C,j=e.type,I=void 0===j?"button":j;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[P],(t={},t[l.default.inverted]=_,t[l.default.rounded]=x,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=M,t[l.default.topOffset]=x&&f.includes("top"),t[l.default.rightOffset]=x&&f.includes("right"),t[l.default.bottomOffset]=x&&f.includes("bottom"),t[l.default.leftOffset]=x&&f.includes("left"),t),n]),disabled:m,onClick:v,type:I,role:"button"},o.default.createElement(i.Icon,{src:s,alt:c,size:P,inverted:_}),u)}},2847:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButton=void 0;var o=n(6698);Object.defineProperty(t,"IconButton",{enumerable:!0,get:function(){return r(o).default}})},749:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(4958),s=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,c=e.children,d=e.className,f=e.src,p=e.alt,v=e.inverted,h=void 0!==v&&v,m=e.noShadow,g=void 0!==m&&m,_=e.noBorder,b=void 0!==_&&_,y=e.transparent,O=void 0!==y&&y,w=e.rounded,E=void 0!==w&&w,M=e.offsetSides,S=void 0===M?[]:M,x=e.disabled,C=void 0!==x&&x,P=e.size,j=void 0===P?"medium":P,I=o(e,["as","containerRef","children","className","src","alt","inverted","noShadow","noBorder","transparent","rounded","offsetSides","disabled","size"]);return void 0===n&&(n="a"),i.default.createElement(n,r({ref:a,"data-testid":"icon-button-link",className:(0,l.default)([s.default.container,s.default[j],(t={},t[s.default.inverted]=h,t[s.default.rounded]=E,t[s.default.noShadow]=g,t[s.default.noBorder]=b,t[s.default.disabled]=C,t[s.default.transparent]=O,t[s.default.topOffset]=E&&S.includes("top"),t[s.default.rightOffset]=E&&S.includes("right"),t[s.default.bottomOffset]=E&&S.includes("bottom"),t[s.default.leftOffset]=E&&S.includes("left"),t),d])},I),i.default.createElement(u.Icon,{src:f,alt:p,size:j,inverted:h}),c)}},5860:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.IconButtonLink=void 0;var o=n(749);Object.defineProperty(t,"IconButtonLink",{enumerable:!0,get:function(){return r(o).default}})},5084:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(1513));t.default=function(e){var t=e.src,n=e.alt,a=e.srcWidth,s=e.srcHeight,c=e.children,d=e.containerRef,f=e.layout,p=void 0===f?"contain":f,v=e.decoding,h=void 0===v?"auto":v,m=e.loading,g=void 0===m?"eager":m,_=e.style,b=o(e,["src","alt","srcWidth","srcHeight","children","containerRef","layout","decoding","loading","style"]),y=i.default.createElement("img",r({className:(0,l.default)([u.default.image,u.default[p]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:a,height:s,decoding:h,loading:g,style:_},b));return c?i.default.createElement("div",{ref:d,className:(0,l.default)([u.default.container,u.default.hasOverlay])},y,c&&i.default.createElement("div",{className:u.default.overlay},c)):y}},3928:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Image=void 0;var o=n(5084);Object.defineProperty(t,"Image",{enumerable:!0,get:function(){return r(o).default}})},6392:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8197));t.default=function(e){var t=e.className,n=e.children,r=e.value,l=e.containerRef;return o.default.createElement("label",{ref:l,className:(0,a.default)([i.default.container,t])},r,n)}},4115:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Label=void 0;var o=n(6392);Object.defineProperty(t,"Label",{enumerable:!0,get:function(){return r(o).default}})},9611:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(8639));t.default=function(e){var t=e.children,n=e.className,r=e.containerRef,l=e.header,u=e.headerActions;return o.default.createElement("div",{ref:r,className:(0,a.default)([i.default.container,n])},(l||u)&&o.default.createElement("div",{className:i.default.header},l&&o.default.createElement("h3",{className:i.default.headerLabel,id:l.id},l.text),u),o.default.createElement("ul",{"aria-labelledby":null==l?void 0:l.id,className:i.default.list},t))}},1332:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=n(9508),l=r(n(1725));t.default=function(e){var t=e.children,n=e.active,r=void 0!==n&&n,u=e.disabled,s=void 0!==u&&u,c=e.transparent,d=void 0!==c&&c,f=e.noPadding,p=void 0!==f&&f,v=e.size,h=void 0===v?"medium":v,m=e.align,g=void 0===m?"center":m,_=e.onClick,b=void 0===_?function(){}:_;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:s,inverted:r,transparent:d,noPadding:p,align:g,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=n(75),s=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,c=void 0!==a&&a,d=e.transparent,f=void 0!==d&&d,p=e.noPadding,v=void 0!==p&&p,h=e.align,m=void 0===h?"center":h,g=e.size,_=void 0===g?"medium":g,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([s.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:c,transparent:f,noPadding:v,align:m,size:_,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ListViewLinkItem=t.ListViewItem=t.ListView=void 0;var o=n(9611);Object.defineProperty(t,"ListView",{enumerable:!0,get:function(){return r(o).default}});var a=n(1332);Object.defineProperty(t,"ListViewItem",{enumerable:!0,get:function(){return r(a).default}});var i=n(8569);Object.defineProperty(t,"ListViewLinkItem",{enumerable:!0,get:function(){return r(i).default}})},935:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(9633),c=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,d=void 0===i||i,f=e.header,p=e.footer,v=e.smartLayout,h=void 0===v||v,m=(0,l.useContext)(s.PlacementContext),g=(0,l.useRef)(null),_=o||g;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&_.current){var e=_.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=_.current.querySelector("ul"),a=o.querySelectorAll("li,a"),i=o.clientHeight+r,l=a.length?getComputedStyle(a[0]).minHeight:0;o.style.maxHeight="calc(".concat(i,"px - ").concat(l,")")}}}),[d,m,h]),d?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:_,className:(0,u.default)([c.default.menu,(t={},t[c.default.open]=d,t),a])},l.default.createElement("div",null,f&&d&&l.default.createElement("h3",{className:c.default.header},f),l.default.createElement("ul",null,r)),p&&d&&l.default.createElement("div",{className:(0,u.default)([c.default.footer,(n={},n[c.default.noBorder]=!r,n)])},p))):null}},9633:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.PlacementContext=void 0;var l=a(n(6689)),u=i(n(7659)),s=i(n(2752));t.PlacementContext=l.default.createContext(void 0),t.default=(0,l.forwardRef)((function(e,n){var r=e.children,o=e.button,a=e.className,i=e.placement,c=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([s.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return c}),[c])},l.default.createElement("div",{className:(0,u.default)([s.default.menuContainer,s.default[c.horizontal],s.default[c.vertical]])},r)))}))},9385:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(754));t.default=function(e){var t,n,r=e.children,l=e.className,u=e.onClick,s=e.noPadding,c=void 0!==s&&s,d=e.isActive,f=void 0!==d&&d;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=c,n),l]),onClick:u},r)}},9762:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(3079));t.default=function(e){var t,n=e.as,a=e.children,s=e.className,c=e.noPadding,d=void 0!==c&&c,f=o(e,["as","children","className","noPadding"]);return void 0===n&&(n="a"),i.default.createElement(n,r({"data-testid":"menu-link-item",className:(0,l.default)([u.default.menuLinkItem,s,(t={},t[u.default.noPadding]=d,t)])},f),a)}},3814:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.MenuLinkItem=t.MenuItem=t.MenuContainer=t.Menu=void 0;var o=n(935);Object.defineProperty(t,"Menu",{enumerable:!0,get:function(){return r(o).default}});var a=n(9633);Object.defineProperty(t,"MenuContainer",{enumerable:!0,get:function(){return r(a).default}});var i=n(9385);Object.defineProperty(t,"MenuItem",{enumerable:!0,get:function(){return r(i).default}});var l=n(9762);Object.defineProperty(t,"MenuLinkItem",{enumerable:!0,get:function(){return r(l).default}})},4915:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(5172),s=i(n(7659)),c=i(n(9118));t.default=function(e){var t,n,r,o=e.children,a=e.containerRef,i=e.isOpen,d=e.button,f=e.transparent,p=void 0!==f&&f,v=e.noShadow,h=void 0!==v&&v,m=e.noOverlay,g=void 0!==m&&m,_=e.onClose,b=void 0===_?function(){}:_,y=e.baseZIndex,O=void 0===y?1009:y,w=e.modalClassName,E=e.flexCenter;(0,u.useHotkeys)("Escape",b);var M=(0,l.useCallback)((function(){b()}),[b]);return i&&l.default.createElement("div",{ref:a,className:(0,s.default)([w,(t={},t[c.default.flexCenter]=E,t)])},l.default.createElement("div",{style:{zIndex:O},className:(0,s.default)([c.default.overlay,(n={},n[c.default.noOverlay]=g,n)]),"data-testid":"modal-overlay",onClick:M}),l.default.createElement("div",{style:{zIndex:O+1},className:(0,s.default)([c.default.modal,w,(r={},r[c.default.transparent]=p,r[c.default.noShadow]=h,r)]),"data-testid":"modal"},o),d&&l.default.createElement("div",{style:{zIndex:O+2},className:c.default.modalButton},d))}},1391:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;var o=n(4915);Object.defineProperty(t,"Modal",{enumerable:!0,get:function(){return r(o).default}})},6791:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var o=r(n(6689)),a=n(9508),i=n(4958),l=r(n(3733)),u=r(n(4330)),s=function(e,t){return 10*e+t},c=function(e){return Math.floor(e/10)},d=["0","1","2","3","4","5","6","7","8","9"];t.Numpad=o.default.forwardRef((function(e,t){var n=e.number,r=e.onChange,f=e.disabled,p=void 0!==f&&f,v=function(e){return function(t){t.stopPropagation(),r(e)}},h=Array(10).fill(0).map((function(e,t){var r=(t+1)%10;return o.default.createElement(a.Button,{key:t,disabled:p,noBorder:!0,noShadow:!0,onPointerDown:v(s(n,r))},r)}));return o.default.createElement("div",{className:l.default.numpad,ref:t,tabIndex:-1,onKeyDown:function(e){if("Backspace"===e.key)e.stopPropagation(),r(c(n));else if(d.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(s(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{className:l.default.button,disabled:p,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:v(c(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Numpad=void 0;var r=n(6791);Object.defineProperty(t,"Numpad",{enumerable:!0,get:function(){return r.Numpad}})},7845:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(186));t.default=function(e){var t,n=e.children,r=e.containerRef,l=e.transparent,u=void 0!==l&&l,s=e.isFixed,c=void 0!==s&&s,d=e.onClick,f=void 0===d?function(){}:d;return o.default.createElement("div",{ref:r,"data-testid":"overlay",className:(0,a.default)([i.default.overlay,(t={},t[i.default.transparent]=u,t[i.default.fixed]=c,t)]),onClick:f},n)}},6650:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Overlay=void 0;var o=n(7845);Object.defineProperty(t,"Overlay",{enumerable:!0,get:function(){return r(o).default}})},410:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(4685)),c=n(5348),d=n(3781),f=n(2847),p=i(n(3790)),v=n(2568);t.default=function(e){var t,n=e.className,r=e.label,o=e.options,a=(0,l.useContext)(v.SelectContext).showExpandedGroup,i=(0,c.useToggle)(a),h=i[0],m=i[1],g=(0,l.useCallback)((function(){m()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:s.default.header,onClick:g},l.default.createElement("div",{className:s.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[s.default.expanded]=h,t)]),src:p.default,alt:h?"Collapse":"Expand",noBorder:!0,transparent:!0})),h&&o.map((function(e){return l.default.createElement(d.Option,{key:"".concat(e.value,"-").concat(e.label),data:e},e.label)})))}},9087:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.GroupOption=void 0;var o=n(410);Object.defineProperty(t,"GroupOption",{enumerable:!0,get:function(){return r(o).default}})},1954:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8054)),c=n(4616),d=n(2568),f=i(n(2565));t.default=function(e){var t,n,r=e.children,o=e.className,a=e.data,i=(0,l.useContext)(d.SelectContext),p=i.multiple,v=i.selectedOptions,h=i.updateSelectedOption,m=i.showSelectedWithTick,g=(0,l.useMemo)((function(){return v.map((function(e){return e.value})).includes(a.value)}),[a,v]),_=(0,l.useCallback)((function(){h(a)}),[a,v]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,(t={},t[s.default.selected]=g&&!p,t[s.default.showSelectedWithTickContainer]=m&&g,t),o]),onClick:_},p&&!m&&l.default.createElement("span",{className:s.default.checkboxContainer},l.default.createElement(c.Checkbox,{className:s.default.checkbox,checked:g,size:"small"})),l.default.createElement("span",{className:(0,u.default)([s.default.label,(n={},n[s.default.selectedLabel]=m&&g,n)])},(null==a?void 0:a.node)&&a.node,r),m&&g&&l.default.createElement("div",{className:s.default.tickContainer},l.default.createElement(f.default,null)))}},3781:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Option=void 0;var o=n(1954);Object.defineProperty(t,"Option",{enumerable:!0,get:function(){return r(o).default}})},2918:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},u=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=void 0;var s=n(5348),c=i(n(6689)),d=n(4616),f=n(9087),p=n(3781),v=n(2568),h=u(n(4822));t.isOption=function(e){return void 0!==e.value},t.default=function(e){var n=e.options,o=e.onFilter,a=e.onChange,i=(0,s.useToggle)(!1),u=i[0],m=i[1],g=(0,c.useContext)(v.SelectContext),_=g.multiple,b=g.searchKeyword,y=g.selectAll,O=g.selectedOptions,w=g.setSelectedOptions,E=n.some((function(e){return!(0,t.isOption)(e)})),M=function(e){var t=b.toLowerCase().trim();return t.length?e.filter((function(e){return o?o(e,t):e.label.toLowerCase().includes(t)})):e},S=(0,c.useMemo)((function(){return E?n.reduce((function(e,t){var n=M(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):M(n)}),[E,n,b]),x=(0,c.useMemo)((function(){return S.reduce((function(e,n){return(0,t.isOption)(n)?e+1:e+n.options.length}),0)}),[E,S,t.isOption]),C=(0,c.useMemo)((function(){return O.filter((function(e){return S.find((function(n){return(0,t.isOption)(n)?n.value===e.value:n.options.find((function(t){return t.value===e.value}))}))})).length}),[O,S]),P=(0,c.useCallback)((function(){if(u)w([]),a&&a([]);else{var e=S.map((function(e){return(0,t.isOption)(e)?e:e.options})).flat();w(e),a&&a(e.map((function(e){return e.value})))}m()}),[S,t.isOption,u,w,m]);return(0,c.useEffect)((function(){C===x?m(!0):u&&m(!1)}),[C,x,u,m]),c.default.createElement("div",{className:h.default.container},y&&_&&!!S.length&&c.default.createElement("div",{className:h.default.selectAllContainer,onClick:P},c.default.createElement("span",{className:h.default.checkboxContainer},c.default.createElement(d.Checkbox,{className:h.default.checkbox,checked:u,indeterminate:!!C&&C!==x,size:"small"})),c.default.createElement("span",{className:h.default.label},"Select All")),S.length?S.map((function(e){return(0,t.isOption)(e)?c.default.createElement(p.Option,{key:"".concat(e.value,"-").concat(e.label),data:e},e.label):c.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})):c.default.createElement("div",{className:h.default.noOptions},"No matches for",c.default.createElement("span",{className:h.default.searchKeyword}," ".concat(b))))}},4292:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.isOption=t.OptionList=void 0;var o=n(2918);Object.defineProperty(t,"OptionList",{enumerable:!0,get:function(){return r(o).default}}),Object.defineProperty(t,"isOption",{enumerable:!0,get:function(){return o.isOption}})},2300:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(2396)),c=n(2568),d=n(1143),f=n(4958),p=i(n(5585)),v=i(n(7451)),h=n(2847);t.default=function(e){var t=e.className,n=(0,l.useContext)(c.SelectContext),r=n.searchKeyword,o=n.setSearchKeyword,a=(0,l.useCallback)((function(e){o(e)}),[r]),i=(0,l.useCallback)((function(){o("")}),[]);return l.default.createElement("div",{className:(0,u.default)([s.default.container,t])},l.default.createElement("div",{className:s.default.iconSearchContainer},l.default.createElement(f.Icon,{src:p.default})),l.default.createElement(d.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:s.default.resetButton,src:v.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Search=void 0;var o=n(2300);Object.defineProperty(t,"Search",{enumerable:!0,get:function(){return r(o).default}})},4113:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(5348),c=n(2568),d=n(4745),f=n(8947),p=n(2847),v=n(4958),h=n(4292),m=n(4115),g=i(n(7917)),_=i(n(3790)),b=i(n(2865));t.default=function(e){var t,n,r,o,a=e.className,i=e.defaultValue,y=e.disabled,O=e.multiple,w=void 0!==O&&O,E=e.options,M=e.placeholder,S=e.label,x=e.selectAll,C=e.showExpandedGroup,P=e.scrollMenuIntoView,j=void 0!==P&&P,I=e.size,k=void 0===I?"medium":I,D=e.showSelectedAsTags,R=void 0!==D&&D,N=e.showSearch,T=void 0!==N&&N,L=e.showSelectedWithTick,z=void 0!==L&&L,A=e.enableSingleDeletion,H=void 0!==A&&A,B=e.width,F=e.loading,V=e.onChange,W=e.onFilter,G=(0,s.useToggle)(!1),U=G[0],Z=G[1],K=(0,s.useOutsideClick)((function(){return Z(!1)})),q=(0,l.useRef)(),Q=(0,l.useCallback)((function(){q.current&&q.current.scrollIntoView({behavior:"smooth",block:"nearest"})}),[]);(0,l.useLayoutEffect)((function(){if(q.current&&U&&j){var e=new ResizeObserver(Q);return e.observe(q.current),function(){e.disconnect(),e=null}}}),[U,j,Q]);var Y=(0,l.useCallback)((function(){Z()}),[]),X=(0,l.useCallback)((function(e){w||Z(!1),V&&V(e)}),[V]);return l.default.createElement(c.SelectContextProvider,{defaultValue:i,multiple:w,options:E,onChange:X,selectAll:x,showExpandedGroup:C,showSelectedWithTick:z,enableSingleDeletion:H},l.default.createElement("div",{ref:K},S?l.default.createElement(m.Label,{value:S}):null,l.default.createElement("div",{className:(0,u.default)([g.default.container,(t={},t[g.default.disabled]=y,t),g.default[k],a]),style:{width:B}},l.default.createElement("div",{className:(0,u.default)([g.default.header,(n={},n[g.default.active]=U,n)]),onClick:Y},l.default.createElement(d.Selector,{placeholder:M,showSelectedAsTags:R,isDropdownOpened:U}),l.default.createElement(p.IconButton,{className:(0,u.default)([g.default.iconButton,(r={},r[g.default.expanded]=U,r)]),src:_.default,alt:U?"Collapse":"Expand",noBorder:!0,transparent:!0})),U&&l.default.createElement("div",{className:(0,u.default)([g.default.content,(o={},o[g.default.isLoading]=F,o)]),ref:q},F?l.default.createElement(v.Icon,{size:"large",src:b.default}):l.default.createElement(l.default.Fragment,null,0===E.length?l.default.createElement("div",{className:g.default.noOptions},"No options available"):l.default.createElement(l.default.Fragment,null,T&&l.default.createElement("div",{className:g.default.searchContainer},l.default.createElement(f.Search,null)),l.default.createElement(h.OptionList,{options:E,onFilter:W,onChange:X})))))))}},2568:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))};Object.defineProperty(t,"__esModule",{value:!0}),t.SelectContextProvider=t.SelectContext=void 0;var l=a(n(6689)),u=n(4292),s={multiple:!1,selectAll:!1,showExpandedGroup:!0,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){},showSelectedWithTick:!1},c=(0,l.createContext)(s);t.SelectContext=c,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,d=void 0!==a&&a,f=e.showExpandedGroup,p=void 0===f||f,v=e.options,h=e.onChange,m=e.showSelectedWithTick,g=void 0!==m&&m,_=e.enableSingleDeletion,b=void 0!==_&&_,y=(0,l.useState)(s.selectedOptions),O=y[0],w=y[1],E=(0,l.useState)(s.searchKeyword),M=E[0],S=E[1],x=(0,l.useCallback)((function(e){var t,n=O.some((function(t){return t.value===e.value}));t=o?n?O.filter((function(t){return t.value!==e.value})):i(i([],O,!0),[e],!1):n&&b?[]:[e],w(t),h&&h(t.map((function(e){return e.value})))}),[O,w,h]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=v.reduce((function(e,t){return(0,u.isOption)(t)?i(i([],e,!0),[t],!1):i(i([],e,!0),t.options,!0)}),[]).filter((function(t){return e.includes(t.value)}))),w(t)}}),[n,v]);var C=(0,l.useMemo)((function(){return{multiple:o,selectAll:d,showExpandedGroup:p,selectedOptions:O,updateSelectedOption:x,searchKeyword:M,setSearchKeyword:S,setSelectedOptions:w,showSelectedWithTick:g,enableSingleDeletion:b}}),[d,O,w,x,M,S]);return l.default.createElement(c.Provider,{value:C},t)}},237:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(6884)),s=n(2568),c=n(2149),d=i(n(7659));t.default=function(e){var t=e.placeholder,n=e.showSelectedAsTags,r=e.isDropdownOpened,o=(0,l.useContext)(s.SelectContext),a=o.selectedOptions,i=o.multiple,f=o.updateSelectedOption,p=(0,l.useCallback)((function(e){e.stopPropagation()}),[]),v=(0,l.useCallback)((function(e,t){if(t){var n=a.find((function(e){return e.value===t}));n&&f(n)}e.stopPropagation()}),[a]),h=(0,l.useMemo)((function(){var e;return l.default.createElement("span",{className:(0,d.default)([u.default.placeholder,(e={},e[u.default.active]=r,e)])},t)}),[t,r]),m=(0,l.useMemo)((function(){return a.length?l.default.createElement(l.default.Fragment,null,a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{key:n,className:u.default.tagWrapper,onClick:p},l.default.createElement(c.Tag,{key:n,value:n,closable:!0,onClose:v},t))}))):h}),[a,h]),g=a.length?l.default.createElement("span",{className:u.default.selectedOptions},"".concat(t," (").concat(a.length,")")):h;return i?n?m:g:a.length?l.default.createElement("span",{className:u.default.selectedOption},a[0].node&&a[0].node,a[0].label):h}},4745:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Selector=void 0;var o=n(237);Object.defineProperty(t,"Selector",{enumerable:!0,get:function(){return r(o).default}})},9929:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Select=void 0;var o=n(4113);Object.defineProperty(t,"Select",{enumerable:!0,get:function(){return r(o).default}})},1420:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=i(n(6689)),s=l(n(7659)),c=n(4356),d=l(n(5691)),f=l(n(5038)),p=l(n(8784)),v=n(2037),h=l(n(6684));t.default=function(e){var t=e.columns,n=e.dataSource,o=e.onRowClick,a=e.hasArrow,i=e.onLoadMore,l=e.page,m=e.setPage,g=e.pageSize,_=void 0===g?v.TableConfig.PAGE_SIZE:g,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?v.TableConfig.ROW_HEIGHT:O,E=e.headerHeight,M=void 0===E?v.TableConfig.HEADER_HEIGHT:E,S=e.disableLazyLoader,x=e.activeRows,C=e.itemsCount,P=e.isHeaderSticky,j=void 0!==P&&P,I=e.hasVirtualScroll,k=void 0===I||I,D=e.scrollToTop,R=void 0!==D&&D,N=e.className,T=(0,u.useState)(0),L=T[0],z=T[1],A=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,s=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(p.default,{data:s,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[s.id])}))}),[t,x,a,w,o]),H=(0,u.useCallback)((function(e){var t=e.scrollOffset;z(t)}),[]),B=(0,u.useCallback)((function(){S||n.length!==C&&(n.length<_*l||m&&i&&(m(l+1),i(l+1)))}),[S,n.length,C,_,l,m,i]),F=(0,u.useCallback)((function(e){return!S&&e<n.length-v.TableConfig.ITEMS_LOADED}),[n.length,S]),V=(0,u.useRef)(null);return(0,u.useEffect)((function(){R&&V.current&&V.current.scrollToItem(0)}),[n]),u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,s.default)([h.default.container,N])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:L,headerHeight:M}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(d.default,{isItemLoaded:F,itemCount:n.length,loadMoreItems:B},(function(e){var t=e.onItemsRendered;return u.default.createElement(c.FixedSizeList,{ref:V,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:H,onItemsRendered:t,className:h.default.scrollbarContainer},A)})))):u.default.createElement("div",{className:(0,s.default)([h.default.container,h.default.scrollbarContainer,N]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:L,isHeaderSticky:j,headerHeight:M}),n.map((function(e,n){return u.default.createElement(p.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==x?void 0:x[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(2212)),l=r(n(4867));t.default=function(e){var t,n,r=e.columns,u=e.scrollTop,s=e.isHeaderSticky,c=e.headerHeight;return o.default.createElement("div",{className:(0,a.default)([l.default.container,(t={},t[l.default.borderBottom]=!!u,t),(n={},n[l.default.isHeaderSticky]=s,n)]),style:{height:c}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),a=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),i=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&o(t,e,n);return a(t,e),t},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=l(n(7659)),s=i(n(6689)),c=n(4958),d=l(n(3210)),f=l(n(2223)),p=n(2802),v=l(n(1435));t.default=function(e){var t,n=e.column,o=n.onSort,a=n.sortable,i=n.sorted,l=n.defaultSortOrder,h=n.title,m=n.width,g=n.className,_=(0,s.useState)((function(){return l||p.SortOrder.DESC})),b=_[0],y=_[1],O=(0,s.useCallback)((function(){if(!i)return o(b);var e=b===p.SortOrder.DESC?p.SortOrder.ASC:p.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return s.default.createElement("div",r({},w,{className:(0,u.default)([v.default.tableHeaderCell,g,(t={},t[v.default.sortIconVisible]=a&&i,t[v.default.sortable]=a,t)]),style:{width:m}}),h,a?s.default.createElement(c.Icon,{alt:"Sort button",size:"small",src:b===p.SortOrder.DESC?d.default:f.default}):null)}},8784:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(8605)),c=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,d=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.hasArrow]=a,t[c.default.active]=d,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(s.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4009));t.default=function(e){var t=e.item,n=e.column,r=e.rowHeight,l="string"==typeof t?t:t[n.dataIndex];return o.default.createElement("div",{className:(0,a.default)([i.default.container,n.className]),style:{height:r,width:null==n?void 0:n.width}},n.render?n.render(l):l)}},2285:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Table=void 0;var o=n(1420);Object.defineProperty(t,"Table",{enumerable:!0,get:function(){return r(o).default}})},8372:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=i(n(7451)),c=n(4958),d=i(n(5374));t.default=function(e){var t,n=e.children,r=(e.className,e.closable),o=e.value,a=e.onClose,i=e.disabled,f=e.onDelete,p=e.id,v=(0,l.useCallback)((function(e){"function"==typeof f&&f(p),"function"==typeof a&&a(e,o)}),[a,f]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.disabled]=i,t)])},l.default.createElement("span",{className:d.default.content},n),r&&l.default.createElement("span",{className:d.default.closeButton,onClick:v},l.default.createElement(c.Icon,{src:s.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tag=void 0;var o=n(8372);Object.defineProperty(t,"Tag",{enumerable:!0,get:function(){return r(o).default}})},8397:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__spreadArray||function(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))},l=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var u=a(n(6689)),s=l(n(7659)),c=n(1982),d=n(1914),f=n(5348),p=n(2149),v=l(n(9067));t.default=function(e){var t,n,r=e.className,o=e.onChange,a=e.placeholder,l=e.value,h=e.name,m=e.pattern,g=e.inputRef,_=e.size,b=void 0===_?"small":_,y=e.type,O=void 0===y?"text":y,w=e.autoFocus,E=void 0!==w&&w,M=e.noBorder,S=void 0!==M&&M,x=e.withScroll,C=void 0!==x&&x,P=e.inputMode,j=e.disabled,I=e.tagOptions,k=void 0===I?[]:I,D=(0,u.useState)(""),R=D[0],N=D[1],T=(0,u.useState)(),L=T[0],z=T[1];(0,u.useEffect)((function(){if(l){var e=l.map((function(e){return{id:(0,c.v4)(),label:e}}));z(e)}}),[l,z]);var A=(0,u.useCallback)((function(e){var t=e.target.value;N(t)}),[N]),H=(0,u.useCallback)((function(e){var t=L.filter((function(t){return t.id!==e}));if(z(t),o){var n=t.map((function(e){return e.label}));o(n)}}),[L,z,o]),B=(0,u.useCallback)((function(){var e=R.trim(),t=i([],L,!0);if(e.length>0){var n={id:(0,c.v4)(),label:e};t=i(i([],L,!0),[n],!1)}if(z(t),N(""),o){var r=t.map((function(e){return e.label}));o(r)}}),[L,R,z,N]),F=(0,u.useCallback)((function(e){"Enter"!==e.code&&"NumpadEnter"!==e.code||(e.preventDefault(),B())}),[B]),V=(0,f.useOutsideClick)((function(){R.trim().length>0&&B()})),W=u.default.createElement(d.Hint,{options:k,allowEnterFill:!0,allowTabFill:!0},u.default.createElement("input",{"data-testid":"input",ref:g,className:(0,s.default)([v.default.textInput,v.default[b],(t={},t[v.default.noBorder]=S,t)]),onChange:A,onKeyDown:F,pattern:m,placeholder:a,name:h,type:O,value:R,autoFocus:E,inputMode:P,disabled:j}));return u.default.createElement("div",{className:(0,s.default)([v.default.container,(n={},n[v.default.disabled]=j,n[v.default.scrollable]=C,n),r]),ref:V},null==L?void 0:L.map((function(e){var t=e.id,n=e.label;return u.default.createElement(p.Tag,{key:t,value:n,id:t,onDelete:H,closable:!0},n)})),u.default.createElement("div",{className:v.default.tagInput},W))}},2819:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TagsInput=void 0;var o=n(8397);Object.defineProperty(t,"TagsInput",{enumerable:!0,get:function(){return r(o).default}})},2506:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=i(n(7659)),s=n(4115),c=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,d=e.value,f=e.name,p=e.pattern,v=e.inputRef,h=e.size,m=void 0===h?"medium":h,g=e.type,_=void 0===g?"text":g,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,E=e.inputMode,M=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),S=l.default.createElement("input",{"data-testid":"input",ref:v,className:(0,u.default)([c.default.textInput,c.default[m],(t={},t[c.default.noBorder]=w,t)]),onChange:M,onBlur:o,onKeyDown:a,pattern:p,placeholder:i,name:f,type:_,value:d,autoFocus:y,inputMode:E});return n?l.default.createElement(s.Label,{value:n},S):l.default.createElement(l.default.Fragment,null,S)}},1143:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.TextInput=void 0;var o=n(2506);Object.defineProperty(t,"TextInput",{enumerable:!0,get:function(){return r(o).default}})},7215:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(9220));t.default=function(e){var t=e.children,n=e.containerRef,r=e.onClick,i=void 0===r?function(){}:r;return o.default.createElement("div",{ref:n,className:a.default.toast,onClick:i,"data-testid":"toast"},t)}},2580:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var o=r(n(6689)),a=r(n(7659)),i=r(n(4106));t.default=function(e){var t=e.children,n=e.baseZIndex;return o.default.createElement("div",{className:(0,a.default)([i.default.toastContainer]),style:{zIndex:n},"data-testid":"toast-container"},t)}},393:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.ToastContainer=t.Toast=void 0;var o=n(7215);Object.defineProperty(t,"Toast",{enumerable:!0,get:function(){return r(o).default}});var a=n(2580);Object.defineProperty(t,"ToastContainer",{enumerable:!0,get:function(){return r(a).default}})},127:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__setModuleDefault||(Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t}),a=this&&this.__importStar||function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&r(t,e,n);return o(t,e),t},i=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var l=a(n(6689)),u=n(6405),s=i(n(7274)),c=i(n(7659)),d=i(n(8907));t.default=function(e){var t=e.children,n=e.text,r=e.placement,o=e.position,a=void 0===o?"absolute":o,i=e.showTooltip,f=e.className,p=e.touchScreenHidingDelay,v=void 0===p?5e3:p,h=(0,l.useState)({left:0,top:0}),m=h[0],g=h[1],_=(0,l.useState)(!1),b=_[0],y=_[1],O=(0,l.useRef)(null),w=(0,l.useRef)(null),E=(0,l.useCallback)((function(){if(w.current){var e=w.current.getBoundingClientRect(),t=function(e,t,n){var r=n.top,o=n.left,a=n.height,i=n.width,l={top:0,left:0};switch(e){case"left":l={top:r+a/2,left:o};break;case"right":l={top:r+a/2,left:o+i};break;case"bottom":l={top:r+a,left:o+i/2};break;case"top":l={top:r,left:o+i/2}}return"absolute"===t?{top:l.top+window.scrollY,left:l.left+window.scrollX}:l}(r,a,e);g(t),y(!0)}}),[r,a]),M=(0,l.useCallback)((function(){E()}),[E]),S=(0,l.useCallback)((function(){y(!1)}),[]),x=(0,l.useCallback)((function(){O.current&&(clearTimeout(O.current),O.current=null),E()}),[E]),C=(0,l.useCallback)((function(){O.current=setTimeout((function(){y(!1),O.current=null}),v)}),[v]);return(0,l.useEffect)((function(){return function(){return O.current&&clearTimeout(O.current)}}),[]),(0,l.useEffect)((function(){if(w.current&&"absolute"===a){var e=(0,s.default)(w.current);if(e){var t=function(){return y(!1)};return e.addEventListener("scroll",t),e.addEventListener("resize",t),function(){e.removeEventListener("scroll",t),e.removeEventListener("resize",t)}}}}),[a]),l.default.createElement("span",{onTouchStart:x,onMouseEnter:M,onMouseLeave:S,onTouchEnd:C,ref:w},t,(0,u.createPortal)(l.default.createElement(l.default.Fragment,null,i&&b?l.default.createElement("div",{style:m,"data-text":n,"data-testid":"tooltip",className:(0,c.default)([d.default.tooltip,d.default[r],d.default[a],f])}):null),document.body))}},746:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Tooltip=void 0;var o=n(127);Object.defineProperty(t,"Tooltip",{enumerable:!0,get:function(){return r(o).default}})},1918:function(e,t,n){"use strict";var r=this&&this.__assign||function(){return r=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},r.apply(this,arguments)},o=this&&this.__rest||function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n},a=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0});var i=a(n(6689)),l=a(n(7659)),u=a(n(6504));t.default=function(e){var t=e.src,n=e.type,a=e.children,s=e.containerRef,c=e.poster,d=e.muted,f=void 0===d||d,p=e.loop,v=void 0===p||p,h=e.autoPlay,m=void 0===h||h,g=e.layout,_=void 0===g?"contain":g,b=o(e,["src","type","children","containerRef","poster","muted","loop","autoPlay","layout"]);return a?i.default.createElement("div",{ref:s,className:(0,l.default)([u.default.container,u.default.hasOverlay])},i.default.createElement("video",r({"data-testid":"video",crossOrigin:"anonymous",className:(0,l.default)([u.default.video,u.default[_]]),muted:f,loop:v,autoPlay:m,poster:c,playsInline:!0},b),i.default.createElement("source",{"data-testid":"source",src:t,type:n})),a&&i.default.createElement("div",{className:u.default.overlay},a)):i.default.createElement("video",r({"data-testid":"video",crossOrigin:"anonymous",className:(0,l.default)([u.default.video,u.default[_]]),muted:f,loop:v,autoPlay:m,poster:c,playsInline:!0},b),i.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.Video=void 0;var o=n(1918);Object.defineProperty(t,"Video",{enumerable:!0,get:function(){return r(o).default}})},7297:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.TableConfig=void 0,(n=t.TableConfig||(t.TableConfig={}))[n.ROW_HEIGHT=48]="ROW_HEIGHT",n[n.HEADER_HEIGHT=32]="HEADER_HEIGHT",n[n.PAGE_SIZE=100]="PAGE_SIZE",n[n.ITEMS_LOADED=5]="ITEMS_LOADED"},2037:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(7297),t)},3607:function(e,t,n){"use strict";var r=this&&this.__createBinding||(Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]}),o=this&&this.__exportStar||function(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||r(t,e,n)};Object.defineProperty(t,"__esModule",{value:!0}),o(n(9508),t),o(n(4127),t),o(n(75),t),o(n(4616),t),o(n(7429),t),o(n(2554),t),o(n(6873),t),o(n(1889),t),o(n(6086),t),o(n(6384),t),o(n(4958),t),o(n(2847),t),o(n(5860),t),o(n(3928),t),o(n(4115),t),o(n(2572),t),o(n(3814),t),o(n(1391),t),o(n(7387),t),o(n(6650),t),o(n(9929),t),o(n(2285),t),o(n(2149),t),o(n(2819),t),o(n(1143),t),o(n(393),t),o(n(746),t),o(n(6975),t),o(n(3212),t)},2802:(e,t)=>{"use strict";var n;Object.defineProperty(t,"__esModule",{value:!0}),t.SortOrder=void 0,(n=t.SortOrder||(t.SortOrder={})).ASC="asc",n.DESC="desc"},4330:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='69' height='27' viewBox='0 0 69 27' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.1333 26L13.7886 26.3622C13.8816 26.4507 14.005 26.5 14.1333 26.5V26ZM1 13.5L0.655287 13.1378C0.556127 13.2322 0.5 13.3631 0.5 13.5C0.5 13.6369 0.556127 13.7678 0.655287 13.8622L1 13.5ZM14.1333 1V0.5C14.005 0.5 13.8816 0.549345 13.7886 0.637822L14.1333 1ZM67.5 2V25H68.5V2H67.5ZM63.4667 25.5H14.1333V26.5H63.4667V25.5ZM14.478 25.6378L1.34471 13.1378L0.655287 13.8622L13.7886 26.3622L14.478 25.6378ZM1.34471 13.8622L14.478 1.36218L13.7886 0.637822L0.655287 13.1378L1.34471 13.8622ZM14.1333 1.5H63.4667V0.5H14.1333V1.5ZM67 25.5H63.4667V26.5H67V25.5ZM67 0.5H63.4667V1.5H67V0.5ZM67.5 25C67.5 25.2761 67.2761 25.5 67 25.5V26.5C67.8284 26.5 68.5 25.8284 68.5 25H67.5ZM68.5 2C68.5 1.17157 67.8284 0.5 67 0.5V1.5C67.2761 1.5 67.5 1.72386 67.5 2H68.5Z' fill='%23262626'/%3e %3cpath d='M32.6464 6.35355L46.6464 20.3536L47.3536 19.6464L33.3536 5.64645L32.6464 6.35355ZM46.6464 5.64645L32.6464 19.6464L33.3536 20.3536L47.3536 6.35355L46.6464 5.64645Z' fill='%23262626'/%3e %3c/svg%3e"},3210:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14 5L7.5 12L1 5' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},2223:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1 10L7.5 3L14 10' stroke='black' stroke-linecap='square'/%3e %3c/svg%3e"},8799:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='20' height='20' viewBox='0 0 20 20' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M0.398438 0.399902L19.5984 19.5999M0.398438 19.5999L19.5984 0.399902' stroke='black'/%3e %3c/svg%3e"},7451:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='15' height='15' viewBox='0 0 15 15' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M1.5 1.5L13.5 13.5M1.5 13.5L13.5 1.5' stroke='black'/%3e %3c/svg%3e"},5585:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M15.4685 15.4665L11.2018 11.1999M6.93516 13.3332C3.40053 13.3332 0.535156 10.4678 0.535156 6.9332C0.535156 3.39858 3.40053 0.533203 6.93516 0.533203C10.4698 0.533203 13.3352 3.39858 13.3352 6.9332C13.3352 10.4678 10.4698 13.3332 6.93516 13.3332Z' stroke='%23898891'/%3e %3c/svg%3e"},3790:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3csvg width='16' height='16' viewBox='0 0 16 16' fill='none' xmlns='http://www.w3.org/2000/svg'%3e %3cpath d='M14.9331 4.26758L7.99974 11.7342L1.06641 4.26758' stroke='%23898891' stroke-linecap='square'/%3e %3c/svg%3e"},2865:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r="data:image/svg+xml,%3c%3fxml version='1.0' encoding='UTF-8' standalone='no'%3f%3e %3c!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd'%3e %3csvg width='100%25' height='100%25' viewBox='0 0 46 46' version='1.1' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' xml:space='preserve' xmlns:serif='http://www.serif.com/' style='fill-rule:evenodd%3bclip-rule:evenodd%3bstroke-linejoin:round%3bstroke-miterlimit:2%3b'%3e %3cg transform='matrix(1%2c0%2c0%2c1%2c-27%2c-27)'%3e %3cpath d='M73%2c50C73%2c37.3 62.7%2c27 50%2c27C37.3%2c27 27%2c37.3 27%2c50M30.9%2c50C30.9%2c39.5 39.4%2c30.9 50%2c30.9C60.6%2c30.9 69.1%2c39.5 69.1%2c50' style='fill-rule:nonzero%3b'%3e %3canimateTransform attributeName='transform' attributeType='XML' type='rotate' dur='1s' from='0 50 50' to='360 50 50' repeatCount='indefinite' /%3e %3c/path%3e %3c/g%3e %3c/svg%3e"},3250:(e,t,n)=>{"use strict";var r=n(6689),o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,u=r.useDebugValue;function s(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,s(o)&&c({inst:o})}),[e,n,t]),i((function(){return s(o)&&c({inst:o}),e((function(){s(o)&&c({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},1688:(e,t,n)=>{"use strict";e.exports=n(3250)},1982:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"NIL",{enumerable:!0,get:function(){return l.default}}),Object.defineProperty(t,"parse",{enumerable:!0,get:function(){return d.default}}),Object.defineProperty(t,"stringify",{enumerable:!0,get:function(){return c.default}}),Object.defineProperty(t,"v1",{enumerable:!0,get:function(){return r.default}}),Object.defineProperty(t,"v3",{enumerable:!0,get:function(){return o.default}}),Object.defineProperty(t,"v4",{enumerable:!0,get:function(){return a.default}}),Object.defineProperty(t,"v5",{enumerable:!0,get:function(){return i.default}}),Object.defineProperty(t,"validate",{enumerable:!0,get:function(){return s.default}}),Object.defineProperty(t,"version",{enumerable:!0,get:function(){return u.default}});var r=f(n(3990)),o=f(n(8237)),a=f(n(5355)),i=f(n(3764)),l=f(n(6314)),u=f(n(8464)),s=f(n(6435)),c=f(n(4008)),d=f(n(8222));function f(e){return e&&e.__esModule?e:{default:e}}},4163:(e,t)=>{"use strict";function n(e){return 14+(e+64>>>9<<4)+1}function r(e,t){const n=(65535&e)+(65535&t);return(e>>16)+(t>>16)+(n>>16)<<16|65535&n}function o(e,t,n,o,a,i){return r((l=r(r(t,e),r(o,i)))<<(u=a)|l>>>32-u,n);var l,u}function a(e,t,n,r,a,i,l){return o(t&n|~t&r,e,t,a,i,l)}function i(e,t,n,r,a,i,l){return o(t&r|n&~r,e,t,a,i,l)}function l(e,t,n,r,a,i,l){return o(t^n^r,e,t,a,i,l)}function u(e,t,n,r,a,i,l){return o(n^(t|~r),e,t,a,i,l)}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=new Uint8Array(t.length);for(let n=0;n<t.length;++n)e[n]=t.charCodeAt(n)}return function(e){const t=[],n=32*e.length,r="0123456789abcdef";for(let o=0;o<n;o+=8){const n=e[o>>5]>>>o%32&255,a=parseInt(r.charAt(n>>>4&15)+r.charAt(15&n),16);t.push(a)}return t}(function(e,t){e[t>>5]|=128<<t%32,e[n(t)-1]=t;let o=1732584193,s=-271733879,c=-1732584194,d=271733878;for(let t=0;t<e.length;t+=16){const n=o,f=s,p=c,v=d;o=a(o,s,c,d,e[t],7,-680876936),d=a(d,o,s,c,e[t+1],12,-389564586),c=a(c,d,o,s,e[t+2],17,606105819),s=a(s,c,d,o,e[t+3],22,-1044525330),o=a(o,s,c,d,e[t+4],7,-176418897),d=a(d,o,s,c,e[t+5],12,1200080426),c=a(c,d,o,s,e[t+6],17,-1473231341),s=a(s,c,d,o,e[t+7],22,-45705983),o=a(o,s,c,d,e[t+8],7,1770035416),d=a(d,o,s,c,e[t+9],12,-1958414417),c=a(c,d,o,s,e[t+10],17,-42063),s=a(s,c,d,o,e[t+11],22,-1990404162),o=a(o,s,c,d,e[t+12],7,1804603682),d=a(d,o,s,c,e[t+13],12,-40341101),c=a(c,d,o,s,e[t+14],17,-1502002290),s=a(s,c,d,o,e[t+15],22,1236535329),o=i(o,s,c,d,e[t+1],5,-165796510),d=i(d,o,s,c,e[t+6],9,-1069501632),c=i(c,d,o,s,e[t+11],14,643717713),s=i(s,c,d,o,e[t],20,-373897302),o=i(o,s,c,d,e[t+5],5,-701558691),d=i(d,o,s,c,e[t+10],9,38016083),c=i(c,d,o,s,e[t+15],14,-660478335),s=i(s,c,d,o,e[t+4],20,-405537848),o=i(o,s,c,d,e[t+9],5,568446438),d=i(d,o,s,c,e[t+14],9,-1019803690),c=i(c,d,o,s,e[t+3],14,-187363961),s=i(s,c,d,o,e[t+8],20,1163531501),o=i(o,s,c,d,e[t+13],5,-1444681467),d=i(d,o,s,c,e[t+2],9,-51403784),c=i(c,d,o,s,e[t+7],14,1735328473),s=i(s,c,d,o,e[t+12],20,-1926607734),o=l(o,s,c,d,e[t+5],4,-378558),d=l(d,o,s,c,e[t+8],11,-2022574463),c=l(c,d,o,s,e[t+11],16,1839030562),s=l(s,c,d,o,e[t+14],23,-35309556),o=l(o,s,c,d,e[t+1],4,-1530992060),d=l(d,o,s,c,e[t+4],11,1272893353),c=l(c,d,o,s,e[t+7],16,-155497632),s=l(s,c,d,o,e[t+10],23,-1094730640),o=l(o,s,c,d,e[t+13],4,681279174),d=l(d,o,s,c,e[t],11,-358537222),c=l(c,d,o,s,e[t+3],16,-722521979),s=l(s,c,d,o,e[t+6],23,76029189),o=l(o,s,c,d,e[t+9],4,-640364487),d=l(d,o,s,c,e[t+12],11,-421815835),c=l(c,d,o,s,e[t+15],16,530742520),s=l(s,c,d,o,e[t+2],23,-995338651),o=u(o,s,c,d,e[t],6,-198630844),d=u(d,o,s,c,e[t+7],10,1126891415),c=u(c,d,o,s,e[t+14],15,-1416354905),s=u(s,c,d,o,e[t+5],21,-57434055),o=u(o,s,c,d,e[t+12],6,1700485571),d=u(d,o,s,c,e[t+3],10,-1894986606),c=u(c,d,o,s,e[t+10],15,-1051523),s=u(s,c,d,o,e[t+1],21,-2054922799),o=u(o,s,c,d,e[t+8],6,1873313359),d=u(d,o,s,c,e[t+15],10,-30611744),c=u(c,d,o,s,e[t+6],15,-1560198380),s=u(s,c,d,o,e[t+13],21,1309151649),o=u(o,s,c,d,e[t+4],6,-145523070),d=u(d,o,s,c,e[t+11],10,-1120210379),c=u(c,d,o,s,e[t+2],15,718787259),s=u(s,c,d,o,e[t+9],21,-343485551),o=r(o,n),s=r(s,f),c=r(c,p),d=r(d,v)}return[o,s,c,d]}(function(e){if(0===e.length)return[];const t=8*e.length,r=new Uint32Array(n(t));for(let n=0;n<t;n+=8)r[n>>5]|=(255&e[n/8])<<n%32;return r}(e),8*e.length))}},4790:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var n={randomUUID:"undefined"!=typeof crypto&&crypto.randomUUID&&crypto.randomUUID.bind(crypto)};t.default=n},6314:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default="00000000-0000-0000-0000-000000000000"},8222:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");let t;const n=new Uint8Array(16);return n[0]=(t=parseInt(e.slice(0,8),16))>>>24,n[1]=t>>>16&255,n[2]=t>>>8&255,n[3]=255&t,n[4]=(t=parseInt(e.slice(9,13),16))>>>8,n[5]=255&t,n[6]=(t=parseInt(e.slice(14,18),16))>>>8,n[7]=255&t,n[8]=(t=parseInt(e.slice(19,23),16))>>>8,n[9]=255&t,n[10]=(t=parseInt(e.slice(24,36),16))/1099511627776&255,n[11]=t/4294967296&255,n[12]=t>>>24&255,n[13]=t>>>16&255,n[14]=t>>>8&255,n[15]=255&t,n}},58:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.default=/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i},3319:(e,t)=>{"use strict";let n;Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(){if(!n&&(n="undefined"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto),!n))throw new Error("crypto.getRandomValues() not supported. See https://github.com/uuidjs/uuid#getrandomvalues-not-supported");return n(r)};const r=new Uint8Array(16)},3757:(e,t)=>{"use strict";function n(e,t,n,r){switch(e){case 0:return t&n^~t&r;case 1:case 3:return t^n^r;case 2:return t&n^t&r^n&r}}function r(e,t){return e<<t|e>>>32-t}Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;t.default=function(e){const t=[1518500249,1859775393,2400959708,3395469782],o=[1732584193,4023233417,2562383102,271733878,3285377520];if("string"==typeof e){const t=unescape(encodeURIComponent(e));e=[];for(let n=0;n<t.length;++n)e.push(t.charCodeAt(n))}else Array.isArray(e)||(e=Array.prototype.slice.call(e));e.push(128);const a=e.length/4+2,i=Math.ceil(a/16),l=new Array(i);for(let t=0;t<i;++t){const n=new Uint32Array(16);for(let r=0;r<16;++r)n[r]=e[64*t+4*r]<<24|e[64*t+4*r+1]<<16|e[64*t+4*r+2]<<8|e[64*t+4*r+3];l[t]=n}l[i-1][14]=8*(e.length-1)/Math.pow(2,32),l[i-1][14]=Math.floor(l[i-1][14]),l[i-1][15]=8*(e.length-1)&4294967295;for(let e=0;e<i;++e){const a=new Uint32Array(80);for(let t=0;t<16;++t)a[t]=l[e][t];for(let e=16;e<80;++e)a[e]=r(a[e-3]^a[e-8]^a[e-14]^a[e-16],1);let i=o[0],u=o[1],s=o[2],c=o[3],d=o[4];for(let e=0;e<80;++e){const o=Math.floor(e/20),l=r(i,5)+n(o,u,s,c)+d+t[o]+a[e]>>>0;d=c,c=s,s=r(u,30)>>>0,u=i,i=l}o[0]=o[0]+i>>>0,o[1]=o[1]+u>>>0,o[2]=o[2]+s>>>0,o[3]=o[3]+c>>>0,o[4]=o[4]+d>>>0}return[o[0]>>24&255,o[0]>>16&255,o[0]>>8&255,255&o[0],o[1]>>24&255,o[1]>>16&255,o[1]>>8&255,255&o[1],o[2]>>24&255,o[2]>>16&255,o[2]>>8&255,255&o[2],o[3]>>24&255,o[3]>>16&255,o[3]>>8&255,255&o[3],o[4]>>24&255,o[4]>>16&255,o[4]>>8&255,255&o[4]]}},4008:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0,t.unsafeStringify=i;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};const a=[];for(let e=0;e<256;++e)a.push((e+256).toString(16).slice(1));function i(e,t=0){return(a[e[t+0]]+a[e[t+1]]+a[e[t+2]]+a[e[t+3]]+"-"+a[e[t+4]]+a[e[t+5]]+"-"+a[e[t+6]]+a[e[t+7]]+"-"+a[e[t+8]]+a[e[t+9]]+"-"+a[e[t+10]]+a[e[t+11]]+a[e[t+12]]+a[e[t+13]]+a[e[t+14]]+a[e[t+15]]).toLowerCase()}t.default=function(e,t=0){const n=i(e,t);if(!(0,o.default)(n))throw TypeError("Stringified UUID is invalid");return n}},3990:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(3319))&&r.__esModule?r:{default:r},a=n(4008);let i,l,u=0,s=0;t.default=function(e,t,n){let r=t&&n||0;const c=t||new Array(16);let d=(e=e||{}).node||i,f=void 0!==e.clockseq?e.clockseq:l;if(null==d||null==f){const t=e.random||(e.rng||o.default)();null==d&&(d=i=[1|t[0],t[1],t[2],t[3],t[4],t[5]]),null==f&&(f=l=16383&(t[6]<<8|t[7]))}let p=void 0!==e.msecs?e.msecs:Date.now(),v=void 0!==e.nsecs?e.nsecs:s+1;const h=p-u+(v-s)/1e4;if(h<0&&void 0===e.clockseq&&(f=f+1&16383),(h<0||p>u)&&void 0===e.nsecs&&(v=0),v>=1e4)throw new Error("uuid.v1(): Can't create more than 10M uuids/sec");u=p,s=v,l=f,p+=122192928e5;const m=(1e4*(268435455&p)+v)%4294967296;c[r++]=m>>>24&255,c[r++]=m>>>16&255,c[r++]=m>>>8&255,c[r++]=255&m;const g=p/4294967296*1e4&268435455;c[r++]=g>>>8&255,c[r++]=255&g,c[r++]=g>>>24&15|16,c[r++]=g>>>16&255,c[r++]=f>>>8|128,c[r++]=255&f;for(let e=0;e<6;++e)c[r+e]=d[e];return t||(0,a.unsafeStringify)(c)}},8237:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(4163));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v3",48,o.default);t.default=i},7925:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.URL=t.DNS=void 0,t.default=function(e,t,n){function r(e,r,i,l){var u;if("string"==typeof e&&(e=function(e){e=unescape(encodeURIComponent(e));const t=[];for(let n=0;n<e.length;++n)t.push(e.charCodeAt(n));return t}(e)),"string"==typeof r&&(r=(0,a.default)(r)),16!==(null===(u=r)||void 0===u?void 0:u.length))throw TypeError("Namespace must be array-like (16 iterable integer values, 0-255)");let s=new Uint8Array(16+e.length);if(s.set(r),s.set(e,r.length),s=n(s),s[6]=15&s[6]|t,s[8]=63&s[8]|128,i){l=l||0;for(let e=0;e<16;++e)i[l+e]=s[e];return i}return(0,o.unsafeStringify)(s)}try{r.name=e}catch(e){}return r.DNS=i,r.URL=l,r};var r,o=n(4008),a=(r=n(8222))&&r.__esModule?r:{default:r};const i="6ba7b810-9dad-11d1-80b4-00c04fd430c8";t.DNS=i;const l="6ba7b811-9dad-11d1-80b4-00c04fd430c8";t.URL=l},5355:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=i(n(4790)),o=i(n(3319)),a=n(4008);function i(e){return e&&e.__esModule?e:{default:e}}t.default=function(e,t,n){if(r.default.randomUUID&&!t&&!e)return r.default.randomUUID();const i=(e=e||{}).random||(e.rng||o.default)();if(i[6]=15&i[6]|64,i[8]=63&i[8]|128,t){n=n||0;for(let e=0;e<16;++e)t[n+e]=i[e];return t}return(0,a.unsafeStringify)(i)}},3764:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r=a(n(7925)),o=a(n(3757));function a(e){return e&&e.__esModule?e:{default:e}}var i=(0,r.default)("v5",80,o.default);t.default=i},6435:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(58))&&r.__esModule?r:{default:r};t.default=function(e){return"string"==typeof e&&o.default.test(e)}},8464:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=void 0;var r,o=(r=n(6435))&&r.__esModule?r:{default:r};t.default=function(e){if(!(0,o.default)(e))throw TypeError("Invalid UUID");return parseInt(e.slice(14,15),16)}},6689:e=>{"use strict";e.exports=require("react")},6405:e=>{"use strict";e.exports=require("react-dom")}},t={};function n(r){var o=t[r];if(void 0!==o)return o.exports;var a=t[r]={exports:{}};return e[r].call(a.exports,a,a.exports,n),a.exports}n.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return n.d(t,{a:t}),t},n.d=(e,t)=>{for(var r in t)n.o(t,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},n.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})};var r=n(3607),o=exports;for(var a in r)o[a]=r[a];r.__esModule&&Object.defineProperty(o,"__esModule",{value:!0})})();
3
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,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Z1IsRUFBU2d1QyxLQUNqQyxJQUFJLElBQUkxZ0QsS0FBTzBnRCxFQUNYTCxFQUFvQjM5QyxFQUFFZytDLEVBQVkxZ0QsS0FBU3FnRCxFQUFvQjM5QyxFQUFFZ1EsRUFBUzFTLElBQzVFUCxPQUFPcVIsZUFBZTRCLEVBQVMxUyxFQUFLLENBQUVxUyxZQUFZLEVBQU0vSyxJQUFLbzVDLEVBQVcxZ0QsSUFFMUUsRUNORHFnRCxFQUFvQjM5QyxFQUFJLENBQUNrUCxFQUFLa1ksSUFBVXJxQixPQUFPUSxVQUFVQyxlQUFlQyxLQUFLeVIsRUFBS2tZLEdDQ2xGdTJCLEVBQW9CdDlDLEVBQUsyUCxJQUNILG9CQUFYN1AsUUFBMEJBLE9BQU84OUMsYUFDMUNsaEQsT0FBT3FSLGVBQWU0QixFQUFTN1AsT0FBTzg5QyxZQUFhLENBQUV0OUMsTUFBTyxXQUU3RDVELE9BQU9xUixlQUFlNEIsRUFBUyxhQUFjLENBQUVyUCxPQUFPLEdBQU8sRUNGOUQsSUFBSXU5QyxFQUFzQlAsRUFBb0IiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc3Znci9jaGVjay1tYXJrLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZU91dHNpZGVDbGljay91c2VPdXRzaWRlQ2xpY2suanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlUHJvbWlzZS91c2VQcm9taXNlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9faW50ZXJuYWwvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvc3dyL2NvcmUvZGlzdC9pbmRleC5tanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VTV1JIb29rc0NvbmZpZy91c2VTV1JIb29rc0NvbmZpZy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVRvZ2dsZS91c2VUb2dnbGUuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvY2xhc3NjYXQvc3JjL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL0J1dHRvbi5tb2R1bGUuY3NzP2ZmMWIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25CYWRnZS9CdXR0b25CYWRnZS5tb2R1bGUuY3NzPzQzMjgiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsubW9kdWxlLmNzcz9jMGI2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ2hlY2tib3gvQ2hlY2tib3gubW9kdWxlLmNzcz9mZjJmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIubW9kdWxlLmNzcz84NzE5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gubW9kdWxlLmNzcz9mY2UyIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWwvQ29uZmlybWF0aW9uTW9kYWwubW9kdWxlLmNzcz9hOGFlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlci5tb2R1bGUuY3NzPzkyOWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyQ29udGVudC9EcmF3ZXJDb250ZW50Lm1vZHVsZS5jc3M/YmEwYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJGb290ZXIvRHJhd2VyRm9vdGVyLm1vZHVsZS5jc3M/YmJlMCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJIZWFkZXIvRHJhd2VySGVhZGVyLm1vZHVsZS5jc3M/YWRiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS5tb2R1bGUuY3NzPzdhMGQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/ZDU1NyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzA5OWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24ubW9kdWxlLmNzcz8xY2FjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/NTk2ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/MmM0NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLm1vZHVsZS5jc3M/ZjEwZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLm1vZHVsZS5jc3M/NDY5ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/M2NkNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzP2RmZmEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8xOTBhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/Y2QzNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0ubW9kdWxlLmNzcz9hYWNlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz9iNWRiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwubW9kdWxlLmNzcz84YTg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzY1YmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8zNzE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3M/NGRiNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLm1vZHVsZS5jc3M/YjY3NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L09wdGlvbkxpc3QubW9kdWxlLmNzcz80OWFjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gubW9kdWxlLmNzcz9lZDQzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5tb2R1bGUuY3NzPzFlNzkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvU2VsZWN0b3IubW9kdWxlLmNzcz85YWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz85M2E5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIubW9kdWxlLmNzcz83MGRmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3M/MWQwYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/Yjk1NSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzP2RhNWEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLm1vZHVsZS5jc3M/OGYzNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZ3NJbnB1dC9UYWdzSW5wdXQubW9kdWxlLmNzcz84ZmQxIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L1RleHRJbnB1dC5tb2R1bGUuY3NzPzNmMWYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdC5tb2R1bGUuY3NzPzU4ODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub2FzdC9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzP2VjODYiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ub29sdGlwL1Rvb2x0aXAubW9kdWxlLmNzcz8wNmFkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8ubW9kdWxlLmNzcz9lZGE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL2luZGV4LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LWF1dG9jb21wbGV0ZS1oaW50L2Rpc3Qvc3JjL3V0aWxzLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9yZW1vdmVDbGFzcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9jb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS91dGlscy9yZWZsb3cuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9DU1NUcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2RvbS1oZWxwZXJzL2VzbS9hZGRDbGFzcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9kb20taGVscGVycy9lc20vaGFzQ2xhc3MuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3QtdHJhbnNpdGlvbi1ncm91cC9lc20vdXRpbHMvQ2hpbGRNYXBwaW5nLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvZXNtL1RyYW5zaXRpb25Hcm91cC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9SZXBsYWNlVHJhbnNpdGlvbi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2VzbS9Td2l0Y2hUcmFuc2l0aW9uLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvbWVtb2l6ZS1vbmUvZGlzdC9tZW1vaXplLW9uZS5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvcmVhY3Qtd2luZG93L2Rpc3QvaW5kZXguZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3Njcm9sbHBhcmVudC9zY3JvbGxwYXJlbnQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b24vQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL0J1dHRvbkJhZGdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkJhZGdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbkxpbmsvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9DaGVja2JveC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9DaGVja2JveC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvQ29sb3JTd2F0Y2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2gvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9Db25maXJtYXRpb25Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db25maXJtYXRpb25Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9Db250ZXh0LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvRHJhd2VyQ29udGVudC9EcmF3ZXJDb250ZW50LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJDb250ZW50L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckZvb3Rlci9EcmF3ZXJGb290ZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJhd2VyL0RyYXdlckZvb3Rlci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJIZWFkZXIvRHJhd2VySGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0RyYXdlci9EcmF3ZXJIZWFkZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9EcmF3ZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Ecm9wZG93bi9DbGlja2FibGUudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vRHJvcGRvd24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ZpbGVJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbi9JY29uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uL0ljb25CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvSW1hZ2UudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSW1hZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MYWJlbC9MYWJlbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MYWJlbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0xpbmtJdGVtLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUNvbnRhaW5lci50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVJdGVtLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUxpbmtJdGVtLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9Nb2RhbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Nb2RhbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9OdW1wYWQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvT3ZlcmxheS9PdmVybGF5LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvR3JvdXBPcHRpb24vR3JvdXBPcHRpb24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbi9PcHRpb24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L09wdGlvbkxpc3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L09wdGlvbkxpc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VhcmNoL1NlYXJjaC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VhcmNoL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0Q29udGV4dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvU2VsZWN0b3IudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXJDZWxsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Q2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9UYWcudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFnc0lucHV0L1RhZ3NJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWdzSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UZXh0SW5wdXQvVGV4dElucHV0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L1RvYXN0Q29udGFpbmVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RvYXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9vbHRpcC9Ub29sdGlwLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1Rvb2x0aXAvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb25zdGFudHMvVGFibGUudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL3R5cGVzL3RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2FyZXQtdXAuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2Nsb3NlLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9jcm9zc2VkLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zZWFyY2guc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2ZyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL2Fzc2V0cy9zcGlubmVyLWNpcmNsZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9tZDUuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvbmF0aXZlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL25pbC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9wYXJzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9yZWdleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9ybmcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvc2hhMS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy91dWlkL2Rpc3QvY29tbW9uanMtYnJvd3Nlci9zdHJpbmdpZnkuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjEuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjMuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXVpZC9kaXN0L2NvbW1vbmpzLWJyb3dzZXIvdjM1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y0LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3Y1LmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZhbGlkYXRlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3V1aWQvZGlzdC9jb21tb25qcy1icm93c2VyL3ZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL2V4dGVybmFsIGNvbW1vbmpzIFwicmVhY3QtZG9tXCIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfZXh0ZW5kcygpIHtcbiAgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uICh0YXJnZXQpIHtcbiAgICBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIHNvdXJjZSA9IGFyZ3VtZW50c1tpXTtcblxuICAgICAgZm9yICh2YXIga2V5IGluIHNvdXJjZSkge1xuICAgICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHNvdXJjZSwga2V5KSkge1xuICAgICAgICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdGFyZ2V0O1xuICB9O1xuXG4gIHJldHVybiBfZXh0ZW5kcy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJ2YXIgX3BhdGg7XG5mdW5jdGlvbiBfZXh0ZW5kcygpIHsgX2V4dGVuZHMgPSBPYmplY3QuYXNzaWduID8gT2JqZWN0LmFzc2lnbi5iaW5kKCkgOiBmdW5jdGlvbiAodGFyZ2V0KSB7IGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7IHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07IGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHsgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHsgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTsgfSB9IH0gcmV0dXJuIHRhcmdldDsgfTsgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7IH1cbmltcG9ydCAqIGFzIFJlYWN0IGZyb20gXCJyZWFjdFwiO1xudmFyIFN2Z0NoZWNrTWFyayA9IGZ1bmN0aW9uIFN2Z0NoZWNrTWFyayhwcm9wcykge1xuICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoXCJzdmdcIiwgX2V4dGVuZHMoe1xuICAgIHhtbG5zOiBcImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCIsXG4gICAgd2lkdGg6IDE1LFxuICAgIGhlaWdodDogMTUsXG4gICAgZmlsbDogXCJub25lXCJcbiAgfSwgcHJvcHMpLCBfcGF0aCB8fCAoX3BhdGggPSAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChcInBhdGhcIiwge1xuICAgIHN0cm9rZTogXCJjdXJyZW50Q29sb3JcIixcbiAgICBzdHJva2VMaW5lY2FwOiBcInNxdWFyZVwiLFxuICAgIGQ6IFwibTEgNyA0LjUgNC41TDE0IDNcIlxuICB9KSkpO1xufTtcbmV4cG9ydCBkZWZhdWx0IFN2Z0NoZWNrTWFyazsiLCJpbXBvcnQgeyB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xudmFyIG9wdGlvbnMgPSB7XG4gICAgY2FwdHVyZTogdHJ1ZSxcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VPdXRzaWRlQ2xpY2soY2FsbGJhY2spIHtcbiAgICB2YXIgcmVmID0gdXNlUmVmKCk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGhhbmRsZUNsaWNrID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgICAgICBpZiAoIXJlZi5jdXJyZW50IHx8IHJlZi5jdXJyZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgICAgIH07XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJtb3VzZXVwXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIH07XG4gICAgfSwgW2NhbGxiYWNrXSk7XG4gICAgcmV0dXJuIHJlZjtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZU91dHNpZGVDbGljay5qcy5tYXAiLCIvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXHJcbkNvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLlxyXG5cclxuUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55XHJcbnB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZC5cclxuXHJcblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEhcclxuUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZXHJcbkFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCxcclxuSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NXHJcbkxPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SXHJcbk9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1JcclxuUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS5cclxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi9cclxuLyogZ2xvYmFsIFJlZmxlY3QsIFByb21pc2UgKi9cclxuXHJcbnZhciBleHRlbmRTdGF0aWNzID0gZnVuY3Rpb24oZCwgYikge1xyXG4gICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fFxyXG4gICAgICAgICh7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uIChkLCBiKSB7IGQuX19wcm90b19fID0gYjsgfSkgfHxcclxuICAgICAgICBmdW5jdGlvbiAoZCwgYikgeyBmb3IgKHZhciBwIGluIGIpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoYiwgcCkpIGRbcF0gPSBiW3BdOyB9O1xyXG4gICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHRlbmRzKGQsIGIpIHtcclxuICAgIGlmICh0eXBlb2YgYiAhPT0gXCJmdW5jdGlvblwiICYmIGIgIT09IG51bGwpXHJcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNsYXNzIGV4dGVuZHMgdmFsdWUgXCIgKyBTdHJpbmcoYikgKyBcIiBpcyBub3QgYSBjb25zdHJ1Y3RvciBvciBudWxsXCIpO1xyXG4gICAgZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxuICAgIGZ1bmN0aW9uIF9fKCkgeyB0aGlzLmNvbnN0cnVjdG9yID0gZDsgfVxyXG4gICAgZC5wcm90b3R5cGUgPSBiID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiKSA6IChfXy5wcm90b3R5cGUgPSBiLnByb3RvdHlwZSwgbmV3IF9fKCkpO1xyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fYXNzaWduID0gZnVuY3Rpb24oKSB7XHJcbiAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24odCkge1xyXG4gICAgICAgIGZvciAodmFyIHMsIGkgPSAxLCBuID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IG47IGkrKykge1xyXG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkpIHRbcF0gPSBzW3BdO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdDtcclxuICAgIH1cclxuICAgIHJldHVybiBfX2Fzc2lnbi5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZXN0KHMsIGUpIHtcclxuICAgIHZhciB0ID0ge307XHJcbiAgICBmb3IgKHZhciBwIGluIHMpIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocywgcCkgJiYgZS5pbmRleE9mKHApIDwgMClcclxuICAgICAgICB0W3BdID0gc1twXTtcclxuICAgIGlmIChzICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09IFwiZnVuY3Rpb25cIilcclxuICAgICAgICBmb3IgKHZhciBpID0gMCwgcCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocyk7IGkgPCBwLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChlLmluZGV4T2YocFtpXSkgPCAwICYmIE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGUuY2FsbChzLCBwW2ldKSlcclxuICAgICAgICAgICAgICAgIHRbcFtpXV0gPSBzW3BbaV1dO1xyXG4gICAgICAgIH1cclxuICAgIHJldHVybiB0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYykge1xyXG4gICAgdmFyIGMgPSBhcmd1bWVudHMubGVuZ3RoLCByID0gYyA8IDMgPyB0YXJnZXQgOiBkZXNjID09PSBudWxsID8gZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIDogZGVzYywgZDtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5kZWNvcmF0ZSA9PT0gXCJmdW5jdGlvblwiKSByID0gUmVmbGVjdC5kZWNvcmF0ZShkZWNvcmF0b3JzLCB0YXJnZXQsIGtleSwgZGVzYyk7XHJcbiAgICBlbHNlIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSBpZiAoZCA9IGRlY29yYXRvcnNbaV0pIHIgPSAoYyA8IDMgPyBkKHIpIDogYyA+IDMgPyBkKHRhcmdldCwga2V5LCByKSA6IGQodGFyZ2V0LCBrZXkpKSB8fCByO1xyXG4gICAgcmV0dXJuIGMgPiAzICYmIHIgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCByKSwgcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcGFyYW0ocGFyYW1JbmRleCwgZGVjb3JhdG9yKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKHRhcmdldCwga2V5KSB7IGRlY29yYXRvcih0YXJnZXQsIGtleSwgcGFyYW1JbmRleCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykge1xyXG4gICAgZnVuY3Rpb24gYWNjZXB0KGYpIHsgaWYgKGYgIT09IHZvaWQgMCAmJiB0eXBlb2YgZiAhPT0gXCJmdW5jdGlvblwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVuY3Rpb24gZXhwZWN0ZWRcIik7IHJldHVybiBmOyB9XHJcbiAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkgPSBraW5kID09PSBcImdldHRlclwiID8gXCJnZXRcIiA6IGtpbmQgPT09IFwic2V0dGVyXCIgPyBcInNldFwiIDogXCJ2YWx1ZVwiO1xyXG4gICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJbltcInN0YXRpY1wiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7XHJcbiAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTtcclxuICAgIHZhciBfLCBkb25lID0gZmFsc2U7XHJcbiAgICBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgIHZhciBjb250ZXh0ID0ge307XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4pIGNvbnRleHRbcF0gPSBwID09PSBcImFjY2Vzc1wiID8ge30gOiBjb250ZXh0SW5bcF07XHJcbiAgICAgICAgZm9yICh2YXIgcCBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0LmFjY2Vzc1twXSA9IGNvbnRleHRJbi5hY2Nlc3NbcF07XHJcbiAgICAgICAgY29udGV4dC5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uIChmKSB7IGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkXCIpOyBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmIHx8IG51bGwpKTsgfTtcclxuICAgICAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaV0pKGtpbmQgPT09IFwiYWNjZXNzb3JcIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXldLCBjb250ZXh0KTtcclxuICAgICAgICBpZiAoa2luZCA9PT0gXCJhY2Nlc3NvclwiKSB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gXCJvYmplY3RcIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIk9iamVjdCBleHBlY3RlZFwiKTtcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXztcclxuICAgICAgICAgICAgaWYgKF8gPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoXyA9IGFjY2VwdChyZXN1bHQpKSB7XHJcbiAgICAgICAgICAgIGlmIChraW5kID09PSBcImZpZWxkXCIpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5XSA9IF87XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpO1xyXG4gICAgZG9uZSA9IHRydWU7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnModGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZSkge1xyXG4gICAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgIHZhbHVlID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnLCB2YWx1ZSkgOiBpbml0aWFsaXplcnNbaV0uY2FsbCh0aGlzQXJnKTtcclxuICAgIH1cclxuICAgIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlIDogdm9pZCAwO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcHJvcEtleSh4KSB7XHJcbiAgICByZXR1cm4gdHlwZW9mIHggPT09IFwic3ltYm9sXCIgPyB4IDogXCJcIi5jb25jYXQoeCk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zZXRGdW5jdGlvbk5hbWUoZiwgbmFtZSwgcHJlZml4KSB7XHJcbiAgICBpZiAodHlwZW9mIG5hbWUgPT09IFwic3ltYm9sXCIpIG5hbWUgPSBuYW1lLmRlc2NyaXB0aW9uID8gXCJbXCIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sIFwiXVwiKSA6IFwiXCI7XHJcbiAgICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIFwibmFtZVwiLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IHByZWZpeCA/IFwiXCIuY29uY2F0KHByZWZpeCwgXCIgXCIsIG5hbWUpIDogbmFtZSB9KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QubWV0YWRhdGEgPT09IFwiZnVuY3Rpb25cIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdGVyKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xyXG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XHJcbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcclxuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XHJcbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cclxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZ2VuZXJhdG9yKHRoaXNBcmcsIGJvZHkpIHtcclxuICAgIHZhciBfID0geyBsYWJlbDogMCwgc2VudDogZnVuY3Rpb24oKSB7IGlmICh0WzBdICYgMSkgdGhyb3cgdFsxXTsgcmV0dXJuIHRbMV07IH0sIHRyeXM6IFtdLCBvcHM6IFtdIH0sIGYsIHksIHQsIGc7XHJcbiAgICByZXR1cm4gZyA9IHsgbmV4dDogdmVyYigwKSwgXCJ0aHJvd1wiOiB2ZXJiKDEpLCBcInJldHVyblwiOiB2ZXJiKDIpIH0sIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiAoZ1tTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7IHJldHVybiB0aGlzOyB9KSwgZztcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyByZXR1cm4gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIHN0ZXAoW24sIHZdKTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc3RlcChvcCkge1xyXG4gICAgICAgIGlmIChmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLlwiKTtcclxuICAgICAgICB3aGlsZSAoZyAmJiAoZyA9IDAsIG9wWzBdICYmIChfID0gMCkpLCBfKSB0cnkge1xyXG4gICAgICAgICAgICBpZiAoZiA9IDEsIHkgJiYgKHQgPSBvcFswXSAmIDIgPyB5W1wicmV0dXJuXCJdIDogb3BbMF0gPyB5W1widGhyb3dcIl0gfHwgKCh0ID0geVtcInJldHVyblwiXSkgJiYgdC5jYWxsKHkpLCAwKSA6IHkubmV4dCkgJiYgISh0ID0gdC5jYWxsKHksIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ7XHJcbiAgICAgICAgICAgIGlmICh5ID0gMCwgdCkgb3AgPSBbb3BbMF0gJiAyLCB0LnZhbHVlXTtcclxuICAgICAgICAgICAgc3dpdGNoIChvcFswXSkge1xyXG4gICAgICAgICAgICAgICAgY2FzZSAwOiBjYXNlIDE6IHQgPSBvcDsgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDQ6IF8ubGFiZWwrKzsgcmV0dXJuIHsgdmFsdWU6IG9wWzFdLCBkb25lOiBmYWxzZSB9O1xyXG4gICAgICAgICAgICAgICAgY2FzZSA1OiBfLmxhYmVsKys7IHkgPSBvcFsxXTsgb3AgPSBbMF07IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA3OiBvcCA9IF8ub3BzLnBvcCgpOyBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICBpZiAoISh0ID0gXy50cnlzLCB0ID0gdC5sZW5ndGggPiAwICYmIHRbdC5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgeyBfID0gMDsgY29udGludWU7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDMgJiYgKCF0IHx8IChvcFsxXSA+IHRbMF0gJiYgb3BbMV0gPCB0WzNdKSkpIHsgXy5sYWJlbCA9IG9wWzFdOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfLmxhYmVsIDwgdFsxXSkgeyBfLmxhYmVsID0gdFsxXTsgdCA9IG9wOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0ICYmIF8ubGFiZWwgPCB0WzJdKSB7IF8ubGFiZWwgPSB0WzJdOyBfLm9wcy5wdXNoKG9wKTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodFsyXSkgXy5vcHMucG9wKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBvcCA9IGJvZHkuY2FsbCh0aGlzQXJnLCBfKTtcclxuICAgICAgICB9IGNhdGNoIChlKSB7IG9wID0gWzYsIGVdOyB5ID0gMDsgfSBmaW5hbGx5IHsgZiA9IHQgPSAwOyB9XHJcbiAgICAgICAgaWYgKG9wWzBdICYgNSkgdGhyb3cgb3BbMV07IHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07XHJcbiAgICB9XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtLCBrKTtcclxuICAgIGlmICghZGVzYyB8fCAoXCJnZXRcIiBpbiBkZXNjID8gIW0uX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7XHJcbiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsgcmV0dXJuIG1ba107IH0gfTtcclxuICAgIH1cclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBrMiwgZGVzYyk7XHJcbn0pIDogKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgb1trMl0gPSBtW2tdO1xyXG59KTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4cG9ydFN0YXIobSwgbykge1xyXG4gICAgZm9yICh2YXIgcCBpbiBtKSBpZiAocCAhPT0gXCJkZWZhdWx0XCIgJiYgIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvLCBwKSkgX19jcmVhdGVCaW5kaW5nKG8sIG0sIHApO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX192YWx1ZXMobykge1xyXG4gICAgdmFyIHMgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgU3ltYm9sLml0ZXJhdG9yLCBtID0gcyAmJiBvW3NdLCBpID0gMDtcclxuICAgIGlmIChtKSByZXR1cm4gbS5jYWxsKG8pO1xyXG4gICAgaWYgKG8gJiYgdHlwZW9mIG8ubGVuZ3RoID09PSBcIm51bWJlclwiKSByZXR1cm4ge1xyXG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgaWYgKG8gJiYgaSA+PSBvLmxlbmd0aCkgbyA9IHZvaWQgMDtcclxuICAgICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG8gJiYgb1tpKytdLCBkb25lOiAhbyB9O1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHMgPyBcIk9iamVjdCBpcyBub3QgaXRlcmFibGUuXCIgOiBcIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3JlYWQobywgbikge1xyXG4gICAgdmFyIG0gPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgb1tTeW1ib2wuaXRlcmF0b3JdO1xyXG4gICAgaWYgKCFtKSByZXR1cm4gbztcclxuICAgIHZhciBpID0gbS5jYWxsKG8pLCByLCBhciA9IFtdLCBlO1xyXG4gICAgdHJ5IHtcclxuICAgICAgICB3aGlsZSAoKG4gPT09IHZvaWQgMCB8fCBuLS0gPiAwKSAmJiAhKHIgPSBpLm5leHQoKSkuZG9uZSkgYXIucHVzaChyLnZhbHVlKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikgeyBlID0geyBlcnJvcjogZXJyb3IgfTsgfVxyXG4gICAgZmluYWxseSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKHIgJiYgIXIuZG9uZSAmJiAobSA9IGlbXCJyZXR1cm5cIl0pKSBtLmNhbGwoaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZpbmFsbHkgeyBpZiAoZSkgdGhyb3cgZS5lcnJvcjsgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkKCkge1xyXG4gICAgZm9yICh2YXIgYXIgPSBbXSwgaSA9IDA7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspXHJcbiAgICAgICAgYXIgPSBhci5jb25jYXQoX19yZWFkKGFyZ3VtZW50c1tpXSkpO1xyXG4gICAgcmV0dXJuIGFyO1xyXG59XHJcblxyXG4vKiogQGRlcHJlY2F0ZWQgKi9cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXlzKCkge1xyXG4gICAgZm9yICh2YXIgcyA9IDAsIGkgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBpbDsgaSsrKSBzICs9IGFyZ3VtZW50c1tpXS5sZW5ndGg7XHJcbiAgICBmb3IgKHZhciByID0gQXJyYXkocyksIGsgPSAwLCBpID0gMDsgaSA8IGlsOyBpKyspXHJcbiAgICAgICAgZm9yICh2YXIgYSA9IGFyZ3VtZW50c1tpXSwgaiA9IDAsIGpsID0gYS5sZW5ndGg7IGogPCBqbDsgaisrLCBrKyspXHJcbiAgICAgICAgICAgIHJba10gPSBhW2pdO1xyXG4gICAgcmV0dXJuIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5KHRvLCBmcm9tLCBwYWNrKSB7XHJcbiAgICBpZiAocGFjayB8fCBhcmd1bWVudHMubGVuZ3RoID09PSAyKSBmb3IgKHZhciBpID0gMCwgbCA9IGZyb20ubGVuZ3RoLCBhcjsgaSA8IGw7IGkrKykge1xyXG4gICAgICAgIGlmIChhciB8fCAhKGkgaW4gZnJvbSkpIHtcclxuICAgICAgICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tLCAwLCBpKTtcclxuICAgICAgICAgICAgYXJbaV0gPSBmcm9tW2ldO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0by5jb25jYXQoYXIgfHwgQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSkpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hd2FpdCh2KSB7XHJcbiAgICByZXR1cm4gdGhpcyBpbnN0YW5jZW9mIF9fYXdhaXQgPyAodGhpcy52ID0gdiwgdGhpcykgOiBuZXcgX19hd2FpdCh2KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNHZW5lcmF0b3IodGhpc0FyZywgX2FyZ3VtZW50cywgZ2VuZXJhdG9yKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIGcgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGksIHEgPSBbXTtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpZiAoZ1tuXSkgaVtuXSA9IGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAoYSwgYikgeyBxLnB1c2goW24sIHYsIGEsIGJdKSA+IDEgfHwgcmVzdW1lKG4sIHYpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gcmVzdW1lKG4sIHYpIHsgdHJ5IHsgc3RlcChnW25dKHYpKTsgfSBjYXRjaCAoZSkgeyBzZXR0bGUocVswXVszXSwgZSk7IH0gfVxyXG4gICAgZnVuY3Rpb24gc3RlcChyKSB7IHIudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIudmFsdWUudikudGhlbihmdWxmaWxsLCByZWplY3QpIDogc2V0dGxlKHFbMF1bMl0sIHIpOyB9XHJcbiAgICBmdW5jdGlvbiBmdWxmaWxsKHZhbHVlKSB7IHJlc3VtZShcIm5leHRcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiByZWplY3QodmFsdWUpIHsgcmVzdW1lKFwidGhyb3dcIiwgdmFsdWUpOyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUoZiwgdikgeyBpZiAoZih2KSwgcS5zaGlmdCgpLCBxLmxlbmd0aCkgcmVzdW1lKHFbMF1bMF0sIHFbMF1bMV0pOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jRGVsZWdhdG9yKG8pIHtcclxuICAgIHZhciBpLCBwO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiLCBmdW5jdGlvbiAoZSkgeyB0aHJvdyBlOyB9KSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobiwgZikgeyBpW25dID0gb1tuXSA/IGZ1bmN0aW9uICh2KSB7IHJldHVybiAocCA9ICFwKSA/IHsgdmFsdWU6IF9fYXdhaXQob1tuXSh2KSksIGRvbmU6IGZhbHNlIH0gOiBmID8gZih2KSA6IHY7IH0gOiBmOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8pIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgbSA9IG9bU3ltYm9sLmFzeW5jSXRlcmF0b3JdLCBpO1xyXG4gICAgcmV0dXJuIG0gPyBtLmNhbGwobykgOiAobyA9IHR5cGVvZiBfX3ZhbHVlcyA9PT0gXCJmdW5jdGlvblwiID8gX192YWx1ZXMobykgOiBvW1N5bWJvbC5pdGVyYXRvcl0oKSwgaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGkpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlbbl0gPSBvW25dICYmIGZ1bmN0aW9uICh2KSB7IHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7IHYgPSBvW25dKHYpLCBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCB2LmRvbmUsIHYudmFsdWUpOyB9KTsgfTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgZCwgdikgeyBQcm9taXNlLnJlc29sdmUodikudGhlbihmdW5jdGlvbih2KSB7IHJlc29sdmUoeyB2YWx1ZTogdiwgZG9uZTogZCB9KTsgfSwgcmVqZWN0KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tYWtlVGVtcGxhdGVPYmplY3QoY29va2VkLCByYXcpIHtcclxuICAgIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNvb2tlZCwgXCJyYXdcIiwgeyB2YWx1ZTogcmF3IH0pOyB9IGVsc2UgeyBjb29rZWQucmF3ID0gcmF3OyB9XHJcbiAgICByZXR1cm4gY29va2VkO1xyXG59O1xyXG5cclxudmFyIF9fc2V0TW9kdWxlRGVmYXVsdCA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIFwiZGVmYXVsdFwiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2IH0pO1xyXG59KSA6IGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7XHJcbiAgICBpZiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSByZXR1cm4gbW9kO1xyXG4gICAgdmFyIHJlc3VsdCA9IHt9O1xyXG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChtb2QsIGspKSBfX2NyZWF0ZUJpbmRpbmcocmVzdWx0LCBtb2QsIGspO1xyXG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcclxuICAgIHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2ltcG9ydERlZmF1bHQobW9kKSB7XHJcbiAgICByZXR1cm4gKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgPyBtb2QgOiB7IGRlZmF1bHQ6IG1vZCB9O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEdldChyZWNlaXZlciwgc3RhdGUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIGdldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHJlYWQgcHJpdmF0ZSBtZW1iZXIgZnJvbSBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIGtpbmQgPT09IFwibVwiID8gZiA6IGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyKSA6IGYgPyBmLnZhbHVlIDogc3RhdGUuZ2V0KHJlY2VpdmVyKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRTZXQocmVjZWl2ZXIsIHN0YXRlLCB2YWx1ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwibVwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBtZXRob2QgaXMgbm90IHdyaXRhYmxlXCIpO1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgc2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiAoa2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIsIHZhbHVlKSA6IGYgPyBmLnZhbHVlID0gdmFsdWUgOiBzdGF0ZS5zZXQocmVjZWl2ZXIsIHZhbHVlKSksIHZhbHVlO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlLCByZWNlaXZlcikge1xyXG4gICAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8ICh0eXBlb2YgcmVjZWl2ZXIgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSBcImZ1bmN0aW9uXCIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHVzZSAnaW4nIG9wZXJhdG9yIG9uIG5vbi1vYmplY3RcIik7XHJcbiAgICByZXR1cm4gdHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciA9PT0gc3RhdGUgOiBzdGF0ZS5oYXMocmVjZWl2ZXIpO1xyXG59XHJcbiIsImltcG9ydCB7IF9fYXdhaXRlciwgX19nZW5lcmF0b3IsIF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlU3RhdGUsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlUHJvbWlzZSgpIHtcbiAgICB2YXIgX3RoaXMgPSB0aGlzO1xuICAgIHZhciBfYSA9IF9fcmVhZCh1c2VTdGF0ZSh7XG4gICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgIH0pLCAyKSwgcmVzdWx0ID0gX2FbMF0sIHNldFJlc3VsdCA9IF9hWzFdO1xuICAgIC8vIFdlIG5lZWQgdG8ga2VlcCB0cmFjayBpZiB0aGUgY29tcG9uZW50IGhhcyBiZWVuIHVubW91bnRlZFxuICAgIC8vIHdoaWxlIHRoZSBwcm9taXNlIHdhcyBzdGlsbCBwZW5kaW5nIHRvIGF2b2lkIHNldHRpbmcgc3RhdGVcbiAgICAvLyBvbiBhbiB1bm1vdW50ZWQgY29tcG9uZW50LlxuICAgIHZhciBoYXNVbm1vdW50ZWQgPSB1c2VSZWYoZmFsc2UpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IHRydWU7XG4gICAgICAgIH07XG4gICAgfSwgW10pO1xuICAgIHZhciBkaXNwYXRjaCA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChwcm9taXNlKSB7IHJldHVybiBfX2F3YWl0ZXIoX3RoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBkYXRhLCBlcnJvcl8xO1xuICAgICAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24gKF9hKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKF9hLmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgY2FzZSAwOlxuICAgICAgICAgICAgICAgICAgICBfYS50cnlzLnB1c2goWzAsIDIsICwgM10pO1xuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFs0IC8qeWllbGQqLywgcHJvbWlzZV07XG4gICAgICAgICAgICAgICAgY2FzZSAxOlxuICAgICAgICAgICAgICAgICAgICBkYXRhID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFsyIC8qcmV0dXJuKi8sIGRhdGFdO1xuICAgICAgICAgICAgICAgIGNhc2UgMjpcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JfMSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZXJyb3JfMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMyAvKmJyZWFrKi8sIDNdO1xuICAgICAgICAgICAgICAgIGNhc2UgMzogcmV0dXJuIFsyIC8qcmV0dXJuKi9dO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9KTsgfSwgW2hhc1VubW91bnRlZF0pO1xuICAgIHJldHVybiBbcmVzdWx0LCBkaXNwYXRjaF07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VQcm9taXNlLmpzLm1hcCIsImltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZUxheW91dEVmZmVjdCwgY3JlYXRlQ29udGV4dCwgdXNlQ29udGV4dCwgdXNlTWVtbywgdXNlUmVmLCBjcmVhdGVFbGVtZW50LCB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2sgfSBmcm9tICdyZWFjdCc7XG5cbi8vIEdsb2JhbCBzdGF0ZSB1c2VkIHRvIGRlZHVwbGljYXRlIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnNcbmNvbnN0IFNXUkdsb2JhbFN0YXRlID0gbmV3IFdlYWtNYXAoKTtcblxuY29uc3QgRU1QVFlfQ0FDSEUgPSB7fTtcbmNvbnN0IElOSVRJQUxfQ0FDSEUgPSB7fTtcbmNvbnN0IG5vb3AgPSAoKT0+e307XG4vLyBVc2luZyBub29wKCkgYXMgdGhlIHVuZGVmaW5lZCB2YWx1ZSBhcyB1bmRlZmluZWQgY2FuIGJlIHJlcGxhY2VkXG4vLyBieSBzb21ldGhpbmcgZWxzZS4gUHJldHRpZXIgaWdub3JlIGFuZCBleHRyYSBwYXJlbnRoZXNlcyBhcmUgbmVjZXNzYXJ5IGhlcmVcbi8vIHRvIGVuc3VyZSB0aGF0IHRzYyBkb2Vzbid0IHJlbW92ZSB0aGUgX19OT0lOTElORV9fIGNvbW1lbnQuXG4vLyBwcmV0dGllci1pZ25vcmVcbmNvbnN0IFVOREVGSU5FRCA9IC8qI19fTk9JTkxJTkVfXyovIG5vb3AoKTtcbmNvbnN0IE9CSkVDVCA9IE9iamVjdDtcbmNvbnN0IGlzVW5kZWZpbmVkID0gKHYpPT52ID09PSBVTkRFRklORUQ7XG5jb25zdCBpc0Z1bmN0aW9uID0gKHYpPT50eXBlb2YgdiA9PSAnZnVuY3Rpb24nO1xuY29uc3QgbWVyZ2VPYmplY3RzID0gKGEsIGIpPT4oe1xuICAgICAgICAuLi5hLFxuICAgICAgICAuLi5iXG4gICAgfSk7XG5jb25zdCBTVFJfVU5ERUZJTkVEID0gJ3VuZGVmaW5lZCc7XG4vLyBOT1RFOiBVc2UgdGhlIGZ1bmN0aW9uIHRvIGd1YXJhbnRlZSBpdCdzIHJlLWV2YWx1YXRlZCBiZXR3ZWVuIGpzZG9tIGFuZCBub2RlIHJ1bnRpbWUgZm9yIHRlc3RzLlxuY29uc3QgaXNXaW5kb3dEZWZpbmVkID0gdHlwZW9mIHdpbmRvdyAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaXNEb2N1bWVudERlZmluZWQgPSB0eXBlb2YgZG9jdW1lbnQgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSA9ICgpPT5pc1dpbmRvd0RlZmluZWQgJiYgdHlwZW9mIHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10gIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGNyZWF0ZUNhY2hlSGVscGVyID0gKGNhY2hlLCBrZXkpPT57XG4gICAgY29uc3Qgc3RhdGUgPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIHJldHVybiBbXG4gICAgICAgIC8vIEdldHRlclxuICAgICAgICAoKT0+Y2FjaGUuZ2V0KGtleSkgfHwgRU1QVFlfQ0FDSEUsXG4gICAgICAgIC8vIFNldHRlclxuICAgICAgICAoaW5mbyk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHByZXYgPSBjYWNoZS5nZXQoa2V5KTtcbiAgICAgICAgICAgICAgICAvLyBCZWZvcmUgd3JpdGluZyB0byB0aGUgc3RvcmUsIHdlIGtlZXAgdGhlIHZhbHVlIGluIHRoZSBpbml0aWFsIGNhY2hlXG4gICAgICAgICAgICAgICAgLy8gaWYgaXQncyBub3QgdGhlcmUgeWV0LlxuICAgICAgICAgICAgICAgIGlmICghKGtleSBpbiBJTklUSUFMX0NBQ0hFKSkge1xuICAgICAgICAgICAgICAgICAgICBJTklUSUFMX0NBQ0hFW2tleV0gPSBwcmV2O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBzdGF0ZVs1XShrZXksIG1lcmdlT2JqZWN0cyhwcmV2LCBpbmZvKSwgcHJldiB8fCBFTVBUWV9DQUNIRSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIC8vIFN1YnNjcmliZXJcbiAgICAgICAgc3RhdGVbNl0sXG4gICAgICAgIC8vIEdldCBzZXJ2ZXIgY2FjaGUgc25hcHNob3RcbiAgICAgICAgKCk9PntcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoa2V5KSkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBjYWNoZSB3YXMgdXBkYXRlZCBvbiB0aGUgY2xpZW50LCB3ZSByZXR1cm4gdGhlIHN0b3JlZCBpbml0aWFsIHZhbHVlLlxuICAgICAgICAgICAgICAgIGlmIChrZXkgaW4gSU5JVElBTF9DQUNIRSkgcmV0dXJuIElOSVRJQUxfQ0FDSEVba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIElmIHdlIGhhdmVuJ3QgZG9uZSBhbnkgY2xpZW50LXNpZGUgdXBkYXRlcywgd2UgcmV0dXJuIHRoZSBjdXJyZW50IHZhbHVlLlxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFO1xuICAgICAgICB9XG4gICAgXTtcbn07XG5cbi8vIHVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBvYmplY3QtPmtleSBtYXBwaW5nXG4vLyBzbyB0aGUgb2JqZWN0cyBjYW4gYmUgZ2FyYmFnZSBjb2xsZWN0ZWQuXG4vLyBXZWFrTWFwIHVzZXMgYSBoYXNodGFibGUgdW5kZXIgdGhlIGhvb2QsIHNvIHRoZSBsb29rdXBcbi8vIGNvbXBsZXhpdHkgaXMgYWxtb3N0IE8oMSkuXG5jb25zdCB0YWJsZSA9IG5ldyBXZWFrTWFwKCk7XG4vLyBjb3VudGVyIG9mIHRoZSBrZXlcbmxldCBjb3VudGVyID0gMDtcbi8vIEEgc3RhYmxlIGhhc2ggaW1wbGVtZW50YXRpb24gdGhhdCBzdXBwb3J0czpcbi8vIC0gRmFzdCBhbmQgZW5zdXJlcyB1bmlxdWUgaGFzaCBwcm9wZXJ0aWVzXG4vLyAtIEhhbmRsZXMgdW5zZXJpYWxpemFibGUgdmFsdWVzXG4vLyAtIEhhbmRsZXMgb2JqZWN0IGtleSBvcmRlcmluZ1xuLy8gLSBHZW5lcmF0ZXMgc2hvcnQgcmVzdWx0c1xuLy9cbi8vIFRoaXMgaXMgbm90IGEgc2VyaWFsaXphdGlvbiBmdW5jdGlvbiwgYW5kIHRoZSByZXN1bHQgaXMgbm90IGd1YXJhbnRlZWQgdG8gYmVcbi8vIHBhcnNhYmxlLlxuY29uc3Qgc3RhYmxlSGFzaCA9IChhcmcpPT57XG4gICAgY29uc3QgdHlwZSA9IHR5cGVvZiBhcmc7XG4gICAgY29uc3QgY29uc3RydWN0b3IgPSBhcmcgJiYgYXJnLmNvbnN0cnVjdG9yO1xuICAgIGNvbnN0IGlzRGF0ZSA9IGNvbnN0cnVjdG9yID09IERhdGU7XG4gICAgbGV0IHJlc3VsdDtcbiAgICBsZXQgaW5kZXg7XG4gICAgaWYgKE9CSkVDVChhcmcpID09PSBhcmcgJiYgIWlzRGF0ZSAmJiBjb25zdHJ1Y3RvciAhPSBSZWdFeHApIHtcbiAgICAgICAgLy8gT2JqZWN0L2Z1bmN0aW9uLCBub3QgbnVsbC9kYXRlL3JlZ2V4cC4gVXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIGlkIGZpcnN0LlxuICAgICAgICAvLyBJZiBpdCdzIGFscmVhZHkgaGFzaGVkLCBkaXJlY3RseSByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgICAgcmVzdWx0ID0gdGFibGUuZ2V0KGFyZyk7XG4gICAgICAgIGlmIChyZXN1bHQpIHJldHVybiByZXN1bHQ7XG4gICAgICAgIC8vIFN0b3JlIHRoZSBoYXNoIGZpcnN0IGZvciBjaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0aW9uIGJlZm9yZSBlbnRlcmluZyB0aGVcbiAgICAgICAgLy8gcmVjdXJzaXZlIGBzdGFibGVIYXNoYCBjYWxscy5cbiAgICAgICAgLy8gRm9yIG90aGVyIG9iamVjdHMgbGlrZSBzZXQgYW5kIG1hcCwgd2UgdXNlIHRoaXMgaWQgZGlyZWN0bHkgYXMgdGhlIGhhc2guXG4gICAgICAgIHJlc3VsdCA9ICsrY291bnRlciArICd+JztcbiAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IEFycmF5KSB7XG4gICAgICAgICAgICAvLyBBcnJheS5cbiAgICAgICAgICAgIHJlc3VsdCA9ICdAJztcbiAgICAgICAgICAgIGZvcihpbmRleCA9IDA7IGluZGV4IDwgYXJnLmxlbmd0aDsgaW5kZXgrKyl7XG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBPQkpFQ1QpIHtcbiAgICAgICAgICAgIC8vIE9iamVjdCwgc29ydCBrZXlzLlxuICAgICAgICAgICAgcmVzdWx0ID0gJyMnO1xuICAgICAgICAgICAgY29uc3Qga2V5cyA9IE9CSkVDVC5rZXlzKGFyZykuc29ydCgpO1xuICAgICAgICAgICAgd2hpbGUoIWlzVW5kZWZpbmVkKGluZGV4ID0ga2V5cy5wb3AoKSkpe1xuICAgICAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQoYXJnW2luZGV4XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGluZGV4ICsgJzonICsgc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgcmVzdWx0ID0gaXNEYXRlID8gYXJnLnRvSlNPTigpIDogdHlwZSA9PSAnc3ltYm9sJyA/IGFyZy50b1N0cmluZygpIDogdHlwZSA9PSAnc3RyaW5nJyA/IEpTT04uc3RyaW5naWZ5KGFyZykgOiAnJyArIGFyZztcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8qKlxuICogRHVlIHRvIHRoZSBidWcgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Njc4MDc1LFxuICogaXQncyBub3QgcmVsaWFibGUgdG8gZGV0ZWN0IGlmIHRoZSBicm93c2VyIGlzIGN1cnJlbnRseSBvbmxpbmUgb3Igb2ZmbGluZVxuICogYmFzZWQgb24gYG5hdmlnYXRvci5vbkxpbmVgLlxuICogQXMgYSB3b3JrYXJvdW5kLCB3ZSBhbHdheXMgYXNzdW1lIGl0J3Mgb25saW5lIG9uIHRoZSBmaXJzdCBsb2FkLCBhbmQgY2hhbmdlXG4gKiB0aGUgc3RhdHVzIHVwb24gYG9ubGluZWAgb3IgYG9mZmxpbmVgIGV2ZW50cy5cbiAqLyBsZXQgb25saW5lID0gdHJ1ZTtcbmNvbnN0IGlzT25saW5lID0gKCk9Pm9ubGluZTtcbi8vIEZvciBub2RlIGFuZCBSZWFjdCBOYXRpdmUsIGBhZGQvcmVtb3ZlRXZlbnRMaXN0ZW5lcmAgZG9lc24ndCBleGlzdCBvbiB3aW5kb3cuXG5jb25zdCBbb25XaW5kb3dFdmVudCwgb2ZmV2luZG93RXZlbnRdID0gaXNXaW5kb3dEZWZpbmVkICYmIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyID8gW1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyLmJpbmQod2luZG93KSxcbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdylcbl0gOiBbXG4gICAgbm9vcCxcbiAgICBub29wXG5dO1xuY29uc3QgaXNWaXNpYmxlID0gKCk9PntcbiAgICBjb25zdCB2aXNpYmlsaXR5U3RhdGUgPSBpc0RvY3VtZW50RGVmaW5lZCAmJiBkb2N1bWVudC52aXNpYmlsaXR5U3RhdGU7XG4gICAgcmV0dXJuIGlzVW5kZWZpbmVkKHZpc2liaWxpdHlTdGF0ZSkgfHwgdmlzaWJpbGl0eVN0YXRlICE9PSAnaGlkZGVuJztcbn07XG5jb25zdCBpbml0Rm9jdXMgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gZm9jdXMgcmV2YWxpZGF0ZVxuICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgIH1cbiAgICBvbldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCd2aXNpYmlsaXR5Y2hhbmdlJywgY2FsbGJhY2spO1xuICAgICAgICB9XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdmb2N1cycsIGNhbGxiYWNrKTtcbiAgICB9O1xufTtcbmNvbnN0IGluaXRSZWNvbm5lY3QgPSAoY2FsbGJhY2spPT57XG4gICAgLy8gcmV2YWxpZGF0ZSBvbiByZWNvbm5lY3RlZFxuICAgIGNvbnN0IG9uT25saW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gdHJ1ZTtcbiAgICAgICAgY2FsbGJhY2soKTtcbiAgICB9O1xuICAgIC8vIG5vdGhpbmcgdG8gcmV2YWxpZGF0ZSwganVzdCB1cGRhdGUgdGhlIHN0YXR1c1xuICAgIGNvbnN0IG9uT2ZmbGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IGZhbHNlO1xuICAgIH07XG4gICAgb25XaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgIG9uV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb25saW5lJywgb25PbmxpbmUpO1xuICAgICAgICBvZmZXaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgfTtcbn07XG5jb25zdCBwcmVzZXQgPSB7XG4gICAgaXNPbmxpbmUsXG4gICAgaXNWaXNpYmxlXG59O1xuY29uc3QgZGVmYXVsdENvbmZpZ09wdGlvbnMgPSB7XG4gICAgaW5pdEZvY3VzLFxuICAgIGluaXRSZWNvbm5lY3Rcbn07XG5cbmNvbnN0IElTX1JFQUNUX0xFR0FDWSA9ICFSZWFjdC51c2VJZDtcbmNvbnN0IElTX1NFUlZFUiA9ICFpc1dpbmRvd0RlZmluZWQgfHwgJ0Rlbm8nIGluIHdpbmRvdztcbi8vIFBvbHlmaWxsIHJlcXVlc3RBbmltYXRpb25GcmFtZVxuY29uc3QgckFGID0gKGYpPT5oYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKSA/IHdpbmRvd1sncmVxdWVzdEFuaW1hdGlvbkZyYW1lJ10oZikgOiBzZXRUaW1lb3V0KGYsIDEpO1xuLy8gUmVhY3QgY3VycmVudGx5IHRocm93cyBhIHdhcm5pbmcgd2hlbiB1c2luZyB1c2VMYXlvdXRFZmZlY3Qgb24gdGhlIHNlcnZlci5cbi8vIFRvIGdldCBhcm91bmQgaXQsIHdlIGNhbiBjb25kaXRpb25hbGx5IHVzZUVmZmVjdCBvbiB0aGUgc2VydmVyIChuby1vcCkgYW5kXG4vLyB1c2VMYXlvdXRFZmZlY3QgaW4gdGhlIGJyb3dzZXIuXG5jb25zdCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0ID0gSVNfU0VSVkVSID8gdXNlRWZmZWN0IDogdXNlTGF5b3V0RWZmZWN0O1xuLy8gVGhpcyBhc3NpZ25tZW50IGlzIHRvIGV4dGVuZCB0aGUgTmF2aWdhdG9yIHR5cGUgdG8gdXNlIGVmZmVjdGl2ZVR5cGUuXG5jb25zdCBuYXZpZ2F0b3JDb25uZWN0aW9uID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgJiYgbmF2aWdhdG9yLmNvbm5lY3Rpb247XG4vLyBBZGp1c3QgdGhlIGNvbmZpZyBiYXNlZCBvbiBzbG93IGNvbm5lY3Rpb24gc3RhdHVzICg8PSA3MEticHMpLlxuY29uc3Qgc2xvd0Nvbm5lY3Rpb24gPSAhSVNfU0VSVkVSICYmIG5hdmlnYXRvckNvbm5lY3Rpb24gJiYgKFtcbiAgICAnc2xvdy0yZycsXG4gICAgJzJnJ1xuXS5pbmNsdWRlcyhuYXZpZ2F0b3JDb25uZWN0aW9uLmVmZmVjdGl2ZVR5cGUpIHx8IG5hdmlnYXRvckNvbm5lY3Rpb24uc2F2ZURhdGEpO1xuXG5jb25zdCBzZXJpYWxpemUgPSAoa2V5KT0+e1xuICAgIGlmIChpc0Z1bmN0aW9uKGtleSkpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGtleSA9IGtleSgpO1xuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIC8vIGRlcGVuZGVuY2llcyBub3QgcmVhZHlcbiAgICAgICAgICAgIGtleSA9ICcnO1xuICAgICAgICB9XG4gICAgfVxuICAgIC8vIFVzZSB0aGUgb3JpZ2luYWwga2V5IGFzIHRoZSBhcmd1bWVudCBvZiBmZXRjaGVyLiBUaGlzIGNhbiBiZSBhIHN0cmluZyBvciBhblxuICAgIC8vIGFycmF5IG9mIHZhbHVlcy5cbiAgICBjb25zdCBhcmdzID0ga2V5O1xuICAgIC8vIElmIGtleSBpcyBub3QgZmFsc3ksIG9yIG5vdCBhbiBlbXB0eSBhcnJheSwgaGFzaCBpdC5cbiAgICBrZXkgPSB0eXBlb2Yga2V5ID09ICdzdHJpbmcnID8ga2V5IDogKEFycmF5LmlzQXJyYXkoa2V5KSA/IGtleS5sZW5ndGggOiBrZXkpID8gc3RhYmxlSGFzaChrZXkpIDogJyc7XG4gICAgcmV0dXJuIFtcbiAgICAgICAga2V5LFxuICAgICAgICBhcmdzXG4gICAgXTtcbn07XG5cbi8vIEdsb2JhbCB0aW1lc3RhbXAuXG5sZXQgX190aW1lc3RhbXAgPSAwO1xuY29uc3QgZ2V0VGltZXN0YW1wID0gKCk9PisrX190aW1lc3RhbXA7XG5cbmNvbnN0IEZPQ1VTX0VWRU5UID0gMDtcbmNvbnN0IFJFQ09OTkVDVF9FVkVOVCA9IDE7XG5jb25zdCBNVVRBVEVfRVZFTlQgPSAyO1xuY29uc3QgRVJST1JfUkVWQUxJREFURV9FVkVOVCA9IDM7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgRk9DVVNfRVZFTlQ6IEZPQ1VTX0VWRU5ULFxuICBSRUNPTk5FQ1RfRVZFTlQ6IFJFQ09OTkVDVF9FVkVOVCxcbiAgTVVUQVRFX0VWRU5UOiBNVVRBVEVfRVZFTlQsXG4gIEVSUk9SX1JFVkFMSURBVEVfRVZFTlQ6IEVSUk9SX1JFVkFMSURBVEVfRVZFTlRcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGludGVybmFsTXV0YXRlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0c10gPSBhcmdzO1xuICAgIC8vIFdoZW4gcGFzc2luZyBhcyBhIGJvb2xlYW4sIGl0J3MgZXhwbGljaXRseSB1c2VkIHRvIGRpc2FibGUvZW5hYmxlXG4gICAgLy8gcmV2YWxpZGF0aW9uLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZU9iamVjdHMoe1xuICAgICAgICBwb3B1bGF0ZUNhY2hlOiB0cnVlLFxuICAgICAgICB0aHJvd09uRXJyb3I6IHRydWVcbiAgICB9LCB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHtcbiAgICAgICAgcmV2YWxpZGF0ZTogX29wdHNcbiAgICB9IDogX29wdHMgfHwge30pO1xuICAgIGxldCBwb3B1bGF0ZUNhY2hlID0gb3B0aW9ucy5wb3B1bGF0ZUNhY2hlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvck9wdGlvbiA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yO1xuICAgIGxldCBvcHRpbWlzdGljRGF0YSA9IG9wdGlvbnMub3B0aW1pc3RpY0RhdGE7XG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yID0gKGVycm9yKT0+e1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvbGxiYWNrT25FcnJvck9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHJvbGxiYWNrT25FcnJvck9wdGlvbihlcnJvcikgOiByb2xsYmFja09uRXJyb3JPcHRpb24gIT09IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dPbkVycm9yID0gb3B0aW9ucy50aHJvd09uRXJyb3I7XG4gICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGtleSBmaWx0ZXIsIHJldHVybiB0aGUgbXV0YXRpb24gcmVzdWx0cyBmb3IgYWxsXG4gICAgLy8gZmlsdGVyZWQga2V5cy5cbiAgICBpZiAoaXNGdW5jdGlvbihfa2V5KSkge1xuICAgICAgICBjb25zdCBrZXlGaWx0ZXIgPSBfa2V5O1xuICAgICAgICBjb25zdCBtYXRjaGVkS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBpdCA9IGNhY2hlLmtleXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXlJdCA9IGl0Lm5leHQoKTsgIWtleUl0LmRvbmU7IGtleUl0ID0gaXQubmV4dCgpKXtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleUl0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKC8vIFNraXAgdGhlIHNwZWNpYWwgdXNlU1dSSW5maW5pdGUgYW5kIHVzZVNXUlN1YnNjcmlwdGlvbiBrZXlzLlxuICAgICAgICAgICAgIS9eXFwkKGluZnxzdWIpXFwkLy50ZXN0KGtleSkgJiYga2V5RmlsdGVyKGNhY2hlLmdldChrZXkpLl9rKSkge1xuICAgICAgICAgICAgICAgIG1hdGNoZWRLZXlzLnB1c2goa2V5KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwobWF0Y2hlZEtleXMubWFwKG11dGF0ZUJ5S2V5KSk7XG4gICAgfVxuICAgIHJldHVybiBtdXRhdGVCeUtleShfa2V5KTtcbiAgICBhc3luYyBmdW5jdGlvbiBtdXRhdGVCeUtleShfaykge1xuICAgICAgICAvLyBTZXJpYWxpemUga2V5XG4gICAgICAgIGNvbnN0IFtrZXldID0gc2VyaWFsaXplKF9rKTtcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3QgW2dldCwgc2V0XSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgICAgICBjb25zdCBbRVZFTlRfUkVWQUxJREFUT1JTLCBNVVRBVElPTiwgRkVUQ0hdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgY29uc3QgcmV2YWxpZGF0b3JzID0gRVZFTlRfUkVWQUxJREFUT1JTW2tleV07XG4gICAgICAgIGNvbnN0IHN0YXJ0UmV2YWxpZGF0ZSA9ICgpPT57XG4gICAgICAgICAgICBpZiAocmV2YWxpZGF0ZSkge1xuICAgICAgICAgICAgICAgIC8vIEludmFsaWRhdGUgdGhlIGtleSBieSBkZWxldGluZyB0aGUgY29uY3VycmVudCByZXF1ZXN0IG1hcmtlcnMgc28gbmV3XG4gICAgICAgICAgICAgICAgLy8gcmVxdWVzdHMgd2lsbCBub3QgYmUgZGVkdXBlZC5cbiAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0b3JzWzBdKE1VVEFURV9FVkVOVCkudGhlbigoKT0+Z2V0KCkuZGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGdldCgpLmRhdGE7XG4gICAgICAgIH07XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG5ldyBkYXRhIHByb3ZpZGVkLCByZXZhbGlkYXRlIHRoZSBrZXkgd2l0aCBjdXJyZW50IHN0YXRlLlxuICAgICAgICBpZiAoYXJncy5sZW5ndGggPCAzKSB7XG4gICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGFuZCBicm9hZGNhc3Qgc3RhdGUuXG4gICAgICAgICAgICByZXR1cm4gc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGRhdGEgPSBfZGF0YTtcbiAgICAgICAgbGV0IGVycm9yO1xuICAgICAgICAvLyBVcGRhdGUgZ2xvYmFsIHRpbWVzdGFtcHMuXG4gICAgICAgIGNvbnN0IGJlZm9yZU11dGF0aW9uVHMgPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgTVVUQVRJT05ba2V5XSA9IFtcbiAgICAgICAgICAgIGJlZm9yZU11dGF0aW9uVHMsXG4gICAgICAgICAgICAwXG4gICAgICAgIF07XG4gICAgICAgIGNvbnN0IGhhc09wdGltaXN0aWNEYXRhID0gIWlzVW5kZWZpbmVkKG9wdGltaXN0aWNEYXRhKTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBnZXQoKTtcbiAgICAgICAgLy8gYGRpc3BsYXllZERhdGFgIGlzIHRoZSBjdXJyZW50IHZhbHVlIG9uIHNjcmVlbi4gSXQgY291bGQgYmUgdGhlIG9wdGltaXN0aWMgdmFsdWVcbiAgICAgICAgLy8gdGhhdCBpcyBnb2luZyB0byBiZSBvdmVycmlkZGVuIGJ5IGEgYGNvbW1pdHRlZERhdGFgLCBvciBnZXQgcmV2ZXJ0ZWQgYmFjay5cbiAgICAgICAgLy8gYGNvbW1pdHRlZERhdGFgIGlzIHRoZSB2YWxpZGF0ZWQgdmFsdWUgdGhhdCBjb21lcyBmcm9tIGEgZmV0Y2ggb3IgbXV0YXRpb24uXG4gICAgICAgIGNvbnN0IGRpc3BsYXllZERhdGEgPSBzdGF0ZS5kYXRhO1xuICAgICAgICBjb25zdCBjdXJyZW50RGF0YSA9IHN0YXRlLl9jO1xuICAgICAgICBjb25zdCBjb21taXR0ZWREYXRhID0gaXNVbmRlZmluZWQoY3VycmVudERhdGEpID8gZGlzcGxheWVkRGF0YSA6IGN1cnJlbnREYXRhO1xuICAgICAgICAvLyBEbyBvcHRpbWlzdGljIGRhdGEgdXBkYXRlLlxuICAgICAgICBpZiAoaGFzT3B0aW1pc3RpY0RhdGEpIHtcbiAgICAgICAgICAgIG9wdGltaXN0aWNEYXRhID0gaXNGdW5jdGlvbihvcHRpbWlzdGljRGF0YSkgPyBvcHRpbWlzdGljRGF0YShjb21taXR0ZWREYXRhKSA6IG9wdGltaXN0aWNEYXRhO1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBzZXQgb3B0aW1pc3RpYyBkYXRhLCBiYWNrdXAgdGhlIGN1cnJlbnQgY29tbWl0dGVkRGF0YSBkYXRhIGluIGBfY2AuXG4gICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgIGRhdGE6IG9wdGltaXN0aWNEYXRhLFxuICAgICAgICAgICAgICAgIF9jOiBjb21taXR0ZWREYXRhXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNGdW5jdGlvbihkYXRhKSkge1xuICAgICAgICAgICAgLy8gYGRhdGFgIGlzIGEgZnVuY3Rpb24sIGNhbGwgaXQgcGFzc2luZyBjdXJyZW50IGNhY2hlIHZhbHVlLlxuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBkYXRhID0gZGF0YShjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgICAgIC8vIElmIGl0IHRocm93cyBhbiBlcnJvciBzeW5jaHJvbm91c2x5LCB3ZSBzaG91bGRuJ3QgdXBkYXRlIHRoZSBjYWNoZS5cbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBgZGF0YWAgaXMgYSBwcm9taXNlL3RoZW5hYmxlLCByZXNvbHZlIHRoZSBmaW5hbCBkYXRhIGZpcnN0LlxuICAgICAgICBpZiAoZGF0YSAmJiBpc0Z1bmN0aW9uKGRhdGEudGhlbikpIHtcbiAgICAgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGUgbXV0YXRpb24gaXMgYXN5bmMsIHdlIG5lZWQgdG8gY2hlY2sgdGltZXN0YW1wcyB0b1xuICAgICAgICAgICAgLy8gYXZvaWQgcmFjZSBjb25kaXRpb25zLlxuICAgICAgICAgICAgZGF0YSA9IGF3YWl0IGRhdGEuY2F0Y2goKGVycik9PntcbiAgICAgICAgICAgICAgICBlcnJvciA9IGVycjtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgb3RoZXIgbXV0YXRpb25zIGhhdmUgb2NjdXJyZWQgc2luY2Ugd2UndmUgc3RhcnRlZCB0aGlzIG11dGF0aW9uLlxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncyBhIHJhY2Ugd2UgZG9uJ3QgdXBkYXRlIGNhY2hlIG9yIGJyb2FkY2FzdCB0aGUgY2hhbmdlLFxuICAgICAgICAgICAgLy8ganVzdCByZXR1cm4gdGhlIGRhdGEuXG4gICAgICAgICAgICBpZiAoYmVmb3JlTXV0YXRpb25UcyAhPT0gTVVUQVRJT05ba2V5XVswXSkge1xuICAgICAgICAgICAgICAgIGlmIChlcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGVycm9yICYmIGhhc09wdGltaXN0aWNEYXRhICYmIHJvbGxiYWNrT25FcnJvcihlcnJvcikpIHtcbiAgICAgICAgICAgICAgICAvLyBSb2xsYmFjay4gQWx3YXlzIHBvcHVsYXRlIHRoZSBjYWNoZSBpbiB0aGlzIGNhc2UgYnV0IHdpdGhvdXRcbiAgICAgICAgICAgICAgICAvLyB0cmFuc2Zvcm1pbmcgdGhlIGRhdGEuXG4gICAgICAgICAgICAgICAgcG9wdWxhdGVDYWNoZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGNvbW1pdHRlZERhdGE7XG4gICAgICAgICAgICAgICAgLy8gUmVzZXQgZGF0YSB0byBiZSB0aGUgbGF0ZXN0IGNvbW1pdHRlZCBkYXRhLCBhbmQgY2xlYXIgdGhlIGBfY2AgdmFsdWUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIElmIHdlIHNob3VsZCB3cml0ZSBiYWNrIHRoZSBjYWNoZSBhZnRlciByZXF1ZXN0LlxuICAgICAgICBpZiAocG9wdWxhdGVDYWNoZSkge1xuICAgICAgICAgICAgaWYgKCFlcnJvcikge1xuICAgICAgICAgICAgICAgIC8vIFRyYW5zZm9ybSB0aGUgcmVzdWx0IGludG8gZGF0YS5cbiAgICAgICAgICAgICAgICBpZiAoaXNGdW5jdGlvbihwb3B1bGF0ZUNhY2hlKSkge1xuICAgICAgICAgICAgICAgICAgICBkYXRhID0gcG9wdWxhdGVDYWNoZShkYXRhLCBjb21taXR0ZWREYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gT25seSB1cGRhdGUgY2FjaGVkIGRhdGEgaWYgdGhlcmUncyBubyBlcnJvci4gRGF0YSBjYW4gYmUgYHVuZGVmaW5lZGAgaGVyZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gUmVzZXQgdGhlIHRpbWVzdGFtcCB0byBtYXJrIHRoZSBtdXRhdGlvbiBoYXMgZW5kZWQuXG4gICAgICAgIE1VVEFUSU9OW2tleV1bMV0gPSBnZXRUaW1lc3RhbXAoKTtcbiAgICAgICAgLy8gVXBkYXRlIGV4aXN0aW5nIFNXUiBIb29rcycgaW50ZXJuYWwgc3RhdGVzOlxuICAgICAgICBjb25zdCByZXMgPSBhd2FpdCBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgLy8gVGhlIG11dGF0aW9uIGFuZCByZXZhbGlkYXRpb24gYXJlIGVuZGVkLCB3ZSBjYW4gY2xlYXIgaXQgc2luY2UgdGhlIGRhdGEgaXNcbiAgICAgICAgLy8gbm90IGFuIG9wdGltaXN0aWMgdmFsdWUgYW55bW9yZS5cbiAgICAgICAgc2V0KHtcbiAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRocm93IGVycm9yIG9yIHJldHVybiBkYXRhXG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgaWYgKHRocm93T25FcnJvcikgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBvcHVsYXRlQ2FjaGUgPyByZXMgOiBkYXRhO1xuICAgIH1cbn1cblxuY29uc3QgcmV2YWxpZGF0ZUFsbEtleXMgPSAocmV2YWxpZGF0b3JzLCB0eXBlKT0+e1xuICAgIGZvcihjb25zdCBrZXkgaW4gcmV2YWxpZGF0b3JzKXtcbiAgICAgICAgaWYgKHJldmFsaWRhdG9yc1trZXldWzBdKSByZXZhbGlkYXRvcnNba2V5XVswXSh0eXBlKTtcbiAgICB9XG59O1xuY29uc3QgaW5pdENhY2hlID0gKHByb3ZpZGVyLCBvcHRpb25zKT0+e1xuICAgIC8vIFRoZSBnbG9iYWwgc3RhdGUgZm9yIGEgc3BlY2lmaWMgcHJvdmlkZXIgd2lsbCBiZSB1c2VkIHRvIGRlZHVwbGljYXRlXG4gICAgLy8gcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVycy4gQXMgd2VsbCBhcyBhIG11dGF0ZSBmdW5jdGlvbiB0aGF0IGlzIGJvdW5kIHRvXG4gICAgLy8gdGhlIGNhY2hlLlxuICAgIC8vIFRoZSBwcm92aWRlcidzIGdsb2JhbCBzdGF0ZSBtaWdodCBiZSBhbHJlYWR5IGluaXRpYWxpemVkLiBMZXQncyB0cnkgdG8gZ2V0IHRoZVxuICAgIC8vIGdsb2JhbCBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIHByb3ZpZGVyIGZpcnN0LlxuICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICBjb25zdCBvcHRzID0gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWdPcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgLy8gSWYgdGhlcmUncyBubyBnbG9iYWwgc3RhdGUgYm91bmQgdG8gdGhlIHByb3ZpZGVyLCBjcmVhdGUgYSBuZXcgb25lIHdpdGggdGhlXG4gICAgICAgIC8vIG5ldyBtdXRhdGUgZnVuY3Rpb24uXG4gICAgICAgIGNvbnN0IEVWRU5UX1JFVkFMSURBVE9SUyA9IHt9O1xuICAgICAgICBjb25zdCBtdXRhdGUgPSBpbnRlcm5hbE11dGF0ZS5iaW5kKFVOREVGSU5FRCwgcHJvdmlkZXIpO1xuICAgICAgICBsZXQgdW5tb3VudCA9IG5vb3A7XG4gICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSB7fTtcbiAgICAgICAgY29uc3Qgc3Vic2NyaWJlID0gKGtleSwgY2FsbGJhY2spPT57XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldIHx8IFtdO1xuICAgICAgICAgICAgc3Vic2NyaXB0aW9uc1trZXldID0gc3VicztcbiAgICAgICAgICAgIHN1YnMucHVzaChjYWxsYmFjayk7XG4gICAgICAgICAgICByZXR1cm4gKCk9PnN1YnMuc3BsaWNlKHN1YnMuaW5kZXhPZihjYWxsYmFjayksIDEpO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBzZXR0ZXIgPSAoa2V5LCB2YWx1ZSwgcHJldik9PntcbiAgICAgICAgICAgIHByb3ZpZGVyLnNldChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV07XG4gICAgICAgICAgICBpZiAoc3Vicykge1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZm4gb2Ygc3Vicyl7XG4gICAgICAgICAgICAgICAgICAgIGZuKHZhbHVlLCBwcmV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRQcm92aWRlciA9ICgpPT57XG4gICAgICAgICAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciBpZiB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbXG4gICAgICAgICAgICAgICAgICAgIEVWRU5UX1JFVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgcHV0IGEgZGVsYXkgKHNldFRpbWVvdXQpIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBiZVxuICAgICAgICAgICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIHNvbWUgdW5uZWNlc3NhcnkgcmV2YWxpZGF0aW9ucyBzdWNoIGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlRm9jdXMgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZVJlY29ubmVjdCA9IG9wdHMuaW5pdFJlY29ubmVjdChzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBSRUNPTk5FQ1RfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQgPSAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzICYmIHJlbGVhc2VGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVJlY29ubmVjdCAmJiByZWxlYXNlUmVjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgdG9vIGJlY2F1c2UgaXQncyBhIHNpZGUtZWZmZWN0LiBPdGhlcndpc2UsIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IHJlLXJlZ2lzdGVyIHRob3NlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpbml0UHJvdmlkZXIoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgaW5pdFByb3ZpZGVyLFxuICAgICAgICAgICAgdW5tb3VudFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XVxuICAgIF07XG59O1xuXG4vLyBlcnJvciByZXRyeVxuY29uc3Qgb25FcnJvclJldHJ5ID0gKF8sIF9fLCBjb25maWcsIHJldmFsaWRhdGUsIG9wdHMpPT57XG4gICAgY29uc3QgbWF4UmV0cnlDb3VudCA9IGNvbmZpZy5lcnJvclJldHJ5Q291bnQ7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIGNvbnN0IHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKiAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuY29uc3QgY29tcGFyZSA9IChjdXJyZW50RGF0YSwgbmV3RGF0YSk9PnN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4vLyBEZWZhdWx0IGNhY2hlIHByb3ZpZGVyXG5jb25zdCBbY2FjaGUsIG11dGF0ZV0gPSBpbml0Q2FjaGUobmV3IE1hcCgpKTtcbi8vIERlZmF1bHQgY29uZmlnXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZSxcbiAgICBpc1BhdXNlZDogKCk9PmZhbHNlLFxuICAgIGNhY2hlLFxuICAgIG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIC8vIHVzZSB3ZWIgcHJlc2V0IGJ5IGRlZmF1bHRcbnByZXNldCk7XG5cbmNvbnN0IG1lcmdlQ29uZmlncyA9IChhLCBiKT0+e1xuICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaGVyZS5cbiAgICBjb25zdCB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICBjb25zdCB7IHVzZTogdTEgLCBmYWxsYmFjazogZjEgIH0gPSBhO1xuICAgICAgICBjb25zdCB7IHVzZTogdTIgLCBmYWxsYmFjazogZjIgIH0gPSBiO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbmNvbnN0IFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbmNvbnN0IFNXUkNvbmZpZyA9IChwcm9wcyk9PntcbiAgICBjb25zdCB7IHZhbHVlICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGFyZW50Q29uZmlnID0gdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uYWxDb25maWcgPSBpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICBjb25zdCBjb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyB2YWx1ZShwYXJlbnRDb25maWcpIDogdmFsdWUsIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIHZhbHVlXG4gICAgXSk7XG4gICAgLy8gRXh0ZW5kIHBhcmVudCBjb250ZXh0IHZhbHVlcyBhbmQgbWlkZGxld2FyZS5cbiAgICBjb25zdCBleHRlbmRlZENvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IGNvbmZpZyA6IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyksIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIGNvbmZpZ1xuICAgIF0pO1xuICAgIC8vIFNob3VsZCBub3QgdXNlIHRoZSBpbmhlcml0ZWQgcHJvdmlkZXIuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBjb25maWcgJiYgY29uZmlnLnByb3ZpZGVyO1xuICAgIC8vIGluaXRpYWxpemUgdGhlIGNhY2hlIG9ubHkgb24gZmlyc3QgYWNjZXNzLlxuICAgIGNvbnN0IGNhY2hlQ29udGV4dFJlZiA9IHVzZVJlZihVTkRFRklORUQpO1xuICAgIGlmIChwcm92aWRlciAmJiAhY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQpIHtcbiAgICAgICAgY2FjaGVDb250ZXh0UmVmLmN1cnJlbnQgPSBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCBjb25maWcpO1xuICAgIH1cbiAgICBjb25zdCBjYWNoZUNvbnRleHQgPSBjYWNoZUNvbnRleHRSZWYuY3VycmVudDtcbiAgICAvLyBPdmVycmlkZSB0aGUgY2FjaGUgaWYgYSBuZXcgcHJvdmlkZXIgaXMgZ2l2ZW4uXG4gICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICBleHRlbmRlZENvbmZpZy5jYWNoZSA9IGNhY2hlQ29udGV4dFswXTtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcubXV0YXRlID0gY2FjaGVDb250ZXh0WzFdO1xuICAgIH1cbiAgICAvLyBVbnN1YnNjcmliZSBldmVudHMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgICAgICBjYWNoZUNvbnRleHRbMl0gJiYgY2FjaGVDb250ZXh0WzJdKCk7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVDb250ZXh0WzNdO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFNXUkNvbmZpZ0NvbnRleHQuUHJvdmlkZXIsIG1lcmdlT2JqZWN0cyhwcm9wcywge1xuICAgICAgICB2YWx1ZTogZXh0ZW5kZWRDb25maWdcbiAgICB9KSk7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBlbmFibGVEZXZ0b29scyA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX187XG5jb25zdCB1c2UgPSBlbmFibGVEZXZ0b29scyA/IHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXyA6IFtdO1xuY29uc3Qgc2V0dXBEZXZUb29scyA9ICgpPT57XG4gICAgaWYgKGVuYWJsZURldnRvb2xzKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1JFQUNUX18gPSBSZWFjdDtcbiAgICB9XG59O1xuXG5jb25zdCBub3JtYWxpemUgPSAoYXJncyk9PntcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKSA/IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgYXJnc1sxXSxcbiAgICAgICAgYXJnc1syXSB8fCB7fVxuICAgIF0gOiBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIChhcmdzWzFdID09PSBudWxsID8gYXJnc1syXSA6IGFyZ3NbMV0pIHx8IHt9XG4gICAgXTtcbn07XG5cbmNvbnN0IHVzZVNXUkNvbmZpZyA9ICgpPT57XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnLCB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpKTtcbn07XG5cbmNvbnN0IHByZWxvYWQgPSAoa2V5XywgZmV0Y2hlcik9PntcbiAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBQcmV2ZW50IHByZWxvYWQgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB1c2VkLlxuICAgIGlmIChQUkVMT0FEW2tleV0pIHJldHVybiBQUkVMT0FEW2tleV07XG4gICAgY29uc3QgcmVxID0gZmV0Y2hlcihrZXlfKTtcbiAgICBQUkVMT0FEW2tleV0gPSByZXE7XG4gICAgcmV0dXJuIHJlcTtcbn07XG5jb25zdCBtaWRkbGV3YXJlID0gKHVzZVNXUk5leHQpPT4oa2V5XywgZmV0Y2hlcl8sIGNvbmZpZyk9PntcbiAgICAgICAgLy8gZmV0Y2hlciBtaWdodCBiZSBhIHN5bmMgZnVuY3Rpb24sIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhbiBhc3luYyBmdW5jdGlvblxuICAgICAgICBjb25zdCBmZXRjaGVyID0gZmV0Y2hlcl8gJiYgKCguLi5hcmdzKT0+e1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgICAgICAgICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hlcl8oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXNlU1dSTmV4dChrZXlfLCBmZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG5cbmNvbnN0IEJVSUxUX0lOX01JRERMRVdBUkUgPSB1c2UuY29uY2F0KG1pZGRsZXdhcmUpO1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG5jb25zdCB3aXRoQXJncyA9IChob29rKT0+e1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFuZCBpbmhlcml0ZWQgY29uZmlndXJhdGlvbi5cbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgY29uc3QgW2tleSwgZm4sIF9jb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgY29uc3QgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICBsZXQgbmV4dCA9IGhvb2s7XG4gICAgICAgIGNvbnN0IHsgdXNlICB9ID0gY29uZmlnO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlID0gKHVzZSB8fCBbXSkuY29uY2F0KEJVSUxUX0lOX01JRERMRVdBUkUpO1xuICAgICAgICBmb3IobGV0IGkgPSBtaWRkbGV3YXJlLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICBuZXh0ID0gbWlkZGxld2FyZVtpXShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyIHx8IG51bGwsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovIGNvbnN0IHVzZVN0YXRlV2l0aERlcHMgPSAoc3RhdGUpPT57XG4gICAgY29uc3QgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3IsIG9yIGlzVmFsaWRhdGluZykgaXMgYWNjZXNzZWQgYnkgdGhlIHJlbmRlclxuICAgIC8vIGZ1bmN0aW9uLCB3ZSBtYXJrIHRoZSBwcm9wZXJ0eSBhcyBhIGRlcGVuZGVuY3kgc28gaWYgaXQgaXMgdXBkYXRlZCBhZ2FpblxuICAgIC8vIGluIHRoZSBmdXR1cmUsIHdlIHRyaWdnZXIgYSByZXJlbmRlci5cbiAgICAvLyBUaGlzIGlzIGFsc28ga25vd24gYXMgZGVwZW5kZW5jeS10cmFja2luZy5cbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVG8gY2hhbmdlIHN0YXRlUmVmLCBwYXNzIHRoZSB2YWx1ZXMgZXhwbGljaXRseSB0byBzZXRTdGF0ZTpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICogICBlcnJvcjogdW5kZWZpbmVkIC8vIHNldCBlcnJvciB0byB1bmRlZmluZWRcbiAgICogfSlcbiAgICpcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAqICAgZXJyb3I6IGVyciAvLyBzZXQgZXJyb3IgdG8gZXJyXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi8gY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjaygocGF5bG9hZCk9PntcbiAgICAgICAgbGV0IHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHBheWxvYWQpe1xuICAgICAgICAgICAgY29uc3QgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXJlbmRlcih7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKT0+cmVyZW5kZXIoe30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdGF0ZVJlZixcbiAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCxcbiAgICAgICAgc2V0U3RhdGVcbiAgICBdO1xufTtcblxuLy8gQWRkIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGtleWVkIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgcmV0dXJuXG4vLyB0aGUgdW5zdWJzY3JpYmUgZnVuY3Rpb24uXG5jb25zdCBzdWJzY3JpYmVDYWxsYmFjayA9IChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spPT57XG4gICAgY29uc3Qga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuLy8gQ3JlYXRlIGEgY3VzdG9tIGhvb2sgd2l0aCBhIG1pZGRsZXdhcmVcbmNvbnN0IHdpdGhNaWRkbGV3YXJlID0gKHVzZVNXUiwgbWlkZGxld2FyZSk9PntcbiAgICByZXR1cm4gKC4uLmFyZ3MpPT57XG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBjb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICBjb25zdCB1c2VzID0gKGNvbmZpZy51c2UgfHwgW10pLmNvbmNhdChtaWRkbGV3YXJlKTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUihrZXksIGZuLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICB1c2U6IHVzZXNcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5cbnNldHVwRGV2VG9vbHMoKTtcblxuZXhwb3J0IHsgSVNfUkVBQ1RfTEVHQUNZLCBJU19TRVJWRVIsIE9CSkVDVCwgU1dSQ29uZmlnLCBTV1JHbG9iYWxTdGF0ZSwgVU5ERUZJTkVELCBjYWNoZSwgY29tcGFyZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGRlZmF1bHRDb25maWcsIGRlZmF1bHRDb25maWdPcHRpb25zLCBnZXRUaW1lc3RhbXAsIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgaW5pdENhY2hlLCBpbnRlcm5hbE11dGF0ZSwgaXNEb2N1bWVudERlZmluZWQsIGlzRnVuY3Rpb24sIGlzVW5kZWZpbmVkLCBpc1dpbmRvd0RlZmluZWQsIG1lcmdlQ29uZmlncywgbWVyZ2VPYmplY3RzLCBtdXRhdGUsIG5vb3AsIG5vcm1hbGl6ZSwgcHJlbG9hZCwgcHJlc2V0LCByQUYsIGNvbnN0YW50cyBhcyByZXZhbGlkYXRlRXZlbnRzLCBzZXJpYWxpemUsIHNsb3dDb25uZWN0aW9uLCBzdGFibGVIYXNoLCBzdWJzY3JpYmVDYWxsYmFjaywgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlU1dSQ29uZmlnLCB1c2VTdGF0ZVdpdGhEZXBzLCB3aXRoQXJncywgd2l0aE1pZGRsZXdhcmUgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMnO1xuaW1wb3J0IHsgT0JKRUNULCBTV1JDb25maWcgYXMgU1dSQ29uZmlnJDEsIGRlZmF1bHRDb25maWcsIHdpdGhBcmdzLCBTV1JHbG9iYWxTdGF0ZSwgc2VyaWFsaXplLCBjcmVhdGVDYWNoZUhlbHBlciwgaXNVbmRlZmluZWQsIGdldFRpbWVzdGFtcCwgVU5ERUZJTkVELCBpc0Z1bmN0aW9uLCByZXZhbGlkYXRlRXZlbnRzLCBpbnRlcm5hbE11dGF0ZSwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgc3Vic2NyaWJlQ2FsbGJhY2ssIElTX1NFUlZFUiwgckFGLCBJU19SRUFDVF9MRUdBQ1ksIG1lcmdlT2JqZWN0cyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuZXhwb3J0IHsgbXV0YXRlLCBwcmVsb2FkLCB1c2VTV1JDb25maWcgfSBmcm9tICdzd3IvX2ludGVybmFsJztcblxuY29uc3QgV0lUSF9ERURVUEUgPSB7XG4gICAgZGVkdXBlOiB0cnVlXG59O1xuY29uc3QgdXNlU1dSSGFuZGxlciA9IChfa2V5LCBmZXRjaGVyLCBjb25maWcpPT57XG4gICAgY29uc3QgeyBjYWNoZSAsIGNvbXBhcmUgLCBzdXNwZW5zZSAsIGZhbGxiYWNrRGF0YSAsIHJldmFsaWRhdGVPbk1vdW50ICwgcmV2YWxpZGF0ZUlmU3RhbGUgLCByZWZyZXNoSW50ZXJ2YWwgLCByZWZyZXNoV2hlbkhpZGRlbiAsIHJlZnJlc2hXaGVuT2ZmbGluZSAsIGtlZXBQcmV2aW91c0RhdGEgIH0gPSBjb25maWc7XG4gICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gYGtleWAgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFNXUiBgZGF0YWAgc3RhdGUsIGBrZXlJbmZvYCBob2xkcyBleHRyYVxuICAgIC8vIHN0YXRlcyBzdWNoIGFzIGBlcnJvcmAgYW5kIGBpc1ZhbGlkYXRpbmdgIGluc2lkZSxcbiAgICAvLyBhbGwgb2YgdGhlbSBhcmUgZGVyaXZlZCBmcm9tIGBfa2V5YC5cbiAgICAvLyBgZm5BcmdgIGlzIHRoZSBhcmd1bWVudC9hcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGtleSwgd2hpY2ggd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0byB0aGUgZmV0Y2hlci5cbiAgICBjb25zdCBba2V5LCBmbkFyZ10gPSBzZXJpYWxpemUoX2tleSk7XG4gICAgLy8gSWYgaXQncyB0aGUgaW5pdGlhbCByZW5kZXIgb2YgdGhpcyBob29rLlxuICAgIGNvbnN0IGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIFJlZnMgdG8ga2VlcCB0aGUga2V5IGFuZCBjb25maWcuXG4gICAgY29uc3Qga2V5UmVmID0gdXNlUmVmKGtleSk7XG4gICAgY29uc3QgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICBjb25zdCBjb25maWdSZWYgPSB1c2VSZWYoY29uZmlnKTtcbiAgICBjb25zdCBnZXRDb25maWcgPSAoKT0+Y29uZmlnUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaXNBY3RpdmUgPSAoKT0+Z2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkgJiYgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKTtcbiAgICBjb25zdCBbZ2V0Q2FjaGUsIHNldENhY2hlLCBzdWJzY3JpYmVDYWNoZSwgZ2V0SW5pdGlhbENhY2hlXSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgIGNvbnN0IHN0YXRlRGVwZW5kZW5jaWVzID0gdXNlUmVmKHt9KS5jdXJyZW50O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKSA/IGNvbmZpZy5mYWxsYmFja1trZXldIDogZmFsbGJhY2tEYXRhO1xuICAgIGNvbnN0IGlzRXF1YWwgPSAocHJldiwgY3VycmVudCk9PntcbiAgICAgICAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gc3RhdGVEZXBlbmRlbmNpZXMpe1xuICAgICAgICAgICAgY29uc3QgdCA9IF87XG4gICAgICAgICAgICBpZiAodCA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHJldHVybmVkRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbdF0gIT09IHByZXZbdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVxdWFsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U25hcHNob3QgPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0UmVxdWVzdCA9ICgoKT0+e1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghZmV0Y2hlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZUlmU3RhbGUpKSByZXR1cm4gcmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgLy8gR2V0IHRoZSBjYWNoZSBhbmQgbWVyZ2UgaXQgd2l0aCBleHBlY3RlZCBzdGF0ZXMuXG4gICAgICAgIGNvbnN0IGdldFNlbGVjdGVkQ2FjaGUgPSAoc3RhdGUpPT57XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNlbGVjdCB0aGUgbmVlZGVkIGZpZWxkcyBmcm9tIHRoZSBzdGF0ZS5cbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbWVyZ2VPYmplY3RzKHN0YXRlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzbmFwc2hvdC5faztcbiAgICAgICAgICAgIGlmICghc2hvdWxkU3RhcnRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLnNuYXBzaG90XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCBjYWNoZWREYXRhID0gZ2V0Q2FjaGUoKTtcbiAgICAgICAgY29uc3QgaW5pdGlhbERhdGEgPSBnZXRJbml0aWFsQ2FjaGUoKTtcbiAgICAgICAgY29uc3QgY2xpZW50U25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGNhY2hlZERhdGEpO1xuICAgICAgICBjb25zdCBzZXJ2ZXJTbmFwc2hvdCA9IGNhY2hlZERhdGEgPT09IGluaXRpYWxEYXRhID8gY2xpZW50U25hcHNob3QgOiBnZXRTZWxlY3RlZENhY2hlKGluaXRpYWxEYXRhKTtcbiAgICAgICAgLy8gVG8gbWFrZSBzdXJlIHRoYXQgd2UgYXJlIHJldHVybmluZyB0aGUgc2FtZSBvYmplY3QgcmVmZXJlbmNlIHRvIGF2b2lkXG4gICAgICAgIC8vIHVubmVjZXNzYXJ5IHJlLXJlbmRlcnMsIHdlIGtlZXAgdGhlIHByZXZpb3VzIHNuYXBzaG90IGFuZCB1c2UgZGVlcFxuICAgICAgICAvLyBjb21wYXJpc29uIHRvIGNoZWNrIGlmIHdlIG5lZWQgdG8gcmV0dXJuIGEgbmV3IG9uZS5cbiAgICAgICAgbGV0IG1lbW9yaXplZFNuYXBzaG90ID0gY2xpZW50U25hcHNob3Q7XG4gICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAoKT0+e1xuICAgICAgICAgICAgICAgIGNvbnN0IG5ld1NuYXBzaG90ID0gZ2V0U2VsZWN0ZWRDYWNoZShnZXRDYWNoZSgpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gaXNFcXVhbChuZXdTbmFwc2hvdCwgbWVtb3JpemVkU25hcHNob3QpID8gbWVtb3JpemVkU25hcHNob3QgOiBtZW1vcml6ZWRTbmFwc2hvdCA9IG5ld1NuYXBzaG90O1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICgpPT5zZXJ2ZXJTbmFwc2hvdFxuICAgICAgICBdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICBjb25zdCBjYWNoZWQgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSh1c2VDYWxsYmFjaygoY2FsbGJhY2spPT5zdWJzY3JpYmVDYWNoZShrZXksIChjdXJyZW50LCBwcmV2KT0+e1xuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIGN1cnJlbnQpKSBjYWxsYmFjaygpO1xuICAgICAgICB9KSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pLCBnZXRTbmFwc2hvdFswXSwgZ2V0U25hcHNob3RbMV0pO1xuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaGFzUmV2YWxpZGF0b3IgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XSAmJiBFVkVOVF9SRVZBTElEQVRPUlNba2V5XS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBjYWNoZWQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBmYWxsYmFjayA6IGNhY2hlZERhdGE7XG4gICAgY29uc3QgZXJyb3IgPSBjYWNoZWQuZXJyb3I7XG4gICAgLy8gVXNlIGEgcmVmIHRvIHN0b3JlIHByZXZpb3VzbHkgcmV0dXJuZWQgZGF0YS4gVXNlIHRoZSBpbml0aWFsIGRhdGEgYXMgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgY29uc3QgbGFnZ3lEYXRhUmVmID0gdXNlUmVmKGRhdGEpO1xuICAgIGNvbnN0IHJldHVybmVkRGF0YSA9IGtlZXBQcmV2aW91c0RhdGEgPyBpc1VuZGVmaW5lZChjYWNoZWREYXRhKSA/IGxhZ2d5RGF0YVJlZi5jdXJyZW50IDogY2FjaGVkRGF0YSA6IGRhdGE7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICBjb25zdCBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24gPSAoKCk9PntcbiAgICAgICAgLy8gaWYgYSBrZXkgYWxyZWFkeSBoYXMgcmV2YWxpZGF0b3JzIGFuZCBhbHNvIGhhcyBlcnJvciwgd2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIHJldmFsaWRhdGlvblxuICAgICAgICBpZiAoaGFzUmV2YWxpZGF0b3IgJiYgIWlzVW5kZWZpbmVkKGVycm9yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgIGlmIChpc0luaXRpYWxNb3VudCAmJiAhaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG1vdW50IGl0IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgPyBmYWxzZSA6IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdGFsZSBkYXRhLCB3ZSBuZWVkIHRvIHJldmFsaWRhdGUgd2hlbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgIH0pKCk7XG4gICAgLy8gUmVzb2x2ZSB0aGUgZGVmYXVsdCB2YWxpZGF0aW5nIHN0YXRlOlxuICAgIC8vIElmIGl0J3MgYWJsZSB0byB2YWxpZGF0ZSwgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIHdoZW4gbW91bnQsIHRoaXMgd2lsbCBiZSB0cnVlLlxuICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgPSAhIShrZXkgJiYgZmV0Y2hlciAmJiBpc0luaXRpYWxNb3VudCAmJiBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pO1xuICAgIGNvbnN0IGlzVmFsaWRhdGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc1ZhbGlkYXRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc1ZhbGlkYXRpbmc7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gaXNVbmRlZmluZWQoY2FjaGVkLmlzTG9hZGluZykgPyBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlIDogY2FjaGVkLmlzTG9hZGluZztcbiAgICAvLyBUaGUgcmV2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgd3JhcHBlciBvZiB0aGUgb3JpZ2luYWxcbiAgICAvLyBgZmV0Y2hlcmAsIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIG1hbnkgZWRnZSBjYXNlcy5cbiAgICBjb25zdCByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJldmFsaWRhdGVPcHRzKT0+e1xuICAgICAgICBjb25zdCBjdXJyZW50RmV0Y2hlciA9IGZldGNoZXJSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFrZXkgfHwgIWN1cnJlbnRGZXRjaGVyIHx8IHVubW91bnRlZFJlZi5jdXJyZW50IHx8IGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3RGF0YTtcbiAgICAgICAgbGV0IHN0YXJ0QXQ7XG4gICAgICAgIGxldCBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBvbmdvaW5nIGNvbmN1cnJlbnQgcmVxdWVzdCwgb3IgYGRlZHVwZWAgaXMgbm90IHNldCwgYVxuICAgICAgICAvLyBuZXcgcmVxdWVzdCBzaG91bGQgYmUgaW5pdGlhdGVkLlxuICAgICAgICBjb25zdCBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgIC8qXG4gICAgICAgICBGb3IgUmVhY3QgMTdcbiAgICAgICAgIERvIHVubW91bnQgY2hlY2sgZm9yIGNhbGxzOlxuICAgICAgICAgSWYga2V5IGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgcmV2YWxpZGF0aW9uLCBvciB0aGUgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAgICB1bm1vdW50ZWQsIG9sZCBkaXNwYXRjaCBhbmQgb2xkIGV2ZW50IGNhbGxiYWNrcyBzaG91bGQgbm90IHRha2UgYW55XG4gICAgICAgICBlZmZlY3RcblxuICAgICAgICBGb3IgUmVhY3QgMThcbiAgICAgICAgb25seSBjaGVjayBpZiBrZXkgaGFzIGNoYW5nZWRcbiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0d2cvcmVhY3QtMTgvZGlzY3Vzc2lvbnMvODJcbiAgICAgICovIGNvbnN0IGNhbGxiYWNrU2FmZWd1YXJkID0gKCk9PntcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmIGtleSA9PT0ga2V5UmVmLmN1cnJlbnQgJiYgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IGtleVJlZi5jdXJyZW50O1xuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgZmluYWwgc3RhdGUgb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgc2V0Q2FjaGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNsZWFudXBTdGF0ZSA9ICgpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHN0aWxsIHRoZSBzYW1lIHJlcXVlc3QgYmVmb3JlIGRlbGV0aW5nIGl0LlxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIFN0YXJ0IGZldGNoaW5nLiBDaGFuZ2UgdGhlIGBpc1ZhbGlkYXRpbmdgIHN0YXRlLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSXQgaXMgaW4gdGhlIGBpc0xvYWRpbmdgIHN0YXRlLCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBjYWNoZWQgZGF0YS5cbiAgICAgICAgLy8gVGhpcyBieXBhc3NlcyBmYWxsYmFjayBkYXRhIGFuZCBsYWdneSBkYXRhLlxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBzZXRDYWNoZShpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vIGNhY2hlIGlzIGJlaW5nIHJlbmRlcmVkIGN1cnJlbnRseSAoaXQgc2hvd3MgYSBibGFuayBwYWdlKSxcbiAgICAgICAgICAgICAgICAvLyB3ZSB0cmlnZ2VyIHRoZSBsb2FkaW5nIHNsb3cgZXZlbnQuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiBpc1VuZGVmaW5lZChnZXRDYWNoZSgpLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHJlcXVlc3QgYW5kIHNhdmUgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgICAvLyBLZXkgbXVzdCBiZSB0cnV0aHkgaWYgZW50ZXJpbmcgaGVyZS5cbiAgICAgICAgICAgICAgICBGRVRDSFtrZXldID0gW1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmV0Y2hlcihmbkFyZyksXG4gICAgICAgICAgICAgICAgICAgIGdldFRpbWVzdGFtcCgpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtuZXdEYXRhLCBzdGFydEF0XSA9IEZFVENIW2tleV07XG4gICAgICAgICAgICBuZXdEYXRhID0gYXdhaXQgbmV3RGF0YTtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpc24ndCBpbnRlcnJ1cHRlZCwgY2xlYW4gaXQgdXAgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgb25nb2luZyByZXF1ZXN0KHMpLCBzdGFydGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZSxcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAvLyAgIHJlcTEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzMSAgICAgICAgKGN1cnJlbnQgb25lKVxuICAgICAgICAgICAgLy8gICAgICAgIHJlcTItLS0tLS0tLS0tLS0tLS0tPnJlczJcbiAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgIC8vIFRoZSB0aW1lc3RhbXAgbWF5YmUgYmUgYHVuZGVmaW5lZGAgb3IgYSBudW1iZXJcbiAgICAgICAgICAgIGlmICghRkVUQ0hba2V5XSB8fCBGRVRDSFtrZXldWzFdICE9PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciBlcnJvci5cbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZXJyb3IgPSBVTkRFRklORUQ7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdyZSBvdGhlciBtdXRhdGlvbnMocyksIHRoYXQgb3ZlcmxhcHBlZCB3aXRoIHRoZSBjdXJyZW50IHJldmFsaWRhdGlvbjpcbiAgICAgICAgICAgIC8vIGNhc2UgMTpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tPmVuZFxuICAgICAgICAgICAgLy8gY2FzZSAyOlxuICAgICAgICAgICAgLy8gICAgICAgICByZXEtLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMzpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tLS4uLi0tLS0tLS0tLS0+XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgcmV2YWxpZGF0aW9uIHJlc3VsdCAocmVzKSBiZWNhdXNlIGl0J3Mgbm8gbG9uZ2VyIGZyZXNoLlxuICAgICAgICAgICAgLy8gbWVhbndoaWxlLCBhIG5ldyByZXZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBtdXRhdGlvbiBlbmRzLlxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQobXV0YXRpb25JbmZvKSAmJiAvLyBjYXNlIDFcbiAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fCAvLyBjYXNlIDJcbiAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8IC8vIGNhc2UgM1xuICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSB0byBhdm9pZCBleHRyYSByZS1yZW5kZXJzLlxuICAgICAgICAgICAgLy8gRm9yIGxvY2FsIHN0YXRlLCBjb21wYXJlIGFuZCBhc3NpZ24uXG4gICAgICAgICAgICBjb25zdCBjYWNoZURhdGEgPSBnZXRDYWNoZSgpLmRhdGE7XG4gICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29tcGFyZSBmbiBjb3VsZCBiZSBjdXN0b20gZm5cbiAgICAgICAgICAgIC8vIGNhY2hlRGF0YSBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBuZXdEYXRhIGV2ZW4gd2hlbiBjb21wYXJlIGZuIHJldHVybnMgVHJ1ZVxuICAgICAgICAgICAgZmluYWxTdGF0ZS5kYXRhID0gY29tcGFyZShjYWNoZURhdGEsIG5ld0RhdGEpID8gY2FjaGVEYXRhIDogbmV3RGF0YTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaWYgaXQncyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwU3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2hvdWxkUmV0cnlPbkVycm9yICB9ID0gY3VycmVudENvbmZpZztcbiAgICAgICAgICAgIC8vIE5vdCBwYXVzZWQsIHdlIGNvbnRpbnVlIGhhbmRsaW5nIHRoZSBlcnJvci4gT3RoZXJ3aXNlLCBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29uZmlnLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgZXJyb3IsIGRvbid0IHVzZSBkZWVwIGNvbXBhcmlzb24gZm9yIGVycm9ycy5cbiAgICAgICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIC8vIEVycm9yIGV2ZW50IGFuZCByZXRyeSBsb2dpYy4gT25seSBmb3IgdGhlIGFjdHVhbCByZXF1ZXN0LCBub3RcbiAgICAgICAgICAgICAgICAvLyBkZWR1cGVkIG9uZXMuXG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvcihlcnIsIGtleSwgY3VycmVudENvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZXRyeU9uRXJyb3IgPT09IHRydWUgfHwgaXNGdW5jdGlvbihzaG91bGRSZXRyeU9uRXJyb3IpICYmIHNob3VsZFJldHJ5T25FcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgaW5hY3RpdmUsIHN0b3AuIEl0IHdpbGwgYXV0by1yZXZhbGlkYXRlIHdoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZvY3VzaW5nIG9yIHJlY29ubmVjdGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJldHJ5aW5nLCBkZWR1cGxpY2F0aW9uIGlzIGFsd2F5cyBlbmFibGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvclJldHJ5KGVyciwga2V5LCBjdXJyZW50Q29uZmlnLCAoX29wdHMpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2YWxpZGF0b3JzICYmIHJldmFsaWRhdG9yc1swXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV2YWxpZGF0b3JzWzBdKHJldmFsaWRhdGVFdmVudHMuRVJST1JfUkVWQUxJREFURV9FVkVOVCwgX29wdHMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXRyeUNvdW50OiAob3B0cy5yZXRyeUNvdW50IHx8IDApICsgMSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVkdXBlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gTWFyayBsb2FkaW5nIGFzIHN0b3BwZWQuXG4gICAgICAgIGxvYWRpbmcgPSBmYWxzZTtcbiAgICAgICAgLy8gVXBkYXRlIHRoZSBjdXJyZW50IGhvb2sncyBzdGF0ZS5cbiAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH0sIC8vIGBzZXRTdGF0ZWAgaXMgaW1tdXRhYmxlLCBhbmQgYGV2ZW50c0NhbGxiYWNrYCwgYGZuQXJnYCwgYW5kXG4gICAgLy8gYGtleVZhbGlkYXRpbmdgIGFyZSBkZXBlbmRpbmcgb24gYGtleWAsIHNvIHdlIGNhbiBleGNsdWRlIHRoZW0gZnJvbVxuICAgIC8vIHRoZSBkZXBzIGFycmF5LlxuICAgIC8vXG4gICAgLy8gRklYTUU6XG4gICAgLy8gYGZuYCBhbmQgYGNvbmZpZ2AgbWlnaHQgYmUgY2hhbmdlZCBkdXJpbmcgdGhlIGxpZmVjeWNsZSxcbiAgICAvLyBidXQgdGhleSBtaWdodCBiZSBjaGFuZ2VkIGV2ZXJ5IHJlbmRlciBsaWtlIHRoaXMuXG4gICAgLy8gYHVzZVNXUigna2V5JywgKCkgPT4gZmV0Y2goJy9hcGkvJyksIHsgc3VzcGVuc2U6IHRydWUgfSlgXG4gICAgLy8gU28gd2Ugb21pdCB0aGUgdmFsdWVzIGZyb20gdGhlIGRlcHMgYXJyYXlcbiAgICAvLyBldmVuIHRob3VnaCBpdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBrZXksXG4gICAgICAgIGNhY2hlXG4gICAgXSk7XG4gICAgLy8gU2ltaWxhciB0byB0aGUgZ2xvYmFsIG11dGF0ZSBidXQgYm91bmQgdG8gdGhlIGN1cnJlbnQgY2FjaGUgYW5kIGtleS5cbiAgICAvLyBgY2FjaGVgIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBjb25zdCBib3VuZE11dGF0ZSA9IHVzZUNhbGxiYWNrKC8vIFVzZSBjYWxsYmFjayB0byBtYWtlIHN1cmUgYGtleVJlZi5jdXJyZW50YCByZXR1cm5zIGxhdGVzdCByZXN1bHQgZXZlcnkgdGltZVxuICAgICguLi5hcmdzKT0+e1xuICAgICAgICByZXR1cm4gaW50ZXJuYWxNdXRhdGUoY2FjaGUsIGtleVJlZi5jdXJyZW50LCAuLi5hcmdzKTtcbiAgICB9LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW10pO1xuICAgIC8vIFRoZSBsb2dpYyBmb3IgdXBkYXRpbmcgcmVmcy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICAvLyBIYW5kbGUgbGFnZ3kgZGF0YSB1cGRhdGVzLiBJZiB0aGVyZSdzIGNhY2hlZCBkYXRhIG9mIHRoZSBjdXJyZW50IGtleSxcbiAgICAgICAgLy8gaXQnbGwgYmUgdGhlIGNvcnJlY3QgcmVmZXJlbmNlLlxuICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGNhY2hlZERhdGEpKSB7XG4gICAgICAgICAgICBsYWdneURhdGFSZWYuY3VycmVudCA9IGNhY2hlZERhdGE7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBBZnRlciBtb3VudGVkIG9yIGtleSBjaGFuZ2VkLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgaWYgKCFrZXkpIHJldHVybjtcbiAgICAgICAgY29uc3Qgc29mdFJldmFsaWRhdGUgPSByZXZhbGlkYXRlLmJpbmQoVU5ERUZJTkVELCBXSVRIX0RFRFVQRSk7XG4gICAgICAgIC8vIEV4cG9zZSByZXZhbGlkYXRvcnMgdG8gZ2xvYmFsIGV2ZW50IGxpc3RlbmVycy4gU28gd2UgY2FuIHRyaWdnZXJcbiAgICAgICAgLy8gcmV2YWxpZGF0aW9uIGZyb20gdGhlIG91dHNpZGUuXG4gICAgICAgIGxldCBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gMDtcbiAgICAgICAgY29uc3Qgb25SZXZhbGlkYXRlID0gKHR5cGUsIG9wdHMgPSB7fSk9PntcbiAgICAgICAgICAgIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuRk9DVVNfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5yZXZhbGlkYXRlT25Gb2N1cyAmJiBub3cgPiBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IG5vdyArIGdldENvbmZpZygpLmZvY3VzVGhyb3R0bGVJbnRlcnZhbDtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5SRUNPTk5FQ1RfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uUmVjb25uZWN0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5NVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuRVJST1JfUkVWQUxJREFURV9FVkVOVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlKG9wdHMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bnN1YkV2ZW50cyA9IHN1YnNjcmliZUNhbGxiYWNrKGtleSwgRVZFTlRfUkVWQUxJREFUT1JTLCBvblJldmFsaWRhdGUpO1xuICAgICAgICAvLyBNYXJrIHRoZSBjb21wb25lbnQgYXMgbW91bnRlZCBhbmQgdXBkYXRlIGNvcnJlc3BvbmRpbmcgcmVmcy5cbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAga2V5UmVmLmN1cnJlbnQgPSBrZXk7XG4gICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAvLyBLZWVwIHRoZSBvcmlnaW5hbCBrZXkgaW4gdGhlIGNhY2hlLlxuICAgICAgICBzZXRDYWNoZSh7XG4gICAgICAgICAgICBfazogZm5BcmdcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSB8fCBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRoZSByZXZhbGlkYXRlIGlmIHdlIGhhdmUgZGF0YSB0byByZXR1cm4gc28gd2Ugd29uJ3QgYmxvY2tcbiAgICAgICAgICAgICAgICAvLyByZW5kZXJpbmcuXG4gICAgICAgICAgICAgICAgckFGKHNvZnRSZXZhbGlkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIC8vIE1hcmsgaXQgYXMgdW5tb3VudGVkLlxuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdW5zdWJFdmVudHMoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIFBvbGxpbmdcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGxldCB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IGlzRnVuY3Rpb24ocmVmcmVzaEludGVydmFsKSA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKSA6IHJlZnJlc2hJbnRlcnZhbDtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc3RhcnQgdGhlIG5leHQgaW50ZXJ2YWwgaWYgYHJlZnJlc2hJbnRlcnZhbGAgaXMgbm90IDAsIGFuZDpcbiAgICAgICAgICAgIC8vIC0gYGZvcmNlYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgc3RhcnQgb2YgcG9sbGluZ1xuICAgICAgICAgICAgLy8gLSBvciBgdGltZXJgIGlzIG5vdCAwLCB3aGljaCBtZWFucyB0aGUgZWZmZWN0IHdhc24ndCBjYW5jZWxlZFxuICAgICAgICAgICAgaWYgKGludGVydmFsICYmIHRpbWVyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChleGVjdXRlLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgT0sgdG8gZXhlY3V0ZTpcbiAgICAgICAgICAgIC8vIE9ubHkgcmV2YWxpZGF0ZSB3aGVuIHRoZSBwYWdlIGlzIHZpc2libGUsIG9ubGluZSwgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFnZXRDYWNoZSgpLmVycm9yICYmIChyZWZyZXNoV2hlbkhpZGRlbiB8fCBnZXRDb25maWcoKS5pc1Zpc2libGUoKSkgJiYgKHJlZnJlc2hXaGVuT2ZmbGluZSB8fCBnZXRDb25maWcoKS5pc09ubGluZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUoV0lUSF9ERURVUEUpLnRoZW4obmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBuZXh0IGludGVydmFsIHRvIGNoZWNrIGFnYWluLlxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgcmVmcmVzaEludGVydmFsLFxuICAgICAgICByZWZyZXNoV2hlbkhpZGRlbixcbiAgICAgICAgcmVmcmVzaFdoZW5PZmZsaW5lLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShyZXR1cm5lZERhdGEpO1xuICAgIC8vIEluIFN1c3BlbnNlIG1vZGUsIHdlIGNhbid0IHJldHVybiB0aGUgZW1wdHkgYGRhdGFgIHN0YXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIGFuIGBlcnJvcmAsIHRoZSBgZXJyb3JgIG5lZWRzIHRvIGJlIHRocm93biB0byB0aGUgZXJyb3IgYm91bmRhcnkuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYGVycm9yYCwgdGhlIGByZXZhbGlkYXRpb25gIHByb21pc2UgbmVlZHMgdG8gYmUgdGhyb3duIHRvXG4gICAgLy8gdGhlIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIGlmIChzdXNwZW5zZSAmJiBpc1VuZGVmaW5lZChkYXRhKSAmJiBrZXkpIHtcbiAgICAgICAgLy8gU1dSIHNob3VsZCB0aHJvdyB3aGVuIHRyeWluZyB0byB1c2UgU3VzcGVuc2Ugb24gdGhlIHNlcnZlciB3aXRoIFJlYWN0IDE4LFxuICAgICAgICAvLyB3aXRob3V0IHByb3ZpZGluZyBhbnkgaW5pdGlhbCBkYXRhLiBTZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xODMyXG4gICAgICAgIGlmICghSVNfUkVBQ1RfTEVHQUNZICYmIElTX1NFUlZFUikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWxsYmFjayBkYXRhIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc3VzcGVuc2UgaW4gU1NSLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZGF0YSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuZWREYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNWYWxpZGF0aW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzVmFsaWRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZGF0aW5nO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNMb2FkaW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5jb25zdCBTV1JDb25maWcgPSBPQkpFQ1QuZGVmaW5lUHJvcGVydHkoU1dSQ29uZmlnJDEsICdkZWZhdWx0VmFsdWUnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xuY29uc3QgdW5zdGFibGVfc2VyaWFsaXplID0gKGtleSk9PnNlcmlhbGl6ZShrZXkpWzBdO1xuLyoqXG4gKiBBIGhvb2sgdG8gZmV0Y2ggZGF0YS5cbiAqXG4gKiBAbGluayBodHRwczovL3N3ci52ZXJjZWwuYXBwXG4gKiBAZXhhbXBsZVxuICogYGBganN4XG4gKiBpbXBvcnQgdXNlU1dSIGZyb20gJ3N3cidcbiAqIGZ1bmN0aW9uIFByb2ZpbGUoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHVzZVNXUignL2FwaS91c2VyJywgZmV0Y2hlcilcbiAqICAgaWYgKGVycm9yKSByZXR1cm4gPGRpdj5mYWlsZWQgdG8gbG9hZDwvZGl2PlxuICogICBpZiAoIWRhdGEpIHJldHVybiA8ZGl2PmxvYWRpbmcuLi48L2Rpdj5cbiAqICAgcmV0dXJuIDxkaXY+aGVsbG8ge2RhdGEubmFtZX0hPC9kaXY+XG4gKiB9XG4gKiBgYGBcbiAqLyB2YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCB1bnN0YWJsZV9zZXJpYWxpemUgfTtcbiIsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNXUkNvbmZpZyB9IGZyb20gXCJzd3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNXUkhvb2tzQ29uZmlnKCkge1xuICAgIHZhciBzd3JDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICB2YXIgdmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IG11dGF0ZTogc3dyQ29uZmlnLm11dGF0ZSwgY2FjaGU6IHN3ckNvbmZpZy5jYWNoZSB9KTsgfSwgW3N3ckNvbmZpZy5tdXRhdGUsIHN3ckNvbmZpZy5jYWNoZV0pO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVNXUkhvb2tzQ29uZmlnLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSA9PT0gdm9pZCAwKSB7IGluaXRpYWxWYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKGluaXRpYWxWYWx1ZSksIDIpLCB2YWx1ZSA9IF9hWzBdLCBzZXRWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciB0b2dnbGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFZhbHVlKGZ1bmN0aW9uIChwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZXZWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbdmFsdWUsIHRvZ2dsZV07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VUb2dnbGUuanMubWFwIiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVtS0FabUxrQVJMelgzZ251S2twXCIsXCJsZWZ0XCI6XCJ1MWw1QUpHYlVpUDZSVkZJS3hPSVwiLFwic21hbGxcIjpcImh4WnBLOUNwQksxd1IwVzB2NFNEXCIsXCJsYXJnZVwiOlwibzlEWW10NHhmTGFJbWlWekk5ZFFcIixcInhsYXJnZVwiOlwicW1FVnhTWlM1a2ZMM2FWYmVlMW5cIixcImludmVydGVkXCI6XCJDTk9aSExkOVhib2t6T1c2TFlCUFwiLFwicm91bmRlZFwiOlwiakpDQXp3MlN5YUg0dElXWHJBbFJcIixcInJpZ2h0T2Zmc2V0XCI6XCJLR0N1N2FQalF5X2FGTmpIV051d1wiLFwibGVmdE9mZnNldFwiOlwiZERIWXlHelhOaTc3M0ZBbDEzR1hcIixcIm5vU2hhZG93XCI6XCJsUUYxWWNVcU0wT0h2UFNsU3dsX1wiLFwibm9Cb3JkZXJcIjpcInNFbzI1RWl2NnpzMURfeDVxOFZ5XCIsXCJ0cmFuc3BhcmVudFwiOlwidm0zY21BTk51WWxhUU01WXF6OUdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIlBpa2Z6ajd6WWcySW50ZEp5bXVLXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwib1NnVjVjd1g2aW5rU2JDRzk4dzhcIixcIm5vUGFkZGluZ1wiOlwiZ1NackdSMXhxbThRMWlSVWZHZ2FcIixcImNvbnRlbnRcIjpcInBZTFVqOW5vQXFUOFd5dGpET09iXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcImlPeV90aFVmd3hJcVpPcldTSXp4XCIsXCJpbnZlcnRlZFwiOlwiZzc5ampjV1ZubXhMb1BOeUF4NDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlVuajRycDFEeTcxQUNydXpYbDc1XCIsXCJsZWZ0XCI6XCJFWFdNUnZ2ZVJ2UWlmaXh6VEgwMlwiLFwic21hbGxcIjpcIl9VMHpuVWs1UVRBelBuUzJnYUxDXCIsXCJtZWRpdW1cIjpcImFIOHU0czJNdFljNXk0dnl1YkR3XCIsXCJsYXJnZVwiOlwiYzMwNnlWNzhhbF9lR3dCU2ttRm1cIixcInhsYXJnZVwiOlwieHZBMW1lVW1FMjhBRU9wanNXYzlcIixcImludmVydGVkXCI6XCJXQjc3WUlET1N3Sm9YNjhOamxVR1wiLFwicm91bmRlZFwiOlwiazJuSkNzRU5OZ0N6Mkhsc2pfYkdcIixcInJpZ2h0T2Zmc2V0XCI6XCJqQWU1RVZFMzdPcktZdmtYZGMxc1wiLFwibGVmdE9mZnNldFwiOlwiRGdidEI2RzRMb0JEZDA0UF9Nek9cIixcIm5vU2hhZG93XCI6XCJLcFFJOTVfZjhuSHZrN0cySjZoOFwiLFwidHJhbnNwYXJlbnRcIjpcIkw4UG54VVFvZ3pnRk1NVDdRSTRkXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJKdWxheFNjY29HbXF0Z1ROSm1rOVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInpUWXI5VzdnMlNxYlZqUEZBb2tHXCIsXCJub1BhZGRpbmdcIjpcIlVIelRtNTFrVnlsbDUyX1M3c0dCXCIsXCJub0JvcmRlclwiOlwiaFJQMVhZZnVKNDlUc1lVX2NPNUFcIixcImRpc2FibGVkXCI6XCJsd1dJVFBoTTlUTW81ODVEc2F3OFwiLFwiY29udGVudFwiOlwiTXlUX1B1ZkpkRXZzWkUzaFNXOFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjaGVja2JveFwiOlwic3k4bEtWV1A1NkFsT1I3eXNfOUFcIixcInNtYWxsXCI6XCJYamZwY3VQdGd1Rlp2S3J4eHQ3eVwiLFwibWVkaXVtXCI6XCJ0TFAzZFpXZXBYSDNIS2cxN3NPSFwiLFwibGFyZ2VcIjpcIldncDlxSFdEclFpOWZtY3hRSVZLXCIsXCJ4bGFyZ2VcIjpcImxVQTZ0cExrV2NHRmdub3FDRnZ1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIktrMmRwMTVId01aeklOYlVGQVo0XCIsXCJob3Jpem9udGFsXCI6XCJKc3pPX1VnN3BLTFlRMERlaE44X1wiLFwidmVydGljYWxcIjpcIkVWVDYybGdoQzk5ZTliZGpZbHk1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcIlB2YmVCbTRTTXRNcWxRTlR5UWpRXCIsXCJzbWFsbFwiOlwiUzdFM0VQeV9BV1F1a0VleHV2VGZcIixcImxhcmdlXCI6XCJhMUZzSXRLUFFFT0JlVHFCQ3VEbFwiLFwieGxhcmdlXCI6XCJzRmhnUUVOX1VPTDNaeE9BUjFJZVwiLFwic2VsZWN0ZWRcIjpcImFVeDJ1U0JTczE0VnF3UHFqdmxRXCIsXCJzck9ubHlcIjpcIkpJUW1lWmRkOVRGbDVJX2dpZlBpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJaWlZIY1g0NVhDYmxtRGFiOWV3WlwiLFwibW9kYWxIZWFkZXJcIjpcInhUWDFYSmZDU1VzcmhfeUxsWm9pXCIsXCJtb2RhbENvbnRlbnRcIjpcIlRlNmpIZGx5anNRWG1uVHM5YmFuXCIsXCJub1BhZGRpbmdcIjpcIkx6X2d3U3dQM1FDTjV6WXpGc0VpXCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIkdoMXV2eE1mRWdQVGR0NjZRaXMyXCIsXCJtb2RhbEJ1dHRvbnNcIjpcIklhdzM0RmtNSnFqckdRNThCR2Z4XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiZHJhd2VyXCI6XCJVM2RDenFUeXlueXpCbjJtRmttV1wiLFwidmlzaWJsZVwiOlwic1RjSmRRVWFaUE9lc2VEXzJmZTBcIixcImRyYXdlclBhcGVyXCI6XCJJM1owakE4NU5yWUhKMXdEWkhXYlwiLFwiZHJhd2VyUGFwZXJFbnRlclwiOlwiTVdMYmFVWklNMUpiRExFM0gwX1FcIixcImRyYXdlclBhcGVyRW50ZXJBY3RpdmVcIjpcInJlQkhma0RaWGlLd2lSdllUZkh1XCIsXCJkcmF3ZXJQYXBlckVudGVyRG9uZVwiOlwiSjVkbXc3d29LdndndWpnYkIwcVZcIixcImRyYXdlclBhcGVyRXhpdFwiOlwicm03akgyU3E3d2YyZDlJbFNldmtcIixcImRyYXdlclBhcGVyRXhpdEFjdGl2ZVwiOlwibmJlb1ZyOVZwSVhBSDFHV2ZwaENcIixcImRyYXdlclBhcGVyRXhpdERvbmVcIjpcInNnTmI2bk9oRjM1bFdRRTlqUUtFXCIsXCJkcmF3ZXJQYXBlckNvbnRlbnRcIjpcIkNzcUM2d3ZsTFlEc0tCc1owR2RUXCIsXCJkcmF3ZXJPdmVybGF5XCI6XCJlMzRnQmp4M2szYlJZUFpsZjl3WlwiLFwibm9PdmVybGF5XCI6XCJiM3VjTnBFdE5xMk9yUUt3dnFxd1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlckNvbnRlbnRcIjpcImdGMV9Xbk9yclBLV0VRb1hKbWdmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiZHJhd2VyRm9vdGVyXCI6XCJuazY5SHVsaFBrZUZzRU11Wk9yQlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImRyYXdlckhlYWRlclwiOlwidmR3a1BJR3h6RUxkWWhtaVpQcTJcIixcImRyYXdlckhlYWRlckNsb3NlXCI6XCJ1ejROTV9Ydk5aYXF4VlpZdlNZQVwiLFwiZHJhd2VySGVhZGVyQ2xvc2VJY29uXCI6XCJaZE5qeDZEcGVXRUkycEFWTDE4dFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwickJhZlhrb1RDbjJBaDZ4WVlteGZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpbnB1dFwiOlwiS1drN29aOHR2UGZRaWNnUVlsVmFcIixcImxhYmVsXCI6XCJlNnpyeDdVT1BfQlNvTU0zR3JqUVwiLFwic21hbGxcIjpcImloU25EUWcweWd4Y1ZMSXlTSmtNXCIsXCJsYXJnZVwiOlwiRnB3aGJEN0hYeF91RlQzbDAxd2JcIixcInhsYXJnZVwiOlwiWVZkczR1X0RmV1NHMXIwU0FHblNcIixcImludmVydGVkXCI6XCJDS3lub0xoaUxkNkt6QVlpNU50R1wiLFwicm91bmRlZFwiOlwidjcybXpKdW1GU2lET09FMU1uWEhcIixcIm5vU2hhZG93XCI6XCJFb2V3SkVEYkdkdGVKX05SZlM1RlwiLFwibm9Cb3JkZXJcIjpcImNiN2w0eHZjTm5ITmxRWm1MamtiXCIsXCJub1BhZGRpbmdcIjpcInZjT3dEWXVHRjJldG9QZnlGRFg1XCIsXCJ0cmFuc3BhcmVudFwiOlwibDA4a2hhWElVT2NydUJGSHdzN1hcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkkweHZKYkIwTE5UMFMxNWpUTVdXXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwiWDZmcVVjVkgxQmxDUkpCaWlKaWlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImoxbWZpWUVHb2xUUm1iQm1HS2xRXCIsXCJyb3dcIjpcIkVHYUt2bXFNMlNhd2lGclc4Q3R1XCIsXCJjb2x1bW5cIjpcIk5NaTBNVDFiN3JwMVpqeWU4VVZBXCIsXCJmaXhlZFwiOlwiZzBqM2trUXJfQWpDS0ZkOTRTMXNcIixcInBsYWluXCI6XCJGcjFxN1duRjFuRm5uYmZncGFSelwiLFwidHJhbnNwYXJlbnRcIjpcInVkUlplOUgwYktVSFhqT3dHMUZuXCIsXCJ0b3BcIjpcInVZaUt3NlZ2REVraGpaSHp2bzdlXCIsXCJ0b3BFZGdlXCI6XCJ0UmJFY1lqRTNLbmNzTndUYnZWTVwiLFwidG9wT25FZGdlXCI6XCJMR3VuRzM3WDFfSFJldXczcXp1YVwiLFwicmlnaHRcIjpcImx3MjdyR1ZsbzM0YXhDeHczUUhpXCIsXCJyaWdodEVkZ2VcIjpcIlBaSXR2bGVGSUlqMEp4Mk1pa1JFXCIsXCJyaWdodE9uRWRnZVwiOlwiS051R2FEUHE5cm1YZmdtTzNwY2JcIixcImJvdHRvbVwiOlwiZG4xdWgxdGFzR3hER3FtVTE4SE5cIixcImJvdHRvbUVkZ2VcIjpcImVEMFVDckJScHNSVFBQd3dJb1ZnXCIsXCJib3R0b21PbkVkZ2VcIjpcIklyaEg1Z2Z5R3NRNmtkY1A5NFJRXCIsXCJsZWZ0XCI6XCJENWZHSG5BR0NNUjRMdGI5eTRIclwiLFwibGVmdEVkZ2VcIjpcIl9BdEFkMnRyN3Qxa1h1c1JiWFN6XCIsXCJsZWZ0T25FZGdlXCI6XCJfOEM5ZGQwWF9KWFk0dUh6dzVOalwiLFwiaG9yaXpvbnRhbENlbnRlclwiOlwiUURrczhvdnQ5UlZjRldlRUI4d2JcIixcInZlcnRpY2FsQ2VudGVyXCI6XCJDVnVRUkU2NTJHSDJWSm44ek9Uc1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImljb25cIjpcImZwX0JMSjJGVzRPeXliMGJIaUQ0XCIsXCJzbWFsbFwiOlwienNWRE5mTlJrb3MwUTV1djlGUjlcIixcIm1lZGl1bVwiOlwiZVNsaWwzZXZQdFBCc3dXRjgwQzVcIixcImxhcmdlXCI6XCJUN1VMeXExeUU5QVZYRU1rblY0R1wiLFwieGxhcmdlXCI6XCJRUEFjZVZRZFo2UUlRMlF2aWp3Z1wiLFwiaW52ZXJ0ZWRcIjpcIm1GVEdiaExhNE5sVU8xNm52SnJrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJXY2VteXIyR3I4WkNHYzZCamJxd1wiLFwic21hbGxcIjpcIlRfcGE4Q2NwTDFHdnVEc2R2c3FxXCIsXCJtZWRpdW1cIjpcIm5MTEVyak9nZmE1YjJzT2VaclE1XCIsXCJsYXJnZVwiOlwiUTcxTkZCSHJTeFFMUUU0QUdEMmhcIixcInhsYXJnZVwiOlwiRWJCaXlGMXJnNndSYXhTTUs4c29cIixcInJvdW5kZWRcIjpcInRManV3UlNzSWlMSkdWc3JhcmJkXCIsXCJ0b3BPZmZzZXRcIjpcImQ0S0xwSTc5Q3VTVTZna1BQSW5BXCIsXCJyaWdodE9mZnNldFwiOlwiRzdoSlpvWXY4cUlyTm1GQ3lnTUVcIixcImJvdHRvbU9mZnNldFwiOlwiRFpzM0F2R2tWZE92SmZMZUo4R2hcIixcImxlZnRPZmZzZXRcIjpcIndFRW5XUmN2dXZvbWhfT0xPNWlxXCIsXCJpbnZlcnRlZFwiOlwiSzlXR0NGcFVhZE85V0lYd0Zhal9cIixcIm5vU2hhZG93XCI6XCJlQVFKMTBrRWtQbUR4TUd2bFl6eVwiLFwibm9Cb3JkZXJcIjpcIk9sRU5SOW50dVdZTEdPS0tLckdSXCIsXCJ0cmFuc3BhcmVudFwiOlwiS09jc1ByaXZyOTRyeG5mSFZsZmVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImdVU1R5M19OcDFtR0pIVzFOM2d4XCIsXCJzbWFsbFwiOlwiSVl1VnpoMUhCemdvVENpMldRX3BcIixcIm1lZGl1bVwiOlwiSk5nM19iQ0VmSXZpNGdlRWNzUzNcIixcImxhcmdlXCI6XCJuNjFzYXhBMjBfRXdNZ3Q5R3c0c1wiLFwieGxhcmdlXCI6XCJncUdudm5IOVg2bUd2endsNGFHelwiLFwicm91bmRlZFwiOlwiRGt6dXFoRWFpTVIzWE1zMU0xSWZcIixcInRvcE9mZnNldFwiOlwic0dudmV2dnN4QlpVYVhycFpRcElcIixcInJpZ2h0T2Zmc2V0XCI6XCJoZ1kzWnBreUQ3MHA3RThybjNiaVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJST29RWTZPYVJuUXpET2ZYX1FERlwiLFwibGVmdE9mZnNldFwiOlwiS2V2bTU4MmUzZ1hQSkUzT0RvcGFcIixcImludmVydGVkXCI6XCJPT3puQ2JBYmpPTGM0X2JDRXFmeVwiLFwibm9TaGFkb3dcIjpcInhySHhmY2UwMzRkZ1lORWtubFZNXCIsXCJub0JvcmRlclwiOlwiZUh0X1JJcThKR29ZSGM0aUNvZWdcIixcInRyYW5zcGFyZW50XCI6XCJuZmdxdFNnZnJ0ckdGRFdmWm9uUVwiLFwiZGlzYWJsZWRcIjpcIklfbmhKOXU2cFREXzJTRjNxbF9sXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyTzVXNkRRazROdG9XcndtS01XZ1wiLFwiaGFzT3ZlcmxheVwiOlwibGx2bm1JOEsxM2c5UFRCaUNOejNcIixcIm92ZXJsYXlcIjpcIkdWazJqOHdWMXQzZ1k1dVhRNHFJXCIsXCJpbWFnZVwiOlwiZ1hqWXFLZTl3M05nWXVyWXdVUXBcIixcImNvdmVyXCI6XCJfbDdPTk9XYXlyOHR5dUdpeVVzY1wiLFwiY29udGFpblwiOlwiU1lqT2I4bEFobURiZHlsRklRWTlcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkhrcm96U2ZsbFRGbGtrYnF4WFdoXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwieHlIWGhoSEVZWE1ZZWF2V1p3X05cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlJEWnlsQ01sR2ZlQ1V3U2J5ZUlxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpOEd1X1cxdzhXQkFZZmxMSVl6d1wiLFwiaGVhZGVyXCI6XCJHcDdSOHdZd2FMdEZvS0ZjUnRnTlwiLFwiaGVhZGVyTGFiZWxcIjpcIlZHa290TVRucVBSYUtjR1Y4UmpnXCIsXCJsaXN0XCI6XCJ2ZzlRTHRDWVRBczV4M2ZGNzl6cFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImxpc3RWaWV3SXRlbVwiOlwiWkZVZDdvU3BQTHQwRWQyWHFhV1pcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51XCI6XCJ4UTlCZmswWDFIbVpnaWhDdXRaVlwiLFwib3BlblwiOlwidXR2OUZZT1U3UTBKTm5aVzFlanZcIixcImVudHJhbmNlXCI6XCJ5WUtqY0N2RDJMOTRGcFBnT2lnUVwiLFwiaGVhZGVyXCI6XCJ3Tkw4NnM5ekdGaThYSzExS2xvUlwiLFwiZm9vdGVyXCI6XCJtdTRKZXYxYzRLY2lmZUY4TXpxZ1wiLFwibm9Cb3JkZXJcIjpcIkVhUFNqTDFuWHN6N1RDeDExTHJmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJrWWg3REtZcUg2amRMWGQ3UGRKd1wiLFwibWVudUNvbnRhaW5lclwiOlwiUWxlQU8zeW1UbGlVNlpOQlF4ZmdcIixcInRvcFwiOlwiYXhmY3JqU0g0bHZ1anpyc2syUXBcIixcInJpZ2h0XCI6XCJMdFZsdFczQlBaNWdOWFZ4eGtyUFwiLFwibGVmdFwiOlwiUFJiNWY4WGNNWk9jWTV1ZlBNZHFcIixcImJvdHRvbVwiOlwiX19NWjVPb2lJclZpZEZYYlFmanVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51SXRlbVwiOlwiZ0daZl9Hc1dzd2tyME5URF9uYlFcIixcIm5vUGFkZGluZ1wiOlwiQ00yYkhTQ3h3dWl0TWVzN3U5V2ZcIixcImFjdGl2ZVwiOlwiczR0SmxLNE9GYzNyblhMME14cWtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJtZW51TGlua0l0ZW1cIjpcIlgxRjRTUWtoUWgwZnh6NVl1M3RIXCIsXCJub1BhZGRpbmdcIjpcImtwRExYWlNEMktwMTloOXN1UkxBXCIsXCJhY3RpdmVcIjpcIkl3SVRqR242dlRadGVFS2pOb1ljXCIsXCJtZW51SXRlbVwiOlwibGRvUjZwR09ydGdITVhTcG1IN0ZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJvdmVybGF5XCI6XCJqMGg5aGRfZ2x2STl4ZE9uYWF1WVwiLFwibm9PdmVybGF5XCI6XCJTTDQ4U3padWZLZ2RNaUdZM1lUTlwiLFwibW9kYWxcIjpcImhUWGNaZXZHeXlJMEFjdnByWFZKXCIsXCJ0cmFuc3BhcmVudFwiOlwiaWJxbG9HMUh4SHgzc3Rka1ZaU2pcIixcIm5vU2hhZG93XCI6XCJJRW81dkVlZnR2THBtd2kwVnlqRFwiLFwiZmxleENlbnRlclwiOlwiVmJnMVFXV3N4SUtHQVVncUxWTzhcIixcIm1vZGFsQnV0dG9uXCI6XCJGb1BmQzNqN2NJZzJCWWZ6cVFHRVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiR2V2YmJHM0QwUjM0eEdVRnM1WTFcIixcIm51bWJlcnNcIjpcImZMNUkxV0tYQ2FVOXZyQkd5SkI0XCIsXCJidXR0b25cIjpcIm55UjNjR0VtdzNRa1lNdGllbTNTXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiRGg2anNRMTVlTXlkc1NNVEN3UndcIixcInRyYW5zcGFyZW50XCI6XCJXVDZPUGxqQzJxZmJBV3NrMHo0clwiLFwiZml4ZWRcIjpcInB1NnM5TWo1VDFZSWdtdjRMT25DXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaGVhZGVyXCI6XCJXU1lZQkF6NTNkaHF1SU9aUFdCUFwiLFwibGFiZWxcIjpcImI1NWh5WjBvSGwwczRPdDlPaHdNXCIsXCJleHBhbmRlZFwiOlwiTjNBek81a1psaDRIQVBrbm5ZenFcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlNtQ2k0eE94RXNMdGk2MUdvWWs0XCIsXCJzZWxlY3RlZFwiOlwiXzRySnRDT1pwbmYzeG44cG1GdkNRXCIsXCJzaG93U2VsZWN0ZWRXaXRoVGlja0NvbnRhaW5lclwiOlwiTzVucEQwbFQzRmJCQ3dqeTMxU0VcIixcImNoZWNrYm94Q29udGFpbmVyXCI6XCJNU1haRjd4Y0M1YW9xSGxxcEkwZ1wiLFwiY2hlY2tib3hcIjpcIk5KanE5X2dBZWREUnJPRV9YV0UxXCIsXCJsYWJlbFwiOlwidndtRExjOTZEOXRYZ1dxczRJS3pcIixcInNlbGVjdGVkTGFiZWxcIjpcIm5nSTNTSkpqVW1mY2E0bmlRa2hRXCIsXCJ0aWNrQ29udGFpbmVyXCI6XCJaUGtya3NtdkJRQ2JvWUExaHpORVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZTN5WEpCcllUVzRzVlpLWTJORm1cIixcInNlbGVjdEFsbENvbnRhaW5lclwiOlwiY3pITGE0TDN0UkNKRENpREI2QXpcIixcImNoZWNrYm94XCI6XCJpS3FqV1VkOTZ6U3A5eG1vY1h6a1wiLFwiY2hlY2tib3hDb250YWluZXJcIjpcImF4aWg5RW51eksxZndocVlEVlJBXCIsXCJsYWJlbFwiOlwicTVXczlocjhaTVg3ZlN2REtfcW5cIixcIm5vT3B0aW9uc1wiOlwib3ZLdkI1SDhFb0Z6bnVNcVV1amxcIixcInNlYXJjaEtleXdvcmRcIjpcIlR3Y1ZhUkR6OGNva0lLOUQ5RHhKXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJpeDNhWldNZU41QWw0VUs4eWViSlwiLFwiaWNvblNlYXJjaENvbnRhaW5lclwiOlwiWjVMUHg0N3liRUtlWDI5WEJZQkNcIixcInJlc2V0QnV0dG9uXCI6XCJoalQ5Wlh2bXZjNVFVcnV3ejhFbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiRVRHYlhUZFlBcDBHNDBUSlBMbktcIixcImRpc2FibGVkXCI6XCJuRUNnR2RYT3NwVXJRV0hqendrZ1wiLFwiaGVhZGVyXCI6XCJYQW9KaHhUQXBjUjlsR2VneXA5QVwiLFwiYWN0aXZlXCI6XCJlYmVtenRaRVdJVjRfNkFzS1BRSFwiLFwiY29udGVudFwiOlwiclJEV3YycXF3U3JCeTNldlo3RHdcIixcImlzTG9hZGluZ1wiOlwiSXN4U2U5b2FzZE1LOWZtZ182QXRcIixcIm5vT3B0aW9uc1wiOlwiZkxQNHg0SXhueWlXaHA1QlA1c1RcIixcInNlYXJjaENvbnRhaW5lclwiOlwieU9FQ0RKZURWVDV6NVlhWHBlSm5cIixcImljb25CdXR0b25cIjpcImFWS3AzSDNKV3JhQmY3RzVVZGFQXCIsXCJleHBhbmRlZFwiOlwiQnJ4cnREM2FNWDdJVTUyckEyMjBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJwbGFjZWhvbGRlclwiOlwiZGRsUmlkbkl6WWhRQzlER3BnSXRcIixcImFjdGl2ZVwiOlwic2hIc0VKR3RiejRjbUE2eDFHMWxcIixcInRhZ1dyYXBwZXJcIjpcIkJHRVNoYzdxdTJmazlEWkUyUlVzXCIsXCJzZWxlY3RlZE9wdGlvblwiOlwibWE5QklqdUdDUWVLRjQ0c2d1Y1RcIixcInNlbGVjdGVkT3B0aW9uc1wiOlwiblJwQXd2OTdDZXNxUWJETGNldDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImc1T1IwYU9OT1cxT3MxeHRrTkhpXCIsXCJ0YWJsZVwiOlwic01SMVZiNjJYRXZPT1dScldjNFFcIixcInBsYWNlaG9sZGVyQ29udGFpbmVyXCI6XCJfN3gyejdwX2tiUU9MRG1FWDU0aUFcIixcInNjcm9sbGJhckNvbnRhaW5lclwiOlwiRUFIMTRYUGVKQnVEV0dwNU5WWW9cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImo0UGlnSk9MNURnekQ4T1l4c2t6XCIsXCJpc0hlYWRlclN0aWNreVwiOlwiQVlSXzRIZW9sQWpKQ09zbDNIWkpcIixcImJvcmRlckJvdHRvbVwiOlwiaVpyRDN0SDEyekRJRk9XdkpVRDdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0YWJsZUhlYWRlckNlbGxcIjpcIkpjQTFWelY0TXdWUTNORWgwdnpFXCIsXCJzb3J0SWNvblZpc2libGVcIjpcIklxN094c1F6TDA2eGo5OE8wTHFKXCIsXCJzb3J0YWJsZVwiOlwiVlNUU2hZN0xUaF9JSWpuclBfX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImRPdmlnU2doeHlRNENiYkNNa0NSXCIsXCJhY3RpdmVcIjpcInRxbllkWTBIdERsbVc2MXRqR2JRXCIsXCJoYXNBcnJvd1wiOlwicXFPNmExak5MNkhUSkc3SFIxMXRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkF2UjdXQ0RSeEN3dlJVQV9qODBQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ6S0YzNGFLdllabmJMdVp6akVlT1wiLFwiY29udGVudFwiOlwib18yMXJfRWpMS0IzeGhnR3k3NHNcIixcImNsb3NlQnV0dG9uXCI6XCJaWlBSWkxVcTlNUXlpZkQ4eDJqSFwiLFwiZGlzYWJsZWRcIjpcInVDTHowdmJOblFaRlg4a1Z1VWlHXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnd1lLUlBwR2RJTVZYa2lOMEg5QlwiLFwic2Nyb2xsYWJsZVwiOlwib3ZkandocjIxYXd2MkFnaVFFZDJcIixcInRhZ0lucHV0XCI6XCJhdkltR3MzWGNMZURMR2h4RDhid1wiLFwiZGlzYWJsZWRcIjpcInlUOFBwOFRVdlA3c1FTR2VHTE5KXCIsXCJ0ZXh0SW5wdXRcIjpcIlppTk5mMm9MVmpFeHhwOVJUMnNfXCIsXCJzbWFsbFwiOlwiTGVtTVVUc2VpZ3hIYm1JWVZWVGNcIixcIm1lZGl1bVwiOlwiUFVISmRNN1pFYjNMRlJlTTFfVWdcIixcImxhcmdlXCI6XCJqOW1rNTJoR2hvRndqdzRGV0hROVwiLFwieGxhcmdlXCI6XCJFaVdxZUZxUVhFOUxIVWgxdnhwWFwiLFwibm9Cb3JkZXJcIjpcIk82V3NPcFVab1plVGhVYl9WaVhuXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGV4dElucHV0XCI6XCJOUFpya3NDcG5YVkpTcV9zbkhqUlwiLFwic21hbGxcIjpcImpRR3JpUUpTYTA0enNvRzFhMnU5XCIsXCJtZWRpdW1cIjpcImxWb1k5RHAxN0hPQmluTWowUTdvXCIsXCJsYXJnZVwiOlwiUWxVYVBiWDhFYUlpN3JaNEZiOG9cIixcInhsYXJnZVwiOlwicllQT005Zk50VkxkUEZ5V0trR0VcIixcIm5vQm9yZGVyXCI6XCJLRFRJTnNIZG9sWVJlU2JMY29vSFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJ6Rml1QVRnc1NCNDJWZEVtY0paWVwiLFwiZW50cmFuY2VcIjpcIlI4cnBPVU90bmdZT0V0N0kwcEdNXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIlhsTFFPZTQ3NE90QmlhY19nVTdIXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9vbHRpcFwiOlwiS202VVV5MGpwcU0wTEEyZVhjY2NcIixcImFic29sdXRlXCI6XCJlNTB6RWp0ZlFLMDBsZl84ODRPWVwiLFwiZml4ZWRcIjpcImpxeFQ0TWNPZVVERG5Hc2Vaa0JMXCIsXCJsZWZ0XCI6XCJ5QnYxbHdESHBleHhPM0RQcGQxdlwiLFwicmlnaHRcIjpcInY4NTJFeHhtUTZBdFNRRjJzWDhBXCIsXCJ0b3BcIjpcImlWMnl6UGl6b291OW9tVzgxMWhnXCIsXCJib3R0b21cIjpcIlZtbUU4RU5zQ2t6YndMcEwzWEpnXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ5WTlIVjQwSVRUV2dBVjhxTHcxd1wiLFwiaGFzT3ZlcmxheVwiOlwienViNWJxZFZYbTRORnhwSTRIQmZcIixcInZpZGVvXCI6XCJNVkNEVmpmZ21IRTdRZW1jWXhHbFwiLFwiY292ZXJcIjpcIlY0bkVjbTE3OXZaZTJNTGdSVmFNXCIsXCJjb250YWluXCI6XCJ1Ml9NZmVDak1TbF9hQk5KbjVuTFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwibGpmc1lzOEJRcWxlS3piTGtrYWRcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJISnRScWJBRkxPblhWeUd6OGlGVVwiLFwib3ZlcmxheVwiOlwiQUxIaE9IQWVMbEJEeTFEcFlxaXZcIn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG52YXIgX19hc3NpZ24gPSAodGhpcyAmJiB0aGlzLl9fYXNzaWduKSB8fCBmdW5jdGlvbiAoKSB7XG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XG4gICAgICAgICAgICBzID0gYXJndW1lbnRzW2ldO1xuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKVxuICAgICAgICAgICAgICAgIHRbcF0gPSBzW3BdO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0O1xuICAgIH07XG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59O1xudmFyIF9fY3JlYXRlQmluZGluZyA9ICh0aGlzICYmIHRoaXMuX19jcmVhdGVCaW5kaW5nKSB8fCAoT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH0pO1xufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xuICAgIG9bazJdID0gbVtrXTtcbn0pKTtcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSAodGhpcyAmJiB0aGlzLl9fc2V0TW9kdWxlRGVmYXVsdCkgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgdikge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcbn0pIDogZnVuY3Rpb24obywgdikge1xuICAgIG9bXCJkZWZhdWx0XCJdID0gdjtcbn0pO1xudmFyIF9faW1wb3J0U3RhciA9ICh0aGlzICYmIHRoaXMuX19pbXBvcnRTdGFyKSB8fCBmdW5jdGlvbiAobW9kKSB7XG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcbiAgICB2YXIgcmVzdWx0ID0ge307XG4gICAgaWYgKG1vZCAhPSBudWxsKSBmb3IgKHZhciBrIGluIG1vZCkgaWYgKGsgIT09IFwiZGVmYXVsdFwiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XG4gICAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTtcbiAgICByZXR1cm4gcmVzdWx0O1xufTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwgeyB2YWx1ZTogdHJ1ZSB9KTtcbmV4cG9ydHMuSGludCA9IHZvaWQgMDtcbnZhciByZWFjdF8xID0gX19pbXBvcnRTdGFyKHJlcXVpcmUoXCJyZWFjdFwiKSk7XG52YXIgdXRpbHNfMSA9IHJlcXVpcmUoXCIuL3V0aWxzXCIpO1xuZXhwb3J0cy5IaW50ID0gZnVuY3Rpb24gKHByb3BzKSB7XG4gICAgdmFyIF9hLCBfYjtcbiAgICB2YXIgY2hpbGQgPSByZWFjdF8xLmRlZmF1bHQuQ2hpbGRyZW4ub25seShwcm9wcy5jaGlsZHJlbik7XG4gICAgaWYgKCgoX2IgPSAoX2EgPSBjaGlsZC50eXBlKSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EudG9TdHJpbmcoKSkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnRvTG93ZXJDYXNlKCkpICE9PSAnaW5wdXQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJyZWFjdC1hdXRvY29tcGxldGUtaGludDogJ0hpbnQnIG9ubHkgYWNjZXB0cyBhbiAnaW5wdXQnIGVsZW1lbnQgYXMgY2hpbGQuXCIpO1xuICAgIH1cbiAgICB2YXIgb3B0aW9ucyA9IHByb3BzLm9wdGlvbnMsIGRpc2FibGVIaW50ID0gcHJvcHMuZGlzYWJsZUhpbnQsIGFsbG93VGFiRmlsbCA9IHByb3BzLmFsbG93VGFiRmlsbCwgYWxsb3dFbnRlckZpbGwgPSBwcm9wcy5hbGxvd0VudGVyRmlsbCwgb25GaWxsID0gcHJvcHMub25GaWxsLCBvbkhpbnQgPSBwcm9wcy5vbkhpbnQsIHZhbHVlTW9kaWZpZXIgPSBwcm9wcy52YWx1ZU1vZGlmaWVyO1xuICAgIHZhciBjaGlsZFByb3BzID0gY2hpbGQucHJvcHM7XG4gICAgdmFyIG1haW5JbnB1dFJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50V3JhcHBlclJlZiA9IHJlYWN0XzEudXNlUmVmKG51bGwpO1xuICAgIHZhciBoaW50UmVmID0gcmVhY3RfMS51c2VSZWYobnVsbCk7XG4gICAgdmFyIF9jID0gcmVhY3RfMS51c2VTdGF0ZSgnJyksIHVuTW9kaWZpZWRJbnB1dFRleHQgPSBfY1swXSwgc2V0VW5tb2RpZmllZElucHV0VGV4dCA9IF9jWzFdO1xuICAgIHZhciBfZCA9IHJlYWN0XzEudXNlU3RhdGUoJycpLCB0ZXh0ID0gX2RbMF0sIHNldFRleHQgPSBfZFsxXTtcbiAgICB2YXIgX2UgPSByZWFjdF8xLnVzZVN0YXRlKCcnKSwgaGludCA9IF9lWzBdLCBzZXRIaW50ID0gX2VbMV07XG4gICAgdmFyIF9mID0gcmVhY3RfMS51c2VTdGF0ZSgpLCBtYXRjaCA9IF9mWzBdLCBzZXRNYXRjaCA9IF9mWzFdO1xuICAgIHZhciBfZyA9IHJlYWN0XzEudXNlU3RhdGUoKSwgY2hhbmdlRXZlbnQgPSBfZ1swXSwgc2V0Q2hhbmdlRXZlbnQgPSBfZ1sxXTtcbiAgICByZWFjdF8xLnVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc1swXSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIHZhciBkdXBsaWNhdGUgPSB1dGlsc18xLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uKG9wdGlvbnMpO1xuICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcInJlYWN0LWF1dG9jb21wbGV0ZS1oaW50OiBcXFwiXCIgKyBkdXBsaWNhdGUgKyBcIlxcXCIgb2NjdXJzIG1vcmUgdGhhbiBvbmNlIGFuZCBtYXkgY2F1c2UgZXJyb3JzLiBPcHRpb25zIHNob3VsZCBub3QgY29udGFpbiBkdXBsaWNhdGUgdmFsdWVzIVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIFtvcHRpb25zXSk7XG4gICAgcmVhY3RfMS51c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoZGlzYWJsZUhpbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgaW5wdXRTdHlsZSA9IG1haW5JbnB1dFJlZi5jdXJyZW50ICYmIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKG1haW5JbnB1dFJlZi5jdXJyZW50KTtcbiAgICAgICAgaW5wdXRTdHlsZSAmJiBzdHlsZUhpbnQoaGludFdyYXBwZXJSZWYsIGhpbnRSZWYsIGlucHV0U3R5bGUpO1xuICAgIH0pO1xuICAgIHZhciBnZXRNYXRjaCA9IGZ1bmN0aW9uICh0ZXh0KSB7XG4gICAgICAgIGlmICghdGV4dCB8fCB0ZXh0ID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2YgKG9wdGlvbnNbMF0pID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgdmFyIG1hdGNoXzEgPSBvcHRpb25zXG4gICAgICAgICAgICAgICAgLmZpbHRlcihmdW5jdGlvbiAoeCkgeyByZXR1cm4geC50b0xvd2VyQ2FzZSgpICE9PSB0ZXh0LnRvTG93ZXJDYXNlKCkgJiYgeC50b0xvd2VyQ2FzZSgpLnN0YXJ0c1dpdGgodGV4dC50b0xvd2VyQ2FzZSgpKTsgfSlcbiAgICAgICAgICAgICAgICAuc29ydCgpWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzE7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB2YXIgbWF0Y2hfMiA9IG9wdGlvbnNcbiAgICAgICAgICAgICAgICAuZmlsdGVyKGZ1bmN0aW9uICh4KSB7IHJldHVybiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkgIT09IHRleHQudG9Mb3dlckNhc2UoKSAmJiB4LmxhYmVsLnRvTG93ZXJDYXNlKCkuc3RhcnRzV2l0aCh0ZXh0LnRvTG93ZXJDYXNlKCkpOyB9KVxuICAgICAgICAgICAgICAgIC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7IHJldHVybiB1dGlsc18xLnNvcnRBc2MoYS5sYWJlbCwgYi5sYWJlbCk7IH0pWzBdO1xuICAgICAgICAgICAgcmV0dXJuIG1hdGNoXzI7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBzZXRIaW50VGV4dEFuZElkID0gZnVuY3Rpb24gKHRleHQpIHtcbiAgICAgICAgc2V0VGV4dCh0ZXh0KTtcbiAgICAgICAgdmFyIG1hdGNoID0gZ2V0TWF0Y2godGV4dCk7XG4gICAgICAgIHZhciBoaW50O1xuICAgICAgICBpZiAoIW1hdGNoKSB7XG4gICAgICAgICAgICBoaW50ID0gJyc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIG1hdGNoID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgaGludCA9IG1hdGNoLnNsaWNlKHRleHQubGVuZ3RoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGhpbnQgPSBtYXRjaC5sYWJlbC5zbGljZSh0ZXh0Lmxlbmd0aCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SGludChoaW50KTtcbiAgICAgICAgc2V0TWF0Y2gobWF0Y2gpO1xuICAgICAgICBvbkhpbnQgJiYgb25IaW50KG1hdGNoKTtcbiAgICB9O1xuICAgIHZhciBoYW5kbGVPbkZpbGwgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChoaW50ID09PSAnJyB8fCAhY2hhbmdlRXZlbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB2YXIgbmV3VW5Nb2RpZmllZFRleHQgPSB1bk1vZGlmaWVkSW5wdXRUZXh0ICsgaGludDtcbiAgICAgICAgY2hhbmdlRXZlbnQudGFyZ2V0LnZhbHVlID0gbmV3VW5Nb2RpZmllZFRleHQ7XG4gICAgICAgIGNoaWxkUHJvcHMub25DaGFuZ2UgJiYgY2hpbGRQcm9wcy5vbkNoYW5nZShjaGFuZ2VFdmVudCk7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICBvbkZpbGwgJiYgb25GaWxsKG1hdGNoKTtcbiAgICAgICAgc2V0VW5tb2RpZmllZElucHV0VGV4dChuZXdVbk1vZGlmaWVkVGV4dCk7XG4gICAgfTtcbiAgICB2YXIgc3R5bGVIaW50ID0gZnVuY3Rpb24gKGhpbnRXcmFwcGVyUmVmLCBoaW50UmVmLCBpbnB1dFN0eWxlKSB7XG4gICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgIGlmICgoX2EgPSBoaW50V3JhcHBlclJlZiA9PT0gbnVsbCB8fCBoaW50V3JhcHBlclJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFdyYXBwZXJSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLnN0eWxlKSB7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRGYW1pbHkgPSBpbnB1dFN0eWxlLmZvbnRGYW1pbHk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUud2lkdGggPSBpbnB1dFN0eWxlLndpZHRoO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5oZWlnaHQgPSBpbnB1dFN0eWxlLmhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUubGluZUhlaWdodCA9IGlucHV0U3R5bGUubGluZUhlaWdodDtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm94U2l6aW5nID0gaW5wdXRTdHlsZS5ib3hTaXppbmc7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLm1hcmdpbiA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnbWFyZ2luJyk7XG4gICAgICAgICAgICBoaW50V3JhcHBlclJlZi5jdXJyZW50LnN0eWxlLnBhZGRpbmcgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ3BhZGRpbmcnKTtcbiAgICAgICAgICAgIGhpbnRXcmFwcGVyUmVmLmN1cnJlbnQuc3R5bGUuYm9yZGVyU3R5bGUgPSB1dGlsc18xLmludGVycG9sYXRlU3R5bGUoaW5wdXRTdHlsZSwgJ2JvcmRlcicsICdzdHlsZScpO1xuICAgICAgICAgICAgaGludFdyYXBwZXJSZWYuY3VycmVudC5zdHlsZS5ib3JkZXJXaWR0aCA9IHV0aWxzXzEuaW50ZXJwb2xhdGVTdHlsZShpbnB1dFN0eWxlLCAnYm9yZGVyJywgJ3dpZHRoJyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChfYiA9IGhpbnRSZWYgPT09IG51bGwgfHwgaGludFJlZiA9PT0gdm9pZCAwID8gdm9pZCAwIDogaGludFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2Iuc3R5bGUpIHtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5mb250RmFtaWx5ID0gaW5wdXRTdHlsZS5mb250RmFtaWx5O1xuICAgICAgICAgICAgaGludFJlZi5jdXJyZW50LnN0eWxlLmZvbnRTaXplID0gaW5wdXRTdHlsZS5mb250U2l6ZTtcbiAgICAgICAgICAgIGhpbnRSZWYuY3VycmVudC5zdHlsZS5saW5lSGVpZ2h0ID0gaW5wdXRTdHlsZS5saW5lSGVpZ2h0O1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgb25DaGFuZ2UgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICBzZXRDaGFuZ2VFdmVudChlKTtcbiAgICAgICAgZS5wZXJzaXN0KCk7XG4gICAgICAgIHNldFVubW9kaWZpZWRJbnB1dFRleHQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICB2YXIgbW9kaWZpZWRWYWx1ZSA9IHZhbHVlTW9kaWZpZXIgPyB2YWx1ZU1vZGlmaWVyKGUudGFyZ2V0LnZhbHVlKSA6IGUudGFyZ2V0LnZhbHVlO1xuICAgICAgICBzZXRIaW50VGV4dEFuZElkKG1vZGlmaWVkVmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uQ2hhbmdlICYmIGNoaWxkUHJvcHMub25DaGFuZ2UoZSk7XG4gICAgfTtcbiAgICB2YXIgb25Gb2N1cyA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIHNldEhpbnRUZXh0QW5kSWQoZS50YXJnZXQudmFsdWUpO1xuICAgICAgICBjaGlsZFByb3BzLm9uRm9jdXMgJiYgY2hpbGRQcm9wcy5vbkZvY3VzKGUpO1xuICAgIH07XG4gICAgdmFyIG9uQmx1ciA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgIC8vT25seSBibHVyIGl0IGlmIHRoZSBuZXcgZm9jdXMgaXNuJ3QgdGhlIHRoZSBoaW50IGlucHV0XG4gICAgICAgIGlmICgoaGludFJlZiA9PT0gbnVsbCB8fCBoaW50UmVmID09PSB2b2lkIDAgPyB2b2lkIDAgOiBoaW50UmVmLmN1cnJlbnQpICE9PSBlLnJlbGF0ZWRUYXJnZXQpIHtcbiAgICAgICAgICAgIHNldEhpbnRUZXh0QW5kSWQoJycpO1xuICAgICAgICAgICAgY2hpbGRQcm9wcy5vbkJsdXIgJiYgY2hpbGRQcm9wcy5vbkJsdXIoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBBUlJPV1JJR0hUID0gJ0Fycm93UmlnaHQnO1xuICAgIHZhciBUQUIgPSAnVGFiJztcbiAgICB2YXIgRU5URVIgPSAnRW50ZXInO1xuICAgIHZhciBvbktleURvd24gPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgY2FyZXRJc0F0VGV4dEVuZCA9IChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBGb3Igc2VsZWN0YWJsZSBpbnB1dCB0eXBlcyAoXCJ0ZXh0XCIsIFwic2VhcmNoXCIpLCBvbmx5IHNlbGVjdCB0aGUgaGludCBpZlxuICAgICAgICAgICAgLy8gaXQncyBhdCB0aGUgZW5kIG9mIHRoZSBpbnB1dCB2YWx1ZS4gRm9yIG5vbi1zZWxlY3RhYmxlIHR5cGVzIChcImVtYWlsXCIsXG4gICAgICAgICAgICAvLyBcIm51bWJlclwiKSwgYWx3YXlzIHNlbGVjdCB0aGUgaGludC5cbiAgICAgICAgICAgIHZhciBpc05vblNlbGVjdGFibGVUeXBlID0gZS5jdXJyZW50VGFyZ2V0LnNlbGVjdGlvbkVuZCA9PT0gbnVsbDtcbiAgICAgICAgICAgIHZhciBjYXJldElzQXRUZXh0RW5kID0gaXNOb25TZWxlY3RhYmxlVHlwZSB8fCBlLmN1cnJlbnRUYXJnZXQuc2VsZWN0aW9uRW5kID09PSBlLmN1cnJlbnRUYXJnZXQudmFsdWUubGVuZ3RoO1xuICAgICAgICAgICAgcmV0dXJuIGNhcmV0SXNBdFRleHRFbmQ7XG4gICAgICAgIH0pKCk7XG4gICAgICAgIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGUua2V5ID09PSBBUlJPV1JJR0hUKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93VGFiRmlsbCAmJiBlLmtleSA9PT0gVEFCICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChjYXJldElzQXRUZXh0RW5kICYmIGFsbG93RW50ZXJGaWxsICYmIGUua2V5ID09PSBFTlRFUiAmJiBoaW50ICE9PSAnJykge1xuICAgICAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgaGFuZGxlT25GaWxsKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRQcm9wcy5vbktleURvd24gJiYgY2hpbGRQcm9wcy5vbktleURvd24oZSk7XG4gICAgfTtcbiAgICB2YXIgb25IaW50Q2xpY2sgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHZhciBoaW50Q2FyZXRQb3NpdGlvbiA9IGUuY3VycmVudFRhcmdldC5zZWxlY3Rpb25FbmQgfHwgMDtcbiAgICAgICAgLy8gSWYgdXNlciBjbGlja3MgdGhlIHBvc2l0aW9uIGJlZm9yZSB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBoaW50LCBcbiAgICAgICAgLy8gbW92ZSBmb2N1cyB0byB0aGUgZW5kIG9mIHRoZSBtYWluSW5wdXQgdGV4dFxuICAgICAgICBpZiAoaGludENhcmV0UG9zaXRpb24gPT09IDApIHtcbiAgICAgICAgICAgIChfYSA9IG1haW5JbnB1dFJlZi5jdXJyZW50KSA9PT0gbnVsbCB8fCBfYSA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2EuZm9jdXMoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoISFoaW50ICYmIGhpbnQgIT09ICcnKSB7XG4gICAgICAgICAgICBoYW5kbGVPbkZpbGwoKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICAgICAgKF9hID0gbWFpbklucHV0UmVmLmN1cnJlbnQpID09PSBudWxsIHx8IF9hID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYS5mb2N1cygpO1xuICAgICAgICAgICAgICAgIHZhciBjYXJldFBvc2l0aW9uID0gdGV4dC5sZW5ndGggKyBoaW50Q2FyZXRQb3NpdGlvbjtcbiAgICAgICAgICAgICAgICAoX2IgPSBtYWluSW5wdXRSZWYuY3VycmVudCkgPT09IG51bGwgfHwgX2IgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9iLnNldFNlbGVjdGlvblJhbmdlKGNhcmV0UG9zaXRpb24sIGNhcmV0UG9zaXRpb24pO1xuICAgICAgICAgICAgfSwgMCk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHZhciBjaGlsZFJlZiA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkKS5yZWY7XG4gICAgdmFyIG1haW5JbnB1dCA9IHJlYWN0XzEuY2xvbmVFbGVtZW50KGNoaWxkLCBfX2Fzc2lnbihfX2Fzc2lnbih7fSwgY2hpbGRQcm9wcyksIHsgb25DaGFuZ2U6IG9uQ2hhbmdlLFxuICAgICAgICBvbkJsdXI6IG9uQmx1cixcbiAgICAgICAgb25Gb2N1czogb25Gb2N1cyxcbiAgICAgICAgb25LZXlEb3duOiBvbktleURvd24sIHJlZjogY2hpbGRSZWYgJiYgdHlwZW9mIChjaGlsZFJlZikgIT09ICdzdHJpbmcnXG4gICAgICAgICAgICA/IHV0aWxzXzEubWVyZ2VSZWZzKGNoaWxkUmVmLCBtYWluSW5wdXRSZWYpXG4gICAgICAgICAgICA6IG1haW5JbnB1dFJlZiB9KSk7XG4gICAgcmV0dXJuIChyZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImRpdlwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaW5wdXQtd3JhcHBlclwiLCBzdHlsZToge1xuICAgICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZSdcbiAgICAgICAgfSB9LCBkaXNhYmxlSGludFxuICAgICAgICA/IGNoaWxkXG4gICAgICAgIDogKHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHJlYWN0XzEuZGVmYXVsdC5GcmFnbWVudCwgbnVsbCxcbiAgICAgICAgICAgIG1haW5JbnB1dCxcbiAgICAgICAgICAgIHJlYWN0XzEuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFwic3BhblwiLCB7IGNsYXNzTmFtZTogXCJyYWgtaGludC13cmFwcGVyXCIsIHJlZjogaGludFdyYXBwZXJSZWYsIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3BsYXk6ICdmbGV4JyxcbiAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICBiYWNrZ3JvdW5kQ29sb3I6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgIGJvcmRlckNvbG9yOiAndHJhbnNwYXJlbnQnLFxuICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgY29sb3I6ICdyZ2JhKDAsIDAsIDAsIDAuMzUpJyxcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogMCxcbiAgICAgICAgICAgICAgICB9IH0sXG4gICAgICAgICAgICAgICAgcmVhY3RfMS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoXCJzcGFuXCIsIHsgY2xhc3NOYW1lOiAncmFoLXRleHQtZmlsbGVyJywgc3R5bGU6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6ICdoaWRkZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRlckV2ZW50czogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpdGVTcGFjZTogJ3ByZSdcbiAgICAgICAgICAgICAgICAgICAgfSB9LCB0ZXh0KSxcbiAgICAgICAgICAgICAgICByZWFjdF8xLmRlZmF1bHQuY3JlYXRlRWxlbWVudChcImlucHV0XCIsIHsgY2xhc3NOYW1lOiBcInJhaC1oaW50XCIsIHJlZjogaGludFJlZiwgb25DbGljazogb25IaW50Q2xpY2ssIHN0eWxlOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb2ludGVyRXZlbnRzOiAhaGludCB8fCBoaW50ID09PSAnJyA/ICdub25lJyA6ICd2aXNpYmxlJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJhY2tncm91bmQ6ICd0cmFuc3BhcmVudCcsXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogJzEwMCUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0bGluZTogJ25vbmUnLFxuICAgICAgICAgICAgICAgICAgICAgICAgYm9yZGVyOiAnbm9uZScsXG4gICAgICAgICAgICAgICAgICAgICAgICBib3hTaGFkb3c6ICdub25lJyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhZGRpbmc6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xvcjogJ3JnYmEoMCwgMCwgMCwgMC4zMCknLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FyZXRDb2xvcjogJ3RyYW5zcGFyZW50J1xuICAgICAgICAgICAgICAgICAgICB9LCBkZWZhdWx0VmFsdWU6IGhpbnQsIHRhYkluZGV4OiAtMSB9KSkpKSkpO1xufTtcbiIsIlwidXNlIHN0cmljdFwiO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7IHZhbHVlOiB0cnVlIH0pO1xuZXhwb3J0cy5nZXRGaXJzdER1cGxpY2F0ZU9wdGlvbiA9IGV4cG9ydHMuc29ydEFzYyA9IGV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGV4cG9ydHMubWVyZ2VSZWZzID0gdm9pZCAwO1xuZnVuY3Rpb24gbWVyZ2VSZWZzKCkge1xuICAgIHZhciByZWZzID0gW107XG4gICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgcmVmc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgIH1cbiAgICB2YXIgZmlsdGVyZWRSZWZzID0gcmVmcy5maWx0ZXIoQm9vbGVhbik7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChpbnN0KSB7XG4gICAgICAgIGZvciAodmFyIF9pID0gMCwgZmlsdGVyZWRSZWZzXzEgPSBmaWx0ZXJlZFJlZnM7IF9pIDwgZmlsdGVyZWRSZWZzXzEubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICB2YXIgcmVmID0gZmlsdGVyZWRSZWZzXzFbX2ldO1xuICAgICAgICAgICAgaWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZWYoaW5zdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChyZWYpIHtcbiAgICAgICAgICAgICAgICByZWYuY3VycmVudCA9IGluc3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9O1xufVxuZXhwb3J0cy5tZXJnZVJlZnMgPSBtZXJnZVJlZnM7XG47XG4vLyBJRSBkb2Vzbid0IHNlZW0gdG8gZ2V0IHRoZSBjb21wb3NpdGUgY29tcHV0ZWQgdmFsdWUgKGVnOiAncGFkZGluZycsXG4vLyAnYm9yZGVyU3R5bGUnLCBldGMuKSwgc28gZ2VuZXJhdGUgdGhlc2UgZnJvbSB0aGUgaW5kaXZpZHVhbCB2YWx1ZXMuXG5mdW5jdGlvbiBpbnRlcnBvbGF0ZVN0eWxlKHN0eWxlcywgYXR0ciwgc3ViYXR0cikge1xuICAgIGlmIChzdWJhdHRyID09PSB2b2lkIDApIHsgc3ViYXR0ciA9ICcnOyB9XG4gICAgLy8gVGl0bGUtY2FzZSB0aGUgc3ViLWF0dHJpYnV0ZS5cbiAgICBpZiAoc3ViYXR0cikge1xuICAgICAgICBzdWJhdHRyID0gc3ViYXR0ci5yZXBsYWNlKHN1YmF0dHJbMF0sIHN1YmF0dHJbMF0udG9VcHBlckNhc2UoKSk7XG4gICAgfVxuICAgIHJldHVybiBbJ1RvcCcsICdSaWdodCcsICdCb3R0b20nLCAnTGVmdCddXG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IChhdHRyICsgZGlyICsgc3ViYXR0cikgcHJvcGVydHkgY2Fubm90IGJlIGRldGVybWluZWQgYXQgY29tcGlsZSB0aW1lXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGRpcikgeyByZXR1cm4gc3R5bGVzW2F0dHIgKyBkaXIgKyBzdWJhdHRyXTsgfSlcbiAgICAgICAgLmpvaW4oJyAnKTtcbn1cbmV4cG9ydHMuaW50ZXJwb2xhdGVTdHlsZSA9IGludGVycG9sYXRlU3R5bGU7XG5mdW5jdGlvbiBzb3J0QXNjKGEsIGIpIHtcbiAgICBpZiAoYSA+IGIpIHtcbiAgICAgICAgcmV0dXJuIDE7XG4gICAgfVxuICAgIGlmIChhIDwgYikge1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuICAgIHJldHVybiAwO1xufVxuZXhwb3J0cy5zb3J0QXNjID0gc29ydEFzYztcbmZ1bmN0aW9uIGdldEZpcnN0RHVwbGljYXRlT3B0aW9uKGFycmF5KSB7XG4gICAgdmFyIHRyYWNrZXIgPSB7fTtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICh0cmFja2VyW2FycmF5W2ldLmxhYmVsXSkge1xuICAgICAgICAgICAgcmV0dXJuIGFycmF5W2ldLmxhYmVsO1xuICAgICAgICB9XG4gICAgICAgIHRyYWNrZXJbYXJyYXlbaV0ubGFiZWxdID0gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIG51bGw7XG59XG5leHBvcnRzLmdldEZpcnN0RHVwbGljYXRlT3B0aW9uID0gZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb247XG4iLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjQgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+u6aWw6ZSu6L2s5o2i5oiQ5a+55bqU55qE6ZSu56CBXG5cblxuZnVuY3Rpb24gZ2V0TW9kcyhtb2RpZmllciwga2V5KSB7XG4gIHZhciBtb2RzID0ga2V5LnNsaWNlKDAsIGtleS5sZW5ndGggLSAxKTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IG1vZHMubGVuZ3RoOyBpKyspIHtcbiAgICBtb2RzW2ldID0gbW9kaWZpZXJbbW9kc1tpXS50b0xvd2VyQ2FzZSgpXTtcbiAgfVxuXG4gIHJldHVybiBtb2RzO1xufSAvLyDlpITnkIbkvKDnmoRrZXnlrZfnrKbkuLLovazmjaLmiJDmlbDnu4RcblxuXG5mdW5jdGlvbiBnZXRLZXlzKGtleSkge1xuICBpZiAodHlwZW9mIGtleSAhPT0gJ3N0cmluZycpIGtleSA9ICcnO1xuICBrZXkgPSBrZXkucmVwbGFjZSgvXFxzL2csICcnKTsgLy8g5Yy56YWN5Lu75L2V56m655m95a2X56ymLOWMheaLrOepuuagvOOAgeWItuihqOespuOAgeaNoumhteespuetieetiVxuXG4gIHZhciBrZXlzID0ga2V5LnNwbGl0KCcsJyk7IC8vIOWQjOaXtuiuvue9ruWkmuS4quW/q+aNt+mUru+8jOS7pScsJ+WIhuWJslxuXG4gIHZhciBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpOyAvLyDlv6vmjbfplK7lj6/og73ljIXlkKsnLCfvvIzpnIDnibnmrorlpITnkIZcblxuICBmb3IgKDsgaW5kZXggPj0gMDspIHtcbiAgICBrZXlzW2luZGV4IC0gMV0gKz0gJywnO1xuICAgIGtleXMuc3BsaWNlKGluZGV4LCAxKTtcbiAgICBpbmRleCA9IGtleXMubGFzdEluZGV4T2YoJycpO1xuICB9XG5cbiAgcmV0dXJuIGtleXM7XG59IC8vIOavlOi+g+S/rumlsOmUrueahOaVsOe7hFxuXG5cbmZ1bmN0aW9uIGNvbXBhcmVBcnJheShhMSwgYTIpIHtcbiAgdmFyIGFycjEgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTEgOiBhMjtcbiAgdmFyIGFycjIgPSBhMS5sZW5ndGggPj0gYTIubGVuZ3RoID8gYTIgOiBhMTtcbiAgdmFyIGlzSW5kZXggPSB0cnVlO1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyMS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcnIyLmluZGV4T2YoYXJyMVtpXSkgPT09IC0xKSBpc0luZGV4ID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gaXNJbmRleDtcbn1cblxudmFyIF9rZXlNYXAgPSB7XG4gIGJhY2tzcGFjZTogOCxcbiAgdGFiOiA5LFxuICBjbGVhcjogMTIsXG4gIGVudGVyOiAxMyxcbiAgcmV0dXJuOiAxMyxcbiAgZXNjOiAyNyxcbiAgZXNjYXBlOiAyNyxcbiAgc3BhY2U6IDMyLFxuICBsZWZ0OiAzNyxcbiAgdXA6IDM4LFxuICByaWdodDogMzksXG4gIGRvd246IDQwLFxuICBkZWw6IDQ2LFxuICBkZWxldGU6IDQ2LFxuICBpbnM6IDQ1LFxuICBpbnNlcnQ6IDQ1LFxuICBob21lOiAzNixcbiAgZW5kOiAzNSxcbiAgcGFnZXVwOiAzMyxcbiAgcGFnZWRvd246IDM0LFxuICBjYXBzbG9jazogMjAsXG4gIG51bV8wOiA5NixcbiAgbnVtXzE6IDk3LFxuICBudW1fMjogOTgsXG4gIG51bV8zOiA5OSxcbiAgbnVtXzQ6IDEwMCxcbiAgbnVtXzU6IDEwMSxcbiAgbnVtXzY6IDEwMixcbiAgbnVtXzc6IDEwMyxcbiAgbnVtXzg6IDEwNCxcbiAgbnVtXzk6IDEwNSxcbiAgbnVtX211bHRpcGx5OiAxMDYsXG4gIG51bV9hZGQ6IDEwNyxcbiAgbnVtX2VudGVyOiAxMDgsXG4gIG51bV9zdWJ0cmFjdDogMTA5LFxuICBudW1fZGVjaW1hbDogMTEwLFxuICBudW1fZGl2aWRlOiAxMTEsXG4gICfih6onOiAyMCxcbiAgJywnOiAxODgsXG4gICcuJzogMTkwLFxuICAnLyc6IDE5MSxcbiAgJ2AnOiAxOTIsXG4gICctJzogaXNmZiA/IDE3MyA6IDE4OSxcbiAgJz0nOiBpc2ZmID8gNjEgOiAxODcsXG4gICc7JzogaXNmZiA/IDU5IDogMTg2LFxuICAnXFwnJzogMjIyLFxuICAnWyc6IDIxOSxcbiAgJ10nOiAyMjEsXG4gICdcXFxcJzogMjIwXG59OyAvLyBNb2RpZmllciBLZXlzXG5cbnZhciBfbW9kaWZpZXIgPSB7XG4gIC8vIHNoaWZ0S2V5XG4gICfih6cnOiAxNixcbiAgc2hpZnQ6IDE2LFxuICAvLyBhbHRLZXlcbiAgJ+KMpSc6IDE4LFxuICBhbHQ6IDE4LFxuICBvcHRpb246IDE4LFxuICAvLyBjdHJsS2V5XG4gICfijIMnOiAxNyxcbiAgY3RybDogMTcsXG4gIGNvbnRyb2w6IDE3LFxuICAvLyBtZXRhS2V5XG4gICfijJgnOiA5MSxcbiAgY21kOiA5MSxcbiAgY29tbWFuZDogOTFcbn07XG52YXIgbW9kaWZpZXJNYXAgPSB7XG4gIDE2OiAnc2hpZnRLZXknLFxuICAxODogJ2FsdEtleScsXG4gIDE3OiAnY3RybEtleScsXG4gIDkxOiAnbWV0YUtleScsXG4gIHNoaWZ0S2V5OiAxNixcbiAgY3RybEtleTogMTcsXG4gIGFsdEtleTogMTgsXG4gIG1ldGFLZXk6IDkxXG59O1xudmFyIF9tb2RzID0ge1xuICAxNjogZmFsc2UsXG4gIDE4OiBmYWxzZSxcbiAgMTc6IGZhbHNlLFxuICA5MTogZmFsc2Vcbn07XG52YXIgX2hhbmRsZXJzID0ge307IC8vIEYxfkYxMiBzcGVjaWFsIGtleVxuXG5mb3IgKHZhciBrID0gMTsgayA8IDIwOyBrKyspIHtcbiAgX2tleU1hcFtcImZcIi5jb25jYXQoayldID0gMTExICsgaztcbn1cblxudmFyIF9kb3duS2V5cyA9IFtdOyAvLyDorrDlvZXmkYHkuIvnmoTnu5HlrprplK5cblxudmFyIHdpbkxpc3RlbmRGb2N1cyA9IGZhbHNlOyAvLyB3aW5kb3fmmK/lkKblt7Lnu4/nm5HlkKzkuoZmb2N1c+S6i+S7tlxuXG52YXIgX3Njb3BlID0gJ2FsbCc7IC8vIOm7mOiupOeDremUruiMg+WbtFxuXG52YXIgZWxlbWVudEhhc0JpbmRFdmVudCA9IFtdOyAvLyDlt7Lnu5Hlrprkuovku7bnmoToioLngrnorrDlvZVcbi8vIOi/lOWbnumUrueggVxuXG52YXIgY29kZSA9IGZ1bmN0aW9uIGNvZGUoeCkge1xuICByZXR1cm4gX2tleU1hcFt4LnRvTG93ZXJDYXNlKCldIHx8IF9tb2RpZmllclt4LnRvTG93ZXJDYXNlKCldIHx8IHgudG9VcHBlckNhc2UoKS5jaGFyQ29kZUF0KDApO1xufTsgLy8g6K6+572u6I635Y+W5b2T5YmN6IyD5Zu077yI6buY6K6k5Li6J+aJgOaciSfvvIlcblxuXG5mdW5jdGlvbiBzZXRTY29wZShzY29wZSkge1xuICBfc2NvcGUgPSBzY29wZSB8fCAnYWxsJztcbn0gLy8g6I635Y+W5b2T5YmN6IyD5Zu0XG5cblxuZnVuY3Rpb24gZ2V0U2NvcGUoKSB7XG4gIHJldHVybiBfc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluaRgeS4i+e7keWumumUrueahOmUruWAvFxuXG5cbmZ1bmN0aW9uIGdldFByZXNzZWRLZXlDb2RlcygpIHtcbiAgcmV0dXJuIF9kb3duS2V5cy5zbGljZSgwKTtcbn0gLy8g6KGo5Y2V5o6n5Lu25o6n5Lu25Yik5patIOi/lOWbniBCb29sZWFuXG4vLyBob3RrZXkgaXMgZWZmZWN0aXZlIG9ubHkgd2hlbiBmaWx0ZXIgcmV0dXJuIHRydWVcblxuXG5mdW5jdGlvbiBmaWx0ZXIoZXZlbnQpIHtcbiAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldCB8fCBldmVudC5zcmNFbGVtZW50O1xuICB2YXIgdGFnTmFtZSA9IHRhcmdldC50YWdOYW1lO1xuICB2YXIgZmxhZyA9IHRydWU7IC8vIGlnbm9yZTogaXNDb250ZW50RWRpdGFibGUgPT09ICd0cnVlJywgPGlucHV0PiBhbmQgPHRleHRhcmVhPiB3aGVuIHJlYWRPbmx5IHN0YXRlIGlzIGZhbHNlLCA8c2VsZWN0PlxuXG4gIGlmICh0YXJnZXQuaXNDb250ZW50RWRpdGFibGUgfHwgKHRhZ05hbWUgPT09ICdJTlBVVCcgfHwgdGFnTmFtZSA9PT0gJ1RFWFRBUkVBJyB8fCB0YWdOYW1lID09PSAnU0VMRUNUJykgJiYgIXRhcmdldC5yZWFkT25seSkge1xuICAgIGZsYWcgPSBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiBmbGFnO1xufSAvLyDliKTmlq3mkYHkuIvnmoTplK7mmK/lkKbkuLrmn5DkuKrplK7vvIzov5Tlm550cnVl5oiW6ICFZmFsc2VcblxuXG5mdW5jdGlvbiBpc1ByZXNzZWQoa2V5Q29kZSkge1xuICBpZiAodHlwZW9mIGtleUNvZGUgPT09ICdzdHJpbmcnKSB7XG4gICAga2V5Q29kZSA9IGNvZGUoa2V5Q29kZSk7IC8vIOi9rOaNouaIkOmUrueggVxuICB9XG5cbiAgcmV0dXJuIF9kb3duS2V5cy5pbmRleE9mKGtleUNvZGUpICE9PSAtMTtcbn0gLy8g5b6q546v5Yig6ZmkaGFuZGxlcnPkuK3nmoTmiYDmnIkgc2NvcGUo6IyD5Zu0KVxuXG5cbmZ1bmN0aW9uIGRlbGV0ZVNjb3BlKHNjb3BlLCBuZXdTY29wZSkge1xuICB2YXIgaGFuZGxlcnM7XG4gIHZhciBpOyAvLyDmsqHmnInmjIflrppzY29wZe+8jOiOt+WPlnNjb3BlXG5cbiAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuXG4gIGZvciAodmFyIGtleSBpbiBfaGFuZGxlcnMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9oYW5kbGVycywga2V5KSkge1xuICAgICAgaGFuZGxlcnMgPSBfaGFuZGxlcnNba2V5XTtcblxuICAgICAgZm9yIChpID0gMDsgaSA8IGhhbmRsZXJzLmxlbmd0aDspIHtcbiAgICAgICAgaWYgKGhhbmRsZXJzW2ldLnNjb3BlID09PSBzY29wZSkgaGFuZGxlcnMuc3BsaWNlKGksIDEpO2Vsc2UgaSsrO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyDlpoLmnpxzY29wZeiiq+WIoOmZpO+8jOWwhnNjb3Bl6YeN572u5Li6YWxsXG5cblxuICBpZiAoZ2V0U2NvcGUoKSA9PT0gc2NvcGUpIHNldFNjb3BlKG5ld1Njb3BlIHx8ICdhbGwnKTtcbn0gLy8g5riF6Zmk5L+u6aWw6ZSuXG5cblxuZnVuY3Rpb24gY2xlYXJNb2RpZmllcihldmVudCkge1xuICB2YXIga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaCB8fCBldmVudC5jaGFyQ29kZTtcblxuICB2YXIgaSA9IF9kb3duS2V5cy5pbmRleE9mKGtleSk7IC8vIOS7juWIl+ihqOS4rea4hemZpOaMieWOi+i/h+eahOmUrlxuXG5cbiAgaWYgKGkgPj0gMCkge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoaSwgMSk7XG4gIH0gLy8g54m55q6K5aSE55CGIGNtbWFuZCDplK7vvIzlnKggY21tYW5kIOe7hOWQiOW/q+aNt+mUriBrZXl1cCDlj6rmiafooYzkuIDmrKHnmoTpl67pophcblxuXG4gIGlmIChldmVudC5rZXkgJiYgZXZlbnQua2V5LnRvTG93ZXJDYXNlKCkgPT09ICdtZXRhJykge1xuICAgIF9kb3duS2V5cy5zcGxpY2UoMCwgX2Rvd25LZXlzLmxlbmd0aCk7XG4gIH0gLy8g5L+u6aWw6ZSuIHNoaWZ0S2V5IGFsdEtleSBjdHJsS2V5IChjb21tYW5kfHxtZXRhS2V5KSDmuIXpmaRcblxuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IGZhbHNlOyAvLyDlsIbkv67ppbDplK7ph43nva7kuLpmYWxzZVxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IGZhbHNlO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB1bmJpbmQoa2V5c0luZm8pIHtcbiAgLy8gdW5iaW5kKCksIHVuYmluZCBhbGwga2V5c1xuICBpZiAodHlwZW9mIGtleXNJbmZvID09PSAndW5kZWZpbmVkJykge1xuICAgIE9iamVjdC5rZXlzKF9oYW5kbGVycykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICByZXR1cm4gZGVsZXRlIF9oYW5kbGVyc1trZXldO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoa2V5c0luZm8pKSB7XG4gICAgLy8gc3VwcG9ydCBsaWtlIDogdW5iaW5kKFt7a2V5OiAnY3RybCthJywgc2NvcGU6ICdzMSd9LCB7a2V5OiAnY3RybC1hJywgc2NvcGU6ICdzMicsIHNwbGl0S2V5OiAnLSd9XSlcbiAgICBrZXlzSW5mby5mb3JFYWNoKGZ1bmN0aW9uIChpbmZvKSB7XG4gICAgICBpZiAoaW5mby5rZXkpIGVhY2hVbmJpbmQoaW5mbyk7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGtleXNJbmZvID09PSAnb2JqZWN0Jykge1xuICAgIC8vIHN1cHBvcnQgbGlrZSB1bmJpbmQoe2tleTogJ2N0cmwrYSwgY3RybCtiJywgc2NvcGU6J2FiYyd9KVxuICAgIGlmIChrZXlzSW5mby5rZXkpIGVhY2hVbmJpbmQoa2V5c0luZm8pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3N0cmluZycpIHtcbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMSA/IF9sZW4gLSAxIDogMCksIF9rZXkgPSAxOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICAvLyBzdXBwb3J0IG9sZCBtZXRob2RcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgdmFyIHNjb3BlID0gYXJnc1swXSxcbiAgICAgICAgbWV0aG9kID0gYXJnc1sxXTtcblxuICAgIGlmICh0eXBlb2Ygc2NvcGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIG1ldGhvZCA9IHNjb3BlO1xuICAgICAgc2NvcGUgPSAnJztcbiAgICB9XG5cbiAgICBlYWNoVW5iaW5kKHtcbiAgICAgIGtleToga2V5c0luZm8sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIHNwbGl0S2V5OiAnKydcbiAgICB9KTtcbiAgfVxufSAvLyDop6PpmaTnu5Hlrprmn5DkuKrojIPlm7TnmoTlv6vmjbfplK5cblxuXG52YXIgZWFjaFVuYmluZCA9IGZ1bmN0aW9uIGVhY2hVbmJpbmQoX3JlZikge1xuICB2YXIga2V5ID0gX3JlZi5rZXksXG4gICAgICBzY29wZSA9IF9yZWYuc2NvcGUsXG4gICAgICBtZXRob2QgPSBfcmVmLm1ldGhvZCxcbiAgICAgIF9yZWYkc3BsaXRLZXkgPSBfcmVmLnNwbGl0S2V5LFxuICAgICAgc3BsaXRLZXkgPSBfcmVmJHNwbGl0S2V5ID09PSB2b2lkIDAgPyAnKycgOiBfcmVmJHNwbGl0S2V5O1xuICB2YXIgbXVsdGlwbGVLZXlzID0gZ2V0S2V5cyhrZXkpO1xuICBtdWx0aXBsZUtleXMuZm9yRWFjaChmdW5jdGlvbiAob3JpZ2luS2V5KSB7XG4gICAgdmFyIHVuYmluZEtleXMgPSBvcmlnaW5LZXkuc3BsaXQoc3BsaXRLZXkpO1xuICAgIHZhciBsZW4gPSB1bmJpbmRLZXlzLmxlbmd0aDtcbiAgICB2YXIgbGFzdEtleSA9IHVuYmluZEtleXNbbGVuIC0gMV07XG4gICAgdmFyIGtleUNvZGUgPSBsYXN0S2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGxhc3RLZXkpO1xuICAgIGlmICghX2hhbmRsZXJzW2tleUNvZGVdKSByZXR1cm47IC8vIOWIpOaWreaYr+WQpuS8oOWFpeiMg+WbtO+8jOayoeacieWwseiOt+WPluiMg+WbtFxuXG4gICAgaWYgKCFzY29wZSkgc2NvcGUgPSBnZXRTY29wZSgpO1xuICAgIHZhciBtb2RzID0gbGVuID4gMSA/IGdldE1vZHMoX21vZGlmaWVyLCB1bmJpbmRLZXlzKSA6IFtdO1xuICAgIF9oYW5kbGVyc1trZXlDb2RlXSA9IF9oYW5kbGVyc1trZXlDb2RlXS5maWx0ZXIoZnVuY3Rpb24gKHJlY29yZCkge1xuICAgICAgLy8g6YCa6L+H5Ye95pWw5Yik5pat77yM5piv5ZCm6Kej6Zmk57uR5a6a77yM5Ye95pWw55u4562J55u05o6l6L+U5ZueXG4gICAgICB2YXIgaXNNYXRjaGluZ01ldGhvZCA9IG1ldGhvZCA/IHJlY29yZC5tZXRob2QgPT09IG1ldGhvZCA6IHRydWU7XG4gICAgICByZXR1cm4gIShpc01hdGNoaW5nTWV0aG9kICYmIHJlY29yZC5zY29wZSA9PT0gc2NvcGUgJiYgY29tcGFyZUFycmF5KHJlY29yZC5tb2RzLCBtb2RzKSk7XG4gICAgfSk7XG4gIH0pO1xufTsgLy8g5a+555uR5ZCs5a+55bqU5b+r5o236ZSu55qE5Zue6LCD5Ye95pWw6L+b6KGM5aSE55CGXG5cblxuZnVuY3Rpb24gZXZlbnRIYW5kbGVyKGV2ZW50LCBoYW5kbGVyLCBzY29wZSwgZWxlbWVudCkge1xuICBpZiAoaGFuZGxlci5lbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIG1vZGlmaWVyc01hdGNoOyAvLyDnnIvlroPmmK/lkKblnKjlvZPliY3ojIPlm7RcblxuICBpZiAoaGFuZGxlci5zY29wZSA9PT0gc2NvcGUgfHwgaGFuZGxlci5zY29wZSA9PT0gJ2FsbCcpIHtcbiAgICAvLyDmo4Dmn6XmmK/lkKbljLnphY3kv67ppbDnrKbvvIjlpoLmnpzmnInov5Tlm550cnVl77yJXG4gICAgbW9kaWZpZXJzTWF0Y2ggPSBoYW5kbGVyLm1vZHMubGVuZ3RoID4gMDtcblxuICAgIGZvciAodmFyIHkgaW4gX21vZHMpIHtcbiAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX21vZHMsIHkpKSB7XG4gICAgICAgIGlmICghX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID4gLTEgfHwgX21vZHNbeV0gJiYgaGFuZGxlci5tb2RzLmluZGV4T2YoK3kpID09PSAtMSkge1xuICAgICAgICAgIG1vZGlmaWVyc01hdGNoID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IC8vIOiwg+eUqOWkhOeQhueoi+W6j++8jOWmguaenOaYr+S/rumlsOmUruS4jeWBmuWkhOeQhlxuXG5cbiAgICBpZiAoaGFuZGxlci5tb2RzLmxlbmd0aCA9PT0gMCAmJiAhX21vZHNbMTZdICYmICFfbW9kc1sxOF0gJiYgIV9tb2RzWzE3XSAmJiAhX21vZHNbOTFdIHx8IG1vZGlmaWVyc01hdGNoIHx8IGhhbmRsZXIuc2hvcnRjdXQgPT09ICcqJykge1xuICAgICAgaWYgKGhhbmRsZXIubWV0aG9kKGV2ZW50LCBoYW5kbGVyKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSBldmVudC5wcmV2ZW50RGVmYXVsdCgpO2Vsc2UgZXZlbnQucmV0dXJuVmFsdWUgPSBmYWxzZTtcbiAgICAgICAgaWYgKGV2ZW50LnN0b3BQcm9wYWdhdGlvbikgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgICAgIGlmIChldmVudC5jYW5jZWxCdWJibGUpIGV2ZW50LmNhbmNlbEJ1YmJsZSA9IHRydWU7XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWkhOeQhmtleWRvd27kuovku7ZcblxuXG5mdW5jdGlvbiBkaXNwYXRjaChldmVudCwgZWxlbWVudCkge1xuICB2YXIgYXN0ZXJpc2sgPSBfaGFuZGxlcnNbJyonXTtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7IC8vIOihqOWNleaOp+S7tui/h+a7pCDpu5jorqTooajljZXmjqfku7bkuI3op6blj5Hlv6vmjbfplK5cblxuICBpZiAoIWhvdGtleXMuZmlsdGVyLmNhbGwodGhpcywgZXZlbnQpKSByZXR1cm47IC8vIEdlY2tvKEZpcmVmb3gp55qEY29tbWFuZOmUruWAvDIyNO+8jOWcqFdlYmtpdChDaHJvbWUp5Lit5L+d5oyB5LiA6Ie0XG4gIC8vIFdlYmtpdOW3puWPsyBjb21tYW5kIOmUruWAvOS4jeS4gOagt1xuXG4gIGlmIChrZXkgPT09IDkzIHx8IGtleSA9PT0gMjI0KSBrZXkgPSA5MTtcbiAgLyoqXG4gICAqIENvbGxlY3QgYm91bmQga2V5c1xuICAgKiBJZiBhbiBJbnB1dCBNZXRob2QgRWRpdG9yIGlzIHByb2Nlc3Npbmcga2V5IGlucHV0IGFuZCB0aGUgZXZlbnQgaXMga2V5ZG93biwgcmV0dXJuIDIyOS5cbiAgICogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMjUwNDM5MzQvaXMtaXQtb2stdG8taWdub3JlLWtleWRvd24tZXZlbnRzLXdpdGgta2V5Y29kZS0yMjlcbiAgICogaHR0cDovL2xpc3RzLnczLm9yZy9BcmNoaXZlcy9QdWJsaWMvd3d3LWRvbS8yMDEwSnVsU2VwL2F0dC0wMTgyL2tleUNvZGUtc3BlYy5odG1sXG4gICAqL1xuXG4gIGlmIChfZG93bktleXMuaW5kZXhPZihrZXkpID09PSAtMSAmJiBrZXkgIT09IDIyOSkgX2Rvd25LZXlzLnB1c2goa2V5KTtcbiAgLyoqXG4gICAqIEplc3QgdGVzdCBjYXNlcyBhcmUgcmVxdWlyZWQuXG4gICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICovXG5cbiAgWydjdHJsS2V5JywgJ2FsdEtleScsICdzaGlmdEtleScsICdtZXRhS2V5J10uZm9yRWFjaChmdW5jdGlvbiAoa2V5TmFtZSkge1xuICAgIHZhciBrZXlOdW0gPSBtb2RpZmllck1hcFtrZXlOYW1lXTtcblxuICAgIGlmIChldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goa2V5TnVtKTtcbiAgICB9IGVsc2UgaWYgKCFldmVudFtrZXlOYW1lXSAmJiBfZG93bktleXMuaW5kZXhPZihrZXlOdW0pID4gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5zcGxpY2UoX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSwgMSk7XG4gICAgfSBlbHNlIGlmIChrZXlOYW1lID09PSAnbWV0YUtleScgJiYgZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmxlbmd0aCA9PT0gMykge1xuICAgICAgLyoqXG4gICAgICAgKiBGaXggaWYgQ29tbWFuZCBpcyBwcmVzc2VkOlxuICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICAgICAgICovXG4gICAgICBpZiAoIShldmVudC5jdHJsS2V5IHx8IGV2ZW50LnNoaWZ0S2V5IHx8IGV2ZW50LmFsdEtleSkpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gX2Rvd25LZXlzLnNsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSkpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG4gIC8qKlxuICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gICAqL1xuXG4gIGlmIChrZXkgaW4gX21vZHMpIHtcbiAgICBfbW9kc1trZXldID0gdHJ1ZTsgLy8g5bCG54m55q6K5a2X56ym55qEa2V55rOo5YaM5YiwIGhvdGtleXMg5LiKXG5cbiAgICBmb3IgKHZhciBrIGluIF9tb2RpZmllcikge1xuICAgICAgaWYgKF9tb2RpZmllcltrXSA9PT0ga2V5KSBob3RrZXlzW2tdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAoIWFzdGVyaXNrKSByZXR1cm47XG4gIH0gLy8g5bCGIG1vZGlmaWVyTWFwIOmHjOmdoueahOS/rumlsOmUrue7keWumuWIsCBldmVudCDkuK1cblxuXG4gIGZvciAodmFyIGUgaW4gX21vZHMpIHtcbiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCBlKSkge1xuICAgICAgX21vZHNbZV0gPSBldmVudFttb2RpZmllck1hcFtlXV07XG4gICAgfVxuICB9XG4gIC8qKlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vamF5d2NqbG92ZS9ob3RrZXlzL3B1bGwvMTI5XG4gICAqIFRoaXMgc29sdmVzIHRoZSBpc3N1ZSBpbiBGaXJlZm94IG9uIFdpbmRvd3Mgd2hlcmUgaG90a2V5cyBjb3JyZXNwb25kaW5nIHRvIHNwZWNpYWwgY2hhcmFjdGVycyB3b3VsZCBub3QgdHJpZ2dlci5cbiAgICogQW4gZXhhbXBsZSBvZiB0aGlzIGlzIGN0cmwrYWx0K20gb24gYSBTd2VkaXNoIGtleWJvYXJkIHdoaWNoIGlzIHVzZWQgdG8gdHlwZSDOvC5cbiAgICogQnJvd3NlciBzdXBwb3J0OiBodHRwczovL2Nhbml1c2UuY29tLyNmZWF0PWtleWJvYXJkZXZlbnQtZ2V0bW9kaWZpZXJzdGF0ZVxuICAgKi9cblxuXG4gIGlmIChldmVudC5nZXRNb2RpZmllclN0YXRlICYmICEoZXZlbnQuYWx0S2V5ICYmICFldmVudC5jdHJsS2V5KSAmJiBldmVudC5nZXRNb2RpZmllclN0YXRlKCdBbHRHcmFwaCcpKSB7XG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE3KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE3KTtcbiAgICB9XG5cbiAgICBpZiAoX2Rvd25LZXlzLmluZGV4T2YoMTgpID09PSAtMSkge1xuICAgICAgX2Rvd25LZXlzLnB1c2goMTgpO1xuICAgIH1cblxuICAgIF9tb2RzWzE3XSA9IHRydWU7XG4gICAgX21vZHNbMThdID0gdHJ1ZTtcbiAgfSAvLyDojrflj5bojIPlm7Qg6buY6K6k5Li6IGBhbGxgXG5cblxuICB2YXIgc2NvcGUgPSBnZXRTY29wZSgpOyAvLyDlr7nku7vkvZXlv6vmjbfplK7pg73pnIDopoHlgZrnmoTlpITnkIZcblxuICBpZiAoYXN0ZXJpc2spIHtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFzdGVyaXNrLmxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAoYXN0ZXJpc2tbaV0uc2NvcGUgPT09IHNjb3BlICYmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgYXN0ZXJpc2tbaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIGFzdGVyaXNrW2ldLmtleXVwKSkge1xuICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIGFzdGVyaXNrW2ldLCBzY29wZSwgZWxlbWVudCk7XG4gICAgICB9XG4gICAgfVxuICB9IC8vIGtleSDkuI3lnKggX2hhbmRsZXJzIOS4rei/lOWbnlxuXG5cbiAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIHJldHVybjtcblxuICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgX2hhbmRsZXJzW2tleV0ubGVuZ3RoOyBfaSsrKSB7XG4gICAgaWYgKGV2ZW50LnR5cGUgPT09ICdrZXlkb3duJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5ZG93biB8fCBldmVudC50eXBlID09PSAna2V5dXAnICYmIF9oYW5kbGVyc1trZXldW19pXS5rZXl1cCkge1xuICAgICAgaWYgKF9oYW5kbGVyc1trZXldW19pXS5rZXkpIHtcbiAgICAgICAgdmFyIHJlY29yZCA9IF9oYW5kbGVyc1trZXldW19pXTtcbiAgICAgICAgdmFyIHNwbGl0S2V5ID0gcmVjb3JkLnNwbGl0S2V5O1xuICAgICAgICB2YXIga2V5U2hvcnRjdXQgPSByZWNvcmQua2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICAgICAgdmFyIF9kb3duS2V5c0N1cnJlbnQgPSBbXTsgLy8g6K6w5b2V5b2T5YmN5oyJ6ZSu6ZSu5YC8XG5cbiAgICAgICAgZm9yICh2YXIgYSA9IDA7IGEgPCBrZXlTaG9ydGN1dC5sZW5ndGg7IGErKykge1xuICAgICAgICAgIF9kb3duS2V5c0N1cnJlbnQucHVzaChjb2RlKGtleVNob3J0Y3V0W2FdKSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoX2Rvd25LZXlzQ3VycmVudC5zb3J0KCkuam9pbignJykgPT09IF9kb3duS2V5cy5zb3J0KCkuam9pbignJykpIHtcbiAgICAgICAgICAvLyDmib7liLDlpITnkIblhoXlrrlcbiAgICAgICAgICBldmVudEhhbmRsZXIoZXZlbnQsIHJlY29yZCwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59IC8vIOWIpOaWrSBlbGVtZW50IOaYr+WQpuW3sue7j+e7keWumuS6i+S7tlxuXG5cbmZ1bmN0aW9uIGlzRWxlbWVudEJpbmQoZWxlbWVudCkge1xuICByZXR1cm4gZWxlbWVudEhhc0JpbmRFdmVudC5pbmRleE9mKGVsZW1lbnQpID4gLTE7XG59XG5cbmZ1bmN0aW9uIGhvdGtleXMoa2V5LCBvcHRpb24sIG1ldGhvZCkge1xuICBfZG93bktleXMgPSBbXTtcbiAgdmFyIGtleXMgPSBnZXRLZXlzKGtleSk7IC8vIOmcgOimgeWkhOeQhueahOW/q+aNt+mUruWIl+ihqFxuXG4gIHZhciBtb2RzID0gW107XG4gIHZhciBzY29wZSA9ICdhbGwnOyAvLyBzY29wZem7mOiupOS4umFsbO+8jOaJgOacieiMg+WbtOmDveacieaViFxuXG4gIHZhciBlbGVtZW50ID0gZG9jdW1lbnQ7IC8vIOW/q+aNt+mUruS6i+S7tue7keWumuiKgueCuVxuXG4gIHZhciBpID0gMDtcbiAgdmFyIGtleXVwID0gZmFsc2U7XG4gIHZhciBrZXlkb3duID0gdHJ1ZTtcbiAgdmFyIHNwbGl0S2V5ID0gJysnO1xuICB2YXIgY2FwdHVyZSA9IGZhbHNlOyAvLyDlr7nkuLrorr7lrprojIPlm7TnmoTliKTmlq1cblxuICBpZiAobWV0aG9kID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9wdGlvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIG1ldGhvZCA9IG9wdGlvbjtcbiAgfVxuXG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob3B0aW9uKSA9PT0gJ1tvYmplY3QgT2JqZWN0XScpIHtcbiAgICBpZiAob3B0aW9uLnNjb3BlKSBzY29wZSA9IG9wdGlvbi5zY29wZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5lbGVtZW50KSBlbGVtZW50ID0gb3B0aW9uLmVsZW1lbnQ7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24ua2V5dXApIGtleXVwID0gb3B0aW9uLmtleXVwOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleWRvd24gIT09IHVuZGVmaW5lZCkga2V5ZG93biA9IG9wdGlvbi5rZXlkb3duOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmNhcHR1cmUgIT09IHVuZGVmaW5lZCkgY2FwdHVyZSA9IG9wdGlvbi5jYXB0dXJlOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAodHlwZW9mIG9wdGlvbi5zcGxpdEtleSA9PT0gJ3N0cmluZycpIHNwbGl0S2V5ID0gb3B0aW9uLnNwbGl0S2V5OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gIH1cblxuICBpZiAodHlwZW9mIG9wdGlvbiA9PT0gJ3N0cmluZycpIHNjb3BlID0gb3B0aW9uOyAvLyDlr7nkuo7mr4/kuKrlv6vmjbfplK7ov5vooYzlpITnkIZcblxuICBmb3IgKDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICBrZXkgPSBrZXlzW2ldLnNwbGl0KHNwbGl0S2V5KTsgLy8g5oyJ6ZSu5YiX6KGoXG5cbiAgICBtb2RzID0gW107IC8vIOWmguaenOaYr+e7hOWQiOW/q+aNt+mUruWPluW+l+e7hOWQiOW/q+aNt+mUrlxuXG4gICAgaWYgKGtleS5sZW5ndGggPiAxKSBtb2RzID0gZ2V0TW9kcyhfbW9kaWZpZXIsIGtleSk7IC8vIOWwhumdnuS/rumlsOmUrui9rOWMluS4uumUrueggVxuXG4gICAga2V5ID0ga2V5W2tleS5sZW5ndGggLSAxXTtcbiAgICBrZXkgPSBrZXkgPT09ICcqJyA/ICcqJyA6IGNvZGUoa2V5KTsgLy8gKuihqOekuuWMuemFjeaJgOacieW/q+aNt+mUrlxuICAgIC8vIOWIpOaWrWtleeaYr+WQpuWcqF9oYW5kbGVyc+S4re+8jOS4jeWcqOWwsei1i+S4gOS4quepuuaVsOe7hFxuXG4gICAgaWYgKCEoa2V5IGluIF9oYW5kbGVycykpIF9oYW5kbGVyc1trZXldID0gW107XG5cbiAgICBfaGFuZGxlcnNba2V5XS5wdXNoKHtcbiAgICAgIGtleXVwOiBrZXl1cCxcbiAgICAgIGtleWRvd246IGtleWRvd24sXG4gICAgICBzY29wZTogc2NvcGUsXG4gICAgICBtb2RzOiBtb2RzLFxuICAgICAgc2hvcnRjdXQ6IGtleXNbaV0sXG4gICAgICBtZXRob2Q6IG1ldGhvZCxcbiAgICAgIGtleToga2V5c1tpXSxcbiAgICAgIHNwbGl0S2V5OiBzcGxpdEtleSxcbiAgICAgIGVsZW1lbnQ6IGVsZW1lbnRcbiAgICB9KTtcbiAgfSAvLyDlnKjlhajlsYBkb2N1bWVudOS4iuiuvue9ruW/q+aNt+mUrlxuXG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50ICE9PSAndW5kZWZpbmVkJyAmJiAhaXNFbGVtZW50QmluZChlbGVtZW50KSAmJiB3aW5kb3cpIHtcbiAgICBlbGVtZW50SGFzQmluZEV2ZW50LnB1c2goZWxlbWVudCk7XG4gICAgYWRkRXZlbnQoZWxlbWVudCwgJ2tleWRvd24nLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgfSwgY2FwdHVyZSk7XG5cbiAgICBpZiAoIXdpbkxpc3RlbmRGb2N1cykge1xuICAgICAgd2luTGlzdGVuZEZvY3VzID0gdHJ1ZTtcbiAgICAgIGFkZEV2ZW50KHdpbmRvdywgJ2ZvY3VzJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBfZG93bktleXMgPSBbXTtcbiAgICAgIH0sIGNhcHR1cmUpO1xuICAgIH1cblxuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXl1cCcsIGZ1bmN0aW9uIChlKSB7XG4gICAgICBkaXNwYXRjaChlLCBlbGVtZW50KTtcbiAgICAgIGNsZWFyTW9kaWZpZXIoZSk7XG4gICAgfSwgY2FwdHVyZSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gdHJpZ2dlcihzaG9ydGN1dCkge1xuICB2YXIgc2NvcGUgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1sxXSA6ICdhbGwnO1xuICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBkYXRhID0gX2hhbmRsZXJzW2tleV0uZmluZChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgcmV0dXJuIGl0ZW0uc2NvcGUgPT09IHNjb3BlICYmIGl0ZW0uc2hvcnRjdXQgPT09IHNob3J0Y3V0O1xuICAgIH0pO1xuXG4gICAgaWYgKGRhdGEgJiYgZGF0YS5tZXRob2QpIHtcbiAgICAgIGRhdGEubWV0aG9kKCk7XG4gICAgfVxuICB9KTtcbn1cblxudmFyIF9hcGkgPSB7XG4gIHNldFNjb3BlOiBzZXRTY29wZSxcbiAgZ2V0U2NvcGU6IGdldFNjb3BlLFxuICBkZWxldGVTY29wZTogZGVsZXRlU2NvcGUsXG4gIGdldFByZXNzZWRLZXlDb2RlczogZ2V0UHJlc3NlZEtleUNvZGVzLFxuICBpc1ByZXNzZWQ6IGlzUHJlc3NlZCxcbiAgZmlsdGVyOiBmaWx0ZXIsXG4gIHRyaWdnZXI6IHRyaWdnZXIsXG4gIHVuYmluZDogdW5iaW5kLFxuICBrZXlNYXA6IF9rZXlNYXAsXG4gIG1vZGlmaWVyOiBfbW9kaWZpZXIsXG4gIG1vZGlmaWVyTWFwOiBtb2RpZmllck1hcFxufTtcblxuZm9yICh2YXIgYSBpbiBfYXBpKSB7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoX2FwaSwgYSkpIHtcbiAgICBob3RrZXlzW2FdID0gX2FwaVthXTtcbiAgfVxufVxuXG5pZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgdmFyIF9ob3RrZXlzID0gd2luZG93LmhvdGtleXM7XG5cbiAgaG90a2V5cy5ub0NvbmZsaWN0ID0gZnVuY3Rpb24gKGRlZXApIHtcbiAgICBpZiAoZGVlcCAmJiB3aW5kb3cuaG90a2V5cyA9PT0gaG90a2V5cykge1xuICAgICAgd2luZG93LmhvdGtleXMgPSBfaG90a2V5cztcbiAgICB9XG5cbiAgICByZXR1cm4gaG90a2V5cztcbiAgfTtcblxuICB3aW5kb3cuaG90a2V5cyA9IGhvdGtleXM7XG59XG5cbmV4cG9ydCB7IGhvdGtleXMgYXMgZGVmYXVsdCB9O1xuIiwiaW1wb3J0IGhvdGtleXMgZnJvbSAnaG90a2V5cy1qcyc7XG5pbXBvcnQgeyB1c2VSZWYsIHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QgfSBmcm9tICdyZWFjdCc7XG5cbi8qKlxyXG4gKiBAZGVwcmVjYXRlZCBVc2UgaXNIb3RrZXlQcmVzc2VkIGluc3RlYWQuIFdpbGwgYmUgcmVtb3ZlZCB2ZXJzaW9uIDQuXHJcbiAqL1xuXG5mdW5jdGlvbiB1c2VJc0hvdGtleVByZXNzZWQoKSB7XG4gIHJldHVybiBob3RrZXlzLmlzUHJlc3NlZDtcbn1cblxuaG90a2V5cy5maWx0ZXIgPSBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiB0cnVlO1xufTtcblxudmFyIHRhZ0ZpbHRlciA9IGZ1bmN0aW9uIHRhZ0ZpbHRlcihfcmVmLCBlbmFibGVPblRhZ3MpIHtcbiAgdmFyIHRhcmdldCA9IF9yZWYudGFyZ2V0O1xuICB2YXIgdGFyZ2V0VGFnTmFtZSA9IHRhcmdldCAmJiB0YXJnZXQudGFnTmFtZTtcbiAgcmV0dXJuIEJvb2xlYW4odGFyZ2V0VGFnTmFtZSAmJiBlbmFibGVPblRhZ3MgJiYgZW5hYmxlT25UYWdzLmluY2x1ZGVzKHRhcmdldFRhZ05hbWUpKTtcbn07XG5cbnZhciBpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0ID0gZnVuY3Rpb24gaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChldikge1xuICByZXR1cm4gdGFnRmlsdGVyKGV2LCBbJ0lOUFVUJywgJ1RFWFRBUkVBJywgJ1NFTEVDVCddKTtcbn07XG5cbmZ1bmN0aW9uIHVzZUhvdGtleXMoa2V5cywgY2FsbGJhY2ssIG9wdGlvbnMsIGRlcHMpIHtcbiAgaWYgKG9wdGlvbnMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIGRlcHMgPSBvcHRpb25zO1xuICAgIG9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gIH1cblxuICB2YXIgX3JlZjIgPSBvcHRpb25zIHx8IHt9LFxuICAgICAgZW5hYmxlT25UYWdzID0gX3JlZjIuZW5hYmxlT25UYWdzLFxuICAgICAgZmlsdGVyID0gX3JlZjIuZmlsdGVyLFxuICAgICAga2V5dXAgPSBfcmVmMi5rZXl1cCxcbiAgICAgIGtleWRvd24gPSBfcmVmMi5rZXlkb3duLFxuICAgICAgX3JlZjIkZmlsdGVyUHJldmVudERlID0gX3JlZjIuZmlsdGVyUHJldmVudERlZmF1bHQsXG4gICAgICBmaWx0ZXJQcmV2ZW50RGVmYXVsdCA9IF9yZWYyJGZpbHRlclByZXZlbnREZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWYyJGZpbHRlclByZXZlbnREZSxcbiAgICAgIF9yZWYyJGVuYWJsZWQgPSBfcmVmMi5lbmFibGVkLFxuICAgICAgZW5hYmxlZCA9IF9yZWYyJGVuYWJsZWQgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQsIF9yZWYkY3VycmVudDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50IHx8IChfcmVmJGN1cnJlbnQgPSByZWYuY3VycmVudCkgIT0gbnVsbCAmJiBfcmVmJGN1cnJlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIiwiZnVuY3Rpb24gcmVwbGFjZUNsYXNzTmFtZShvcmlnQ2xhc3MsIGNsYXNzVG9SZW1vdmUpIHtcbiAgcmV0dXJuIG9yaWdDbGFzcy5yZXBsYWNlKG5ldyBSZWdFeHAoXCIoXnxcXFxccylcIiArIGNsYXNzVG9SZW1vdmUgKyBcIig/OlxcXFxzfCQpXCIsICdnJyksICckMScpLnJlcGxhY2UoL1xccysvZywgJyAnKS5yZXBsYWNlKC9eXFxzKnxcXHMqJC9nLCAnJyk7XG59XG4vKipcbiAqIFJlbW92ZXMgYSBDU1MgY2xhc3MgZnJvbSBhIGdpdmVuIGVsZW1lbnQuXG4gKiBcbiAqIEBwYXJhbSBlbGVtZW50IHRoZSBlbGVtZW50XG4gKiBAcGFyYW0gY2xhc3NOYW1lIHRoZSBDU1MgY2xhc3MgbmFtZVxuICovXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVtb3ZlQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkge1xuICAgIGVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShjbGFzc05hbWUpO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBlbGVtZW50LmNsYXNzTmFtZSA9PT0gJ3N0cmluZycpIHtcbiAgICBlbGVtZW50LmNsYXNzTmFtZSA9IHJlcGxhY2VDbGFzc05hbWUoZWxlbWVudC5jbGFzc05hbWUsIGNsYXNzTmFtZSk7XG4gIH0gZWxzZSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2NsYXNzJywgcmVwbGFjZUNsYXNzTmFtZShlbGVtZW50LmNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTmFtZS5iYXNlVmFsIHx8ICcnLCBjbGFzc05hbWUpKTtcbiAgfVxufSIsImV4cG9ydCBkZWZhdWx0IHtcbiAgZGlzYWJsZWQ6IGZhbHNlXG59OyIsImltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5leHBvcnQgZGVmYXVsdCBSZWFjdC5jcmVhdGVDb250ZXh0KG51bGwpOyIsImV4cG9ydCB2YXIgZm9yY2VSZWZsb3cgPSBmdW5jdGlvbiBmb3JjZVJlZmxvdyhub2RlKSB7XG4gIHJldHVybiBub2RlLnNjcm9sbFRvcDtcbn07IiwiaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFJlYWN0RE9NIGZyb20gJ3JlYWN0LWRvbSc7XG5pbXBvcnQgY29uZmlnIGZyb20gJy4vY29uZmlnJztcbmltcG9ydCB7IHRpbWVvdXRzU2hhcGUgfSBmcm9tICcuL3V0aWxzL1Byb3BUeXBlcyc7XG5pbXBvcnQgVHJhbnNpdGlvbkdyb3VwQ29udGV4dCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cENvbnRleHQnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5leHBvcnQgdmFyIFVOTU9VTlRFRCA9ICd1bm1vdW50ZWQnO1xuZXhwb3J0IHZhciBFWElURUQgPSAnZXhpdGVkJztcbmV4cG9ydCB2YXIgRU5URVJJTkcgPSAnZW50ZXJpbmcnO1xuZXhwb3J0IHZhciBFTlRFUkVEID0gJ2VudGVyZWQnO1xuZXhwb3J0IHZhciBFWElUSU5HID0gJ2V4aXRpbmcnO1xuLyoqXG4gKiBUaGUgVHJhbnNpdGlvbiBjb21wb25lbnQgbGV0cyB5b3UgZGVzY3JpYmUgYSB0cmFuc2l0aW9uIGZyb20gb25lIGNvbXBvbmVudFxuICogc3RhdGUgdG8gYW5vdGhlciBfb3ZlciB0aW1lXyB3aXRoIGEgc2ltcGxlIGRlY2xhcmF0aXZlIEFQSS4gTW9zdCBjb21tb25seVxuICogaXQncyB1c2VkIHRvIGFuaW1hdGUgdGhlIG1vdW50aW5nIGFuZCB1bm1vdW50aW5nIG9mIGEgY29tcG9uZW50LCBidXQgY2FuIGFsc29cbiAqIGJlIHVzZWQgdG8gZGVzY3JpYmUgaW4tcGxhY2UgdHJhbnNpdGlvbiBzdGF0ZXMgYXMgd2VsbC5cbiAqXG4gKiAtLS1cbiAqXG4gKiAqKk5vdGUqKjogYFRyYW5zaXRpb25gIGlzIGEgcGxhdGZvcm0tYWdub3N0aWMgYmFzZSBjb21wb25lbnQuIElmIHlvdSdyZSB1c2luZ1xuICogdHJhbnNpdGlvbnMgaW4gQ1NTLCB5b3UnbGwgcHJvYmFibHkgd2FudCB0byB1c2VcbiAqIFtgQ1NTVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvY3NzLXRyYW5zaXRpb24pXG4gKiBpbnN0ZWFkLiBJdCBpbmhlcml0cyBhbGwgdGhlIGZlYXR1cmVzIG9mIGBUcmFuc2l0aW9uYCwgYnV0IGNvbnRhaW5zXG4gKiBhZGRpdGlvbmFsIGZlYXR1cmVzIG5lY2Vzc2FyeSB0byBwbGF5IG5pY2Ugd2l0aCBDU1MgdHJhbnNpdGlvbnMgKGhlbmNlIHRoZVxuICogbmFtZSBvZiB0aGUgY29tcG9uZW50KS5cbiAqXG4gKiAtLS1cbiAqXG4gKiBCeSBkZWZhdWx0IHRoZSBgVHJhbnNpdGlvbmAgY29tcG9uZW50IGRvZXMgbm90IGFsdGVyIHRoZSBiZWhhdmlvciBvZiB0aGVcbiAqIGNvbXBvbmVudCBpdCByZW5kZXJzLCBpdCBvbmx5IHRyYWNrcyBcImVudGVyXCIgYW5kIFwiZXhpdFwiIHN0YXRlcyBmb3IgdGhlXG4gKiBjb21wb25lbnRzLiBJdCdzIHVwIHRvIHlvdSB0byBnaXZlIG1lYW5pbmcgYW5kIGVmZmVjdCB0byB0aG9zZSBzdGF0ZXMuIEZvclxuICogZXhhbXBsZSB3ZSBjYW4gYWRkIHN0eWxlcyB0byBhIGNvbXBvbmVudCB3aGVuIGl0IGVudGVycyBvciBleGl0czpcbiAqXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB7IFRyYW5zaXRpb24gfSBmcm9tICdyZWFjdC10cmFuc2l0aW9uLWdyb3VwJztcbiAqXG4gKiBjb25zdCBkdXJhdGlvbiA9IDMwMDtcbiAqXG4gKiBjb25zdCBkZWZhdWx0U3R5bGUgPSB7XG4gKiAgIHRyYW5zaXRpb246IGBvcGFjaXR5ICR7ZHVyYXRpb259bXMgZWFzZS1pbi1vdXRgLFxuICogICBvcGFjaXR5OiAwLFxuICogfVxuICpcbiAqIGNvbnN0IHRyYW5zaXRpb25TdHlsZXMgPSB7XG4gKiAgIGVudGVyaW5nOiB7IG9wYWNpdHk6IDEgfSxcbiAqICAgZW50ZXJlZDogIHsgb3BhY2l0eTogMSB9LFxuICogICBleGl0aW5nOiAgeyBvcGFjaXR5OiAwIH0sXG4gKiAgIGV4aXRlZDogIHsgb3BhY2l0eTogMCB9LFxuICogfTtcbiAqXG4gKiBjb25zdCBGYWRlID0gKHsgaW46IGluUHJvcCB9KSA9PiAoXG4gKiAgIDxUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9e2R1cmF0aW9ufT5cbiAqICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgPGRpdiBzdHlsZT17e1xuICogICAgICAgICAuLi5kZWZhdWx0U3R5bGUsXG4gKiAgICAgICAgIC4uLnRyYW5zaXRpb25TdHlsZXNbc3RhdGVdXG4gKiAgICAgICB9fT5cbiAqICAgICAgICAgSSdtIGEgZmFkZSBUcmFuc2l0aW9uIVxuICogICAgICAgPC9kaXY+XG4gKiAgICAgKX1cbiAqICAgPC9UcmFuc2l0aW9uPlxuICogKTtcbiAqIGBgYFxuICpcbiAqIFRoZXJlIGFyZSA0IG1haW4gc3RhdGVzIGEgVHJhbnNpdGlvbiBjYW4gYmUgaW46XG4gKiAgLSBgJ2VudGVyaW5nJ2BcbiAqICAtIGAnZW50ZXJlZCdgXG4gKiAgLSBgJ2V4aXRpbmcnYFxuICogIC0gYCdleGl0ZWQnYFxuICpcbiAqIFRyYW5zaXRpb24gc3RhdGUgaXMgdG9nZ2xlZCB2aWEgdGhlIGBpbmAgcHJvcC4gV2hlbiBgdHJ1ZWAgdGhlIGNvbXBvbmVudFxuICogYmVnaW5zIHRoZSBcIkVudGVyXCIgc3RhZ2UuIER1cmluZyB0aGlzIHN0YWdlLCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgZnJvbVxuICogaXRzIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0ZSwgdG8gYCdlbnRlcmluZydgIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlXG4gKiB0cmFuc2l0aW9uIGFuZCB0aGVuIHRvIHRoZSBgJ2VudGVyZWQnYCBzdGFnZSBvbmNlIGl0J3MgY29tcGxldGUuIExldCdzIHRha2VcbiAqIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSAod2UnbGwgdXNlIHRoZVxuICogW3VzZVN0YXRlXShodHRwczovL3JlYWN0anMub3JnL2RvY3MvaG9va3MtcmVmZXJlbmNlLmh0bWwjdXNlc3RhdGUpIGhvb2spOlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogICBjb25zdCBbaW5Qcm9wLCBzZXRJblByb3BdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogICByZXR1cm4gKFxuICogICAgIDxkaXY+XG4gKiAgICAgICA8VHJhbnNpdGlvbiBpbj17aW5Qcm9wfSB0aW1lb3V0PXs1MDB9PlxuICogICAgICAgICB7c3RhdGUgPT4gKFxuICogICAgICAgICAgIC8vIC4uLlxuICogICAgICAgICApfVxuICogICAgICAgPC9UcmFuc2l0aW9uPlxuICogICAgICAgPGJ1dHRvbiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBidXR0b24gaXMgY2xpY2tlZCB0aGUgY29tcG9uZW50IHdpbGwgc2hpZnQgdG8gdGhlIGAnZW50ZXJpbmcnYCBzdGF0ZVxuICogYW5kIHN0YXkgdGhlcmUgZm9yIDUwMG1zICh0aGUgdmFsdWUgb2YgYHRpbWVvdXRgKSBiZWZvcmUgaXQgZmluYWxseSBzd2l0Y2hlc1xuICogdG8gYCdlbnRlcmVkJ2AuXG4gKlxuICogV2hlbiBgaW5gIGlzIGBmYWxzZWAgdGhlIHNhbWUgdGhpbmcgaGFwcGVucyBleGNlcHQgdGhlIHN0YXRlIG1vdmVzIGZyb21cbiAqIGAnZXhpdGluZydgIHRvIGAnZXhpdGVkJ2AuXG4gKi9cblxudmFyIFRyYW5zaXRpb24gPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9SZWFjdCRDb21wb25lbnQpIHtcbiAgX2luaGVyaXRzTG9vc2UoVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbihwcm9wcywgY29udGV4dCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzLCBjb250ZXh0KSB8fCB0aGlzO1xuICAgIHZhciBwYXJlbnRHcm91cCA9IGNvbnRleHQ7IC8vIEluIHRoZSBjb250ZXh0IG9mIGEgVHJhbnNpdGlvbkdyb3VwIGFsbCBlbnRlcnMgYXJlIHJlYWxseSBhcHBlYXJzXG5cbiAgICB2YXIgYXBwZWFyID0gcGFyZW50R3JvdXAgJiYgIXBhcmVudEdyb3VwLmlzTW91bnRpbmcgPyBwcm9wcy5lbnRlciA6IHByb3BzLmFwcGVhcjtcbiAgICB2YXIgaW5pdGlhbFN0YXR1cztcbiAgICBfdGhpcy5hcHBlYXJTdGF0dXMgPSBudWxsO1xuXG4gICAgaWYgKHByb3BzLmluKSB7XG4gICAgICBpZiAoYXBwZWFyKSB7XG4gICAgICAgIGluaXRpYWxTdGF0dXMgPSBFWElURUQ7XG4gICAgICAgIF90aGlzLmFwcGVhclN0YXR1cyA9IEVOVEVSSU5HO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVOVEVSRUQ7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChwcm9wcy51bm1vdW50T25FeGl0IHx8IHByb3BzLm1vdW50T25FbnRlcikge1xuICAgICAgICBpbml0aWFsU3RhdHVzID0gVU5NT1VOVEVEO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaW5pdGlhbFN0YXR1cyA9IEVYSVRFRDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgIHN0YXR1czogaW5pdGlhbFN0YXR1c1xuICAgIH07XG4gICAgX3RoaXMubmV4dENhbGxiYWNrID0gbnVsbDtcbiAgICByZXR1cm4gX3RoaXM7XG4gIH1cblxuICBUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhfcmVmLCBwcmV2U3RhdGUpIHtcbiAgICB2YXIgbmV4dEluID0gX3JlZi5pbjtcblxuICAgIGlmIChuZXh0SW4gJiYgcHJldlN0YXRlLnN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IEVYSVRFRFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gbnVsbDtcbiAgfSAvLyBnZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgLy8gICBsZXQgbmV4dFN0YXR1cyA9IG51bGxcbiAgLy8gICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gIC8vICAgICBjb25zdCB7IHN0YXR1cyB9ID0gdGhpcy5zdGF0ZVxuICAvLyAgICAgaWYgKHRoaXMucHJvcHMuaW4pIHtcbiAgLy8gICAgICAgaWYgKHN0YXR1cyAhPT0gRU5URVJJTkcgJiYgc3RhdHVzICE9PSBFTlRFUkVEKSB7XG4gIC8vICAgICAgICAgbmV4dFN0YXR1cyA9IEVOVEVSSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH0gZWxzZSB7XG4gIC8vICAgICAgIGlmIChzdGF0dXMgPT09IEVOVEVSSU5HIHx8IHN0YXR1cyA9PT0gRU5URVJFRCkge1xuICAvLyAgICAgICAgIG5leHRTdGF0dXMgPSBFWElUSU5HXG4gIC8vICAgICAgIH1cbiAgLy8gICAgIH1cbiAgLy8gICB9XG4gIC8vICAgcmV0dXJuIHsgbmV4dFN0YXR1cyB9XG4gIC8vIH1cbiAgO1xuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyh0cnVlLCB0aGlzLmFwcGVhclN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZShwcmV2UHJvcHMpIHtcbiAgICB2YXIgbmV4dFN0YXR1cyA9IG51bGw7XG5cbiAgICBpZiAocHJldlByb3BzICE9PSB0aGlzLnByb3BzKSB7XG4gICAgICB2YXIgc3RhdHVzID0gdGhpcy5zdGF0ZS5zdGF0dXM7XG5cbiAgICAgIGlmICh0aGlzLnByb3BzLmluKSB7XG4gICAgICAgIGlmIChzdGF0dXMgIT09IEVOVEVSSU5HICYmIHN0YXR1cyAhPT0gRU5URVJFRCkge1xuICAgICAgICAgIG5leHRTdGF0dXMgPSBFTlRFUklORztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHN0YXR1cyA9PT0gRU5URVJJTkcgfHwgc3RhdHVzID09PSBFTlRFUkVEKSB7XG4gICAgICAgICAgbmV4dFN0YXR1cyA9IEVYSVRJTkc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnVwZGF0ZVN0YXR1cyhmYWxzZSwgbmV4dFN0YXR1cyk7XG4gIH07XG5cbiAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgdGhpcy5jYW5jZWxOZXh0Q2FsbGJhY2soKTtcbiAgfTtcblxuICBfcHJvdG8uZ2V0VGltZW91dHMgPSBmdW5jdGlvbiBnZXRUaW1lb3V0cygpIHtcbiAgICB2YXIgdGltZW91dCA9IHRoaXMucHJvcHMudGltZW91dDtcbiAgICB2YXIgZXhpdCwgZW50ZXIsIGFwcGVhcjtcbiAgICBleGl0ID0gZW50ZXIgPSBhcHBlYXIgPSB0aW1lb3V0O1xuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCAmJiB0eXBlb2YgdGltZW91dCAhPT0gJ251bWJlcicpIHtcbiAgICAgIGV4aXQgPSB0aW1lb3V0LmV4aXQ7XG4gICAgICBlbnRlciA9IHRpbWVvdXQuZW50ZXI7IC8vIFRPRE86IHJlbW92ZSBmYWxsYmFjayBmb3IgbmV4dCBtYWpvclxuXG4gICAgICBhcHBlYXIgPSB0aW1lb3V0LmFwcGVhciAhPT0gdW5kZWZpbmVkID8gdGltZW91dC5hcHBlYXIgOiBlbnRlcjtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgZXhpdDogZXhpdCxcbiAgICAgIGVudGVyOiBlbnRlcixcbiAgICAgIGFwcGVhcjogYXBwZWFyXG4gICAgfTtcbiAgfTtcblxuICBfcHJvdG8udXBkYXRlU3RhdHVzID0gZnVuY3Rpb24gdXBkYXRlU3RhdHVzKG1vdW50aW5nLCBuZXh0U3RhdHVzKSB7XG4gICAgaWYgKG1vdW50aW5nID09PSB2b2lkIDApIHtcbiAgICAgIG1vdW50aW5nID0gZmFsc2U7XG4gICAgfVxuXG4gICAgaWYgKG5leHRTdGF0dXMgIT09IG51bGwpIHtcbiAgICAgIC8vIG5leHRTdGF0dXMgd2lsbCBhbHdheXMgYmUgRU5URVJJTkcgb3IgRVhJVElORy5cbiAgICAgIHRoaXMuY2FuY2VsTmV4dENhbGxiYWNrKCk7XG5cbiAgICAgIGlmIChuZXh0U3RhdHVzID09PSBFTlRFUklORykge1xuICAgICAgICBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0IHx8IHRoaXMucHJvcHMubW91bnRPbkVudGVyKSB7XG4gICAgICAgICAgdmFyIG5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB0aGlzLnByb3BzLm5vZGVSZWYuY3VycmVudCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpOyAvLyBodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3B1bGwvNzQ5XG4gICAgICAgICAgLy8gV2l0aCB1bm1vdW50T25FeGl0IG9yIG1vdW50T25FbnRlciwgdGhlIGVudGVyIGFuaW1hdGlvbiBzaG91bGQgaGFwcGVuIGF0IHRoZSB0cmFuc2l0aW9uIGJldHdlZW4gYGV4aXRlZGAgYW5kIGBlbnRlcmluZ2AuXG4gICAgICAgICAgLy8gVG8gbWFrZSB0aGUgYW5pbWF0aW9uIGhhcHBlbiwgIHdlIGhhdmUgdG8gc2VwYXJhdGUgZWFjaCByZW5kZXJpbmcgYW5kIGF2b2lkIGJlaW5nIHByb2Nlc3NlZCBhcyBiYXRjaGVkLlxuXG4gICAgICAgICAgaWYgKG5vZGUpIGZvcmNlUmVmbG93KG5vZGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wZXJmb3JtRW50ZXIobW91bnRpbmcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wZXJmb3JtRXhpdCgpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5wcm9wcy51bm1vdW50T25FeGl0ICYmIHRoaXMuc3RhdGUuc3RhdHVzID09PSBFWElURUQpIHtcbiAgICAgIHRoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IFVOTU9VTlRFRFxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRW50ZXIgPSBmdW5jdGlvbiBwZXJmb3JtRW50ZXIobW91bnRpbmcpIHtcbiAgICB2YXIgX3RoaXMyID0gdGhpcztcblxuICAgIHZhciBlbnRlciA9IHRoaXMucHJvcHMuZW50ZXI7XG4gICAgdmFyIGFwcGVhcmluZyA9IHRoaXMuY29udGV4dCA/IHRoaXMuY29udGV4dC5pc01vdW50aW5nIDogbW91bnRpbmc7XG5cbiAgICB2YXIgX3JlZjIgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyBbYXBwZWFyaW5nXSA6IFtSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKSwgYXBwZWFyaW5nXSxcbiAgICAgICAgbWF5YmVOb2RlID0gX3JlZjJbMF0sXG4gICAgICAgIG1heWJlQXBwZWFyaW5nID0gX3JlZjJbMV07XG5cbiAgICB2YXIgdGltZW91dHMgPSB0aGlzLmdldFRpbWVvdXRzKCk7XG4gICAgdmFyIGVudGVyVGltZW91dCA9IGFwcGVhcmluZyA/IHRpbWVvdXRzLmFwcGVhciA6IHRpbWVvdXRzLmVudGVyOyAvLyBubyBlbnRlciBhbmltYXRpb24gc2tpcCByaWdodCB0byBFTlRFUkVEXG4gICAgLy8gaWYgd2UgYXJlIG1vdW50aW5nIGFuZCBydW5uaW5nIHRoaXMgaXQgbWVhbnMgYXBwZWFyIF9tdXN0XyBiZSBzZXRcblxuICAgIGlmICghbW91bnRpbmcgJiYgIWVudGVyIHx8IGNvbmZpZy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IEVOVEVSRURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnByb3BzLm9uRW50ZXJlZChtYXliZU5vZGUpO1xuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5wcm9wcy5vbkVudGVyKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRU5URVJJTkdcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICBfdGhpczIucHJvcHMub25FbnRlcmluZyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKTtcblxuICAgICAgX3RoaXMyLm9uVHJhbnNpdGlvbkVuZChlbnRlclRpbWVvdXQsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMyLnNhZmVTZXRTdGF0ZSh7XG4gICAgICAgICAgc3RhdHVzOiBFTlRFUkVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczIucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xuXG4gIF9wcm90by5wZXJmb3JtRXhpdCA9IGZ1bmN0aW9uIHBlcmZvcm1FeGl0KCkge1xuICAgIHZhciBfdGhpczMgPSB0aGlzO1xuXG4gICAgdmFyIGV4aXQgPSB0aGlzLnByb3BzLmV4aXQ7XG4gICAgdmFyIHRpbWVvdXRzID0gdGhpcy5nZXRUaW1lb3V0cygpO1xuICAgIHZhciBtYXliZU5vZGUgPSB0aGlzLnByb3BzLm5vZGVSZWYgPyB1bmRlZmluZWQgOiBSZWFjdERPTS5maW5kRE9NTm9kZSh0aGlzKTsgLy8gbm8gZXhpdCBhbmltYXRpb24gc2tpcCByaWdodCB0byBFWElURURcblxuICAgIGlmICghZXhpdCB8fCBjb25maWcuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgICAgc3RhdHVzOiBFWElURURcbiAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLnByb3BzLm9uRXhpdChtYXliZU5vZGUpO1xuICAgIHRoaXMuc2FmZVNldFN0YXRlKHtcbiAgICAgIHN0YXR1czogRVhJVElOR1xuICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgIF90aGlzMy5wcm9wcy5vbkV4aXRpbmcobWF5YmVOb2RlKTtcblxuICAgICAgX3RoaXMzLm9uVHJhbnNpdGlvbkVuZCh0aW1lb3V0cy5leGl0LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzMy5zYWZlU2V0U3RhdGUoe1xuICAgICAgICAgIHN0YXR1czogRVhJVEVEXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBfdGhpczMucHJvcHMub25FeGl0ZWQobWF5YmVOb2RlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY2FuY2VsTmV4dENhbGxiYWNrID0gZnVuY3Rpb24gY2FuY2VsTmV4dENhbGxiYWNrKCkge1xuICAgIGlmICh0aGlzLm5leHRDYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsKCk7XG4gICAgICB0aGlzLm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5zYWZlU2V0U3RhdGUgPSBmdW5jdGlvbiBzYWZlU2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjaykge1xuICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIG5lY2Vzc2FyeSwgYnV0IHRoZXJlIGFyZSB3ZWlyZCByYWNlIGNvbmRpdGlvbnMgd2l0aFxuICAgIC8vIHNldFN0YXRlIGNhbGxiYWNrcyBhbmQgdW5tb3VudGluZyBpbiB0ZXN0aW5nLCBzbyBhbHdheXMgbWFrZSBzdXJlIHRoYXRcbiAgICAvLyB3ZSBjYW4gY2FuY2VsIGFueSBwZW5kaW5nIHNldFN0YXRlIGNhbGxiYWNrcyBhZnRlciB3ZSB1bm1vdW50LlxuICAgIGNhbGxiYWNrID0gdGhpcy5zZXROZXh0Q2FsbGJhY2soY2FsbGJhY2spO1xuICAgIHRoaXMuc2V0U3RhdGUobmV4dFN0YXRlLCBjYWxsYmFjayk7XG4gIH07XG5cbiAgX3Byb3RvLnNldE5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIHNldE5leHRDYWxsYmFjayhjYWxsYmFjaykge1xuICAgIHZhciBfdGhpczQgPSB0aGlzO1xuXG4gICAgdmFyIGFjdGl2ZSA9IHRydWU7XG5cbiAgICB0aGlzLm5leHRDYWxsYmFjayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgaWYgKGFjdGl2ZSkge1xuICAgICAgICBhY3RpdmUgPSBmYWxzZTtcbiAgICAgICAgX3RoaXM0Lm5leHRDYWxsYmFjayA9IG51bGw7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgdGhpcy5uZXh0Q2FsbGJhY2suY2FuY2VsID0gZnVuY3Rpb24gKCkge1xuICAgICAgYWN0aXZlID0gZmFsc2U7XG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLm5leHRDYWxsYmFjaztcbiAgfTtcblxuICBfcHJvdG8ub25UcmFuc2l0aW9uRW5kID0gZnVuY3Rpb24gb25UcmFuc2l0aW9uRW5kKHRpbWVvdXQsIGhhbmRsZXIpIHtcbiAgICB0aGlzLnNldE5leHRDYWxsYmFjayhoYW5kbGVyKTtcbiAgICB2YXIgbm9kZSA9IHRoaXMucHJvcHMubm9kZVJlZiA/IHRoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50IDogUmVhY3RET00uZmluZERPTU5vZGUodGhpcyk7XG4gICAgdmFyIGRvZXNOb3RIYXZlVGltZW91dE9yTGlzdGVuZXIgPSB0aW1lb3V0ID09IG51bGwgJiYgIXRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXI7XG5cbiAgICBpZiAoIW5vZGUgfHwgZG9lc05vdEhhdmVUaW1lb3V0T3JMaXN0ZW5lcikge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgMCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIpIHtcbiAgICAgIHZhciBfcmVmMyA9IHRoaXMucHJvcHMubm9kZVJlZiA/IFt0aGlzLm5leHRDYWxsYmFja10gOiBbbm9kZSwgdGhpcy5uZXh0Q2FsbGJhY2tdLFxuICAgICAgICAgIG1heWJlTm9kZSA9IF9yZWYzWzBdLFxuICAgICAgICAgIG1heWJlTmV4dENhbGxiYWNrID0gX3JlZjNbMV07XG5cbiAgICAgIHRoaXMucHJvcHMuYWRkRW5kTGlzdGVuZXIobWF5YmVOb2RlLCBtYXliZU5leHRDYWxsYmFjayk7XG4gICAgfVxuXG4gICAgaWYgKHRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgc2V0VGltZW91dCh0aGlzLm5leHRDYWxsYmFjaywgdGltZW91dCk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgdmFyIHN0YXR1cyA9IHRoaXMuc3RhdGUuc3RhdHVzO1xuXG4gICAgaWYgKHN0YXR1cyA9PT0gVU5NT1VOVEVEKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBfaW4gPSBfdGhpcyRwcm9wcy5pbixcbiAgICAgICAgX21vdW50T25FbnRlciA9IF90aGlzJHByb3BzLm1vdW50T25FbnRlcixcbiAgICAgICAgX3VubW91bnRPbkV4aXQgPSBfdGhpcyRwcm9wcy51bm1vdW50T25FeGl0LFxuICAgICAgICBfYXBwZWFyID0gX3RoaXMkcHJvcHMuYXBwZWFyLFxuICAgICAgICBfZW50ZXIgPSBfdGhpcyRwcm9wcy5lbnRlcixcbiAgICAgICAgX2V4aXQgPSBfdGhpcyRwcm9wcy5leGl0LFxuICAgICAgICBfdGltZW91dCA9IF90aGlzJHByb3BzLnRpbWVvdXQsXG4gICAgICAgIF9hZGRFbmRMaXN0ZW5lciA9IF90aGlzJHByb3BzLmFkZEVuZExpc3RlbmVyLFxuICAgICAgICBfb25FbnRlciA9IF90aGlzJHByb3BzLm9uRW50ZXIsXG4gICAgICAgIF9vbkVudGVyaW5nID0gX3RoaXMkcHJvcHMub25FbnRlcmluZyxcbiAgICAgICAgX29uRW50ZXJlZCA9IF90aGlzJHByb3BzLm9uRW50ZXJlZCxcbiAgICAgICAgX29uRXhpdCA9IF90aGlzJHByb3BzLm9uRXhpdCxcbiAgICAgICAgX29uRXhpdGluZyA9IF90aGlzJHByb3BzLm9uRXhpdGluZyxcbiAgICAgICAgX29uRXhpdGVkID0gX3RoaXMkcHJvcHMub25FeGl0ZWQsXG4gICAgICAgIF9ub2RlUmVmID0gX3RoaXMkcHJvcHMubm9kZVJlZixcbiAgICAgICAgY2hpbGRQcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCIsIFwibW91bnRPbkVudGVyXCIsIFwidW5tb3VudE9uRXhpdFwiLCBcImFwcGVhclwiLCBcImVudGVyXCIsIFwiZXhpdFwiLCBcInRpbWVvdXRcIiwgXCJhZGRFbmRMaXN0ZW5lclwiLCBcIm9uRW50ZXJcIiwgXCJvbkVudGVyaW5nXCIsIFwib25FbnRlcmVkXCIsIFwib25FeGl0XCIsIFwib25FeGl0aW5nXCIsIFwib25FeGl0ZWRcIiwgXCJub2RlUmVmXCJdKTtcblxuICAgIHJldHVybiAoXG4gICAgICAvKiNfX1BVUkVfXyovXG4gICAgICAvLyBhbGxvd3MgZm9yIG5lc3RlZCBUcmFuc2l0aW9uc1xuICAgICAgUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBudWxsXG4gICAgICB9LCB0eXBlb2YgY2hpbGRyZW4gPT09ICdmdW5jdGlvbicgPyBjaGlsZHJlbihzdGF0dXMsIGNoaWxkUHJvcHMpIDogUmVhY3QuY2xvbmVFbGVtZW50KFJlYWN0LkNoaWxkcmVuLm9ubHkoY2hpbGRyZW4pLCBjaGlsZFByb3BzKSlcbiAgICApO1xuICB9O1xuXG4gIHJldHVybiBUcmFuc2l0aW9uO1xufShSZWFjdC5Db21wb25lbnQpO1xuXG5UcmFuc2l0aW9uLmNvbnRleHRUeXBlID0gVHJhbnNpdGlvbkdyb3VwQ29udGV4dDtcblRyYW5zaXRpb24ucHJvcFR5cGVzID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiID8ge1xuICAvKipcbiAgICogQSBSZWFjdCByZWZlcmVuY2UgdG8gRE9NIGVsZW1lbnQgdGhhdCBuZWVkIHRvIHRyYW5zaXRpb246XG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS81MTEyNzEzMC80NjcxOTMyXG4gICAqXG4gICAqICAgLSBXaGVuIGBub2RlUmVmYCBwcm9wIGlzIHVzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkIHRvIGNhbGxiYWNrIGZ1bmN0aW9uc1xuICAgKiAgICAgIChlLmcuIGBvbkVudGVyYCkgYmVjYXVzZSB1c2VyIGFscmVhZHkgaGFzIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIG5vZGUuXG4gICAqICAgLSBXaGVuIGNoYW5naW5nIGBrZXlgIHByb3Agb2YgYFRyYW5zaXRpb25gIGluIGEgYFRyYW5zaXRpb25Hcm91cGAgYSBuZXdcbiAgICogICAgIGBub2RlUmVmYCBuZWVkIHRvIGJlIHByb3ZpZGVkIHRvIGBUcmFuc2l0aW9uYCB3aXRoIGNoYW5nZWQgYGtleWAgcHJvcFxuICAgKiAgICAgKHNlZVxuICAgKiAgICAgW3Rlc3QvQ1NTVHJhbnNpdGlvbi10ZXN0LmpzXShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvMTM0MzVmODk3YjNhYjcxZjZlMTlkNzI0ZjE0NTU5NmY1OTEwNTgxYy90ZXN0L0NTU1RyYW5zaXRpb24tdGVzdC5qcyNMMzYyLUw0MzcpKS5cbiAgICovXG4gIG5vZGVSZWY6IFByb3BUeXBlcy5zaGFwZSh7XG4gICAgY3VycmVudDogdHlwZW9mIEVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gUHJvcFR5cGVzLmFueSA6IGZ1bmN0aW9uIChwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KSB7XG4gICAgICB2YXIgdmFsdWUgPSBwcm9wVmFsdWVba2V5XTtcbiAgICAgIHJldHVybiBQcm9wVHlwZXMuaW5zdGFuY2VPZih2YWx1ZSAmJiAnb3duZXJEb2N1bWVudCcgaW4gdmFsdWUgPyB2YWx1ZS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3LkVsZW1lbnQgOiBFbGVtZW50KShwcm9wVmFsdWUsIGtleSwgY29tcG9uZW50TmFtZSwgbG9jYXRpb24sIHByb3BGdWxsTmFtZSwgc2VjcmV0KTtcbiAgICB9XG4gIH0pLFxuXG4gIC8qKlxuICAgKiBBIGBmdW5jdGlvbmAgY2hpbGQgY2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBhIFJlYWN0IGVsZW1lbnQuIFRoaXMgZnVuY3Rpb24gaXNcbiAgICogY2FsbGVkIHdpdGggdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBzdGF0dXMgKGAnZW50ZXJpbmcnYCwgYCdlbnRlcmVkJ2AsXG4gICAqIGAnZXhpdGluZydgLCBgJ2V4aXRlZCdgKSwgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYXBwbHkgY29udGV4dFxuICAgKiBzcGVjaWZpYyBwcm9wcyB0byBhIGNvbXBvbmVudC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIDxUcmFuc2l0aW9uIGluPXt0aGlzLnN0YXRlLmlufSB0aW1lb3V0PXsxNTB9PlxuICAgKiAgIHtzdGF0ZSA9PiAoXG4gICAqICAgICA8TXlDb21wb25lbnQgY2xhc3NOYW1lPXtgZmFkZSBmYWRlLSR7c3RhdGV9YH0gLz5cbiAgICogICApfVxuICAgKiA8L1RyYW5zaXRpb24+XG4gICAqIGBgYFxuICAgKi9cbiAgY2hpbGRyZW46IFByb3BUeXBlcy5vbmVPZlR5cGUoW1Byb3BUeXBlcy5mdW5jLmlzUmVxdWlyZWQsIFByb3BUeXBlcy5lbGVtZW50LmlzUmVxdWlyZWRdKS5pc1JlcXVpcmVkLFxuXG4gIC8qKlxuICAgKiBTaG93IHRoZSBjb21wb25lbnQ7IHRyaWdnZXJzIHRoZSBlbnRlciBvciBleGl0IHN0YXRlc1xuICAgKi9cbiAgaW46IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBCeSBkZWZhdWx0IHRoZSBjaGlsZCBjb21wb25lbnQgaXMgbW91bnRlZCBpbW1lZGlhdGVseSBhbG9uZyB3aXRoXG4gICAqIHRoZSBwYXJlbnQgYFRyYW5zaXRpb25gIGNvbXBvbmVudC4gSWYgeW91IHdhbnQgdG8gXCJsYXp5IG1vdW50XCIgdGhlIGNvbXBvbmVudCBvbiB0aGVcbiAgICogZmlyc3QgYGluPXt0cnVlfWAgeW91IGNhbiBzZXQgYG1vdW50T25FbnRlcmAuIEFmdGVyIHRoZSBmaXJzdCBlbnRlciB0cmFuc2l0aW9uIHRoZSBjb21wb25lbnQgd2lsbCBzdGF5XG4gICAqIG1vdW50ZWQsIGV2ZW4gb24gXCJleGl0ZWRcIiwgdW5sZXNzIHlvdSBhbHNvIHNwZWNpZnkgYHVubW91bnRPbkV4aXRgLlxuICAgKi9cbiAgbW91bnRPbkVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IHN0YXlzIG1vdW50ZWQgYWZ0ZXIgaXQgcmVhY2hlcyB0aGUgYCdleGl0ZWQnYCBzdGF0ZS5cbiAgICogU2V0IGB1bm1vdW50T25FeGl0YCBpZiB5b3UnZCBwcmVmZXIgdG8gdW5tb3VudCB0aGUgY29tcG9uZW50IGFmdGVyIGl0IGZpbmlzaGVzIGV4aXRpbmcuXG4gICAqL1xuICB1bm1vdW50T25FeGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQnkgZGVmYXVsdCB0aGUgY2hpbGQgY29tcG9uZW50IGRvZXMgbm90IHBlcmZvcm0gdGhlIGVudGVyIHRyYW5zaXRpb24gd2hlblxuICAgKiBpdCBmaXJzdCBtb3VudHMsIHJlZ2FyZGxlc3Mgb2YgdGhlIHZhbHVlIG9mIGBpbmAuIElmIHlvdSB3YW50IHRoaXNcbiAgICogYmVoYXZpb3IsIHNldCBib3RoIGBhcHBlYXJgIGFuZCBgaW5gIHRvIGB0cnVlYC5cbiAgICpcbiAgICogPiAqKk5vdGUqKjogdGhlcmUgYXJlIG5vIHNwZWNpYWwgYXBwZWFyIHN0YXRlcyBsaWtlIGBhcHBlYXJpbmdgL2BhcHBlYXJlZGAsIHRoaXMgcHJvcFxuICAgKiA+IG9ubHkgYWRkcyBhbiBhZGRpdGlvbmFsIGVudGVyIHRyYW5zaXRpb24uIEhvd2V2ZXIsIGluIHRoZVxuICAgKiA+IGA8Q1NTVHJhbnNpdGlvbj5gIGNvbXBvbmVudCB0aGF0IGZpcnN0IGVudGVyIHRyYW5zaXRpb24gZG9lcyByZXN1bHQgaW5cbiAgICogPiBhZGRpdGlvbmFsIGAuYXBwZWFyLSpgIGNsYXNzZXMsIHRoYXQgd2F5IHlvdSBjYW4gY2hvb3NlIHRvIHN0eWxlIGl0XG4gICAqID4gZGlmZmVyZW50bHkuXG4gICAqL1xuICBhcHBlYXI6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBFbmFibGUgb3IgZGlzYWJsZSBlbnRlciB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGVudGVyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogRW5hYmxlIG9yIGRpc2FibGUgZXhpdCB0cmFuc2l0aW9ucy5cbiAgICovXG4gIGV4aXQ6IFByb3BUeXBlcy5ib29sLFxuXG4gIC8qKlxuICAgKiBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24sIGluIG1pbGxpc2Vjb25kcy5cbiAgICogUmVxdWlyZWQgdW5sZXNzIGBhZGRFbmRMaXN0ZW5lcmAgaXMgcHJvdmlkZWQuXG4gICAqXG4gICAqIFlvdSBtYXkgc3BlY2lmeSBhIHNpbmdsZSB0aW1lb3V0IGZvciBhbGwgdHJhbnNpdGlvbnM6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXs1MDB9XG4gICAqIGBgYFxuICAgKlxuICAgKiBvciBpbmRpdmlkdWFsbHk6XG4gICAqXG4gICAqIGBgYGpzeFxuICAgKiB0aW1lb3V0PXt7XG4gICAqICBhcHBlYXI6IDUwMCxcbiAgICogIGVudGVyOiAzMDAsXG4gICAqICBleGl0OiA1MDAsXG4gICAqIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiAtIGBhcHBlYXJgIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBgZW50ZXJgXG4gICAqIC0gYGVudGVyYCBkZWZhdWx0cyB0byBgMGBcbiAgICogLSBgZXhpdGAgZGVmYXVsdHMgdG8gYDBgXG4gICAqXG4gICAqIEB0eXBlIHtudW1iZXIgfCB7IGVudGVyPzogbnVtYmVyLCBleGl0PzogbnVtYmVyLCBhcHBlYXI/OiBudW1iZXIgfX1cbiAgICovXG4gIHRpbWVvdXQ6IGZ1bmN0aW9uIHRpbWVvdXQocHJvcHMpIHtcbiAgICB2YXIgcHQgPSB0aW1lb3V0c1NoYXBlO1xuICAgIGlmICghcHJvcHMuYWRkRW5kTGlzdGVuZXIpIHB0ID0gcHQuaXNSZXF1aXJlZDtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4gPiAxID8gX2xlbiAtIDEgOiAwKSwgX2tleSA9IDE7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICAgIGFyZ3NbX2tleSAtIDFdID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBwdC5hcHBseSh2b2lkIDAsIFtwcm9wc10uY29uY2F0KGFyZ3MpKTtcbiAgfSxcblxuICAvKipcbiAgICogQWRkIGEgY3VzdG9tIHRyYW5zaXRpb24gZW5kIHRyaWdnZXIuIENhbGxlZCB3aXRoIHRoZSB0cmFuc2l0aW9uaW5nXG4gICAqIERPTSBub2RlIGFuZCBhIGBkb25lYCBjYWxsYmFjay4gQWxsb3dzIGZvciBtb3JlIGZpbmUgZ3JhaW5lZCB0cmFuc2l0aW9uIGVuZFxuICAgKiBsb2dpYy4gVGltZW91dHMgYXJlIHN0aWxsIHVzZWQgYXMgYSBmYWxsYmFjayBpZiBwcm92aWRlZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogYGBganN4XG4gICAqIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4ge1xuICAgKiAgIC8vIHVzZSB0aGUgY3NzIHRyYW5zaXRpb25lbmQgZXZlbnQgdG8gbWFyayB0aGUgZmluaXNoIG9mIGEgdHJhbnNpdGlvblxuICAgKiAgIG5vZGUuYWRkRXZlbnRMaXN0ZW5lcigndHJhbnNpdGlvbmVuZCcsIGRvbmUsIGZhbHNlKTtcbiAgICogfX1cbiAgICogYGBgXG4gICAqL1xuICBhZGRFbmRMaXN0ZW5lcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJlbnRlcmluZ1wiIHN0YXR1cyBpcyBhcHBsaWVkLiBBbiBleHRyYSBwYXJhbWV0ZXJcbiAgICogYGlzQXBwZWFyaW5nYCBpcyBzdXBwbGllZCB0byBpbmRpY2F0ZSBpZiB0aGUgZW50ZXIgc3RhZ2UgaXMgb2NjdXJyaW5nIG9uIHRoZSBpbml0aWFsIG1vdW50XG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbCkgLT4gdm9pZFxuICAgKi9cbiAgb25FbnRlcjogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyaW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuIEFuIGV4dHJhIHBhcmFtZXRlclxuICAgKiBgaXNBcHBlYXJpbmdgIGlzIHN1cHBsaWVkIHRvIGluZGljYXRlIGlmIHRoZSBlbnRlciBzdGFnZSBpcyBvY2N1cnJpbmcgb24gdGhlIGluaXRpYWwgbW91bnRcbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGFmdGVyIHRoZSBcImVudGVyZWRcIiBzdGF0dXMgaXMgYXBwbGllZC4gQW4gZXh0cmEgcGFyYW1ldGVyXG4gICAqIGBpc0FwcGVhcmluZ2AgaXMgc3VwcGxpZWQgdG8gaW5kaWNhdGUgaWYgdGhlIGVudGVyIHN0YWdlIGlzIG9jY3VycmluZyBvbiB0aGUgaW5pdGlhbCBtb3VudFxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpIC0+IHZvaWRcbiAgICovXG4gIG9uRW50ZXJlZDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIENhbGxiYWNrIGZpcmVkIGJlZm9yZSB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0aW5nXCIgc3RhdHVzIGlzIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50KSAtPiB2b2lkXG4gICAqL1xuICBvbkV4aXRpbmc6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBDYWxsYmFjayBmaXJlZCBhZnRlciB0aGUgXCJleGl0ZWRcIiBzdGF0dXMgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCkgLT4gdm9pZFxuICAgKi9cbiAgb25FeGl0ZWQ6IFByb3BUeXBlcy5mdW5jXG59IDoge307IC8vIE5hbWUgdGhlIGZ1bmN0aW9uIHNvIGl0IGlzIGNsZWFyZXIgaW4gdGhlIGRvY3VtZW50YXRpb25cblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cblRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBpbjogZmFsc2UsXG4gIG1vdW50T25FbnRlcjogZmFsc2UsXG4gIHVubW91bnRPbkV4aXQ6IGZhbHNlLFxuICBhcHBlYXI6IGZhbHNlLFxuICBlbnRlcjogdHJ1ZSxcbiAgZXhpdDogdHJ1ZSxcbiAgb25FbnRlcjogbm9vcCxcbiAgb25FbnRlcmluZzogbm9vcCxcbiAgb25FbnRlcmVkOiBub29wLFxuICBvbkV4aXQ6IG5vb3AsXG4gIG9uRXhpdGluZzogbm9vcCxcbiAgb25FeGl0ZWQ6IG5vb3Bcbn07XG5UcmFuc2l0aW9uLlVOTU9VTlRFRCA9IFVOTU9VTlRFRDtcblRyYW5zaXRpb24uRVhJVEVEID0gRVhJVEVEO1xuVHJhbnNpdGlvbi5FTlRFUklORyA9IEVOVEVSSU5HO1xuVHJhbnNpdGlvbi5FTlRFUkVEID0gRU5URVJFRDtcblRyYW5zaXRpb24uRVhJVElORyA9IEVYSVRJTkc7XG5leHBvcnQgZGVmYXVsdCBUcmFuc2l0aW9uOyIsImltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlXCI7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2VcIjtcbmltcG9ydCBQcm9wVHlwZXMgZnJvbSAncHJvcC10eXBlcyc7XG5pbXBvcnQgYWRkT25lQ2xhc3MgZnJvbSAnZG9tLWhlbHBlcnMvYWRkQ2xhc3MnO1xuaW1wb3J0IHJlbW92ZU9uZUNsYXNzIGZyb20gJ2RvbS1oZWxwZXJzL3JlbW92ZUNsYXNzJztcbmltcG9ydCBSZWFjdCBmcm9tICdyZWFjdCc7XG5pbXBvcnQgVHJhbnNpdGlvbiBmcm9tICcuL1RyYW5zaXRpb24nO1xuaW1wb3J0IHsgY2xhc3NOYW1lc1NoYXBlIH0gZnJvbSAnLi91dGlscy9Qcm9wVHlwZXMnO1xuaW1wb3J0IHsgZm9yY2VSZWZsb3cgfSBmcm9tICcuL3V0aWxzL3JlZmxvdyc7XG5cbnZhciBfYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCBjbGFzc2VzKSB7XG4gIHJldHVybiBub2RlICYmIGNsYXNzZXMgJiYgY2xhc3Nlcy5zcGxpdCgnICcpLmZvckVhY2goZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYWRkT25lQ2xhc3Mobm9kZSwgYyk7XG4gIH0pO1xufTtcblxudmFyIHJlbW92ZUNsYXNzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Mobm9kZSwgY2xhc3Nlcykge1xuICByZXR1cm4gbm9kZSAmJiBjbGFzc2VzICYmIGNsYXNzZXMuc3BsaXQoJyAnKS5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XG4gICAgcmV0dXJuIHJlbW92ZU9uZUNsYXNzKG5vZGUsIGMpO1xuICB9KTtcbn07XG4vKipcbiAqIEEgdHJhbnNpdGlvbiBjb21wb25lbnQgaW5zcGlyZWQgYnkgdGhlIGV4Y2VsbGVudFxuICogW25nLWFuaW1hdGVdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZ0FuaW1hdGUpIGxpYnJhcnksIHlvdSBzaG91bGRcbiAqIHVzZSBpdCBpZiB5b3UncmUgdXNpbmcgQ1NTIHRyYW5zaXRpb25zIG9yIGFuaW1hdGlvbnMuIEl0J3MgYnVpbHQgdXBvbiB0aGVcbiAqIFtgVHJhbnNpdGlvbmBdKGh0dHBzOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbilcbiAqIGNvbXBvbmVudCwgc28gaXQgaW5oZXJpdHMgYWxsIG9mIGl0cyBwcm9wcy5cbiAqXG4gKiBgQ1NTVHJhbnNpdGlvbmAgYXBwbGllcyBhIHBhaXIgb2YgY2xhc3MgbmFtZXMgZHVyaW5nIHRoZSBgYXBwZWFyYCwgYGVudGVyYCxcbiAqIGFuZCBgZXhpdGAgc3RhdGVzIG9mIHRoZSB0cmFuc2l0aW9uLiBUaGUgZmlyc3QgY2xhc3MgaXMgYXBwbGllZCBhbmQgdGhlbiBhXG4gKiBzZWNvbmQgYCotYWN0aXZlYCBjbGFzcyBpbiBvcmRlciB0byBhY3RpdmF0ZSB0aGUgQ1NTIHRyYW5zaXRpb24uIEFmdGVyIHRoZVxuICogdHJhbnNpdGlvbiwgbWF0Y2hpbmcgYCotZG9uZWAgY2xhc3MgbmFtZXMgYXJlIGFwcGxpZWQgdG8gcGVyc2lzdCB0aGVcbiAqIHRyYW5zaXRpb24gc3RhdGUuXG4gKlxuICogYGBganN4XG4gKiBmdW5jdGlvbiBBcHAoKSB7XG4gKiAgIGNvbnN0IFtpblByb3AsIHNldEluUHJvcF0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gKiAgIHJldHVybiAoXG4gKiAgICAgPGRpdj5cbiAqICAgICAgIDxDU1NUcmFuc2l0aW9uIGluPXtpblByb3B9IHRpbWVvdXQ9ezIwMH0gY2xhc3NOYW1lcz1cIm15LW5vZGVcIj5cbiAqICAgICAgICAgPGRpdj5cbiAqICAgICAgICAgICB7XCJJJ2xsIHJlY2VpdmUgbXktbm9kZS0qIGNsYXNzZXNcIn1cbiAqICAgICAgICAgPC9kaXY+XG4gKiAgICAgICA8L0NTU1RyYW5zaXRpb24+XG4gKiAgICAgICA8YnV0dG9uIHR5cGU9XCJidXR0b25cIiBvbkNsaWNrPXsoKSA9PiBzZXRJblByb3AodHJ1ZSl9PlxuICogICAgICAgICBDbGljayB0byBFbnRlclxuICogICAgICAgPC9idXR0b24+XG4gKiAgICAgPC9kaXY+XG4gKiAgICk7XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBXaGVuIHRoZSBgaW5gIHByb3AgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIGNoaWxkIGNvbXBvbmVudCB3aWxsIGZpcnN0IHJlY2VpdmVcbiAqIHRoZSBjbGFzcyBgZXhhbXBsZS1lbnRlcmAsIHRoZW4gdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAgd2lsbCBiZSBhZGRlZCBpblxuICogdGhlIG5leHQgdGljay4gYENTU1RyYW5zaXRpb25gIFtmb3JjZXMgYVxuICogcmVmbG93XShodHRwczovL2dpdGh1Yi5jb20vcmVhY3Rqcy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL2Jsb2IvNTAwNzMwM2U3MjlhNzRiZTY2YTIxYzNlMjIwNWU0OTE2ODIxNTI0Yi9zcmMvQ1NTVHJhbnNpdGlvbi5qcyNMMjA4LUwyMTUpXG4gKiBiZXR3ZWVuIGJlZm9yZSBhZGRpbmcgdGhlIGBleGFtcGxlLWVudGVyLWFjdGl2ZWAuIFRoaXMgaXMgYW4gaW1wb3J0YW50IHRyaWNrXG4gKiBiZWNhdXNlIGl0IGFsbG93cyB1cyB0byB0cmFuc2l0aW9uIGJldHdlZW4gYGV4YW1wbGUtZW50ZXJgIGFuZFxuICogYGV4YW1wbGUtZW50ZXItYWN0aXZlYCBldmVuIHRob3VnaCB0aGV5IHdlcmUgYWRkZWQgaW1tZWRpYXRlbHkgb25lIGFmdGVyXG4gKiBhbm90aGVyLiBNb3N0IG5vdGFibHksIHRoaXMgaXMgd2hhdCBtYWtlcyBpdCBwb3NzaWJsZSBmb3IgdXMgdG8gYW5pbWF0ZVxuICogX2FwcGVhcmFuY2VfLlxuICpcbiAqIGBgYGNzc1xuICogLm15LW5vZGUtZW50ZXIge1xuICogICBvcGFjaXR5OiAwO1xuICogfVxuICogLm15LW5vZGUtZW50ZXItYWN0aXZlIHtcbiAqICAgb3BhY2l0eTogMTtcbiAqICAgdHJhbnNpdGlvbjogb3BhY2l0eSAyMDBtcztcbiAqIH1cbiAqIC5teS1ub2RlLWV4aXQge1xuICogICBvcGFjaXR5OiAxO1xuICogfVxuICogLm15LW5vZGUtZXhpdC1hY3RpdmUge1xuICogICBvcGFjaXR5OiAwO1xuICogICB0cmFuc2l0aW9uOiBvcGFjaXR5IDIwMG1zO1xuICogfVxuICogYGBgXG4gKlxuICogYCotYWN0aXZlYCBjbGFzc2VzIHJlcHJlc2VudCB3aGljaCBzdHlsZXMgeW91IHdhbnQgdG8gYW5pbWF0ZSAqKnRvKiosIHNvIGl0J3NcbiAqIGltcG9ydGFudCB0byBhZGQgYHRyYW5zaXRpb25gIGRlY2xhcmF0aW9uIG9ubHkgdG8gdGhlbSwgb3RoZXJ3aXNlIHRyYW5zaXRpb25zXG4gKiBtaWdodCBub3QgYmVoYXZlIGFzIGludGVuZGVkISBUaGlzIG1pZ2h0IG5vdCBiZSBvYnZpb3VzIHdoZW4gdGhlIHRyYW5zaXRpb25zXG4gKiBhcmUgc3ltbWV0cmljYWwsIGkuZS4gd2hlbiBgKi1lbnRlci1hY3RpdmVgIGlzIHRoZSBzYW1lIGFzIGAqLWV4aXRgLCBsaWtlIGluXG4gKiB0aGUgZXhhbXBsZSBhYm92ZSAobWludXMgYHRyYW5zaXRpb25gKSwgYnV0IGl0IGJlY29tZXMgYXBwYXJlbnQgaW4gbW9yZVxuICogY29tcGxleCB0cmFuc2l0aW9ucy5cbiAqXG4gKiAqKk5vdGUqKjogSWYgeW91J3JlIHVzaW5nIHRoZVxuICogW2BhcHBlYXJgXShodHRwOi8vcmVhY3Rjb21tdW5pdHkub3JnL3JlYWN0LXRyYW5zaXRpb24tZ3JvdXAvdHJhbnNpdGlvbiNUcmFuc2l0aW9uLXByb3AtYXBwZWFyKVxuICogcHJvcCwgbWFrZSBzdXJlIHRvIGRlZmluZSBzdHlsZXMgZm9yIGAuYXBwZWFyLSpgIGNsYXNzZXMgYXMgd2VsbC5cbiAqL1xuXG5cbnZhciBDU1NUcmFuc2l0aW9uID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKENTU1RyYW5zaXRpb24sIF9SZWFjdCRDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIENTU1RyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIF90aGlzID0gX1JlYWN0JENvbXBvbmVudC5jYWxsLmFwcGx5KF9SZWFjdCRDb21wb25lbnQsIFt0aGlzXS5jb25jYXQoYXJncykpIHx8IHRoaXM7XG4gICAgX3RoaXMuYXBwbGllZENsYXNzZXMgPSB7XG4gICAgICBhcHBlYXI6IHt9LFxuICAgICAgZW50ZXI6IHt9LFxuICAgICAgZXhpdDoge31cbiAgICB9O1xuXG4gICAgX3RoaXMub25FbnRlciA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50WzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudFsxXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnZXhpdCcpO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcicsICdiYXNlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXIobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJpbmcgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDIgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQyWzBdLFxuICAgICAgICAgIGFwcGVhcmluZyA9IF90aGlzJHJlc29sdmVBcmd1bWVudDJbMV07XG5cbiAgICAgIHZhciB0eXBlID0gYXBwZWFyaW5nID8gJ2FwcGVhcicgOiAnZW50ZXInO1xuXG4gICAgICBfdGhpcy5hZGRDbGFzcyhub2RlLCB0eXBlLCAnYWN0aXZlJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyaW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRW50ZXJpbmcobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLm9uRW50ZXJlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUsIG1heWJlQXBwZWFyaW5nKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZyksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDNbMF0sXG4gICAgICAgICAgYXBwZWFyaW5nID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50M1sxXTtcblxuICAgICAgdmFyIHR5cGUgPSBhcHBlYXJpbmcgPyAnYXBwZWFyJyA6ICdlbnRlcic7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgdHlwZSk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsIHR5cGUsICdkb25lJyk7XG5cbiAgICAgIGlmIChfdGhpcy5wcm9wcy5vbkVudGVyZWQpIHtcbiAgICAgICAgX3RoaXMucHJvcHMub25FbnRlcmVkKG1heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmcpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXQgPSBmdW5jdGlvbiAobWF5YmVOb2RlKSB7XG4gICAgICB2YXIgX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NCA9IF90aGlzLnJlc29sdmVBcmd1bWVudHMobWF5YmVOb2RlKSxcbiAgICAgICAgICBub2RlID0gX3RoaXMkcmVzb2x2ZUFyZ3VtZW50NFswXTtcblxuICAgICAgX3RoaXMucmVtb3ZlQ2xhc3Nlcyhub2RlLCAnYXBwZWFyJyk7XG5cbiAgICAgIF90aGlzLnJlbW92ZUNsYXNzZXMobm9kZSwgJ2VudGVyJyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2Jhc2UnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdCkge1xuICAgICAgICBfdGhpcy5wcm9wcy5vbkV4aXQobWF5YmVOb2RlKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3RoaXMub25FeGl0aW5nID0gZnVuY3Rpb24gKG1heWJlTm9kZSkge1xuICAgICAgdmFyIF90aGlzJHJlc29sdmVBcmd1bWVudDUgPSBfdGhpcy5yZXNvbHZlQXJndW1lbnRzKG1heWJlTm9kZSksXG4gICAgICAgICAgbm9kZSA9IF90aGlzJHJlc29sdmVBcmd1bWVudDVbMF07XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2FjdGl2ZScpO1xuXG4gICAgICBpZiAoX3RoaXMucHJvcHMub25FeGl0aW5nKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGluZyhtYXliZU5vZGUpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfdGhpcy5vbkV4aXRlZCA9IGZ1bmN0aW9uIChtYXliZU5vZGUpIHtcbiAgICAgIHZhciBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2ID0gX3RoaXMucmVzb2x2ZUFyZ3VtZW50cyhtYXliZU5vZGUpLFxuICAgICAgICAgIG5vZGUgPSBfdGhpcyRyZXNvbHZlQXJndW1lbnQ2WzBdO1xuXG4gICAgICBfdGhpcy5yZW1vdmVDbGFzc2VzKG5vZGUsICdleGl0Jyk7XG5cbiAgICAgIF90aGlzLmFkZENsYXNzKG5vZGUsICdleGl0JywgJ2RvbmUnKTtcblxuICAgICAgaWYgKF90aGlzLnByb3BzLm9uRXhpdGVkKSB7XG4gICAgICAgIF90aGlzLnByb3BzLm9uRXhpdGVkKG1heWJlTm9kZSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF90aGlzLnJlc29sdmVBcmd1bWVudHMgPSBmdW5jdGlvbiAobWF5YmVOb2RlLCBtYXliZUFwcGVhcmluZykge1xuICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm5vZGVSZWYgPyBbX3RoaXMucHJvcHMubm9kZVJlZi5jdXJyZW50LCBtYXliZU5vZGVdIC8vIGhlcmUgYG1heWJlTm9kZWAgaXMgYWN0dWFsbHkgYGFwcGVhcmluZ2BcbiAgICAgIDogW21heWJlTm9kZSwgbWF5YmVBcHBlYXJpbmddO1xuICAgIH07XG5cbiAgICBfdGhpcy5nZXRDbGFzc05hbWVzID0gZnVuY3Rpb24gKHR5cGUpIHtcbiAgICAgIHZhciBjbGFzc05hbWVzID0gX3RoaXMucHJvcHMuY2xhc3NOYW1lcztcbiAgICAgIHZhciBpc1N0cmluZ0NsYXNzTmFtZXMgPSB0eXBlb2YgY2xhc3NOYW1lcyA9PT0gJ3N0cmluZyc7XG4gICAgICB2YXIgcHJlZml4ID0gaXNTdHJpbmdDbGFzc05hbWVzICYmIGNsYXNzTmFtZXMgPyBjbGFzc05hbWVzICsgXCItXCIgOiAnJztcbiAgICAgIHZhciBiYXNlQ2xhc3NOYW1lID0gaXNTdHJpbmdDbGFzc05hbWVzID8gXCJcIiArIHByZWZpeCArIHR5cGUgOiBjbGFzc05hbWVzW3R5cGVdO1xuICAgICAgdmFyIGFjdGl2ZUNsYXNzTmFtZSA9IGlzU3RyaW5nQ2xhc3NOYW1lcyA/IGJhc2VDbGFzc05hbWUgKyBcIi1hY3RpdmVcIiA6IGNsYXNzTmFtZXNbdHlwZSArIFwiQWN0aXZlXCJdO1xuICAgICAgdmFyIGRvbmVDbGFzc05hbWUgPSBpc1N0cmluZ0NsYXNzTmFtZXMgPyBiYXNlQ2xhc3NOYW1lICsgXCItZG9uZVwiIDogY2xhc3NOYW1lc1t0eXBlICsgXCJEb25lXCJdO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgYmFzZUNsYXNzTmFtZTogYmFzZUNsYXNzTmFtZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lOiBhY3RpdmVDbGFzc05hbWUsXG4gICAgICAgIGRvbmVDbGFzc05hbWU6IGRvbmVDbGFzc05hbWVcbiAgICAgIH07XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBDU1NUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uYWRkQ2xhc3MgPSBmdW5jdGlvbiBhZGRDbGFzcyhub2RlLCB0eXBlLCBwaGFzZSkge1xuICAgIHZhciBjbGFzc05hbWUgPSB0aGlzLmdldENsYXNzTmFtZXModHlwZSlbcGhhc2UgKyBcIkNsYXNzTmFtZVwiXTtcblxuICAgIHZhciBfdGhpcyRnZXRDbGFzc05hbWVzID0gdGhpcy5nZXRDbGFzc05hbWVzKCdlbnRlcicpLFxuICAgICAgICBkb25lQ2xhc3NOYW1lID0gX3RoaXMkZ2V0Q2xhc3NOYW1lcy5kb25lQ2xhc3NOYW1lO1xuXG4gICAgaWYgKHR5cGUgPT09ICdhcHBlYXInICYmIHBoYXNlID09PSAnZG9uZScgJiYgZG9uZUNsYXNzTmFtZSkge1xuICAgICAgY2xhc3NOYW1lICs9IFwiIFwiICsgZG9uZUNsYXNzTmFtZTtcbiAgICB9IC8vIFRoaXMgaXMgdG8gZm9yY2UgYSByZXBhaW50LFxuICAgIC8vIHdoaWNoIGlzIG5lY2Vzc2FyeSBpbiBvcmRlciB0byB0cmFuc2l0aW9uIHN0eWxlcyB3aGVuIGFkZGluZyBhIGNsYXNzIG5hbWUuXG5cblxuICAgIGlmIChwaGFzZSA9PT0gJ2FjdGl2ZScpIHtcbiAgICAgIGlmIChub2RlKSBmb3JjZVJlZmxvdyhub2RlKTtcbiAgICB9XG5cbiAgICBpZiAoY2xhc3NOYW1lKSB7XG4gICAgICB0aGlzLmFwcGxpZWRDbGFzc2VzW3R5cGVdW3BoYXNlXSA9IGNsYXNzTmFtZTtcblxuICAgICAgX2FkZENsYXNzKG5vZGUsIGNsYXNzTmFtZSk7XG4gICAgfVxuICB9O1xuXG4gIF9wcm90by5yZW1vdmVDbGFzc2VzID0gZnVuY3Rpb24gcmVtb3ZlQ2xhc3Nlcyhub2RlLCB0eXBlKSB7XG4gICAgdmFyIF90aGlzJGFwcGxpZWRDbGFzc2VzJCA9IHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0sXG4gICAgICAgIGJhc2VDbGFzc05hbWUgPSBfdGhpcyRhcHBsaWVkQ2xhc3NlcyQuYmFzZSxcbiAgICAgICAgYWN0aXZlQ2xhc3NOYW1lID0gX3RoaXMkYXBwbGllZENsYXNzZXMkLmFjdGl2ZSxcbiAgICAgICAgZG9uZUNsYXNzTmFtZSA9IF90aGlzJGFwcGxpZWRDbGFzc2VzJC5kb25lO1xuICAgIHRoaXMuYXBwbGllZENsYXNzZXNbdHlwZV0gPSB7fTtcblxuICAgIGlmIChiYXNlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBiYXNlQ2xhc3NOYW1lKTtcbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBhY3RpdmVDbGFzc05hbWUpO1xuICAgIH1cblxuICAgIGlmIChkb25lQ2xhc3NOYW1lKSB7XG4gICAgICByZW1vdmVDbGFzcyhub2RlLCBkb25lQ2xhc3NOYW1lKTtcbiAgICB9XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBfID0gX3RoaXMkcHJvcHMuY2xhc3NOYW1lcyxcbiAgICAgICAgcHJvcHMgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShfdGhpcyRwcm9wcywgW1wiY2xhc3NOYW1lc1wiXSk7XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbiwgX2V4dGVuZHMoe30sIHByb3BzLCB7XG4gICAgICBvbkVudGVyOiB0aGlzLm9uRW50ZXIsXG4gICAgICBvbkVudGVyZWQ6IHRoaXMub25FbnRlcmVkLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5vbkVudGVyaW5nLFxuICAgICAgb25FeGl0OiB0aGlzLm9uRXhpdCxcbiAgICAgIG9uRXhpdGluZzogdGhpcy5vbkV4aXRpbmcsXG4gICAgICBvbkV4aXRlZDogdGhpcy5vbkV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gQ1NTVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuQ1NTVHJhbnNpdGlvbi5kZWZhdWx0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZXM6ICcnXG59O1xuQ1NTVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyBfZXh0ZW5kcyh7fSwgVHJhbnNpdGlvbi5wcm9wVHlwZXMsIHtcbiAgLyoqXG4gICAqIFRoZSBhbmltYXRpb24gY2xhc3NOYW1lcyBhcHBsaWVkIHRvIHRoZSBjb21wb25lbnQgYXMgaXQgYXBwZWFycywgZW50ZXJzLFxuICAgKiBleGl0cyBvciBoYXMgZmluaXNoZWQgdGhlIHRyYW5zaXRpb24uIEEgc2luZ2xlIG5hbWUgY2FuIGJlIHByb3ZpZGVkLCB3aGljaFxuICAgKiB3aWxsIGJlIHN1ZmZpeGVkIGZvciBlYWNoIHN0YWdlLCBlLmcuIGBjbGFzc05hbWVzPVwiZmFkZVwiYCBhcHBsaWVzOlxuICAgKlxuICAgKiAtIGBmYWRlLWFwcGVhcmAsIGBmYWRlLWFwcGVhci1hY3RpdmVgLCBgZmFkZS1hcHBlYXItZG9uZWBcbiAgICogLSBgZmFkZS1lbnRlcmAsIGBmYWRlLWVudGVyLWFjdGl2ZWAsIGBmYWRlLWVudGVyLWRvbmVgXG4gICAqIC0gYGZhZGUtZXhpdGAsIGBmYWRlLWV4aXQtYWN0aXZlYCwgYGZhZGUtZXhpdC1kb25lYFxuICAgKlxuICAgKiBBIGZldyBkZXRhaWxzIHRvIG5vdGUgYWJvdXQgaG93IHRoZXNlIGNsYXNzZXMgYXJlIGFwcGxpZWQ6XG4gICAqXG4gICAqIDEuIFRoZXkgYXJlIF9qb2luZWRfIHdpdGggdGhlIG9uZXMgdGhhdCBhcmUgYWxyZWFkeSBkZWZpbmVkIG9uIHRoZSBjaGlsZFxuICAgKiAgICBjb21wb25lbnQsIHNvIGlmIHlvdSB3YW50IHRvIGFkZCBzb21lIGJhc2Ugc3R5bGVzLCB5b3UgY2FuIHVzZVxuICAgKiAgICBgY2xhc3NOYW1lYCB3aXRob3V0IHdvcnJ5aW5nIHRoYXQgaXQgd2lsbCBiZSBvdmVycmlkZGVuLlxuICAgKlxuICAgKiAyLiBJZiB0aGUgdHJhbnNpdGlvbiBjb21wb25lbnQgbW91bnRzIHdpdGggYGluPXtmYWxzZX1gLCBubyBjbGFzc2VzIGFyZVxuICAgKiAgICBhcHBsaWVkIHlldC4gWW91IG1pZ2h0IGJlIGV4cGVjdGluZyBgKi1leGl0LWRvbmVgLCBidXQgaWYgeW91IHRoaW5rXG4gICAqICAgIGFib3V0IGl0LCBhIGNvbXBvbmVudCBjYW5ub3QgZmluaXNoIGV4aXRpbmcgaWYgaXQgaGFzbid0IGVudGVyZWQgeWV0LlxuICAgKlxuICAgKiAyLiBgZmFkZS1hcHBlYXItZG9uZWAgYW5kIGBmYWRlLWVudGVyLWRvbmVgIHdpbGwgX2JvdGhfIGJlIGFwcGxpZWQuIFRoaXNcbiAgICogICAgYWxsb3dzIHlvdSB0byBkZWZpbmUgZGlmZmVyZW50IGJlaGF2aW9yIGZvciB3aGVuIGFwcGVhcmluZyBpcyBkb25lIGFuZFxuICAgKiAgICB3aGVuIHJlZ3VsYXIgZW50ZXJpbmcgaXMgZG9uZSwgdXNpbmcgc2VsZWN0b3JzIGxpa2VcbiAgICogICAgYC5mYWRlLWVudGVyLWRvbmU6bm90KC5mYWRlLWFwcGVhci1kb25lKWAuIEZvciBleGFtcGxlLCB5b3UgY291bGQgYXBwbHlcbiAgICogICAgYW4gZXBpYyBlbnRyYW5jZSBhbmltYXRpb24gd2hlbiBlbGVtZW50IGZpcnN0IGFwcGVhcnMgaW4gdGhlIERPTSB1c2luZ1xuICAgKiAgICBbQW5pbWF0ZS5jc3NdKGh0dHBzOi8vZGFuZWRlbi5naXRodWIuaW8vYW5pbWF0ZS5jc3MvKS4gT3RoZXJ3aXNlIHlvdSBjYW5cbiAgICogICAgc2ltcGx5IHVzZSBgZmFkZS1lbnRlci1kb25lYCBmb3IgZGVmaW5pbmcgYm90aCBjYXNlcy5cbiAgICpcbiAgICogRWFjaCBpbmRpdmlkdWFsIGNsYXNzTmFtZXMgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGluZGVwZW5kZW50bHkgbGlrZTpcbiAgICpcbiAgICogYGBganNcbiAgICogY2xhc3NOYW1lcz17e1xuICAgKiAgYXBwZWFyOiAnbXktYXBwZWFyJyxcbiAgICogIGFwcGVhckFjdGl2ZTogJ215LWFjdGl2ZS1hcHBlYXInLFxuICAgKiAgYXBwZWFyRG9uZTogJ215LWRvbmUtYXBwZWFyJyxcbiAgICogIGVudGVyOiAnbXktZW50ZXInLFxuICAgKiAgZW50ZXJBY3RpdmU6ICdteS1hY3RpdmUtZW50ZXInLFxuICAgKiAgZW50ZXJEb25lOiAnbXktZG9uZS1lbnRlcicsXG4gICAqICBleGl0OiAnbXktZXhpdCcsXG4gICAqICBleGl0QWN0aXZlOiAnbXktYWN0aXZlLWV4aXQnLFxuICAgKiAgZXhpdERvbmU6ICdteS1kb25lLWV4aXQnLFxuICAgKiB9fVxuICAgKiBgYGBcbiAgICpcbiAgICogSWYgeW91IHdhbnQgdG8gc2V0IHRoZXNlIGNsYXNzZXMgdXNpbmcgQ1NTIE1vZHVsZXM6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGltcG9ydCBzdHlsZXMgZnJvbSAnLi9zdHlsZXMuY3NzJztcbiAgICogYGBgXG4gICAqXG4gICAqIHlvdSBtaWdodCB3YW50IHRvIHVzZSBjYW1lbENhc2UgaW4geW91ciBDU1MgZmlsZSwgdGhhdCB3YXkgY291bGQgc2ltcGx5XG4gICAqIHNwcmVhZCB0aGVtIGluc3RlYWQgb2YgbGlzdGluZyB0aGVtIG9uZSBieSBvbmU6XG4gICAqXG4gICAqIGBgYGpzXG4gICAqIGNsYXNzTmFtZXM9e3sgLi4uc3R5bGVzIH19XG4gICAqIGBgYFxuICAgKlxuICAgKiBAdHlwZSB7c3RyaW5nIHwge1xuICAgKiAgYXBwZWFyPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyQWN0aXZlPzogc3RyaW5nLFxuICAgKiAgYXBwZWFyRG9uZT86IHN0cmluZyxcbiAgICogIGVudGVyPzogc3RyaW5nLFxuICAgKiAgZW50ZXJBY3RpdmU/OiBzdHJpbmcsXG4gICAqICBlbnRlckRvbmU/OiBzdHJpbmcsXG4gICAqICBleGl0Pzogc3RyaW5nLFxuICAgKiAgZXhpdEFjdGl2ZT86IHN0cmluZyxcbiAgICogIGV4aXREb25lPzogc3RyaW5nLFxuICAgKiB9fVxuICAgKi9cbiAgY2xhc3NOYW1lczogY2xhc3NOYW1lc1NoYXBlLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXInIG9yICdhcHBlYXInIGNsYXNzIGlzXG4gICAqIGFwcGxpZWQuXG4gICAqXG4gICAqICoqTm90ZSoqOiB3aGVuIGBub2RlUmVmYCBwcm9wIGlzIHBhc3NlZCwgYG5vZGVgIGlzIG5vdCBwYXNzZWQuXG4gICAqXG4gICAqIEB0eXBlIEZ1bmN0aW9uKG5vZGU6IEh0bWxFbGVtZW50LCBpc0FwcGVhcmluZzogYm9vbClcbiAgICovXG4gIG9uRW50ZXI6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZW50ZXItYWN0aXZlJyBvclxuICAgKiAnYXBwZWFyLWFjdGl2ZScgY2xhc3MgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZC5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24obm9kZTogSHRtbEVsZW1lbnQsIGlzQXBwZWFyaW5nOiBib29sKVxuICAgKi9cbiAgb25FbnRlcmluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdlbnRlcicgb3JcbiAgICogJ2FwcGVhcicgY2xhc3NlcyBhcmUgKipyZW1vdmVkKiogYW5kIHRoZSBgZG9uZWAgY2xhc3MgaXMgYWRkZWQgdG8gdGhlIERPTSBub2RlLlxuICAgKlxuICAgKiAqKk5vdGUqKjogd2hlbiBgbm9kZVJlZmAgcHJvcCBpcyBwYXNzZWQsIGBub2RlYCBpcyBub3QgcGFzc2VkLlxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudCwgaXNBcHBlYXJpbmc6IGJvb2wpXG4gICAqL1xuICBvbkVudGVyZWQ6IFByb3BUeXBlcy5mdW5jLFxuXG4gIC8qKlxuICAgKiBBIGA8VHJhbnNpdGlvbj5gIGNhbGxiYWNrIGZpcmVkIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSAnZXhpdCcgY2xhc3MgaXNcbiAgICogYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdDogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0LWFjdGl2ZScgaXMgYXBwbGllZC5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGluZzogUHJvcFR5cGVzLmZ1bmMsXG5cbiAgLyoqXG4gICAqIEEgYDxUcmFuc2l0aW9uPmAgY2FsbGJhY2sgZmlyZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlICdleGl0JyBjbGFzc2VzXG4gICAqIGFyZSAqKnJlbW92ZWQqKiBhbmQgdGhlIGBleGl0LWRvbmVgIGNsYXNzIGlzIGFkZGVkIHRvIHRoZSBET00gbm9kZS5cbiAgICpcbiAgICogKipOb3RlKio6IHdoZW4gYG5vZGVSZWZgIHByb3AgaXMgcGFzc2VkLCBgbm9kZWAgaXMgbm90IHBhc3NlZFxuICAgKlxuICAgKiBAdHlwZSBGdW5jdGlvbihub2RlOiBIdG1sRWxlbWVudClcbiAgICovXG4gIG9uRXhpdGVkOiBQcm9wVHlwZXMuZnVuY1xufSkgOiB7fTtcbmV4cG9ydCBkZWZhdWx0IENTU1RyYW5zaXRpb247IiwiaW1wb3J0IGhhc0NsYXNzIGZyb20gJy4vaGFzQ2xhc3MnO1xuLyoqXG4gKiBBZGRzIGEgQ1NTIGNsYXNzIHRvIGEgZ2l2ZW4gZWxlbWVudC5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYWRkQ2xhc3MoZWxlbWVudCwgY2xhc3NOYW1lKSB7XG4gIGlmIChlbGVtZW50LmNsYXNzTGlzdCkgZWxlbWVudC5jbGFzc0xpc3QuYWRkKGNsYXNzTmFtZSk7ZWxzZSBpZiAoIWhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkpIGlmICh0eXBlb2YgZWxlbWVudC5jbGFzc05hbWUgPT09ICdzdHJpbmcnKSBlbGVtZW50LmNsYXNzTmFtZSA9IGVsZW1lbnQuY2xhc3NOYW1lICsgXCIgXCIgKyBjbGFzc05hbWU7ZWxzZSBlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCAoZWxlbWVudC5jbGFzc05hbWUgJiYgZWxlbWVudC5jbGFzc05hbWUuYmFzZVZhbCB8fCAnJykgKyBcIiBcIiArIGNsYXNzTmFtZSk7XG59IiwiLyoqXG4gKiBDaGVja3MgaWYgYSBnaXZlbiBlbGVtZW50IGhhcyBhIENTUyBjbGFzcy5cbiAqIFxuICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnRcbiAqIEBwYXJhbSBjbGFzc05hbWUgdGhlIENTUyBjbGFzcyBuYW1lXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGhhc0NsYXNzKGVsZW1lbnQsIGNsYXNzTmFtZSkge1xuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QpIHJldHVybiAhIWNsYXNzTmFtZSAmJiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhjbGFzc05hbWUpO1xuICByZXR1cm4gKFwiIFwiICsgKGVsZW1lbnQuY2xhc3NOYW1lLmJhc2VWYWwgfHwgZWxlbWVudC5jbGFzc05hbWUpICsgXCIgXCIpLmluZGV4T2YoXCIgXCIgKyBjbGFzc05hbWUgKyBcIiBcIikgIT09IC0xO1xufSIsImltcG9ydCB7IENoaWxkcmVuLCBjbG9uZUVsZW1lbnQsIGlzVmFsaWRFbGVtZW50IH0gZnJvbSAncmVhY3QnO1xuLyoqXG4gKiBHaXZlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmAsIHJldHVybiBhbiBvYmplY3QgbWFwcGluZyBrZXkgdG8gY2hpbGQuXG4gKlxuICogQHBhcmFtIHsqfSBjaGlsZHJlbiBgdGhpcy5wcm9wcy5jaGlsZHJlbmBcbiAqIEByZXR1cm4ge29iamVjdH0gTWFwcGluZyBvZiBrZXkgdG8gY2hpbGRcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q2hpbGRNYXBwaW5nKGNoaWxkcmVuLCBtYXBGbikge1xuICB2YXIgbWFwcGVyID0gZnVuY3Rpb24gbWFwcGVyKGNoaWxkKSB7XG4gICAgcmV0dXJuIG1hcEZuICYmIGlzVmFsaWRFbGVtZW50KGNoaWxkKSA/IG1hcEZuKGNoaWxkKSA6IGNoaWxkO1xuICB9O1xuXG4gIHZhciByZXN1bHQgPSBPYmplY3QuY3JlYXRlKG51bGwpO1xuICBpZiAoY2hpbGRyZW4pIENoaWxkcmVuLm1hcChjaGlsZHJlbiwgZnVuY3Rpb24gKGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSkuZm9yRWFjaChmdW5jdGlvbiAoY2hpbGQpIHtcbiAgICAvLyBydW4gdGhlIG1hcCBmdW5jdGlvbiBoZXJlIGluc3RlYWQgc28gdGhhdCB0aGUga2V5IGlzIHRoZSBjb21wdXRlZCBvbmVcbiAgICByZXN1bHRbY2hpbGQua2V5XSA9IG1hcHBlcihjaGlsZCk7XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuLyoqXG4gKiBXaGVuIHlvdSdyZSBhZGRpbmcgb3IgcmVtb3ZpbmcgY2hpbGRyZW4gc29tZSBtYXkgYmUgYWRkZWQgb3IgcmVtb3ZlZCBpbiB0aGVcbiAqIHNhbWUgcmVuZGVyIHBhc3MuIFdlIHdhbnQgdG8gc2hvdyAqYm90aCogc2luY2Ugd2Ugd2FudCB0byBzaW11bHRhbmVvdXNseVxuICogYW5pbWF0ZSBlbGVtZW50cyBpbiBhbmQgb3V0LiBUaGlzIGZ1bmN0aW9uIHRha2VzIGEgcHJldmlvdXMgc2V0IG9mIGtleXNcbiAqIGFuZCBhIG5ldyBzZXQgb2Yga2V5cyBhbmQgbWVyZ2VzIHRoZW0gd2l0aCBpdHMgYmVzdCBndWVzcyBvZiB0aGUgY29ycmVjdFxuICogb3JkZXJpbmcuIEluIHRoZSBmdXR1cmUgd2UgbWF5IGV4cG9zZSBzb21lIG9mIHRoZSB1dGlsaXRpZXMgaW5cbiAqIFJlYWN0TXVsdGlDaGlsZCB0byBtYWtlIHRoaXMgZWFzeSwgYnV0IGZvciBub3cgUmVhY3QgaXRzZWxmIGRvZXMgbm90XG4gKiBkaXJlY3RseSBoYXZlIHRoaXMgY29uY2VwdCBvZiB0aGUgdW5pb24gb2YgcHJldkNoaWxkcmVuIGFuZCBuZXh0Q2hpbGRyZW5cbiAqIHNvIHdlIGltcGxlbWVudCBpdCBoZXJlLlxuICpcbiAqIEBwYXJhbSB7b2JqZWN0fSBwcmV2IHByZXYgY2hpbGRyZW4gYXMgcmV0dXJuZWQgZnJvbVxuICogYFJlYWN0VHJhbnNpdGlvbkNoaWxkTWFwcGluZy5nZXRDaGlsZE1hcHBpbmcoKWAuXG4gKiBAcGFyYW0ge29iamVjdH0gbmV4dCBuZXh0IGNoaWxkcmVuIGFzIHJldHVybmVkIGZyb21cbiAqIGBSZWFjdFRyYW5zaXRpb25DaGlsZE1hcHBpbmcuZ2V0Q2hpbGRNYXBwaW5nKClgLlxuICogQHJldHVybiB7b2JqZWN0fSBhIGtleSBzZXQgdGhhdCBjb250YWlucyBhbGwga2V5cyBpbiBgcHJldmAgYW5kIGFsbCBrZXlzXG4gKiBpbiBgbmV4dGAgaW4gYSByZWFzb25hYmxlIG9yZGVyLlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUNoaWxkTWFwcGluZ3MocHJldiwgbmV4dCkge1xuICBwcmV2ID0gcHJldiB8fCB7fTtcbiAgbmV4dCA9IG5leHQgfHwge307XG5cbiAgZnVuY3Rpb24gZ2V0VmFsdWVGb3JLZXkoa2V5KSB7XG4gICAgcmV0dXJuIGtleSBpbiBuZXh0ID8gbmV4dFtrZXldIDogcHJldltrZXldO1xuICB9IC8vIEZvciBlYWNoIGtleSBvZiBgbmV4dGAsIHRoZSBsaXN0IG9mIGtleXMgdG8gaW5zZXJ0IGJlZm9yZSB0aGF0IGtleSBpblxuICAvLyB0aGUgY29tYmluZWQgbGlzdFxuXG5cbiAgdmFyIG5leHRLZXlzUGVuZGluZyA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG4gIHZhciBwZW5kaW5nS2V5cyA9IFtdO1xuXG4gIGZvciAodmFyIHByZXZLZXkgaW4gcHJldikge1xuICAgIGlmIChwcmV2S2V5IGluIG5leHQpIHtcbiAgICAgIGlmIChwZW5kaW5nS2V5cy5sZW5ndGgpIHtcbiAgICAgICAgbmV4dEtleXNQZW5kaW5nW3ByZXZLZXldID0gcGVuZGluZ0tleXM7XG4gICAgICAgIHBlbmRpbmdLZXlzID0gW107XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHBlbmRpbmdLZXlzLnB1c2gocHJldktleSk7XG4gICAgfVxuICB9XG5cbiAgdmFyIGk7XG4gIHZhciBjaGlsZE1hcHBpbmcgPSB7fTtcblxuICBmb3IgKHZhciBuZXh0S2V5IGluIG5leHQpIHtcbiAgICBpZiAobmV4dEtleXNQZW5kaW5nW25leHRLZXldKSB7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbmV4dEtleXNQZW5kaW5nW25leHRLZXldLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwZW5kaW5nTmV4dEtleSA9IG5leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXTtcbiAgICAgICAgY2hpbGRNYXBwaW5nW25leHRLZXlzUGVuZGluZ1tuZXh0S2V5XVtpXV0gPSBnZXRWYWx1ZUZvcktleShwZW5kaW5nTmV4dEtleSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2hpbGRNYXBwaW5nW25leHRLZXldID0gZ2V0VmFsdWVGb3JLZXkobmV4dEtleSk7XG4gIH0gLy8gRmluYWxseSwgYWRkIHRoZSBrZXlzIHdoaWNoIGRpZG4ndCBhcHBlYXIgYmVmb3JlIGFueSBrZXkgaW4gYG5leHRgXG5cblxuICBmb3IgKGkgPSAwOyBpIDwgcGVuZGluZ0tleXMubGVuZ3RoOyBpKyspIHtcbiAgICBjaGlsZE1hcHBpbmdbcGVuZGluZ0tleXNbaV1dID0gZ2V0VmFsdWVGb3JLZXkocGVuZGluZ0tleXNbaV0pO1xuICB9XG5cbiAgcmV0dXJuIGNoaWxkTWFwcGluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcChjaGlsZCwgcHJvcCwgcHJvcHMpIHtcbiAgcmV0dXJuIHByb3BzW3Byb3BdICE9IG51bGwgPyBwcm9wc1twcm9wXSA6IGNoaWxkLnByb3BzW3Byb3BdO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhwcm9wcywgb25FeGl0ZWQpIHtcbiAgcmV0dXJuIGdldENoaWxkTWFwcGluZyhwcm9wcy5jaGlsZHJlbiwgZnVuY3Rpb24gKGNoaWxkKSB7XG4gICAgcmV0dXJuIGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgaW46IHRydWUsXG4gICAgICBhcHBlYXI6IGdldFByb3AoY2hpbGQsICdhcHBlYXInLCBwcm9wcyksXG4gICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgcHJvcHMpLFxuICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBwcm9wcylcbiAgICB9KTtcbiAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0TmV4dENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIHByZXZDaGlsZE1hcHBpbmcsIG9uRXhpdGVkKSB7XG4gIHZhciBuZXh0Q2hpbGRNYXBwaW5nID0gZ2V0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcy5jaGlsZHJlbik7XG4gIHZhciBjaGlsZHJlbiA9IG1lcmdlQ2hpbGRNYXBwaW5ncyhwcmV2Q2hpbGRNYXBwaW5nLCBuZXh0Q2hpbGRNYXBwaW5nKTtcbiAgT2JqZWN0LmtleXMoY2hpbGRyZW4pLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgIHZhciBjaGlsZCA9IGNoaWxkcmVuW2tleV07XG4gICAgaWYgKCFpc1ZhbGlkRWxlbWVudChjaGlsZCkpIHJldHVybjtcbiAgICB2YXIgaGFzUHJldiA9IChrZXkgaW4gcHJldkNoaWxkTWFwcGluZyk7XG4gICAgdmFyIGhhc05leHQgPSAoa2V5IGluIG5leHRDaGlsZE1hcHBpbmcpO1xuICAgIHZhciBwcmV2Q2hpbGQgPSBwcmV2Q2hpbGRNYXBwaW5nW2tleV07XG4gICAgdmFyIGlzTGVhdmluZyA9IGlzVmFsaWRFbGVtZW50KHByZXZDaGlsZCkgJiYgIXByZXZDaGlsZC5wcm9wcy5pbjsgLy8gaXRlbSBpcyBuZXcgKGVudGVyaW5nKVxuXG4gICAgaWYgKGhhc05leHQgJiYgKCFoYXNQcmV2IHx8IGlzTGVhdmluZykpIHtcbiAgICAgIC8vIGNvbnNvbGUubG9nKCdlbnRlcmluZycsIGtleSlcbiAgICAgIGNoaWxkcmVuW2tleV0gPSBjbG9uZUVsZW1lbnQoY2hpbGQsIHtcbiAgICAgICAgb25FeGl0ZWQ6IG9uRXhpdGVkLmJpbmQobnVsbCwgY2hpbGQpLFxuICAgICAgICBpbjogdHJ1ZSxcbiAgICAgICAgZXhpdDogZ2V0UHJvcChjaGlsZCwgJ2V4aXQnLCBuZXh0UHJvcHMpLFxuICAgICAgICBlbnRlcjogZ2V0UHJvcChjaGlsZCwgJ2VudGVyJywgbmV4dFByb3BzKVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICghaGFzTmV4dCAmJiBoYXNQcmV2ICYmICFpc0xlYXZpbmcpIHtcbiAgICAgIC8vIGl0ZW0gaXMgb2xkIChleGl0aW5nKVxuICAgICAgLy8gY29uc29sZS5sb2coJ2xlYXZpbmcnLCBrZXkpXG4gICAgICBjaGlsZHJlbltrZXldID0gY2xvbmVFbGVtZW50KGNoaWxkLCB7XG4gICAgICAgIGluOiBmYWxzZVxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChoYXNOZXh0ICYmIGhhc1ByZXYgJiYgaXNWYWxpZEVsZW1lbnQocHJldkNoaWxkKSkge1xuICAgICAgLy8gaXRlbSBoYXNuJ3QgY2hhbmdlZCB0cmFuc2l0aW9uIHN0YXRlc1xuICAgICAgLy8gY29weSBvdmVyIHRoZSBsYXN0IHRyYW5zaXRpb24gcHJvcHM7XG4gICAgICAvLyBjb25zb2xlLmxvZygndW5jaGFuZ2VkJywga2V5KVxuICAgICAgY2hpbGRyZW5ba2V5XSA9IGNsb25lRWxlbWVudChjaGlsZCwge1xuICAgICAgICBvbkV4aXRlZDogb25FeGl0ZWQuYmluZChudWxsLCBjaGlsZCksXG4gICAgICAgIGluOiBwcmV2Q2hpbGQucHJvcHMuaW4sXG4gICAgICAgIGV4aXQ6IGdldFByb3AoY2hpbGQsICdleGl0JywgbmV4dFByb3BzKSxcbiAgICAgICAgZW50ZXI6IGdldFByb3AoY2hpbGQsICdlbnRlcicsIG5leHRQcm9wcylcbiAgICAgIH0pO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBjaGlsZHJlbjtcbn0iLCJpbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2VcIjtcbmltcG9ydCBfZXh0ZW5kcyBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kc1wiO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSBcIkBiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZFwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5pbXBvcnQgeyBnZXRDaGlsZE1hcHBpbmcsIGdldEluaXRpYWxDaGlsZE1hcHBpbmcsIGdldE5leHRDaGlsZE1hcHBpbmcgfSBmcm9tICcuL3V0aWxzL0NoaWxkTWFwcGluZyc7XG5cbnZhciB2YWx1ZXMgPSBPYmplY3QudmFsdWVzIHx8IGZ1bmN0aW9uIChvYmopIHtcbiAgcmV0dXJuIE9iamVjdC5rZXlzKG9iaikubWFwKGZ1bmN0aW9uIChrKSB7XG4gICAgcmV0dXJuIG9ialtrXTtcbiAgfSk7XG59O1xuXG52YXIgZGVmYXVsdFByb3BzID0ge1xuICBjb21wb25lbnQ6ICdkaXYnLFxuICBjaGlsZEZhY3Rvcnk6IGZ1bmN0aW9uIGNoaWxkRmFjdG9yeShjaGlsZCkge1xuICAgIHJldHVybiBjaGlsZDtcbiAgfVxufTtcbi8qKlxuICogVGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAgY29tcG9uZW50IG1hbmFnZXMgYSBzZXQgb2YgdHJhbnNpdGlvbiBjb21wb25lbnRzXG4gKiAoYDxUcmFuc2l0aW9uPmAgYW5kIGA8Q1NTVHJhbnNpdGlvbj5gKSBpbiBhIGxpc3QuIExpa2Ugd2l0aCB0aGUgdHJhbnNpdGlvblxuICogY29tcG9uZW50cywgYDxUcmFuc2l0aW9uR3JvdXA+YCBpcyBhIHN0YXRlIG1hY2hpbmUgZm9yIG1hbmFnaW5nIHRoZSBtb3VudGluZ1xuICogYW5kIHVubW91bnRpbmcgb2YgY29tcG9uZW50cyBvdmVyIHRpbWUuXG4gKlxuICogQ29uc2lkZXIgdGhlIGV4YW1wbGUgYmVsb3cuIEFzIGl0ZW1zIGFyZSByZW1vdmVkIG9yIGFkZGVkIHRvIHRoZSBUb2RvTGlzdCB0aGVcbiAqIGBpbmAgcHJvcCBpcyB0b2dnbGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGA8VHJhbnNpdGlvbkdyb3VwPmAuXG4gKlxuICogTm90ZSB0aGF0IGA8VHJhbnNpdGlvbkdyb3VwPmAgIGRvZXMgbm90IGRlZmluZSBhbnkgYW5pbWF0aW9uIGJlaGF2aW9yIVxuICogRXhhY3RseSBfaG93XyBhIGxpc3QgaXRlbSBhbmltYXRlcyBpcyB1cCB0byB0aGUgaW5kaXZpZHVhbCB0cmFuc2l0aW9uXG4gKiBjb21wb25lbnQuIFRoaXMgbWVhbnMgeW91IGNhbiBtaXggYW5kIG1hdGNoIGFuaW1hdGlvbnMgYWNyb3NzIGRpZmZlcmVudCBsaXN0XG4gKiBpdGVtcy5cbiAqL1xuXG52YXIgVHJhbnNpdGlvbkdyb3VwID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUmVhY3QkQ29tcG9uZW50KSB7XG4gIF9pbmhlcml0c0xvb3NlKFRyYW5zaXRpb25Hcm91cCwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gVHJhbnNpdGlvbkdyb3VwKHByb3BzLCBjb250ZXh0KSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMsIGNvbnRleHQpIHx8IHRoaXM7XG5cbiAgICB2YXIgaGFuZGxlRXhpdGVkID0gX3RoaXMuaGFuZGxlRXhpdGVkLmJpbmQoX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpOyAvLyBJbml0aWFsIGNoaWxkcmVuIHNob3VsZCBhbGwgYmUgZW50ZXJpbmcsIGRlcGVuZGVudCBvbiBhcHBlYXJcblxuXG4gICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogdHJ1ZVxuICAgICAgfSxcbiAgICAgIGhhbmRsZUV4aXRlZDogaGFuZGxlRXhpdGVkLFxuICAgICAgZmlyc3RSZW5kZXI6IHRydWVcbiAgICB9O1xuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBUcmFuc2l0aW9uR3JvdXAucHJvdG90eXBlO1xuXG4gIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgIHRoaXMubW91bnRlZCA9IHRydWU7XG4gICAgdGhpcy5zZXRTdGF0ZSh7XG4gICAgICBjb250ZXh0VmFsdWU6IHtcbiAgICAgICAgaXNNb3VudGluZzogZmFsc2VcbiAgICAgIH1cbiAgICB9KTtcbiAgfTtcblxuICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICB0aGlzLm1vdW50ZWQgPSBmYWxzZTtcbiAgfTtcblxuICBUcmFuc2l0aW9uR3JvdXAuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgX3JlZikge1xuICAgIHZhciBwcmV2Q2hpbGRNYXBwaW5nID0gX3JlZi5jaGlsZHJlbixcbiAgICAgICAgaGFuZGxlRXhpdGVkID0gX3JlZi5oYW5kbGVFeGl0ZWQsXG4gICAgICAgIGZpcnN0UmVuZGVyID0gX3JlZi5maXJzdFJlbmRlcjtcbiAgICByZXR1cm4ge1xuICAgICAgY2hpbGRyZW46IGZpcnN0UmVuZGVyID8gZ2V0SW5pdGlhbENoaWxkTWFwcGluZyhuZXh0UHJvcHMsIGhhbmRsZUV4aXRlZCkgOiBnZXROZXh0Q2hpbGRNYXBwaW5nKG5leHRQcm9wcywgcHJldkNoaWxkTWFwcGluZywgaGFuZGxlRXhpdGVkKSxcbiAgICAgIGZpcnN0UmVuZGVyOiBmYWxzZVxuICAgIH07XG4gIH0gLy8gbm9kZSBpcyBgdW5kZWZpbmVkYCB3aGVuIHVzZXIgcHJvdmlkZWQgYG5vZGVSZWZgIHByb3BcbiAgO1xuXG4gIF9wcm90by5oYW5kbGVFeGl0ZWQgPSBmdW5jdGlvbiBoYW5kbGVFeGl0ZWQoY2hpbGQsIG5vZGUpIHtcbiAgICB2YXIgY3VycmVudENoaWxkTWFwcGluZyA9IGdldENoaWxkTWFwcGluZyh0aGlzLnByb3BzLmNoaWxkcmVuKTtcbiAgICBpZiAoY2hpbGQua2V5IGluIGN1cnJlbnRDaGlsZE1hcHBpbmcpIHJldHVybjtcblxuICAgIGlmIChjaGlsZC5wcm9wcy5vbkV4aXRlZCkge1xuICAgICAgY2hpbGQucHJvcHMub25FeGl0ZWQobm9kZSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubW91bnRlZCkge1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgICAgdmFyIGNoaWxkcmVuID0gX2V4dGVuZHMoe30sIHN0YXRlLmNoaWxkcmVuKTtcblxuICAgICAgICBkZWxldGUgY2hpbGRyZW5bY2hpbGQua2V5XTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW5cbiAgICAgICAgfTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIENvbXBvbmVudCA9IF90aGlzJHByb3BzLmNvbXBvbmVudCxcbiAgICAgICAgY2hpbGRGYWN0b3J5ID0gX3RoaXMkcHJvcHMuY2hpbGRGYWN0b3J5LFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjb21wb25lbnRcIiwgXCJjaGlsZEZhY3RvcnlcIl0pO1xuXG4gICAgdmFyIGNvbnRleHRWYWx1ZSA9IHRoaXMuc3RhdGUuY29udGV4dFZhbHVlO1xuICAgIHZhciBjaGlsZHJlbiA9IHZhbHVlcyh0aGlzLnN0YXRlLmNoaWxkcmVuKS5tYXAoY2hpbGRGYWN0b3J5KTtcbiAgICBkZWxldGUgcHJvcHMuYXBwZWFyO1xuICAgIGRlbGV0ZSBwcm9wcy5lbnRlcjtcbiAgICBkZWxldGUgcHJvcHMuZXhpdDtcblxuICAgIGlmIChDb21wb25lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiAvKiNfX1BVUkVfXyovUmVhY3QuY3JlYXRlRWxlbWVudChUcmFuc2l0aW9uR3JvdXBDb250ZXh0LlByb3ZpZGVyLCB7XG4gICAgICAgIHZhbHVlOiBjb250ZXh0VmFsdWVcbiAgICAgIH0sIGNoaWxkcmVuKTtcbiAgICB9XG5cbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwQ29udGV4dC5Qcm92aWRlciwge1xuICAgICAgdmFsdWU6IGNvbnRleHRWYWx1ZVxuICAgIH0sIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KENvbXBvbmVudCwgcHJvcHMsIGNoaWxkcmVuKSk7XG4gIH07XG5cbiAgcmV0dXJuIFRyYW5zaXRpb25Hcm91cDtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuVHJhbnNpdGlvbkdyb3VwLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgLyoqXG4gICAqIGA8VHJhbnNpdGlvbkdyb3VwPmAgcmVuZGVycyBhIGA8ZGl2PmAgYnkgZGVmYXVsdC4gWW91IGNhbiBjaGFuZ2UgdGhpc1xuICAgKiBiZWhhdmlvciBieSBwcm92aWRpbmcgYSBgY29tcG9uZW50YCBwcm9wLlxuICAgKiBJZiB5b3UgdXNlIFJlYWN0IHYxNisgYW5kIHdvdWxkIGxpa2UgdG8gYXZvaWQgYSB3cmFwcGluZyBgPGRpdj5gIGVsZW1lbnRcbiAgICogeW91IGNhbiBwYXNzIGluIGBjb21wb25lbnQ9e251bGx9YC4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIHdyYXBwaW5nIGRpdlxuICAgKiBib3JrcyB5b3VyIGNzcyBzdHlsZXMuXG4gICAqL1xuICBjb21wb25lbnQ6IFByb3BUeXBlcy5hbnksXG5cbiAgLyoqXG4gICAqIEEgc2V0IG9mIGA8VHJhbnNpdGlvbj5gIGNvbXBvbmVudHMsIHRoYXQgYXJlIHRvZ2dsZWQgYGluYCBhbmQgb3V0IGFzIHRoZXlcbiAgICogbGVhdmUuIHRoZSBgPFRyYW5zaXRpb25Hcm91cD5gIHdpbGwgaW5qZWN0IHNwZWNpZmljIHRyYW5zaXRpb24gcHJvcHMsIHNvXG4gICAqIHJlbWVtYmVyIHRvIHNwcmVhZCB0aGVtIHRocm91Z2ggaWYgeW91IGFyZSB3cmFwcGluZyB0aGUgYDxUcmFuc2l0aW9uPmAgYXNcbiAgICogd2l0aCBvdXIgYDxGYWRlPmAgZXhhbXBsZS5cbiAgICpcbiAgICogV2hpbGUgdGhpcyBjb21wb25lbnQgaXMgbWVhbnQgZm9yIG11bHRpcGxlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmBcbiAgICogY2hpbGRyZW4sIHNvbWV0aW1lcyB5b3UgbWF5IHdhbnQgdG8gaGF2ZSBhIHNpbmdsZSB0cmFuc2l0aW9uIGNoaWxkIHdpdGhcbiAgICogY29udGVudCB0aGF0IHlvdSB3YW50IHRvIGJlIHRyYW5zaXRpb25lZCBvdXQgYW5kIGluIHdoZW4geW91IGNoYW5nZSBpdFxuICAgKiAoZS5nLiByb3V0ZXMsIGltYWdlcyBldGMuKSBJbiB0aGF0IGNhc2UgeW91IGNhbiBjaGFuZ2UgdGhlIGBrZXlgIHByb3Agb2ZcbiAgICogdGhlIHRyYW5zaXRpb24gY2hpbGQgYXMgeW91IGNoYW5nZSBpdHMgY29udGVudCwgdGhpcyB3aWxsIGNhdXNlXG4gICAqIGBUcmFuc2l0aW9uR3JvdXBgIHRvIHRyYW5zaXRpb24gdGhlIGNoaWxkIG91dCBhbmQgYmFjayBpbi5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMubm9kZSxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBhcHBlYXIgYW5pbWF0aW9uc1xuICAgKiBmb3IgYWxsIGNoaWxkcmVuLiBOb3RlIHRoYXQgc3BlY2lmeWluZyB0aGlzIHdpbGwgb3ZlcnJpZGUgYW55IGRlZmF1bHRzIHNldFxuICAgKiBvbiBpbmRpdmlkdWFsIGNoaWxkcmVuIFRyYW5zaXRpb25zLlxuICAgKi9cbiAgYXBwZWFyOiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogQSBjb252ZW5pZW5jZSBwcm9wIHRoYXQgZW5hYmxlcyBvciBkaXNhYmxlcyBlbnRlciBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBlbnRlcjogUHJvcFR5cGVzLmJvb2wsXG5cbiAgLyoqXG4gICAqIEEgY29udmVuaWVuY2UgcHJvcCB0aGF0IGVuYWJsZXMgb3IgZGlzYWJsZXMgZXhpdCBhbmltYXRpb25zXG4gICAqIGZvciBhbGwgY2hpbGRyZW4uIE5vdGUgdGhhdCBzcGVjaWZ5aW5nIHRoaXMgd2lsbCBvdmVycmlkZSBhbnkgZGVmYXVsdHMgc2V0XG4gICAqIG9uIGluZGl2aWR1YWwgY2hpbGRyZW4gVHJhbnNpdGlvbnMuXG4gICAqL1xuICBleGl0OiBQcm9wVHlwZXMuYm9vbCxcblxuICAvKipcbiAgICogWW91IG1heSBuZWVkIHRvIGFwcGx5IHJlYWN0aXZlIHVwZGF0ZXMgdG8gYSBjaGlsZCBhcyBpdCBpcyBleGl0aW5nLlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSBkb25lIGJ5IHVzaW5nIGBjbG9uZUVsZW1lbnRgIGhvd2V2ZXIgaW4gdGhlIGNhc2Ugb2YgYW4gZXhpdGluZ1xuICAgKiBjaGlsZCB0aGUgZWxlbWVudCBoYXMgYWxyZWFkeSBiZWVuIHJlbW92ZWQgYW5kIG5vdCBhY2Nlc3NpYmxlIHRvIHRoZSBjb25zdW1lci5cbiAgICpcbiAgICogSWYgeW91IGRvIG5lZWQgdG8gdXBkYXRlIGEgY2hpbGQgYXMgaXQgbGVhdmVzIHlvdSBjYW4gcHJvdmlkZSBhIGBjaGlsZEZhY3RvcnlgXG4gICAqIHRvIHdyYXAgZXZlcnkgY2hpbGQsIGV2ZW4gdGhlIG9uZXMgdGhhdCBhcmUgbGVhdmluZy5cbiAgICpcbiAgICogQHR5cGUgRnVuY3Rpb24oY2hpbGQ6IFJlYWN0RWxlbWVudCkgLT4gUmVhY3RFbGVtZW50XG4gICAqL1xuICBjaGlsZEZhY3Rvcnk6IFByb3BUeXBlcy5mdW5jXG59IDoge307XG5UcmFuc2l0aW9uR3JvdXAuZGVmYXVsdFByb3BzID0gZGVmYXVsdFByb3BzO1xuZXhwb3J0IGRlZmF1bHQgVHJhbnNpdGlvbkdyb3VwOyIsImltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tIFwiQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZVwiO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5pbXBvcnQgUHJvcFR5cGVzIGZyb20gJ3Byb3AtdHlwZXMnO1xuaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0JztcbmltcG9ydCBSZWFjdERPTSBmcm9tICdyZWFjdC1kb20nO1xuaW1wb3J0IFRyYW5zaXRpb25Hcm91cCBmcm9tICcuL1RyYW5zaXRpb25Hcm91cCc7XG4vKipcbiAqIFRoZSBgPFJlcGxhY2VUcmFuc2l0aW9uPmAgY29tcG9uZW50IGlzIGEgc3BlY2lhbGl6ZWQgYFRyYW5zaXRpb25gIGNvbXBvbmVudFxuICogdGhhdCBhbmltYXRlcyBiZXR3ZWVuIHR3byBjaGlsZHJlbi5cbiAqXG4gKiBgYGBqc3hcbiAqIDxSZXBsYWNlVHJhbnNpdGlvbiBpbj5cbiAqICAgPEZhZGU+PGRpdj5JIGFwcGVhciBmaXJzdDwvZGl2PjwvRmFkZT5cbiAqICAgPEZhZGU+PGRpdj5JIHJlcGxhY2UgdGhlIGFib3ZlPC9kaXY+PC9GYWRlPlxuICogPC9SZXBsYWNlVHJhbnNpdGlvbj5cbiAqIGBgYFxuICovXG5cbnZhciBSZXBsYWNlVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShSZXBsYWNlVHJhbnNpdGlvbiwgX1JlYWN0JENvbXBvbmVudCk7XG5cbiAgZnVuY3Rpb24gUmVwbGFjZVRyYW5zaXRpb24oKSB7XG4gICAgdmFyIF90aGlzO1xuXG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIF9hcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgX2FyZ3NbX2tleV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgX3RoaXMgPSBfUmVhY3QkQ29tcG9uZW50LmNhbGwuYXBwbHkoX1JlYWN0JENvbXBvbmVudCwgW3RoaXNdLmNvbmNhdChfYXJncykpIHx8IHRoaXM7XG5cbiAgICBfdGhpcy5oYW5kbGVFbnRlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiksIF9rZXkyID0gMDsgX2tleTIgPCBfbGVuMjsgX2tleTIrKykge1xuICAgICAgICBhcmdzW19rZXkyXSA9IGFyZ3VtZW50c1tfa2V5Ml07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRW50ZXInLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRW50ZXJpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMyA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjMpLCBfa2V5MyA9IDA7IF9rZXkzIDwgX2xlbjM7IF9rZXkzKyspIHtcbiAgICAgICAgYXJnc1tfa2V5M10gPSBhcmd1bWVudHNbX2tleTNdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyaW5nJywgMCwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUVudGVyZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuNCA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjQpLCBfa2V5NCA9IDA7IF9rZXk0IDwgX2xlbjQ7IF9rZXk0KyspIHtcbiAgICAgICAgYXJnc1tfa2V5NF0gPSBhcmd1bWVudHNbX2tleTRdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gX3RoaXMuaGFuZGxlTGlmZWN5Y2xlKCdvbkVudGVyZWQnLCAwLCBhcmdzKTtcbiAgICB9O1xuXG4gICAgX3RoaXMuaGFuZGxlRXhpdCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW41ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNSksIF9rZXk1ID0gMDsgX2tleTUgPCBfbGVuNTsgX2tleTUrKykge1xuICAgICAgICBhcmdzW19rZXk1XSA9IGFyZ3VtZW50c1tfa2V5NV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdCcsIDEsIGFyZ3MpO1xuICAgIH07XG5cbiAgICBfdGhpcy5oYW5kbGVFeGl0aW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgZm9yICh2YXIgX2xlbjYgPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW42KSwgX2tleTYgPSAwOyBfa2V5NiA8IF9sZW42OyBfa2V5NisrKSB7XG4gICAgICAgIGFyZ3NbX2tleTZdID0gYXJndW1lbnRzW19rZXk2XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIF90aGlzLmhhbmRsZUxpZmVjeWNsZSgnb25FeGl0aW5nJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIF90aGlzLmhhbmRsZUV4aXRlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIGZvciAodmFyIF9sZW43ID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuNyksIF9rZXk3ID0gMDsgX2tleTcgPCBfbGVuNzsgX2tleTcrKykge1xuICAgICAgICBhcmdzW19rZXk3XSA9IGFyZ3VtZW50c1tfa2V5N107XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBfdGhpcy5oYW5kbGVMaWZlY3ljbGUoJ29uRXhpdGVkJywgMSwgYXJncyk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBSZXBsYWNlVHJhbnNpdGlvbi5wcm90b3R5cGU7XG5cbiAgX3Byb3RvLmhhbmRsZUxpZmVjeWNsZSA9IGZ1bmN0aW9uIGhhbmRsZUxpZmVjeWNsZShoYW5kbGVyLCBpZHgsIG9yaWdpbmFsQXJncykge1xuICAgIHZhciBfY2hpbGQkcHJvcHM7XG5cbiAgICB2YXIgY2hpbGRyZW4gPSB0aGlzLnByb3BzLmNoaWxkcmVuO1xuICAgIHZhciBjaGlsZCA9IFJlYWN0LkNoaWxkcmVuLnRvQXJyYXkoY2hpbGRyZW4pW2lkeF07XG4gICAgaWYgKGNoaWxkLnByb3BzW2hhbmRsZXJdKSAoX2NoaWxkJHByb3BzID0gY2hpbGQucHJvcHMpW2hhbmRsZXJdLmFwcGx5KF9jaGlsZCRwcm9wcywgb3JpZ2luYWxBcmdzKTtcblxuICAgIGlmICh0aGlzLnByb3BzW2hhbmRsZXJdKSB7XG4gICAgICB2YXIgbWF5YmVOb2RlID0gY2hpbGQucHJvcHMubm9kZVJlZiA/IHVuZGVmaW5lZCA6IFJlYWN0RE9NLmZpbmRET01Ob2RlKHRoaXMpO1xuICAgICAgdGhpcy5wcm9wc1toYW5kbGVyXShtYXliZU5vZGUpO1xuICAgIH1cbiAgfTtcblxuICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgIHZhciBfdGhpcyRwcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHMuY2hpbGRyZW4sXG4gICAgICAgIGluUHJvcCA9IF90aGlzJHByb3BzLmluLFxuICAgICAgICBwcm9wcyA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKF90aGlzJHByb3BzLCBbXCJjaGlsZHJlblwiLCBcImluXCJdKTtcblxuICAgIHZhciBfUmVhY3QkQ2hpbGRyZW4kdG9BcnIgPSBSZWFjdC5DaGlsZHJlbi50b0FycmF5KGNoaWxkcmVuKSxcbiAgICAgICAgZmlyc3QgPSBfUmVhY3QkQ2hpbGRyZW4kdG9BcnJbMF0sXG4gICAgICAgIHNlY29uZCA9IF9SZWFjdCRDaGlsZHJlbiR0b0FyclsxXTtcblxuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyaW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkVudGVyZWQ7XG4gICAgZGVsZXRlIHByb3BzLm9uRXhpdDtcbiAgICBkZWxldGUgcHJvcHMub25FeGl0aW5nO1xuICAgIGRlbGV0ZSBwcm9wcy5vbkV4aXRlZDtcbiAgICByZXR1cm4gLyojX19QVVJFX18qL1JlYWN0LmNyZWF0ZUVsZW1lbnQoVHJhbnNpdGlvbkdyb3VwLCBwcm9wcywgaW5Qcm9wID8gUmVhY3QuY2xvbmVFbGVtZW50KGZpcnN0LCB7XG4gICAgICBrZXk6ICdmaXJzdCcsXG4gICAgICBvbkVudGVyOiB0aGlzLmhhbmRsZUVudGVyLFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFbnRlcmluZyxcbiAgICAgIG9uRW50ZXJlZDogdGhpcy5oYW5kbGVFbnRlcmVkXG4gICAgfSkgOiBSZWFjdC5jbG9uZUVsZW1lbnQoc2Vjb25kLCB7XG4gICAgICBrZXk6ICdzZWNvbmQnLFxuICAgICAgb25FbnRlcjogdGhpcy5oYW5kbGVFeGl0LFxuICAgICAgb25FbnRlcmluZzogdGhpcy5oYW5kbGVFeGl0aW5nLFxuICAgICAgb25FbnRlcmVkOiB0aGlzLmhhbmRsZUV4aXRlZFxuICAgIH0pKTtcbiAgfTtcblxuICByZXR1cm4gUmVwbGFjZVRyYW5zaXRpb247XG59KFJlYWN0LkNvbXBvbmVudCk7XG5cblJlcGxhY2VUcmFuc2l0aW9uLnByb3BUeXBlcyA9IHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIiA/IHtcbiAgaW46IFByb3BUeXBlcy5ib29sLmlzUmVxdWlyZWQsXG4gIGNoaWxkcmVuOiBmdW5jdGlvbiBjaGlsZHJlbihwcm9wcywgcHJvcE5hbWUpIHtcbiAgICBpZiAoUmVhY3QuQ2hpbGRyZW4uY291bnQocHJvcHNbcHJvcE5hbWVdKSAhPT0gMikgcmV0dXJuIG5ldyBFcnJvcihcIlxcXCJcIiArIHByb3BOYW1lICsgXCJcXFwiIG11c3QgYmUgZXhhY3RseSB0d28gdHJhbnNpdGlvbiBjb21wb25lbnRzLlwiKTtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxufSA6IHt9O1xuZXhwb3J0IGRlZmF1bHQgUmVwbGFjZVRyYW5zaXRpb247IiwiaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gXCJAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlXCI7XG5cbnZhciBfbGVhdmVSZW5kZXJzLCBfZW50ZXJSZW5kZXJzO1xuXG5pbXBvcnQgUmVhY3QgZnJvbSAncmVhY3QnO1xuaW1wb3J0IFByb3BUeXBlcyBmcm9tICdwcm9wLXR5cGVzJztcbmltcG9ydCB7IEVOVEVSRUQsIEVOVEVSSU5HLCBFWElUSU5HIH0gZnJvbSAnLi9UcmFuc2l0aW9uJztcbmltcG9ydCBUcmFuc2l0aW9uR3JvdXBDb250ZXh0IGZyb20gJy4vVHJhbnNpdGlvbkdyb3VwQ29udGV4dCc7XG5cbmZ1bmN0aW9uIGFyZUNoaWxkcmVuRGlmZmVyZW50KG9sZENoaWxkcmVuLCBuZXdDaGlsZHJlbikge1xuICBpZiAob2xkQ2hpbGRyZW4gPT09IG5ld0NoaWxkcmVuKSByZXR1cm4gZmFsc2U7XG5cbiAgaWYgKFJlYWN0LmlzVmFsaWRFbGVtZW50KG9sZENoaWxkcmVuKSAmJiBSZWFjdC5pc1ZhbGlkRWxlbWVudChuZXdDaGlsZHJlbikgJiYgb2xkQ2hpbGRyZW4ua2V5ICE9IG51bGwgJiYgb2xkQ2hpbGRyZW4ua2V5ID09PSBuZXdDaGlsZHJlbi5rZXkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cbi8qKlxuICogRW51bSBvZiBtb2RlcyBmb3IgU3dpdGNoVHJhbnNpdGlvbiBjb21wb25lbnRcbiAqIEBlbnVtIHsgc3RyaW5nIH1cbiAqL1xuXG5cbmV4cG9ydCB2YXIgbW9kZXMgPSB7XG4gIG91dDogJ291dC1pbicsXG4gIGluOiAnaW4tb3V0J1xufTtcblxudmFyIGNhbGxIb29rID0gZnVuY3Rpb24gY2FsbEhvb2soZWxlbWVudCwgbmFtZSwgY2IpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgX2VsZW1lbnQkcHJvcHM7XG5cbiAgICBlbGVtZW50LnByb3BzW25hbWVdICYmIChfZWxlbWVudCRwcm9wcyA9IGVsZW1lbnQucHJvcHMpW25hbWVdLmFwcGx5KF9lbGVtZW50JHByb3BzLCBhcmd1bWVudHMpO1xuICAgIGNiKCk7XG4gIH07XG59O1xuXG52YXIgbGVhdmVSZW5kZXJzID0gKF9sZWF2ZVJlbmRlcnMgPSB7fSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5vdXRdID0gZnVuY3Rpb24gKF9yZWYpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmLmN1cnJlbnQsXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoY3VycmVudCwge1xuICAgIGluOiBmYWxzZSxcbiAgICBvbkV4aXRlZDogY2FsbEhvb2soY3VycmVudCwgJ29uRXhpdGVkJywgZnVuY3Rpb24gKCkge1xuICAgICAgY2hhbmdlU3RhdGUoRU5URVJJTkcsIG51bGwpO1xuICAgIH0pXG4gIH0pO1xufSwgX2xlYXZlUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmMi5jdXJyZW50LFxuICAgICAgY2hhbmdlU3RhdGUgPSBfcmVmMi5jaGFuZ2VTdGF0ZSxcbiAgICAgIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW47XG4gIHJldHVybiBbY3VycmVudCwgUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSSU5HKTtcbiAgICB9KVxuICB9KV07XG59LCBfbGVhdmVSZW5kZXJzKTtcbnZhciBlbnRlclJlbmRlcnMgPSAoX2VudGVyUmVuZGVycyA9IHt9LCBfZW50ZXJSZW5kZXJzW21vZGVzLm91dF0gPSBmdW5jdGlvbiAoX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjMuY2hpbGRyZW4sXG4gICAgICBjaGFuZ2VTdGF0ZSA9IF9yZWYzLmNoYW5nZVN0YXRlO1xuICByZXR1cm4gUmVhY3QuY2xvbmVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgaW46IHRydWUsXG4gICAgb25FbnRlcmVkOiBjYWxsSG9vayhjaGlsZHJlbiwgJ29uRW50ZXJlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pO1xufSwgX2VudGVyUmVuZGVyc1ttb2Rlcy5pbl0gPSBmdW5jdGlvbiAoX3JlZjQpIHtcbiAgdmFyIGN1cnJlbnQgPSBfcmVmNC5jdXJyZW50LFxuICAgICAgY2hpbGRyZW4gPSBfcmVmNC5jaGlsZHJlbixcbiAgICAgIGNoYW5nZVN0YXRlID0gX3JlZjQuY2hhbmdlU3RhdGU7XG4gIHJldHVybiBbUmVhY3QuY2xvbmVFbGVtZW50KGN1cnJlbnQsIHtcbiAgICBpbjogZmFsc2UsXG4gICAgb25FeGl0ZWQ6IGNhbGxIb29rKGN1cnJlbnQsICdvbkV4aXRlZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNoYW5nZVN0YXRlKEVOVEVSRUQsIFJlYWN0LmNsb25lRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICBpbjogdHJ1ZVxuICAgICAgfSkpO1xuICAgIH0pXG4gIH0pLCBSZWFjdC5jbG9uZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICBpbjogdHJ1ZVxuICB9KV07XG59LCBfZW50ZXJSZW5kZXJzKTtcbi8qKlxuICogQSB0cmFuc2l0aW9uIGNvbXBvbmVudCBpbnNwaXJlZCBieSB0aGUgW3Z1ZSB0cmFuc2l0aW9uIG1vZGVzXShodHRwczovL3Z1ZWpzLm9yZy92Mi9ndWlkZS90cmFuc2l0aW9ucy5odG1sI1RyYW5zaXRpb24tTW9kZXMpLlxuICogWW91IGNhbiB1c2UgaXQgd2hlbiB5b3Ugd2FudCB0byBjb250cm9sIHRoZSByZW5kZXIgYmV0d2VlbiBzdGF0ZSB0cmFuc2l0aW9ucy5cbiAqIEJhc2VkIG9uIHRoZSBzZWxlY3RlZCBtb2RlIGFuZCB0aGUgY2hpbGQncyBrZXkgd2hpY2ggaXMgdGhlIGBUcmFuc2l0aW9uYCBvciBgQ1NTVHJhbnNpdGlvbmAgY29tcG9uZW50LCB0aGUgYFN3aXRjaFRyYW5zaXRpb25gIG1ha2VzIGEgY29uc2lzdGVudCB0cmFuc2l0aW9uIGJldHdlZW4gdGhlbS5cbiAqXG4gKiBJZiB0aGUgYG91dC1pbmAgbW9kZSBpcyBzZWxlY3RlZCwgdGhlIGBTd2l0Y2hUcmFuc2l0aW9uYCB3YWl0cyB1bnRpbCB0aGUgb2xkIGNoaWxkIGxlYXZlcyBhbmQgdGhlbiBpbnNlcnRzIGEgbmV3IGNoaWxkLlxuICogSWYgdGhlIGBpbi1vdXRgIG1vZGUgaXMgc2VsZWN0ZWQsIHRoZSBgU3dpdGNoVHJhbnNpdGlvbmAgaW5zZXJ0cyBhIG5ldyBjaGlsZCBmaXJzdCwgd2FpdHMgZm9yIHRoZSBuZXcgY2hpbGQgdG8gZW50ZXIgYW5kIHRoZW4gcmVtb3ZlcyB0aGUgb2xkIGNoaWxkLlxuICpcbiAqICoqTm90ZSoqOiBJZiB5b3Ugd2FudCB0aGUgYW5pbWF0aW9uIHRvIGhhcHBlbiBzaW11bHRhbmVvdXNseVxuICogKHRoYXQgaXMsIHRvIGhhdmUgdGhlIG9sZCBjaGlsZCByZW1vdmVkIGFuZCBhIG5ldyBjaGlsZCBpbnNlcnRlZCAqKmF0IHRoZSBzYW1lIHRpbWUqKiksXG4gKiB5b3Ugc2hvdWxkIHVzZVxuICogW2BUcmFuc2l0aW9uR3JvdXBgXShodHRwczovL3JlYWN0Y29tbXVuaXR5Lm9yZy9yZWFjdC10cmFuc2l0aW9uLWdyb3VwL3RyYW5zaXRpb24tZ3JvdXApXG4gKiBpbnN0ZWFkLlxuICpcbiAqIGBgYGpzeFxuICogZnVuY3Rpb24gQXBwKCkge1xuICogIGNvbnN0IFtzdGF0ZSwgc2V0U3RhdGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuICogIHJldHVybiAoXG4gKiAgICA8U3dpdGNoVHJhbnNpdGlvbj5cbiAqICAgICAgPENTU1RyYW5zaXRpb25cbiAqICAgICAgICBrZXk9e3N0YXRlID8gXCJHb29kYnllLCB3b3JsZCFcIiA6IFwiSGVsbG8sIHdvcmxkIVwifVxuICogICAgICAgIGFkZEVuZExpc3RlbmVyPXsobm9kZSwgZG9uZSkgPT4gbm9kZS5hZGRFdmVudExpc3RlbmVyKFwidHJhbnNpdGlvbmVuZFwiLCBkb25lLCBmYWxzZSl9XG4gKiAgICAgICAgY2xhc3NOYW1lcz0nZmFkZSdcbiAqICAgICAgPlxuICogICAgICAgIDxidXR0b24gb25DbGljaz17KCkgPT4gc2V0U3RhdGUoc3RhdGUgPT4gIXN0YXRlKX0+XG4gKiAgICAgICAgICB7c3RhdGUgPyBcIkdvb2RieWUsIHdvcmxkIVwiIDogXCJIZWxsbywgd29ybGQhXCJ9XG4gKiAgICAgICAgPC9idXR0b24+XG4gKiAgICAgIDwvQ1NTVHJhbnNpdGlvbj5cbiAqICAgIDwvU3dpdGNoVHJhbnNpdGlvbj5cbiAqICApO1xuICogfVxuICogYGBgXG4gKlxuICogYGBgY3NzXG4gKiAuZmFkZS1lbnRlcntcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1leGl0e1xuICogICAgb3BhY2l0eTogMTtcbiAqIH1cbiAqIC5mYWRlLWVudGVyLWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDE7XG4gKiB9XG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIG9wYWNpdHk6IDA7XG4gKiB9XG4gKiAuZmFkZS1lbnRlci1hY3RpdmUsXG4gKiAuZmFkZS1leGl0LWFjdGl2ZXtcbiAqICAgIHRyYW5zaXRpb246IG9wYWNpdHkgNTAwbXM7XG4gKiB9XG4gKiBgYGBcbiAqL1xuXG52YXIgU3dpdGNoVHJhbnNpdGlvbiA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1JlYWN0JENvbXBvbmVudCkge1xuICBfaW5oZXJpdHNMb29zZShTd2l0Y2hUcmFuc2l0aW9uLCBfUmVhY3QkQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBTd2l0Y2hUcmFuc2l0aW9uKCkge1xuICAgIHZhciBfdGhpcztcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICBfdGhpcyA9IF9SZWFjdCRDb21wb25lbnQuY2FsbC5hcHBseShfUmVhY3QkQ29tcG9uZW50LCBbdGhpc10uY29uY2F0KGFyZ3MpKSB8fCB0aGlzO1xuICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgc3RhdHVzOiBFTlRFUkVELFxuICAgICAgY3VycmVudDogbnVsbFxuICAgIH07XG4gICAgX3RoaXMuYXBwZWFyZWQgPSBmYWxzZTtcblxuICAgIF90aGlzLmNoYW5nZVN0YXRlID0gZnVuY3Rpb24gKHN0YXR1cywgY3VycmVudCkge1xuICAgICAgaWYgKGN1cnJlbnQgPT09IHZvaWQgMCkge1xuICAgICAgICBjdXJyZW50ID0gX3RoaXMuc3RhdGUuY3VycmVudDtcbiAgICAgIH1cblxuICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICBzdGF0dXM6IHN0YXR1cyxcbiAgICAgICAgY3VycmVudDogY3VycmVudFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIHJldHVybiBfdGhpcztcbiAgfVxuXG4gIHZhciBfcHJvdG8gPSBTd2l0Y2hUcmFuc2l0aW9uLnByb3RvdHlwZTtcblxuICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICB0aGlzLmFwcGVhcmVkID0gdHJ1ZTtcbiAgfTtcblxuICBTd2l0Y2hUcmFuc2l0aW9uLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhwcm9wcywgc3RhdGUpIHtcbiAgICBpZiAocHJvcHMuY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgY3VycmVudDogbnVsbFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuc3RhdHVzID09PSBFTlRFUklORyAmJiBwcm9wcy5tb2RlID09PSBtb2Rlcy5pbikge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBFTlRFUklOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICBpZiAoc3RhdGUuY3VycmVudCAmJiBhcmVDaGlsZHJlbkRpZmZlcmVudChzdGF0ZS5jdXJyZW50LCBwcm9wcy5jaGlsZHJlbikpIHtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogRVhJVElOR1xuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgY3VycmVudDogUmVhY3QuY2xvbmVFbGVtZW50KHByb3BzLmNoaWxkcmVuLCB7XG4gICAgICAgIGluOiB0cnVlXG4gICAgICB9KVxuICAgIH07XG4gIH07XG5cbiAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICB2YXIgX3RoaXMkcHJvcHMgPSB0aGlzLnByb3BzLFxuICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzLmNoaWxkcmVuLFxuICAgICAgICBtb2RlID0gX3RoaXMkcHJvcHMubW9kZSxcbiAgICAgICAgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICBzdGF0dXMgPSBfdGhpcyRzdGF0ZS5zdGF0dXMsXG4gICAgICAgIGN1cnJlbnQgPSBfdGhpcyRzdGF0ZS5jdXJyZW50O1xuICAgIHZhciBkYXRhID0ge1xuICAgICAgY2hpbGRyZW46IGNoaWxkcmVuLFxuICAgICAgY3VycmVudDogY3VycmVudCxcbiAgICAgIGNoYW5nZVN0YXRlOiB0aGlzLmNoYW5nZVN0YXRlLFxuICAgICAgc3RhdHVzOiBzdGF0dXNcbiAgICB9O1xuICAgIHZhciBjb21wb25lbnQ7XG5cbiAgICBzd2l0Y2ggKHN0YXR1cykge1xuICAgICAgY2FzZSBFTlRFUklORzpcbiAgICAgICAgY29tcG9uZW50ID0gZW50ZXJSZW5kZXJzW21vZGVdKGRhdGEpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBFWElUSU5HOlxuICAgICAgICBjb21wb25lbnQgPSBsZWF2ZVJlbmRlcnNbbW9kZV0oZGF0YSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIEVOVEVSRUQ6XG4gICAgICAgIGNvbXBvbmVudCA9IGN1cnJlbnQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIC8qI19fUFVSRV9fKi9SZWFjdC5jcmVhdGVFbGVtZW50KFRyYW5zaXRpb25Hcm91cENvbnRleHQuUHJvdmlkZXIsIHtcbiAgICAgIHZhbHVlOiB7XG4gICAgICAgIGlzTW91bnRpbmc6ICF0aGlzLmFwcGVhcmVkXG4gICAgICB9XG4gICAgfSwgY29tcG9uZW50KTtcbiAgfTtcblxuICByZXR1cm4gU3dpdGNoVHJhbnNpdGlvbjtcbn0oUmVhY3QuQ29tcG9uZW50KTtcblxuU3dpdGNoVHJhbnNpdGlvbi5wcm9wVHlwZXMgPSBwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIgPyB7XG4gIC8qKlxuICAgKiBUcmFuc2l0aW9uIG1vZGVzLlxuICAgKiBgb3V0LWluYDogQ3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dCBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgbmV3IGVsZW1lbnQgdHJhbnNpdGlvbnMgaW4uXG4gICAqIGBpbi1vdXRgOiBOZXcgZWxlbWVudCB0cmFuc2l0aW9ucyBpbiBmaXJzdCwgdGhlbiB3aGVuIGNvbXBsZXRlLCB0aGUgY3VycmVudCBlbGVtZW50IHRyYW5zaXRpb25zIG91dC5cbiAgICpcbiAgICogQHR5cGUgeydvdXQtaW4nfCdpbi1vdXQnfVxuICAgKi9cbiAgbW9kZTogUHJvcFR5cGVzLm9uZU9mKFttb2Rlcy5pbiwgbW9kZXMub3V0XSksXG5cbiAgLyoqXG4gICAqIEFueSBgVHJhbnNpdGlvbmAgb3IgYENTU1RyYW5zaXRpb25gIGNvbXBvbmVudC5cbiAgICovXG4gIGNoaWxkcmVuOiBQcm9wVHlwZXMub25lT2ZUeXBlKFtQcm9wVHlwZXMuZWxlbWVudC5pc1JlcXVpcmVkXSlcbn0gOiB7fTtcblN3aXRjaFRyYW5zaXRpb24uZGVmYXVsdFByb3BzID0ge1xuICBtb2RlOiBtb2Rlcy5vdXRcbn07XG5leHBvcnQgZGVmYXVsdCBTd2l0Y2hUcmFuc2l0aW9uOyIsImltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1JhbmdlVmlzaWJsZShfcmVmKSB7XG4gIHZhciBsYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgcmV0dXJuICEoc3RhcnRJbmRleCA+IGxhc3RSZW5kZXJlZFN0b3BJbmRleCB8fCBzdG9wSW5kZXggPCBsYXN0UmVuZGVyZWRTdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvclVubG9hZGVkUmFuZ2VzKF9yZWYpIHtcbiAgdmFyIGlzSXRlbUxvYWRlZCA9IF9yZWYuaXNJdGVtTG9hZGVkLFxuICAgICAgaXRlbUNvdW50ID0gX3JlZi5pdGVtQ291bnQsXG4gICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3JlZi5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHZhciB1bmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5nZVN0YXJ0SW5kZXggPSBudWxsO1xuICB2YXIgcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuXG4gIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgdmFyIGxvYWRlZCA9IGlzSXRlbUxvYWRlZChfaW5kZXgpO1xuXG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4O1xuICAgICAgaWYgKHJhbmdlU3RhcnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICByYW5nZVN0YXJ0SW5kZXggPSBfaW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcblxuICAgICAgcmFuZ2VTdGFydEluZGV4ID0gcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIDpyYW5nZVN0b3BJbmRleCBpcyBub3QgbnVsbCBpdCBtZWFucyB3ZSBoYXZlbid0IHJhbiBvdXQgb2YgdW5sb2FkZWQgcm93cy5cbiAgLy8gU2NhbiBmb3J3YXJkIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgdmFyIHBvdGVudGlhbFN0b3BJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KHJhbmdlU3RvcEluZGV4LCByYW5nZVN0YXJ0SW5kZXggKyBtaW5pbXVtQmF0Y2hTaXplIC0gMSksIGl0ZW1Db3VudCAtIDEpO1xuXG4gICAgZm9yICh2YXIgX2luZGV4MiA9IHJhbmdlU3RvcEluZGV4ICsgMTsgX2luZGV4MiA8PSBwb3RlbnRpYWxTdG9wSW5kZXg7IF9pbmRleDIrKykge1xuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MikpIHtcbiAgICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXgyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcbiAgfVxuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgZmlyc3QgcmFuZ2UgZW5kZWQgcHJlbWF0dXJlbHkuXG4gIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2NhbiBiYWNrd2FyZHMgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAodW5sb2FkZWRSYW5nZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHVubG9hZGVkUmFuZ2VzWzFdIC0gdW5sb2FkZWRSYW5nZXNbMF0gKyAxIDwgbWluaW11bUJhdGNoU2l6ZSAmJiB1bmxvYWRlZFJhbmdlc1swXSA+IDApIHtcbiAgICAgIHZhciBfaW5kZXgzID0gdW5sb2FkZWRSYW5nZXNbMF0gLSAxO1xuXG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgzKSkge1xuICAgICAgICB1bmxvYWRlZFJhbmdlc1swXSA9IF9pbmRleDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5sb2FkZWRSYW5nZXM7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgSW5maW5pdGVMb2FkZXIgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoSW5maW5pdGVMb2FkZXIsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbmZpbml0ZUxvYWRlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBJbmZpbml0ZUxvYWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBJbmZpbml0ZUxvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEluZmluaXRlTG9hZGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IC0xLCBfdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdLCBfdGhpcy5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmlzaWJsZVN0YXJ0SW5kZXggPSBfcmVmMi52aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4ID0gX3JlZjIudmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIodmlzaWJsZVN0YXJ0SW5kZXgpIHx8ICFpc0ludGVnZXIodmlzaWJsZVN0b3BJbmRleCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgb25JdGVtc1JlbmRlcmVkIHNpZ25hdHVyZTsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmxvYWRNb3JlUm93cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW5maW5pdGVMb2FkZXIgXCJsb2FkTW9yZVJvd3NcIiBwcm9wIGhhcyBiZWVuIHJlbmFtZWQgdG8gXCJsb2FkTW9yZUl0ZW1zXCIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSB2aXNpYmxlU3RhcnRJbmRleDtcbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSB2aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBfdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgfSwgX3RoaXMuX3NldFJlZiA9IGZ1bmN0aW9uIChsaXN0UmVmKSB7XG4gICAgICBfdGhpcy5fbGlzdFJlZiA9IGxpc3RSZWY7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEluZmluaXRlTG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0bG9hZE1vcmVJdGVtc0NhY2hlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUoKSB7XG4gICAgICB2YXIgYXV0b1JlbG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICAgICAgaWYgKGF1dG9SZWxvYWQpIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxpc3QgcmVmOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG5cblxuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgb25JdGVtc1JlbmRlcmVkOiB0aGlzLl9vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgIHJlZjogdGhpcy5fc2V0UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlUm93c0xvYWRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVSb3dzTG9hZGVkKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJdGVtTG9hZGVkID0gX3Byb3BzLmlzSXRlbUxvYWRlZCxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICAgIF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9IF9wcm9wcy5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcHJvcHMkbWluaW11bUJhdGNoU2kgPT09IHVuZGVmaW5lZCA/IDEwIDogX3Byb3BzJG1pbmltdW1CYXRjaFNpLFxuICAgICAgICAgIF9wcm9wcyR0aHJlc2hvbGQgPSBfcHJvcHMudGhyZXNob2xkLFxuICAgICAgICAgIHRocmVzaG9sZCA9IF9wcm9wcyR0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCA/IDE1IDogX3Byb3BzJHRocmVzaG9sZDtcblxuXG4gICAgICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoe1xuICAgICAgICBpc0l0ZW1Mb2FkZWQ6IGlzSXRlbUxvYWRlZCxcbiAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IG1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSB0aHJlc2hvbGQpLFxuICAgICAgICBzdG9wSW5kZXg6IE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIHRocmVzaG9sZClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIGxvYWQtcm93cyB1bmxlc3MgcmFuZ2UgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpcyBtYXliZSBuaWNlIHRvIGRvLlxuICAgICAgaWYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMubGVuZ3RoICE9PSB1bmxvYWRlZFJhbmdlcy5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uIChzdGFydE9yU3RvcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzW2luZGV4XSAhPT0gc3RhcnRPclN0b3A7XG4gICAgICB9KSkge1xuICAgICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gdW5sb2FkZWRSYW5nZXM7XG4gICAgICAgIHRoaXMuX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2xvYWRVbmxvYWRlZFJhbmdlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBsb2FkTW9yZVJvd3Mgd2FzIHJlbmFtZWQgdG8gbG9hZE1vcmVJdGVtcyBpbiB2MS4wLjM7IHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4gICAgICB2YXIgbG9hZE1vcmVJdGVtcyA9IHRoaXMucHJvcHMubG9hZE1vcmVJdGVtcyB8fCB0aGlzLnByb3BzLmxvYWRNb3JlUm93cztcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2ldO1xuICAgICAgICB2YXIgc3RvcEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaSArIDFdO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGxvYWRNb3JlSXRlbXMoc3RhcnRJbmRleCwgc3RvcEluZGV4KTtcbiAgICAgICAgaWYgKHByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSB2aXNpYmxlIHJvd3MgaWYgYW55IG9mIHRoZW0gaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgd2lsbCByZW1haW4gaW4gdGhlaXIgdW5sb2FkZWQgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgaWYgKGlzUmFuZ2VWaXNpYmxlKHtcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RhcnRJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICBzdG9wSW5kZXg6IHN0b3BJbmRleFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGFuIHVubW91bnQgd2hpbGUgcHJvbWlzZXMgYXJlIHN0aWxsIGluIGZsaWdodC5cbiAgICAgICAgICAgICAgaWYgKF90aGlzMi5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVzaXplIGNhY2hlZCByb3cgc2l6ZXMgZm9yIFZhcmlhYmxlU2l6ZUxpc3QsXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlLXJlbmRlciB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleChzdGFydEluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIHJlc2V0IHRlbXBvcmFyaWx5IGNhY2hlZCBpdGVtIHN0eWxlcyB0byBmb3JjZSBQdXJlQ29tcG9uZW50IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBncm9zcywgYnV0IEknbSBva2F5IHdpdGggaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAvLyBEb24ndCBqdWRnZSBtZS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubG9hZGVkUmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSW5maW5pdGVMb2FkZXI7XG59KFB1cmVDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZUxvYWRlcjtcbiIsInZhciBzYWZlSXNOYU4gPSBOdW1iZXIuaXNOYU4gfHxcbiAgICBmdW5jdGlvbiBwb255ZmlsbCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiB2YWx1ZSAhPT0gdmFsdWU7XG4gICAgfTtcbmZ1bmN0aW9uIGlzRXF1YWwoZmlyc3QsIHNlY29uZCkge1xuICAgIGlmIChmaXJzdCA9PT0gc2Vjb25kKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBpZiAoc2FmZUlzTmFOKGZpcnN0KSAmJiBzYWZlSXNOYU4oc2Vjb25kKSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xufVxuZnVuY3Rpb24gYXJlSW5wdXRzRXF1YWwobmV3SW5wdXRzLCBsYXN0SW5wdXRzKSB7XG4gICAgaWYgKG5ld0lucHV0cy5sZW5ndGggIT09IGxhc3RJbnB1dHMubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBuZXdJbnB1dHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKCFpc0VxdWFsKG5ld0lucHV0c1tpXSwgbGFzdElucHV0c1tpXSkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZTtcbn1cblxuZnVuY3Rpb24gbWVtb2l6ZU9uZShyZXN1bHRGbiwgaXNFcXVhbCkge1xuICAgIGlmIChpc0VxdWFsID09PSB2b2lkIDApIHsgaXNFcXVhbCA9IGFyZUlucHV0c0VxdWFsOyB9XG4gICAgdmFyIGxhc3RUaGlzO1xuICAgIHZhciBsYXN0QXJncyA9IFtdO1xuICAgIHZhciBsYXN0UmVzdWx0O1xuICAgIHZhciBjYWxsZWRPbmNlID0gZmFsc2U7XG4gICAgZnVuY3Rpb24gbWVtb2l6ZWQoKSB7XG4gICAgICAgIHZhciBuZXdBcmdzID0gW107XG4gICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgICAgICBuZXdBcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNhbGxlZE9uY2UgJiYgbGFzdFRoaXMgPT09IHRoaXMgJiYgaXNFcXVhbChuZXdBcmdzLCBsYXN0QXJncykpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgICAgICB9XG4gICAgICAgIGxhc3RSZXN1bHQgPSByZXN1bHRGbi5hcHBseSh0aGlzLCBuZXdBcmdzKTtcbiAgICAgICAgY2FsbGVkT25jZSA9IHRydWU7XG4gICAgICAgIGxhc3RUaGlzID0gdGhpcztcbiAgICAgICAgbGFzdEFyZ3MgPSBuZXdBcmdzO1xuICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW9pemVkO1xufVxuXG5leHBvcnQgZGVmYXVsdCBtZW1vaXplT25lO1xuIiwiaW1wb3J0IF9leHRlbmRzIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2V4dGVuZHMnO1xuaW1wb3J0IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vYXNzZXJ0VGhpc0luaXRpYWxpemVkJztcbmltcG9ydCBfaW5oZXJpdHNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9pbmhlcml0c0xvb3NlJztcbmltcG9ydCBtZW1vaXplT25lIGZyb20gJ21lbW9pemUtb25lJztcbmltcG9ydCB7IGNyZWF0ZUVsZW1lbnQsIFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSc7XG5cbi8vIEFuaW1hdGlvbiBmcmFtZSBiYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBzZXRUaW1lb3V0LlxuLy8gSW5zcGlyZWQgYnkgSm9lIExhbWJlcnQsIGh0dHBzOi8vZ2lzdC5naXRodWIuY29tL2pvZWxhbWJlcnQvMTAwMjExNiNmaWxlLXJlcXVlc3R0aW1lb3V0LWpzXG52YXIgaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPSB0eXBlb2YgcGVyZm9ybWFuY2UgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwZXJmb3JtYW5jZS5ub3cgPT09ICdmdW5jdGlvbic7XG52YXIgbm93ID0gaGFzTmF0aXZlUGVyZm9ybWFuY2VOb3cgPyBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKTtcbn0gOiBmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBEYXRlLm5vdygpO1xufTtcbmZ1bmN0aW9uIGNhbmNlbFRpbWVvdXQodGltZW91dElEKSB7XG4gIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRpbWVvdXRJRC5pZCk7XG59XG5mdW5jdGlvbiByZXF1ZXN0VGltZW91dChjYWxsYmFjaywgZGVsYXkpIHtcbiAgdmFyIHN0YXJ0ID0gbm93KCk7XG5cbiAgZnVuY3Rpb24gdGljaygpIHtcbiAgICBpZiAobm93KCkgLSBzdGFydCA+PSBkZWxheSkge1xuICAgICAgY2FsbGJhY2suY2FsbChudWxsKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGltZW91dElELmlkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spO1xuICAgIH1cbiAgfVxuXG4gIHZhciB0aW1lb3V0SUQgPSB7XG4gICAgaWQ6IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKVxuICB9O1xuICByZXR1cm4gdGltZW91dElEO1xufVxuXG52YXIgc2l6ZSA9IC0xOyAvLyBUaGlzIHV0aWxpdHkgY29waWVkIGZyb20gXCJkb20taGVscGVyc1wiIHBhY2thZ2UuXG5cbmZ1bmN0aW9uIGdldFNjcm9sbGJhclNpemUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKHNpemUgPT09IC0xIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBzdHlsZSA9IGRpdi5zdHlsZTtcbiAgICBzdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBzdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgc3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7XG4gICAgc2l6ZSA9IGRpdi5vZmZzZXRXaWR0aCAtIGRpdi5jbGllbnRXaWR0aDtcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGRpdik7XG4gIH1cblxuICByZXR1cm4gc2l6ZTtcbn1cbnZhciBjYWNoZWRSVExSZXN1bHQgPSBudWxsOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4vLyBDaHJvbWUgZG9lcyBub3Qgc2VlbSB0byBhZGhlcmU7IGl0cyBzY3JvbGxMZWZ0IHZhbHVlcyBhcmUgcG9zaXRpdmUgKG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbi8vIFNhZmFyaSdzIGVsYXN0aWMgYm91bmNlIG1ha2VzIGRldGVjdGluZyB0aGlzIGV2ZW4gbW9yZSBjb21wbGljYXRlZCB3cnQgcG90ZW50aWFsIGZhbHNlIHBvc2l0aXZlcy5cbi8vIFRoZSBzYWZlc3Qgd2F5IHRvIGNoZWNrIHRoaXMgaXMgdG8gaW50ZW50aW9uYWxseSBzZXQgYSBuZWdhdGl2ZSBvZmZzZXQsXG4vLyBhbmQgdGhlbiB2ZXJpZnkgdGhhdCB0aGUgc3Vic2VxdWVudCBcInNjcm9sbFwiIGV2ZW50IG1hdGNoZXMgdGhlIG5lZ2F0aXZlIG9mZnNldC5cbi8vIElmIGl0IGRvZXMgbm90IG1hdGNoLCB0aGVuIHdlIGNhbiBhc3N1bWUgYSBub24tc3RhbmRhcmQgUlRMIHNjcm9sbCBpbXBsZW1lbnRhdGlvbi5cblxuZnVuY3Rpb24gZ2V0UlRMT2Zmc2V0VHlwZShyZWNhbGN1bGF0ZSkge1xuICBpZiAocmVjYWxjdWxhdGUgPT09IHZvaWQgMCkge1xuICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoY2FjaGVkUlRMUmVzdWx0ID09PSBudWxsIHx8IHJlY2FsY3VsYXRlKSB7XG4gICAgdmFyIG91dGVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIG91dGVyU3R5bGUgPSBvdXRlckRpdi5zdHlsZTtcbiAgICBvdXRlclN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIG91dGVyU3R5bGUub3ZlcmZsb3cgPSAnc2Nyb2xsJztcbiAgICBvdXRlclN0eWxlLmRpcmVjdGlvbiA9ICdydGwnO1xuICAgIHZhciBpbm5lckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBpbm5lclN0eWxlID0gaW5uZXJEaXYuc3R5bGU7XG4gICAgaW5uZXJTdHlsZS53aWR0aCA9ICcxMDBweCc7XG4gICAgaW5uZXJTdHlsZS5oZWlnaHQgPSAnMTAwcHgnO1xuICAgIG91dGVyRGl2LmFwcGVuZENoaWxkKGlubmVyRGl2KTtcbiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG91dGVyRGl2KTtcblxuICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID4gMCkge1xuICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBvdXRlckRpdi5zY3JvbGxMZWZ0ID0gMTtcblxuICAgICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPT09IDApIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ25lZ2F0aXZlJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1hc2NlbmRpbmcnO1xuICAgICAgfVxuICAgIH1cblxuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQob3V0ZXJEaXYpO1xuICAgIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG4gIH1cblxuICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xufVxuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMID0gMTUwO1xuXG52YXIgZGVmYXVsdEl0ZW1LZXkgPSBmdW5jdGlvbiBkZWZhdWx0SXRlbUtleShfcmVmKSB7XG4gIHZhciBjb2x1bW5JbmRleCA9IF9yZWYuY29sdW1uSW5kZXgsXG4gICAgICBkYXRhID0gX3JlZi5kYXRhLFxuICAgICAgcm93SW5kZXggPSBfcmVmLnJvd0luZGV4O1xuICByZXR1cm4gcm93SW5kZXggKyBcIjpcIiArIGNvbHVtbkluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzVGFnTmFtZSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVHcmlkQ29tcG9uZW50KF9yZWYyKSB7XG4gIHZhciBfY2xhc3M7XG5cbiAgdmFyIGdldENvbHVtbk9mZnNldCA9IF9yZWYyLmdldENvbHVtbk9mZnNldCxcbiAgICAgIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBnZXRDb2x1bW5XaWR0aCA9IF9yZWYyLmdldENvbHVtbldpZHRoLFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSBfcmVmMi5nZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBfcmVmMi5nZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICAgICAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50ID0gX3JlZjIuZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50LFxuICAgICAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50ID0gX3JlZjIuZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50LFxuICAgICAgZ2V0Um93SGVpZ2h0ID0gX3JlZjIuZ2V0Um93SGVpZ2h0LFxuICAgICAgZ2V0Um93T2Zmc2V0ID0gX3JlZjIuZ2V0Um93T2Zmc2V0LFxuICAgICAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYyLmdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZjIuZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZjIuaW5pdEluc3RhbmNlUHJvcHMsXG4gICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlID0gX3JlZjIuc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgICAgIHZhbGlkYXRlUHJvcHMgPSBfcmVmMi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKEdyaWQsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBHcmlkKHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICBzY3JvbGxMZWZ0OiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbExlZnQgOiAwLFxuICAgICAgICBzY3JvbGxUb3A6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlLFxuICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnXG4gICAgICB9O1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCwgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsIG92ZXJzY2FuUm93U3RhcnRJbmRleCwgb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsIHZpc2libGVDb2x1bW5TdGFydEluZGV4LCB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LCB2aXNpYmxlUm93U3RhcnRJbmRleCwgdmlzaWJsZVJvd1N0b3BJbmRleCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkKHtcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtblN0b3BJbmRleDogb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdGFydEluZGV4OiBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dTdG9wSW5kZXg6IG92ZXJzY2FuUm93U3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdGFydEluZGV4OiB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RvcEluZGV4OiB2aXNpYmxlQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdGFydEluZGV4OiB2aXNpYmxlUm93U3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RvcEluZGV4OiB2aXNpYmxlUm93U3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbExlZnQsIHNjcm9sbFRvcCwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TY3JvbGwoe1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSB2b2lkIDA7XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbiAocm93SW5kZXgsIGNvbHVtbkluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgY29sdW1uV2lkdGggPSBfdGhpcyRwcm9wcy5jb2x1bW5XaWR0aCxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIHJvd0hlaWdodCA9IF90aGlzJHByb3BzLnJvd0hlaWdodDtcblxuICAgICAgICB2YXIgaXRlbVN0eWxlQ2FjaGUgPSBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBjb2x1bW5XaWR0aCwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24sIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgcm93SGVpZ2h0KTtcblxuICAgICAgICB2YXIga2V5ID0gcm93SW5kZXggKyBcIjpcIiArIGNvbHVtbkluZGV4O1xuICAgICAgICB2YXIgc3R5bGU7XG5cbiAgICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGtleSkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2tleV07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vZmZzZXQgPSBnZXRDb2x1bW5PZmZzZXQoX3RoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIGl0ZW1TdHlsZUNhY2hlW2tleV0gPSBzdHlsZSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBfb2Zmc2V0LFxuICAgICAgICAgICAgcmlnaHQ6IGlzUnRsID8gX29mZnNldCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRvcDogZ2V0Um93T2Zmc2V0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgaGVpZ2h0OiBnZXRSb3dIZWlnaHQoX3RoaXMucHJvcHMsIHJvd0luZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgICB3aWR0aDogZ2V0Q29sdW1uV2lkdGgoX3RoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoXywgX18sIF9fXykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxUb3AsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiYgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBfdGhpcy5wcm9wcy5kaXJlY3Rpb247IC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cblxuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKSk7XG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRTY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0OiBjYWxjdWxhdGVkU2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFRvcDogY2FsY3VsYXRlZFNjcm9sbFRvcCxcbiAgICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb3V0ZXJSZWZTZXR0ZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IF90aGlzLnByb3BzLm91dGVyUmVmO1xuICAgICAgICBfdGhpcy5fb3V0ZXJSZWYgPSByZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSBpZiAob3V0ZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsVGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nLCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBHcmlkLmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIF9wcm90byA9IEdyaWQucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvID0gZnVuY3Rpb24gc2Nyb2xsVG8oX3JlZjMpIHtcbiAgICAgIHZhciBzY3JvbGxMZWZ0ID0gX3JlZjMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfcmVmMy5zY3JvbGxUb3A7XG5cbiAgICAgIGlmIChzY3JvbGxMZWZ0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc2Nyb2xsVG9wICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gcHJldlN0YXRlLnNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc2Nyb2xsVG9wID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBzY3JvbGxUb3AgPSBwcmV2U3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsVG9wIDwgc2Nyb2xsVG9wID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJ1xuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9wcm90by5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oX3JlZjQpIHtcbiAgICAgIHZhciBfcmVmNCRhbGlnbiA9IF9yZWY0LmFsaWduLFxuICAgICAgICAgIGFsaWduID0gX3JlZjQkYWxpZ24gPT09IHZvaWQgMCA/ICdhdXRvJyA6IF9yZWY0JGFsaWduLFxuICAgICAgICAgIGNvbHVtbkluZGV4ID0gX3JlZjQuY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93SW5kZXggPSBfcmVmNC5yb3dJbmRleDtcbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHMyLmNvbHVtbkNvdW50LFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzMi5oZWlnaHQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczIucm93Q291bnQsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczIud2lkdGg7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlLnNjcm9sbFRvcDtcbiAgICAgIHZhciBzY3JvbGxiYXJTaXplID0gZ2V0U2Nyb2xsYmFyU2l6ZSgpO1xuXG4gICAgICBpZiAoY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBjb2x1bW5JbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkluZGV4LCBjb2x1bW5Db3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHJvd0luZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcm93SW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dJbmRleCwgcm93Q291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsXG4gICAgICAvLyB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cblxuICAgICAgdmFyIGhvcml6b250YWxTY3JvbGxiYXJTaXplID0gZXN0aW1hdGVkVG90YWxXaWR0aCA+IHdpZHRoID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB2YXIgdmVydGljYWxTY3JvbGxiYXJTaXplID0gZXN0aW1hdGVkVG90YWxIZWlnaHQgPiBoZWlnaHQgPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIHRoaXMuc2Nyb2xsVG8oe1xuICAgICAgICBzY3JvbGxMZWZ0OiBjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkID8gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIGNvbHVtbkluZGV4LCBhbGlnbiwgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcywgdmVydGljYWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbExlZnQsXG4gICAgICAgIHNjcm9sbFRvcDogcm93SW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCh0aGlzLnByb3BzLCByb3dJbmRleCwgYWxpZ24sIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcywgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUpIDogc2Nyb2xsVG9wXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsTGVmdCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsTGVmdCxcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsVG9wID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxUb3A7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbExlZnQgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsVG9wID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxUb3A7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgZGlyZWN0aW9uID0gdGhpcy5wcm9wcy5kaXJlY3Rpb247XG4gICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUyLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUyLnNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIHZhciBjbGllbnRXaWR0aCA9IG91dGVyUmVmLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBvdXRlclJlZi5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IE1hdGgubWF4KDAsIHNjcm9sbExlZnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgc2Nyb2xsVG9wKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM0LmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNC5jbGFzc05hbWUsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczQuY29sdW1uQ291bnQsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM0LmRpcmVjdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczQuaGVpZ2h0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHM0LmlubmVyUmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczQuaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBpbm5lclRhZ05hbWUgPSBfdGhpcyRwcm9wczQuaW5uZXJUYWdOYW1lLFxuICAgICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkcHJvcHM0Lml0ZW1EYXRhLFxuICAgICAgICAgIF90aGlzJHByb3BzNCRpdGVtS2V5ID0gX3RoaXMkcHJvcHM0Lml0ZW1LZXksXG4gICAgICAgICAgaXRlbUtleSA9IF90aGlzJHByb3BzNCRpdGVtS2V5ID09PSB2b2lkIDAgPyBkZWZhdWx0SXRlbUtleSA6IF90aGlzJHByb3BzNCRpdGVtS2V5LFxuICAgICAgICAgIG91dGVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczQub3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBvdXRlclRhZ05hbWUgPSBfdGhpcyRwcm9wczQub3V0ZXJUYWdOYW1lLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM0LnJvd0NvdW50LFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM0LnN0eWxlLFxuICAgICAgICAgIHVzZUlzU2Nyb2xsaW5nID0gX3RoaXMkcHJvcHM0LnVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM0LndpZHRoO1xuICAgICAgdmFyIGlzU2Nyb2xsaW5nID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZztcblxuICAgICAgdmFyIF90aGlzJF9nZXRIb3Jpem9udGFsUiA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgY29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUlswXSxcbiAgICAgICAgICBjb2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMV07XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4gPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICByb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuWzBdLFxuICAgICAgICAgIHJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblsxXTtcblxuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQpIHtcbiAgICAgICAgZm9yICh2YXIgX3Jvd0luZGV4ID0gcm93U3RhcnRJbmRleDsgX3Jvd0luZGV4IDw9IHJvd1N0b3BJbmRleDsgX3Jvd0luZGV4KyspIHtcbiAgICAgICAgICBmb3IgKHZhciBfY29sdW1uSW5kZXggPSBjb2x1bW5TdGFydEluZGV4OyBfY29sdW1uSW5kZXggPD0gY29sdW1uU3RvcEluZGV4OyBfY29sdW1uSW5kZXgrKykge1xuICAgICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBfY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAga2V5OiBpdGVtS2V5KHtcbiAgICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAgICAgIHJvd0luZGV4OiBfcm93SW5kZXhcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHJvd0luZGV4OiBfcm93SW5kZXgsXG4gICAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoX3Jvd0luZGV4LCBfY29sdW1uSW5kZXgpXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb25TY3JvbGw6IHRoaXMuX29uU2Nyb2xsLFxuICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH0sIHN0eWxlKVxuICAgICAgfSwgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBlc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogZXN0aW1hdGVkVG90YWxXaWR0aFxuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2FsbFByb3BzQ2FsbGJhY2tzID0gZnVuY3Rpb24gX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM1LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZCA9IF90aGlzJHByb3BzNS5vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgICAgb25TY3JvbGwgPSBfdGhpcyRwcm9wczUub25TY3JvbGwsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczUucm93Q291bnQ7XG5cbiAgICAgIGlmICh0eXBlb2Ygb25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGlmIChjb2x1bW5Db3VudCA+IDAgJiYgcm93Q291bnQgPiAwKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRIb3Jpem9udGFsUjIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVDb2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVDb2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzNdO1xuXG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRWZXJ0aWNhbFJhbjIgPSB0aGlzLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuUm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlUm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlUm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlszXTtcblxuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCwgX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBfb3ZlcnNjYW5Sb3dTdGFydEluZGV4LCBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgsIF92aXNpYmxlUm93U3RhcnRJbmRleCwgX3Zpc2libGVSb3dTdG9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygb25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgICAgX3Njcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIF9zY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMy5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQsXG4gICAgICAgICAgICBfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMudmVydGljYWxTY3JvbGxEaXJlY3Rpb247XG5cbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKF9zY3JvbGxMZWZ0LCBfc2Nyb2xsVG9wLCBfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiwgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKTtcbiAgICAgIH1cbiAgICB9IC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ291bnQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczYucm93Q291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU0ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU0Lmhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTQuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlNC5zY3JvbGxMZWZ0O1xuICAgICAgdmFyIG92ZXJzY2FuQ291bnRSZXNvbHZlZCA9IG92ZXJzY2FuQ29sdW1uQ291bnQgfHwgb3ZlcnNjYW5Db2x1bW5zQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM3ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNy5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd0NvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93c0NvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM3LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTUuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTUudmVydGljYWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGU1LnNjcm9sbFRvcDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhblJvd0NvdW50IHx8IG92ZXJzY2FuUm93c0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIEdyaWQ7XG4gIH0oUHVyZUNvbXBvbmVudCksIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZVxuICB9LCBfY2xhc3M7XG59XG5cbnZhciB2YWxpZGF0ZVNoYXJlZFByb3BzID0gZnVuY3Rpb24gdmFsaWRhdGVTaGFyZWRQcm9wcyhfcmVmNSwgX3JlZjYpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjUuY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmNS5kaXJlY3Rpb24sXG4gICAgICBoZWlnaHQgPSBfcmVmNS5oZWlnaHQsXG4gICAgICBpbm5lclRhZ05hbWUgPSBfcmVmNS5pbm5lclRhZ05hbWUsXG4gICAgICBvdXRlclRhZ05hbWUgPSBfcmVmNS5vdXRlclRhZ05hbWUsXG4gICAgICBvdmVyc2NhbkNvbHVtbnNDb3VudCA9IF9yZWY1Lm92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgb3ZlcnNjYW5Db3VudCA9IF9yZWY1Lm92ZXJzY2FuQ291bnQsXG4gICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF9yZWY1Lm92ZXJzY2FuUm93c0NvdW50LFxuICAgICAgd2lkdGggPSBfcmVmNS53aWR0aDtcbiAgdmFyIGluc3RhbmNlID0gX3JlZjYuaW5zdGFuY2U7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db3VudCBwcm9wIGhhcyBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db2x1bW5zQ291bnQgPT09ICdudW1iZXInIHx8IHR5cGVvZiBvdmVyc2NhblJvd3NDb3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBvdmVyc2NhbkNvbHVtbnNDb3VudCBhbmQgb3ZlcnNjYW5Sb3dzQ291bnQgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgb3ZlcnNjYW5Db2x1bW5Db3VudCBhbmQgb3ZlcnNjYW5Sb3dDb3VudCBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArIChcIlxcXCJcIiArIChjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbikgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICsgKFwiXFxcIlwiICsgZGlyZWN0aW9uICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoXCJcXFwiXCIgKyAod2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgKyAoXCJcXFwiXCIgKyAoaGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSA9IDUwO1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQgPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChfcmVmLCBfcmVmMikge1xuICB2YXIgcm93Q291bnQgPSBfcmVmLnJvd0NvdW50O1xuICB2YXIgcm93TWV0YWRhdGFNYXAgPSBfcmVmMi5yb3dNZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWYyLmVzdGltYXRlZFJvd0hlaWdodCxcbiAgICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gX3JlZjIubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IHJvd0NvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSByb3dDb3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSByb3dNZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRSb3dJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gcm93Q291bnQgLSBsYXN0TWVhc3VyZWRSb3dJbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZFJvd0hlaWdodDtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsV2lkdGgoX3JlZjMsIF9yZWY0KSB7XG4gIHZhciBjb2x1bW5Db3VudCA9IF9yZWYzLmNvbHVtbkNvdW50O1xuICB2YXIgY29sdW1uTWV0YWRhdGFNYXAgPSBfcmVmNC5jb2x1bW5NZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjQuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IF9yZWY0Lmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSBjb2x1bW5Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gY29sdW1uQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gY29sdW1uTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IGNvbHVtbkNvdW50IC0gbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRDb2x1bW5XaWR0aDtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgZ2V0SXRlbU1ldGFkYXRhID0gZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCwgaXRlbVNpemUsIGxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMuY29sdW1uV2lkdGg7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSBwcm9wcy5yb3dIZWlnaHQ7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIHZhciBzaXplID0gaXRlbVNpemUoaSk7XG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzaXplOiBzaXplXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGluZGV4O1xuICAgIH0gZWxzZSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gaW5kZXg7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIHZhciBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID0gbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBsYXN0TWVhc3VyZWRJbmRleCwgMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSwgb2Zmc2V0KTtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGhpZ2gsIGxvdywgb2Zmc2V0KSB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIHZhciBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgaW5kZXgsIG9mZnNldCkge1xuICB2YXIgaXRlbUNvdW50ID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMuY29sdW1uQ291bnQgOiBwcm9wcy5yb3dDb3VudDtcbiAgdmFyIGludGVydmFsID0gMTtcblxuICB3aGlsZSAoaW5kZXggPCBpdGVtQ291bnQgJiYgZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldCkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLCBNYXRoLmZsb29yKGluZGV4IC8gMiksIG9mZnNldCk7XG59O1xuXG52YXIgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gIHZhciBzaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gcHJvcHMud2lkdGggOiBwcm9wcy5oZWlnaHQ7XG4gIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7IC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG5cbiAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IGdldEVzdGltYXRlZFRvdGFsV2lkdGgocHJvcHMsIGluc3RhbmNlUHJvcHMpIDogZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldCkpO1xuICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBzY3JvbGxiYXJTaXplICsgaXRlbU1ldGFkYXRhLnNpemUpO1xuXG4gIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgfVxuICB9XG5cbiAgc3dpdGNoIChhbGlnbikge1xuICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICBjYXNlICdlbmQnOlxuICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgY2FzZSAnYXV0byc6XG4gICAgZGVmYXVsdDpcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICB9XG5cbiAgfVxufTtcblxudmFyIFZhcmlhYmxlU2l6ZUdyaWQgPSAvKiNfX1BVUkVfXyovY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uT2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSgnY29sdW1uJywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbExlZnQpO1xuICB9LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gcHJvcHMuY29sdW1uQ291bnQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxMZWZ0ICsgd2lkdGg7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBjb2x1bW5Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgZ2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIGdldENvbHVtbldpZHRoKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLmNvbHVtbk1ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KCdyb3cnLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpO1xuICB9LFxuICBnZXRSb3dPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd09mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Um93SGVpZ2h0OiBmdW5jdGlvbiBnZXRSb3dIZWlnaHQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ3JvdycsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxUb3ApO1xuICB9LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgcm93Q291bnQgPSBwcm9wcy5yb3dDb3VudCxcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsVG9wICsgaGVpZ2h0O1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgcm93Q291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcywgaW5zdGFuY2UpIHtcbiAgICB2YXIgX3JlZjUgPSBwcm9wcyxcbiAgICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGggPSBfcmVmNS5lc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0ID0gX3JlZjUuZXN0aW1hdGVkUm93SGVpZ2h0O1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgY29sdW1uTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGg6IGVzdGltYXRlZENvbHVtbldpZHRoIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGVzdGltYXRlZFJvd0hlaWdodDogZXN0aW1hdGVkUm93SGVpZ2h0IHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4OiAtMSxcbiAgICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4OiAtMSxcbiAgICAgIHJvd01ldGFkYXRhTWFwOiB7fVxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyQ29sdW1uSW5kZXggPSBmdW5jdGlvbiAoY29sdW1uSW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHtcbiAgICAgICAgY29sdW1uSW5kZXg6IGNvbHVtbkluZGV4LFxuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZTogc2hvdWxkRm9yY2VVcGRhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVyUm93SW5kZXggPSBmdW5jdGlvbiAocm93SW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzKHtcbiAgICAgICAgcm93SW5kZXg6IHJvd0luZGV4LFxuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZTogc2hvdWxkRm9yY2VVcGRhdGVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyA9IGZ1bmN0aW9uIChfcmVmNikge1xuICAgICAgdmFyIGNvbHVtbkluZGV4ID0gX3JlZjYuY29sdW1uSW5kZXgsXG4gICAgICAgICAgcm93SW5kZXggPSBfcmVmNi5yb3dJbmRleCxcbiAgICAgICAgICBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPSBfcmVmNi5zaG91bGRGb3JjZVVwZGF0ZSxcbiAgICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IF9yZWY2JHNob3VsZEZvcmNlVXBkYSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9yZWY2JHNob3VsZEZvcmNlVXBkYTtcblxuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5JbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgsIGNvbHVtbkluZGV4IC0gMSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4LCByb3dJbmRleCAtIDEpO1xuICAgICAgfSAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cblxuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY3KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjcuY29sdW1uV2lkdGgsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWY3LnJvd0hlaWdodDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAocm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5JDEgPSBmdW5jdGlvbiBkZWZhdWx0SXRlbUtleShpbmRleCwgZGF0YSkge1xuICByZXR1cm4gaW5kZXg7XG59OyAvLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cblxuXG52YXIgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSBudWxsO1xudmFyIGRldldhcm5pbmdzVGFnTmFtZSQxID0gbnVsbDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSQxID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlTGlzdENvbXBvbmVudChfcmVmKSB7XG4gIHZhciBfY2xhc3M7XG5cbiAgdmFyIGdldEl0ZW1PZmZzZXQgPSBfcmVmLmdldEl0ZW1PZmZzZXQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSBfcmVmLmdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgIGdldEl0ZW1TaXplID0gX3JlZi5nZXRJdGVtU2l6ZSxcbiAgICAgIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gX3JlZi5nZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCxcbiAgICAgIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmLmdldFN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZi5nZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgaW5pdEluc3RhbmNlUHJvcHMgPSBfcmVmLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYuc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSxcbiAgICAgIHZhbGlkYXRlUHJvcHMgPSBfcmVmLnZhbGlkYXRlUHJvcHM7XG4gIHJldHVybiBfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoTGlzdCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIExpc3QocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfUHVyZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMuX2luc3RhbmNlUHJvcHMgPSBpbml0SW5zdGFuY2VQcm9wcyhfdGhpcy5wcm9wcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuX291dGVyUmVmID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGluc3RhbmNlOiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgICBzY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsT2Zmc2V0OiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0IDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhblN0YXJ0SW5kZXgsIG92ZXJzY2FuU3RvcEluZGV4LCB2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkKHtcbiAgICAgICAgICBvdmVyc2NhblN0YXJ0SW5kZXg6IG92ZXJzY2FuU3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblN0b3BJbmRleDogb3ZlcnNjYW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0YXJ0SW5kZXg6IHZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXg6IHZpc2libGVTdG9wSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoc2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxPZmZzZXQsIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCkge1xuICAgICAgICByZXR1cm4gX3RoaXMucHJvcHMub25TY3JvbGwoe1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgIHZhciBfdGhpcyRwcm9wcyA9IF90aGlzLnByb3BzLFxuICAgICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICAgICAgaXRlbVNpemUgPSBfdGhpcyRwcm9wcy5pdGVtU2l6ZSxcbiAgICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzLmxheW91dDtcblxuICAgICAgICB2YXIgaXRlbVN0eWxlQ2FjaGUgPSBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBpdGVtU2l6ZSwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBsYXlvdXQsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uKTtcblxuICAgICAgICB2YXIgc3R5bGU7XG5cbiAgICAgICAgaWYgKGl0ZW1TdHlsZUNhY2hlLmhhc093blByb3BlcnR5KGluZGV4KSkge1xuICAgICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVbaW5kZXhdO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0SXRlbU9mZnNldChfdGhpcy5wcm9wcywgaW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAgIHZhciBzaXplID0gZ2V0SXRlbVNpemUoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgICAgIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgICAgdmFyIG9mZnNldEhvcml6b250YWwgPSBpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMDtcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtpbmRleF0gPSBzdHlsZSA9IHtcbiAgICAgICAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgICAgICAgbGVmdDogaXNSdGwgPyB1bmRlZmluZWQgOiBvZmZzZXRIb3Jpem9udGFsLFxuICAgICAgICAgICAgcmlnaHQ6IGlzUnRsID8gb2Zmc2V0SG9yaXpvbnRhbCA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHRvcDogIWlzSG9yaXpvbnRhbCA/IF9vZmZzZXQgOiAwLFxuICAgICAgICAgICAgaGVpZ2h0OiAhaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJyxcbiAgICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbEhvcml6b250YWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxMZWZ0KSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBkaXJlY3Rpb24gPSBfdGhpcy5wcm9wcy5kaXJlY3Rpb247XG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IHNjcm9sbExlZnQ7XG5cbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBJdCdzIGFsc28gZWFzaWVyIGZvciB0aGlzIGNvbXBvbmVudCBpZiB3ZSBjb252ZXJ0IG9mZnNldHMgdG8gdGhlIHNhbWUgZm9ybWF0IGFzIHRoZXkgd291bGQgYmUgaW4gZm9yIGx0ci5cbiAgICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIHNjcm9sbE9mZnNldCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbE9mZnNldCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsVmVydGljYWwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0MiA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxUb3A7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xLCBudWxsKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgTGlzdC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMkMShuZXh0UHJvcHMsIHByZXZTdGF0ZSk7XG4gICAgICB2YWxpZGF0ZVByb3BzKG5leHRQcm9wcyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9O1xuXG4gICAgdmFyIF9wcm90byA9IExpc3QucHJvdG90eXBlO1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvID0gZnVuY3Rpb24gc2Nyb2xsVG8oc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBzY3JvbGxPZmZzZXQpO1xuICAgICAgdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0ID09PSBzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsT2Zmc2V0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWVcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKGluZGV4LCBhbGlnbikge1xuICAgICAgaWYgKGFsaWduID09PSB2b2lkIDApIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9XG5cbiAgICAgIHZhciBfdGhpcyRwcm9wczIgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzMi5pdGVtQ291bnQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMyLmxheW91dDtcbiAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSB0aGlzLnN0YXRlLnNjcm9sbE9mZnNldDtcbiAgICAgIGluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LCB0byBlbnN1cmUgaXQncyBmdWxseSB2aXNpYmxlLlxuICAgICAgLy8gQnV0IHdlIG9ubHkgbmVlZCB0byBhY2NvdW50IGZvciBpdHMgc2l6ZSB3aGVuIGl0J3MgYWN0dWFsbHkgdmlzaWJsZS5cbiAgICAgIC8vIFRoaXMgaXMgYW4gZWRnZSBjYXNlIGZvciBsaXN0czsgbm9ybWFsbHkgdGhleSBvbmx5IHNjcm9sbCBpbiB0aGUgZG9taW5hbnQgZGlyZWN0aW9uLlxuXG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IDA7XG5cbiAgICAgIGlmICh0aGlzLl9vdXRlclJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAobGF5b3V0ID09PSAndmVydGljYWwnKSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbFdpZHRoID4gb3V0ZXJSZWYuY2xpZW50V2lkdGggPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxIZWlnaHQgPiBvdXRlclJlZi5jbGllbnRIZWlnaHQgPyBnZXRTY3JvbGxiYXJTaXplKCkgOiAwO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2Nyb2xsVG8oZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZE1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczMuZGlyZWN0aW9uLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxPZmZzZXQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbE9mZnNldCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczMubGF5b3V0O1xuXG4gICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRVcGRhdGUgPSBmdW5jdGlvbiBjb21wb25lbnREaWRVcGRhdGUoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNC5sYXlvdXQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gU28gd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBtaW1pYyBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gLXNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1hc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBvdXRlclJlZi5zY3JvbGxXaWR0aDtcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNS5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczUuY2xhc3NOYW1lLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNS5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM1LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNS5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczUuaXRlbUNvdW50LFxuICAgICAgICAgIGl0ZW1EYXRhID0gX3RoaXMkcHJvcHM1Lml0ZW1EYXRhLFxuICAgICAgICAgIF90aGlzJHByb3BzNSRpdGVtS2V5ID0gX3RoaXMkcHJvcHM1Lml0ZW1LZXksXG4gICAgICAgICAgaXRlbUtleSA9IF90aGlzJHByb3BzNSRpdGVtS2V5ID09PSB2b2lkIDAgPyBkZWZhdWx0SXRlbUtleSQxIDogX3RoaXMkcHJvcHM1JGl0ZW1LZXksXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM1LmxheW91dCxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM1Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM1Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNS5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNS51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNS53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICB2YXIgb25TY3JvbGwgPSBpc0hvcml6b250YWwgPyB0aGlzLl9vblNjcm9sbEhvcml6b250YWwgOiB0aGlzLl9vblNjcm9sbFZlcnRpY2FsO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMF0sXG4gICAgICAgICAgc3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgIGRhdGE6IGl0ZW1EYXRhLFxuICAgICAgICAgICAga2V5OiBpdGVtS2V5KF9pbmRleCwgaXRlbURhdGEpLFxuICAgICAgICAgICAgaW5kZXg6IF9pbmRleCxcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfaW5kZXgpXG4gICAgICAgICAgfSkpO1xuICAgICAgICB9XG4gICAgICB9IC8vIFJlYWQgdGhpcyB2YWx1ZSBBRlRFUiBpdGVtcyBoYXZlIGJlZW4gY3JlYXRlZCxcbiAgICAgIC8vIFNvIHRoZWlyIGFjdHVhbCBzaXplcyAoaWYgdmFyaWFibGUpIGFyZSB0YWtlbiBpbnRvIGNvbnNpZGVyYXRpb24uXG5cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZSh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGlzSG9yaXpvbnRhbCA/ICcxMDAlJyA6IGVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgICAgICAgICBwb2ludGVyRXZlbnRzOiBpc1Njcm9sbGluZyA/ICdub25lJyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gZXN0aW1hdGVkVG90YWxTaXplIDogJzEwMCUnXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgaXRlbUNvdW50ID0gdGhpcy5wcm9wcy5pdGVtQ291bnQ7XG5cbiAgICAgICAgaWYgKGl0ZW1Db3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFJhbmdlVG9SZW5kMiA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlszXTtcblxuICAgICAgICAgIHRoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQoX292ZXJzY2FuU3RhcnRJbmRleCwgX292ZXJzY2FuU3RvcEluZGV4LCBfdmlzaWJsZVN0YXJ0SW5kZXgsIF92aXNpYmxlU3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25TY3JvbGwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgICBfc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUyLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgICAgdGhpcy5fY2FsbE9uU2Nyb2xsKF9zY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxPZmZzZXQsIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0UmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczYgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNi5pdGVtQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlMyA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaXNTY3JvbGxpbmcgPSBfdGhpcyRzdGF0ZTMuaXNTY3JvbGxpbmcsXG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsT2Zmc2V0O1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0U3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIHN0b3BJbmRleCA9IGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgodGhpcy5wcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gTGlzdDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgbGF5b3V0OiAndmVydGljYWwnLFxuICAgIG92ZXJzY2FuQ291bnQ6IDIsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn0gLy8gTk9URTogSSBjb25zaWRlcmVkIGZ1cnRoZXIgd3JhcHBpbmcgaW5kaXZpZHVhbCBpdGVtcyB3aXRoIGEgcHVyZSBMaXN0SXRlbSBjb21wb25lbnQuXG4vLyBUaGlzIHdvdWxkIGF2b2lkIGV2ZXIgY2FsbGluZyB0aGUgcmVuZGVyIGZ1bmN0aW9uIGZvciB0aGUgc2FtZSBpbmRleCBtb3JlIHRoYW4gb25jZSxcbi8vIEJ1dCBpdCB3b3VsZCBhbHNvIGFkZCB0aGUgb3ZlcmhlYWQgb2YgYSBsb3Qgb2YgY29tcG9uZW50cy9maWJlcnMuXG4vLyBJIGFzc3VtZSBwZW9wbGUgYWxyZWFkeSBkbyB0aGlzIChyZW5kZXIgZnVuY3Rpb24gcmV0dXJuaW5nIGEgY2xhc3MgY29tcG9uZW50KSxcbi8vIFNvIG15IGRvaW5nIGl0IHdvdWxkIGp1c3QgdW5uZWNlc3NhcmlseSBkb3VibGUgdGhlIHdyYXBwZXJzLlxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyQxID0gZnVuY3Rpb24gdmFsaWRhdGVTaGFyZWRQcm9wcyhfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGNoaWxkcmVuID0gX3JlZjIuY2hpbGRyZW4sXG4gICAgICBkaXJlY3Rpb24gPSBfcmVmMi5kaXJlY3Rpb24sXG4gICAgICBoZWlnaHQgPSBfcmVmMi5oZWlnaHQsXG4gICAgICBsYXlvdXQgPSBfcmVmMi5sYXlvdXQsXG4gICAgICBpbm5lclRhZ05hbWUgPSBfcmVmMi5pbm5lclRhZ05hbWUsXG4gICAgICBvdXRlclRhZ05hbWUgPSBfcmVmMi5vdXRlclRhZ05hbWUsXG4gICAgICB3aWR0aCA9IF9yZWYyLndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmMy5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmIChpbm5lclRhZ05hbWUgIT0gbnVsbCB8fCBvdXRlclRhZ05hbWUgIT0gbnVsbCkge1xuICAgICAgaWYgKGRldldhcm5pbmdzVGFnTmFtZSQxICYmICFkZXZXYXJuaW5nc1RhZ05hbWUkMS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZSQxLmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIGlubmVyVGFnTmFtZSBhbmQgb3V0ZXJUYWdOYW1lIHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGlubmVyRWxlbWVudFR5cGUgYW5kIG91dGVyRWxlbWVudFR5cGUgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIGlmIChkZXZXYXJuaW5nc0RpcmVjdGlvbiAmJiAhZGV2V2FybmluZ3NEaXJlY3Rpb24uaGFzKGluc3RhbmNlKSkge1xuICAgICAgICAgIGRldldhcm5pbmdzRGlyZWN0aW9uLmFkZChpbnN0YW5jZSk7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdUaGUgZGlyZWN0aW9uIHByb3Agc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIChkZWZhdWx0KSBvciBcInJ0bFwiLiAnICsgJ1BsZWFzZSB1c2UgdGhlIGxheW91dCBwcm9wIHRvIHNwZWNpZnkgXCJ2ZXJ0aWNhbFwiIChkZWZhdWx0KSBvciBcImhvcml6b250YWxcIiBvcmllbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlICdsdHInOlxuICAgICAgY2FzZSAncnRsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImRpcmVjdGlvblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiBvciBcInJ0bFwiLiAnICsgKFwiXFxcIlwiICsgZGlyZWN0aW9uICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGxheW91dCkge1xuICAgICAgY2FzZSAnaG9yaXpvbnRhbCc6XG4gICAgICBjYXNlICd2ZXJ0aWNhbCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJsYXlvdXRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwiaG9yaXpvbnRhbFwiIG9yIFwidmVydGljYWxcIi4gJyArIChcIlxcXCJcIiArIGxheW91dCArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoaXNIb3Jpem9udGFsICYmIHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdIb3Jpem9udGFsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3Igd2lkdGguICcgKyAoXCJcXFwiXCIgKyAod2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygd2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9IGVsc2UgaWYgKCFpc0hvcml6b250YWwgJiYgdHlwZW9mIGhlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmVydGljYWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciBoZWlnaHQuICcgKyAoXCJcXFwiXCIgKyAoaGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGhlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cbiAgfVxufTtcblxudmFyIERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxID0gNTA7XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEkMSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgdmFyIF9yZWYgPSBwcm9wcyxcbiAgICAgIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBpbmRleDtcbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWF4KDAsIGxhc3RNZWFzdXJlZEluZGV4KSwgb2Zmc2V0KTtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaW5kZXgsIG9mZnNldCkge1xuICB2YXIgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldCA8IG9mZnNldCkge1xuICAgIGluZGV4ICs9IGludGVydmFsO1xuICAgIGludGVydmFsICo9IDI7XG4gIH1cblxuICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMiwgX3JlZjMpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IF9yZWYyLml0ZW1Db3VudDtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCA9IF9yZWYzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjMuZXN0aW1hdGVkSXRlbVNpemUsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IF9yZWYzLmxhc3RNZWFzdXJlZEluZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gaXRlbUNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpdGVtQ291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gaXRlbUNvdW50IC0gbGFzdE1lYXN1cmVkSW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgcmV0dXJuIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIFZhcmlhYmxlU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuaXRlbU1ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGdldEVzdGltYXRlZFRvdGFsU2l6ZSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAgIC8vIFRvIGVuc3VyZSBpdCByZWZsZWN0cyBhY3R1YWwgbWVhc3VyZW1lbnRzIGluc3RlYWQgb2YganVzdCBlc3RpbWF0ZXMuXG5cbiAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oZXN0aW1hdGVkVG90YWxTaXplIC0gc2l6ZSwgaXRlbU1ldGFkYXRhLm9mZnNldCkpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICByZXR1cm4gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBvZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtJDEocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBkaXJlY3Rpb24gPSBwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsT2Zmc2V0ICsgc2l6ZTtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGl0ZW1Db3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcywgaW5zdGFuY2UpIHtcbiAgICB2YXIgX3JlZjQgPSBwcm9wcyxcbiAgICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmNC5lc3RpbWF0ZWRJdGVtU2l6ZTtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZTogZXN0aW1hdGVkSXRlbVNpemUgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleDogLTFcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGV4ID0gZnVuY3Rpb24gKGluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCwgaW5kZXggLSAxKTsgLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjUpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGluZGV4ICogY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGg7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KF9yZWYzLCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMy5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIGluZGV4ICogcm93SGVpZ2h0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChfcmVmNCwgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjQucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChfcmVmNSkge1xuICAgIHZhciByb3dDb3VudCA9IF9yZWY1LnJvd0NvdW50LFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNS5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodCAqIHJvd0NvdW50O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWY2KSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjYuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjYuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoICogY29sdW1uQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50KF9yZWY3LCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNy5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgd2lkdGggPSBfcmVmNy53aWR0aDtcbiAgICB2YXIgbGFzdENvbHVtbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkNvdW50ICogY29sdW1uV2lkdGggLSB3aWR0aCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RDb2x1bW5PZmZzZXQsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGgpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoIC0gd2lkdGggKyBzY3JvbGxiYXJTaXplICsgY29sdW1uV2lkdGgpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgLSB3aWR0aCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCArIHdpZHRoKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdENvbHVtbk9mZnNldCArIE1hdGguZmxvb3Iod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Q29sdW1uT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbExlZnQ7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbExlZnQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQoX3JlZjgsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY4LnJvd0hlaWdodCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjguaGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWY4LnJvd0NvdW50O1xuICAgIHZhciBsYXN0Um93T2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93Q291bnQgKiByb3dIZWlnaHQgLSBoZWlnaHQpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Um93T2Zmc2V0LCByb3dJbmRleCAqIHJvd0hlaWdodCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIHJvd0luZGV4ICogcm93SGVpZ2h0IC0gaGVpZ2h0ICsgc2Nyb2xsYmFyU2l6ZSArIHJvd0hlaWdodCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0IC0gaGVpZ2h0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQgKyBoZWlnaHQpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdFJvd09mZnNldCArIE1hdGguZmxvb3IoaGVpZ2h0IC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdFJvd09mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxUb3AgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbFRvcCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsVG9wO1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxUb3AgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChfcmVmOSwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY5LmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWY5LmNvbHVtbkNvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsTGVmdCAvIGNvbHVtbldpZHRoKSkpO1xuICB9LFxuICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMCwgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMC5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmMTAuY29sdW1uQ291bnQsXG4gICAgICAgIHdpZHRoID0gX3JlZjEwLndpZHRoO1xuICAgIHZhciBsZWZ0ID0gc3RhcnRJbmRleCAqIGNvbHVtbldpZHRoO1xuICAgIHZhciBudW1WaXNpYmxlQ29sdW1ucyA9IE1hdGguY2VpbCgod2lkdGggKyBzY3JvbGxMZWZ0IC0gbGVmdCkgLyBjb2x1bW5XaWR0aCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVDb2x1bW5zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjExLCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjExLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTEucm93Q291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxUb3AgLyByb3dIZWlnaHQpKSk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEyLCBzdGFydEluZGV4LCBzY3JvbGxUb3ApIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjEyLnJvd0hlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmMTIucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IF9yZWYxMi5oZWlnaHQ7XG4gICAgdmFyIHRvcCA9IHN0YXJ0SW5kZXggKiByb3dIZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVSb3dzID0gTWF0aC5jZWlsKChoZWlnaHQgKyBzY3JvbGxUb3AgLSB0b3ApIC8gcm93SGVpZ2h0KTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZVJvd3MgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWYxMykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYxMy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjEzLnJvd0hlaWdodDtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGNvbHVtbldpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2Ygcm93SGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUxpc3QgPSAvKiNfX1BVUkVfXyovY3JlYXRlTGlzdENvbXBvbmVudCh7XG4gIGdldEl0ZW1PZmZzZXQ6IGZ1bmN0aW9uIGdldEl0ZW1PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICAgIHJldHVybiBpbmRleCAqIGl0ZW1TaXplO1xuICB9LFxuICBnZXRJdGVtU2l6ZTogZnVuY3Rpb24gZ2V0SXRlbVNpemUoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjIuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplO1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFNpemU6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsU2l6ZShfcmVmMykge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmMy5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjMuaXRlbVNpemU7XG4gICAgcmV0dXJuIGl0ZW1TaXplICogaXRlbUNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoX3JlZjQsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY0LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjQuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNC5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjQuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY0LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNC53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbGFzdEl0ZW1PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtQ291bnQgKiBpdGVtU2l6ZSAtIHNpemUpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0SXRlbU9mZnNldCwgaW5kZXggKiBpdGVtU2l6ZSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGluZGV4ICogaXRlbVNpemUgLSBzaXplICsgaXRlbVNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHtcbiAgICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RJdGVtT2Zmc2V0ICsgTWF0aC5mbG9vcihzaXplIC8gMikpIHtcbiAgICAgICAgICAgIHJldHVybiBsYXN0SXRlbU9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjUsIG9mZnNldCkge1xuICAgIHZhciBpdGVtQ291bnQgPSBfcmVmNS5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIE1hdGguZmxvb3Iob2Zmc2V0IC8gaXRlbVNpemUpKSk7XG4gIH0sXG4gIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjYsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNi5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY2LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjYuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY2Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNi5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjYud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBvZmZzZXQgPSBzdGFydEluZGV4ICogaXRlbVNpemU7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZUl0ZW1zID0gTWF0aC5jZWlsKChzaXplICsgc2Nyb2xsT2Zmc2V0IC0gb2Zmc2V0KSAvIGl0ZW1TaXplKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVJdGVtcyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmNy5pdGVtU2l6ZTtcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICBpZiAodHlwZW9mIGl0ZW1TaXplICE9PSAnbnVtYmVyJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxuLy8gUHVsbGVkIGZyb20gcmVhY3QtY29tcGF0XG4vLyBodHRwczovL2dpdGh1Yi5jb20vZGV2ZWxvcGl0L3ByZWFjdC1jb21wYXQvYmxvYi83YzVkZTAwZTdjODVlMmZmZDAxMWJmM2FmMDI4OTliNjNmNjk5ZDNhL3NyYy9pbmRleC5qcyNMMzQ5XG5mdW5jdGlvbiBzaGFsbG93RGlmZmVycyhwcmV2LCBuZXh0KSB7XG4gIGZvciAodmFyIGF0dHJpYnV0ZSBpbiBwcmV2KSB7XG4gICAgaWYgKCEoYXR0cmlidXRlIGluIG5leHQpKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICBmb3IgKHZhciBfYXR0cmlidXRlIGluIG5leHQpIHtcbiAgICBpZiAocHJldltfYXR0cmlidXRlXSAhPT0gbmV4dFtfYXR0cmlidXRlXSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG52YXIgX2V4Y2x1ZGVkID0gW1wic3R5bGVcIl0sXG4gICAgX2V4Y2x1ZGVkMiA9IFtcInN0eWxlXCJdO1xuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1hcGkuaHRtbCNyZWFjdG1lbW9cblxuZnVuY3Rpb24gYXJlRXF1YWwocHJldlByb3BzLCBuZXh0UHJvcHMpIHtcbiAgdmFyIHByZXZTdHlsZSA9IHByZXZQcm9wcy5zdHlsZSxcbiAgICAgIHByZXZSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UocHJldlByb3BzLCBfZXhjbHVkZWQpO1xuXG4gIHZhciBuZXh0U3R5bGUgPSBuZXh0UHJvcHMuc3R5bGUsXG4gICAgICBuZXh0UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKG5leHRQcm9wcywgX2V4Y2x1ZGVkMik7XG5cbiAgcmV0dXJuICFzaGFsbG93RGlmZmVycyhwcmV2U3R5bGUsIG5leHRTdHlsZSkgJiYgIXNoYWxsb3dEaWZmZXJzKHByZXZSZXN0LCBuZXh0UmVzdCk7XG59XG5cbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtY29tcG9uZW50Lmh0bWwjc2hvdWxkY29tcG9uZW50dXBkYXRlXG5cbmZ1bmN0aW9uIHNob3VsZENvbXBvbmVudFVwZGF0ZShuZXh0UHJvcHMsIG5leHRTdGF0ZSkge1xuICByZXR1cm4gIWFyZUVxdWFsKHRoaXMucHJvcHMsIG5leHRQcm9wcykgfHwgc2hhbGxvd0RpZmZlcnModGhpcy5zdGF0ZSwgbmV4dFN0YXRlKTtcbn1cblxuZXhwb3J0IHsgRml4ZWRTaXplR3JpZCwgRml4ZWRTaXplTGlzdCwgVmFyaWFibGVTaXplR3JpZCwgVmFyaWFibGVTaXplTGlzdCwgYXJlRXF1YWwsIHNob3VsZENvbXBvbmVudFVwZGF0ZSB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9aW5kZXguZXNtLmpzLm1hcFxuIiwiKGZ1bmN0aW9uIChyb290LCBmYWN0b3J5KSB7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgIGRlZmluZShbXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiAmJiBtb2R1bGUuZXhwb3J0cykge1xuICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICB9IGVsc2Uge1xuICAgIHJvb3QuU2Nyb2xscGFyZW50ID0gZmFjdG9yeSgpO1xuICB9XG59KHRoaXMsIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlZ2V4ID0gLyhhdXRvfHNjcm9sbCkvO1xuXG4gIHZhciBwYXJlbnRzID0gZnVuY3Rpb24gKG5vZGUsIHBzKSB7XG4gICAgaWYgKG5vZGUucGFyZW50Tm9kZSA9PT0gbnVsbCkgeyByZXR1cm4gcHM7IH1cblxuICAgIHJldHVybiBwYXJlbnRzKG5vZGUucGFyZW50Tm9kZSwgcHMuY29uY2F0KFtub2RlXSkpO1xuICB9O1xuXG4gIHZhciBzdHlsZSA9IGZ1bmN0aW9uIChub2RlLCBwcm9wKSB7XG4gICAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUobm9kZSwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShwcm9wKTtcbiAgfTtcblxuICB2YXIgb3ZlcmZsb3cgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIHJldHVybiBzdHlsZShub2RlLCBcIm92ZXJmbG93XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy15XCIpICsgc3R5bGUobm9kZSwgXCJvdmVyZmxvdy14XCIpO1xuICB9O1xuXG4gIHZhciBzY3JvbGwgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgcmV0dXJuIHJlZ2V4LnRlc3Qob3ZlcmZsb3cobm9kZSkpO1xuICB9O1xuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBmdW5jdGlvbiAobm9kZSkge1xuICAgIGlmICghKG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU1ZHRWxlbWVudCkpIHtcbiAgICAgIHJldHVybiA7XG4gICAgfVxuXG4gICAgdmFyIHBzID0gcGFyZW50cyhub2RlLnBhcmVudE5vZGUsIFtdKTtcblxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgIGlmIChzY3JvbGwocHNbaV0pKSB7XG4gICAgICAgIHJldHVybiBwc1tpXTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZG9jdW1lbnQuc2Nyb2xsaW5nRWxlbWVudCB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG4gIH07XG5cbiAgcmV0dXJuIHNjcm9sbFBhcmVudDtcbn0pKTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgb25Qb2ludGVyRG93bj86IChldmVudDogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgb25Qb2ludGVyRG93bixcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uUG9pbnRlckRvd249e29uUG9pbnRlckRvd259XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBpbnZlcnRlZCA9IGZhbHNlLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmJ1dHRvbkJhZGdlLCB7W3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkfSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICBjb25zdCBpbnB1dEVsZW1lbnQgPSAoXG4gICAgPGlucHV0XG4gICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgIHJlZj17KGlucHV0UmVmKSA9PiB7XG4gICAgICAgIGlmIChpbnB1dFJlZikge1xuICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICB9XG4gICAgICB9fVxuICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jaGVja2JveCwgY2xhc3NOYW1lLCBzdHlsZXNbc2l6ZV1dKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICBuYW1lPXtuYW1lfVxuICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgIC8+XG4gICk7XG5cbiAgaWYgKGxhYmVsKSB7XG4gICAgcmV0dXJuIDxMYWJlbCB2YWx1ZT17bGFiZWx9PntpbnB1dEVsZW1lbnR9PC9MYWJlbD47XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDw+e2lucHV0RWxlbWVudH08Lz47XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcbiAgY29sb3I6IENvbG9yO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ29sb3JTd2F0Y2goe1xuICBjb2xvcixcbiAgY29udGFpbmVyUmVmLFxuICBpc1NlbGVjdGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBvbkNsaWNrLFxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zZWxlY3RlZF06IGlzU2VsZWN0ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwiY29sb3Itc3dhdGNoXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cbiAgICA+XG4gICAgICB7Y29sb3IubGFiZWwgJiYgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JTd2F0Y2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG1vZGFsQ2xhc3NOYW1lPzogc3RyaW5nO1xuICBmbGV4Q2VudGVyPzogYm9vbGVhbjtcbiAgYnV0dG9uc0xlZnQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgYnV0dG9uc1JpZ2h0PzogUmVhY3RFbGVtZW50W107XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGlzT3BlbjogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIENvbmZpcm1hdGlvbk1vZGFsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGlzT3BlbixcbiAgYnV0dG9uc0xlZnQgPSBbXSxcbiAgYnV0dG9uc1JpZ2h0ID0gW10sXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBiYXNlWkluZGV4ID0gMTAxOSxcbiAgbW9kYWxDbGFzc05hbWUsXG4gIGZsZXhDZW50ZXIsXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBtb2RhbENsYXNzTmFtZT17bW9kYWxDbGFzc05hbWV9XG4gICAgICBmbGV4Q2VudGVyPXtmbGV4Q2VudGVyfVxuICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBub092ZXJsYXk9e25vT3ZlcmxheX1cbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuZXhwb3J0IHR5cGUgRHJhd2VyQ29udGV4dFZhbHVlID0ge1xuICBub0Nsb3NlSWNvbj86IGJvb2xlYW47XG4gIG9uQ2xvc2U/KCk6IHZvaWQ7XG59O1xuXG5leHBvcnQgY29uc3QgRHJhd2VyQ29udGV4dCA9IFJlYWN0LmNyZWF0ZUNvbnRleHQ8RHJhd2VyQ29udGV4dFZhbHVlPihcbiAge30gYXMgRHJhd2VyQ29udGV4dFZhbHVlXG4pO1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlRHJhd2VyQ29udGV4dCgpIHtcbiAgcmV0dXJuIFJlYWN0LnVzZUNvbnRleHQoRHJhd2VyQ29udGV4dCk7XG59XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZU1lbW8sIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBSZWFjdERPTSBmcm9tIFwicmVhY3QtZG9tXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRHJhd2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENTU1RyYW5zaXRpb24gfSBmcm9tIFwicmVhY3QtdHJhbnNpdGlvbi1ncm91cFwiO1xuaW1wb3J0IHsgQ1NTVHJhbnNpdGlvbkNsYXNzTmFtZXMgfSBmcm9tIFwicmVhY3QtdHJhbnNpdGlvbi1ncm91cC9DU1NUcmFuc2l0aW9uXCI7XG5pbXBvcnQgeyBEcmF3ZXJGb290ZXIgfSBmcm9tIFwiLi9EcmF3ZXJGb290ZXJcIjtcbmltcG9ydCB7IERyYXdlckhlYWRlciB9IGZyb20gXCIuL0RyYXdlckhlYWRlclwiO1xuaW1wb3J0IHsgRHJhd2VyQ29udGVudCB9IGZyb20gXCIuL0RyYXdlckNvbnRlbnRcIjtcbmltcG9ydCB7IERyYXdlckNvbnRleHQgfSBmcm9tIFwiLi9Db250ZXh0XCI7XG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xuXG50eXBlIERyYXdlclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgb3BlbjogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG4gIG5vQ2xvc2VJY29uPzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgdW5tb3VudE9uRXhpdD86IGJvb2xlYW47XG4gIG1vdW50T25FbnRlcj86IGJvb2xlYW47XG4gIHBvcnRhbENvbnRhaW5lcj86IEVsZW1lbnQgfCBEb2N1bWVudEZyYWdtZW50O1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgb25DbG9zZUFuaW1hdGlvbkVuZD86ICgpID0+IHZvaWQ7XG59O1xuXG5jb25zdCBUUkFOU0lUSU9OX0NMQVNTX05BTUVTOiBDU1NUcmFuc2l0aW9uQ2xhc3NOYW1lcyA9IHtcbiAgZW50ZXI6IHN0eWxlcy5kcmF3ZXJQYXBlckVudGVyLFxuICBlbnRlckFjdGl2ZTogc3R5bGVzLmRyYXdlclBhcGVyRW50ZXJBY3RpdmUsXG4gIGVudGVyRG9uZTogc3R5bGVzLmRyYXdlclBhcGVyRW50ZXJEb25lLFxuICBleGl0OiBzdHlsZXMuZHJhd2VyUGFwZXJFeGl0LFxuICBleGl0QWN0aXZlOiBzdHlsZXMuZHJhd2VyUGFwZXJFeGl0QWN0aXZlLFxuICBleGl0RG9uZTogc3R5bGVzLmRyYXdlclBhcGVyRXhpdERvbmUsXG59O1xuXG5mdW5jdGlvbiBnZXRDdXJyZW50VHJhbnNpdGlvbkNsYXNzTmFtZShcbiAgbm9kZVJlZjogUmVhY3QuUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PlxuKSB7XG4gIHJldHVybiBub2RlUmVmLmN1cnJlbnQ/LmNsYXNzTmFtZS5tYXRjaChcbiAgICBPYmplY3QudmFsdWVzKFRSQU5TSVRJT05fQ0xBU1NfTkFNRVMpLmpvaW4oXCJ8XCIpXG4gICk/LlswXTtcbn1cblxuZnVuY3Rpb24gRHJhd2VyKHtcbiAgb3BlbixcbiAgY2xhc3NOYW1lLFxuICBzdHlsZSxcbiAgbm9DbG9zZUljb24gPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIGNoaWxkcmVuLFxuICB1bm1vdW50T25FeGl0ID0gZmFsc2UsXG4gIG1vdW50T25FbnRlciA9IGZhbHNlLFxuICBwb3J0YWxDb250YWluZXIgPSBkb2N1bWVudC5ib2R5LFxuICBvbkNsb3NlLFxuICBvbkNsb3NlQW5pbWF0aW9uRW5kLFxufTogRHJhd2VyUHJvcHMpIHtcbiAgY29uc3QgW2lzRHJhd2VyVmlzaWJsZSwgc2V0RHJhd2VyVmlzaWJsZV0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IFtpc092ZXJsYXlWaXNpYmxlLCBzZXRJc092ZXJsYXlWaXNpYmxlXSA9IHVzZVN0YXRlKGZhbHNlKTtcblxuICBjb25zdCBub2RlUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3QgY3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUgPSBnZXRDdXJyZW50VHJhbnNpdGlvbkNsYXNzTmFtZShub2RlUmVmKTtcblxuICBjb25zdCBjb250ZXh0ID0gdXNlTWVtbyhcbiAgICAoKSA9PiAoeyBvbkNsb3NlLCBub0Nsb3NlSWNvbiB9KSxcbiAgICBbb25DbG9zZSwgbm9DbG9zZUljb25dXG4gICk7XG5cbiAgdXNlSG90a2V5cyhcIkVzY2FwZVwiLCBvbkNsb3NlKTtcblxuICBjb25zdCBoYW5kbGVFbnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXREcmF3ZXJWaXNpYmxlKHRydWUpO1xuICAgIHNldElzT3ZlcmxheVZpc2libGUodHJ1ZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVFeGl0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldElzT3ZlcmxheVZpc2libGUoZmFsc2UpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlRXhpdGVkID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHNldERyYXdlclZpc2libGUoZmFsc2UpO1xuICAgIG9uQ2xvc2VBbmltYXRpb25FbmQ/LigpO1xuICB9LCBbb25DbG9zZUFuaW1hdGlvbkVuZF0pO1xuXG4gIHJldHVybiBSZWFjdERPTS5jcmVhdGVQb3J0YWwoXG4gICAgPENTU1RyYW5zaXRpb25cbiAgICAgIG5vZGVSZWY9e25vZGVSZWZ9XG4gICAgICBpbj17b3Blbn1cbiAgICAgIHRpbWVvdXQ9ezMwMH1cbiAgICAgIGNsYXNzTmFtZXM9e1RSQU5TSVRJT05fQ0xBU1NfTkFNRVN9XG4gICAgICB1bm1vdW50T25FeGl0PXt1bm1vdW50T25FeGl0fVxuICAgICAgbW91bnRPbkVudGVyPXttb3VudE9uRW50ZXJ9XG4gICAgICBvbkV4aXRlZD17aGFuZGxlRXhpdGVkfVxuICAgICAgb25FbnRlcj17aGFuZGxlRW50ZXJ9XG4gICAgICBvbkV4aXQ9e2hhbmRsZUV4aXR9XG4gICAgPlxuICAgICAgPERyYXdlckNvbnRleHQuUHJvdmlkZXIgdmFsdWU9e2NvbnRleHR9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuZHJhd2VyLFxuICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnZpc2libGVdOiBpc0RyYXdlclZpc2libGUsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgcmVmPXtub2RlUmVmfVxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5kcmF3ZXJQYXBlcixcbiAgICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBhZGQgdGhlIGN1cnJlbnQgdHJhbnNpdGlvbiBjbGFzcyBuYW1lIGhlcmUgYmVjYXVzZSBpdCBnZXRzIGRpc2FwcGVhcmVkIGFsb25nIHdpdGggdGhlIGRyYXdlclxuICAgICAgICAgICAgICAvLyB3aGVuIGNsYXNzTmFtZSBjaGFuZ2VzXG4gICAgICAgICAgICAgIGN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lLFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBzdHlsZT17c3R5bGV9XG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5kcmF3ZXJQYXBlckNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgICAgc3R5bGVzLmRyYXdlck92ZXJsYXksXG4gICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSxcbiAgICAgICAgICAgICAgICBbc3R5bGVzLnZpc2libGVdOiBpc092ZXJsYXlWaXNpYmxlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtvbkNsb3NlfVxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9EcmF3ZXJDb250ZXh0LlByb3ZpZGVyPlxuICAgIDwvQ1NTVHJhbnNpdGlvbj4sXG4gICAgcG9ydGFsQ29udGFpbmVyXG4gICk7XG59XG5cbkRyYXdlci5IZWFkZXIgPSBEcmF3ZXJIZWFkZXI7XG5EcmF3ZXIuQ29udGVudCA9IERyYXdlckNvbnRlbnQ7XG5EcmF3ZXIuRm9vdGVyID0gRHJhd2VyRm9vdGVyO1xuXG5leHBvcnQgZGVmYXVsdCBEcmF3ZXI7XG4iLCJpbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRHJhd2VyQ29udGVudC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgRHJhd2VyQ29udGVudFByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gRHJhd2VyQ29udGVudCh7IGNoaWxkcmVuLCBjbGFzc05hbWUgfTogRHJhd2VyQ29udGVudFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuZHJhd2VyQ29udGVudCwgY2xhc3NOYW1lXSl9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcmF3ZXJDb250ZW50O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmF3ZXJDb250ZW50IH0gZnJvbSBcIi4vRHJhd2VyQ29udGVudFwiO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0RyYXdlckZvb3Rlci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgRHJhd2VyRm9vdGVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBEcmF3ZXJGb290ZXIoeyBjaGlsZHJlbiwgY2xhc3NOYW1lIH06IERyYXdlckZvb3RlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuZHJhd2VyRm9vdGVyLCBjbGFzc05hbWVdKX0+e2NoaWxkcmVufTwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcmF3ZXJGb290ZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERyYXdlckZvb3RlciB9IGZyb20gXCIuL0RyYXdlckZvb3RlclwiO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9JY29uXCI7XG5pbXBvcnQgY2xvc2VJY29uIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvY2xvc2Uuc3ZnXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRHJhd2VySGVhZGVyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IHVzZURyYXdlckNvbnRleHQgfSBmcm9tIFwiLi4vQ29udGV4dFwiO1xuXG50eXBlIERyYXdlckhlYWRlclByb3BzID0ge1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gRHJhd2VySGVhZGVyKHsgY2hpbGRyZW4sIGNsYXNzTmFtZSB9OiBEcmF3ZXJIZWFkZXJQcm9wcykge1xuICBjb25zdCB7IG9uQ2xvc2UsIG5vQ2xvc2VJY29uIH0gPSB1c2VEcmF3ZXJDb250ZXh0KCk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5kcmF3ZXJIZWFkZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHshbm9DbG9zZUljb24gJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlckhlYWRlckNsb3NlfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmRyYXdlckhlYWRlckNsb3NlSWNvbn0gb25DbGljaz17b25DbG9zZX0+XG4gICAgICAgICAgICA8SWNvbiBzcmM9e2Nsb3NlSWNvbn0gc2l6ZT17XCJ4bGFyZ2VcIn0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBEcmF3ZXJIZWFkZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIERyYXdlckhlYWRlciB9IGZyb20gXCIuL0RyYXdlckhlYWRlclwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBEcmF3ZXIgfSBmcm9tIFwiLi9EcmF3ZXJcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+KHtcbiAgZGlzcGxheSxcbiAgaXNEaXNhYmxlZCxcbiAgb25DbGljazogaGFuZGxlQ2xpY2ssXG59OiBDbGlja2FibGVQcm9wczxUPikge1xuICByZXR1cm4gKFxuICAgIDxCdXR0b25cbiAgICAgIGFsaWduPVwibGVmdFwiXG4gICAgICBkaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgc2l6ZT1cIm1lZGl1bVwiXG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5jb250YWluZXJ9PlxuICAgICAgICB7ZGlzcGxheX1cbiAgICAgICAgPEljb24gYWx0PVwiRHJvcGRvd25cIiBzcmM9e2ljb25NZW51fSAvPlxuICAgICAgPC9kaXY+XG4gICAgPC9CdXR0b24+XG4gICk7XG59XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RDaGlsZCwgUmVhY3RFbGVtZW50LCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlT3V0c2lkZUNsaWNrIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5cbmltcG9ydCB7IENsaWNrYWJsZSB9IGZyb20gXCIuL0NsaWNrYWJsZVwiO1xuaW1wb3J0IHsgTWVudSwgTWVudUNvbnRhaW5lciwgTWVudUl0ZW0sIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi4vTWVudVwiO1xuXG5leHBvcnQgdHlwZSBJdGVtID0geyBpZDogbnVtYmVyIHwgc3RyaW5nOyBuYW1lOiBzdHJpbmcgfTtcblxuZXhwb3J0IHR5cGUgUmVuZGVyRGlzcGxheVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IFBpY2s8XG4gIERyb3Bkb3duUHJvcHM8VD4sXG4gIFwiZGlzcGxheVwiIHwgXCJzZWxlY3RlZEl0ZW1cIlxuPiAmIHsgaXNEaXNhYmxlZDogYm9vbGVhbjsgdG9nZ2xlSXNPcGVuOiAoKSA9PiB2b2lkIH07XG5cbmV4cG9ydCB0eXBlIFJlbmRlckNsaWNrYWJsZUZuPFQgZXh0ZW5kcyBJdGVtPiA9IChcbiAgcHJvcHM6IFJlbmRlckRpc3BsYXlQcm9wczxUPlxuKSA9PiBSZWFjdEVsZW1lbnQ7XG5cbmV4cG9ydCB0eXBlIEl0ZW1Cb2R5UmVuZGVyZXJGbjxUIGV4dGVuZHMgSXRlbT4gPSAoc3RhdGU6IHtcbiAgaXRlbTogVDtcbiAgaXNTZWxlY3RlZDogYm9vbGVhbjtcbn0pID0+IFJlYWN0Q2hpbGQ7XG5cbmV4cG9ydCBpbnRlcmZhY2UgRHJvcGRvd25Qcm9wczxUIGV4dGVuZHMgSXRlbT4ge1xuICBpdGVtQm9keVJlbmRlcmVyPzogSXRlbUJvZHlSZW5kZXJlckZuPFQ+O1xuICBpdGVtczogVFtdO1xuICBvblNlbGVjdDogKGl0ZW06IFQpID0+IHZvaWQ7XG4gIGRpc3BsYXk6IFJlYWN0Q2hpbGQ7XG4gIHJlbmRlckNsaWNrYWJsZT86IFJlbmRlckNsaWNrYWJsZUZuPFQ+O1xuICBzZWxlY3RlZEl0ZW06IFQgfCBudWxsO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gRHJvcGRvd248VCBleHRlbmRzIEl0ZW0+KHtcbiAgaXRlbUJvZHlSZW5kZXJlcixcbiAgaXRlbXMsXG4gIG9uU2VsZWN0OiBoYW5kbGVTZWxlY3QsXG4gIGRpc3BsYXksXG4gIHJlbmRlckNsaWNrYWJsZSxcbiAgc2VsZWN0ZWRJdGVtLFxuICBwbGFjZW1lbnQgPSB7IHZlcnRpY2FsOiBcImJvdHRvbVwiLCBob3Jpem9udGFsOiBcImxlZnRcIiB9XG59OiBEcm9wZG93blByb3BzPFQ+KSB7XG4gIGNvbnN0IFtpc09wZW4sIHNldElzT3Blbl0gPSB1c2VTdGF0ZShmYWxzZSk7XG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiBzZXRJc09wZW4oZmFsc2UpKTtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoaXRlbTogVCkgPT4ge1xuICAgIGhhbmRsZVNlbGVjdChpdGVtKTtcbiAgICBzZXRJc09wZW4oZmFsc2UpO1xuICB9O1xuICBjb25zdCBpc0Rpc2FibGVkID0gIWl0ZW1zIHx8IGl0ZW1zLmxlbmd0aCA9PT0gMDtcbiAgY29uc3QgdG9nZ2xlSXNPcGVuID0gKCkgPT4gc2V0SXNPcGVuKCFpc09wZW4pO1xuXG4gIHJldHVybiAoXG4gICAgPE1lbnVDb250YWluZXJcbiAgICAgIGJ1dHRvbj17XG4gICAgICAgIHR5cGVvZiByZW5kZXJDbGlja2FibGUgPT09IFwiZnVuY3Rpb25cIiA/IChcbiAgICAgICAgICByZW5kZXJDbGlja2FibGUoe1xuICAgICAgICAgICAgZGlzcGxheSxcbiAgICAgICAgICAgIGlzRGlzYWJsZWQsXG4gICAgICAgICAgICBzZWxlY3RlZEl0ZW0sXG4gICAgICAgICAgICB0b2dnbGVJc09wZW4sXG4gICAgICAgICAgfSlcbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8Q2xpY2thYmxlXG4gICAgICAgICAgICBkaXNwbGF5PXtkaXNwbGF5fVxuICAgICAgICAgICAgaXNEaXNhYmxlZD17aXNEaXNhYmxlZH1cbiAgICAgICAgICAgIG9uQ2xpY2s9e3RvZ2dsZUlzT3Blbn1cbiAgICAgICAgICAvPlxuICAgICAgICApXG4gICAgICB9XG4gICAgICBwbGFjZW1lbnQ9e3BsYWNlbWVudH1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIDxNZW51IGlzT3Blbj17aXNPcGVufT5cbiAgICAgICAge2l0ZW1zICYmXG4gICAgICAgICAgaXRlbXMubWFwKChpdGVtKSA9PiAoXG4gICAgICAgICAgICA8TWVudUl0ZW1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9e2l0ZW0uaWQgPT09IHNlbGVjdGVkSXRlbT8uaWR9XG4gICAgICAgICAgICAgIGtleT17aXRlbS5pZH1cbiAgICAgICAgICAgICAgb25DbGljaz17KCkgPT4gaGFuZGxlQ2xpY2soaXRlbSl9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtpdGVtQm9keVJlbmRlcmVyXG4gICAgICAgICAgICAgICAgPyBpdGVtQm9keVJlbmRlcmVyKHtcbiAgICAgICAgICAgICAgICAgICAgaXRlbSxcbiAgICAgICAgICAgICAgICAgICAgaXNTZWxlY3RlZDogaXRlbS5pZCA9PT0gc2VsZWN0ZWRJdGVtPy5pZCxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiBpdGVtLm5hbWV9XG4gICAgICAgICAgICA8L01lbnVJdGVtPlxuICAgICAgICAgICkpfVxuICAgICAgPC9NZW51PlxuICAgIDwvTWVudUNvbnRhaW5lcj5cbiAgKTtcbn1cbiIsImV4cG9ydCB7XG4gIERyb3Bkb3duLFxuICBEcm9wZG93blByb3BzLFxuICBJdGVtIGFzIERyb3Bkb3duSXRlbSxcbiAgSXRlbUJvZHlSZW5kZXJlckZuIGFzIERyb3Bkb3duSXRlbUJvZHlSZW5kZXJlckZuLFxuICBSZW5kZXJDbGlja2FibGVGbiBhcyBEcm9wZG93blJlbmRlckNsaWNrYWJsZUZuLFxuICBSZW5kZXJEaXNwbGF5UHJvcHMgYXMgRHJvcGRvd25SZW5kZXJEaXNwbGF5UHJvcHMsXG59IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5leHBvcnQge1xuICBDbGlja2FibGUgYXMgRHJvcGRvd25DbGlja2FibGUsXG4gIENsaWNrYWJsZVByb3BzIGFzIERyb3Bkb3duQ2xpY2thYmxlUHJvcHNcbn0gZnJvbSBcIi4vQ2xpY2thYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgQ2hhbmdlRXZlbnQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9GaWxlSW5wdXQubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBGaWxlSW5wdXRTaXplID0gU2l6ZTtcblxudHlwZSBQcm9wcyA9IHtcbiAgb25DaGFuZ2U6IChlOiBDaGFuZ2VFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgYWNjZXB0Pzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIHNpemU/OiBGaWxlSW5wdXRTaXplO1xufTtcblxuZnVuY3Rpb24gRmlsZUlucHV0KHtcbiAgY2hpbGRyZW4sXG4gIGFjY2VwdCxcbiAgb25DaGFuZ2UsXG4gIGlucHV0UmVmLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGFiZWxcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgPlxuICAgICAgPGlucHV0XG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmlucHV0fVxuICAgICAgICB0eXBlPVwiZmlsZVwiXG4gICAgICAgIGlkPVwiZmlsZVwiXG4gICAgICAgIGFjY2VwdD17YWNjZXB0fVxuICAgICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICAgIHJlZj17aW5wdXRSZWZ9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgb25DaGFuZ2U9e29uQ2hhbmdlfVxuICAgICAgLz5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGaWxlSW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEZpbGVJbnB1dCB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xuZXhwb3J0IHsgRmlsZUlucHV0U2l6ZSB9IGZyb20gXCIuL0ZpbGVJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOlxuICAgIHwgXCJyaWdodFwiXG4gICAgfCBcInJpZ2h0RWRnZVwiXG4gICAgfCBcInJpZ2h0T25FZGdlXCJcbiAgICB8IFwibGVmdFwiXG4gICAgfCBcImxlZnRFZGdlXCJcbiAgICB8IFwibGVmdE9uRWRnZVwiXG4gICAgfCBcImxlZnRPbkVkZ2VcIlxuICAgIHwgXCJjZW50ZXJcIjtcbiAgdmVydGljYWw6XG4gICAgfCBcInRvcFwiXG4gICAgfCBcInRvcEVkZ2VcIlxuICAgIHwgXCJ0b3BPbkVkZ2VcIlxuICAgIHwgXCJib3R0b21cIlxuICAgIHwgXCJib3R0b21FZGdlXCJcbiAgICB8IFwiYm90dG9tT25FZGdlXCJcbiAgICB8IFwiY2VudGVyXCI7XG4gIHBhcmVudDogXCJ2aWV3cG9ydFwiIHwgXCJjb250YWluZXJcIjtcbn07XG5cbnR5cGUgRmxvYXRpbmdQYW5lbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGxheW91dD86IFwiY29sdW1uXCIgfCBcInJvd1wiO1xuICBwbGFjZW1lbnQ/OiBQbGFjZW1lbnQ7XG59O1xuXG5mdW5jdGlvbiBGbG9hdGluZ1BhbmVsKHtcbiAgY2xhc3NOYW1lLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbHVtblwiLFxuICBwbGFjZW1lbnQgPSB7IGhvcml6b250YWw6IFwiY2VudGVyXCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiLCBwYXJlbnQ6IFwidmlld3BvcnRcIiB9LFxufTogRmxvYXRpbmdQYW5lbFByb3BzKSB7XG4gIGNvbnN0IGhvcml6b250YWxQbGFjZW1lbnQgPVxuICAgIHBsYWNlbWVudC5ob3Jpem9udGFsID09PSBcImNlbnRlclwiXG4gICAgICA/IFwiaG9yaXpvbnRhbENlbnRlclwiXG4gICAgICA6IHBsYWNlbWVudC5ob3Jpem9udGFsO1xuXG4gIGNvbnN0IHZlcnRpY2FsUGxhY2VtZW50ID1cbiAgICBwbGFjZW1lbnQudmVydGljYWwgPT09IFwiY2VudGVyXCIgPyBcInZlcnRpY2FsQ2VudGVyXCIgOiBwbGFjZW1lbnQudmVydGljYWw7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiZmxvYXRpbmctcGFuZWxcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tob3Jpem9udGFsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW3ZlcnRpY2FsUGxhY2VtZW50XSxcbiAgICAgICAgc3R5bGVzW2xheW91dF0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogcGxhY2VtZW50LnBhcmVudCAhPT0gXCJjb250YWluZXJcIixcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBGbG9hdGluZ1BhbmVsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBGbG9hdGluZ1BhbmVsIH0gZnJvbSBcIi4vRmxvYXRpbmdQYW5lbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JY29uLm1vZHVsZS5jc3NcIjtcblxudHlwZSBJY29uUHJvcHMgPSB7XG4gIGFsdD86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxJbWFnZUVsZW1lbnQ+O1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHNyYzogc3RyaW5nO1xuICBzaXplPzogXCJzbWFsbFwiIHwgXCJtZWRpdW1cIiB8IFwibGFyZ2VcIiB8IFwieGxhcmdlXCI7XG59O1xuXG5mdW5jdGlvbiBJY29uKHtcbiAgc3JjLFxuICBhbHQsXG4gIGNvbnRhaW5lclJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIGludmVydGVkID0gZmFsc2UsXG59OiBJY29uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8aW1nXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuaWNvbixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7IFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCB9LFxuICAgICAgXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImljb25cIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uIH0gZnJvbSBcIi4vSWNvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0LCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBCdXR0b25CYWRnZSB9IGZyb20gXCIuLi9CdXR0b25CYWRnZVwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEljb25CdXR0b25Qcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgc3JjOiBzdHJpbmc7XG4gIGFsdDogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgcm91bmRlZD86IGJvb2xlYW47XG4gIG9uQ2xpY2s/OiAoZXZlbnQ/OiBTeW50aGV0aWNFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIj47XG59O1xuXG5mdW5jdGlvbiBJY29uQnV0dG9uKHtcbiAgY2xhc3NOYW1lLFxuICBjb250YWluZXJSZWYsXG4gIGNoaWxkcmVuLFxuICBzcmMsXG4gIGFsdCxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgb25DbGljayA9ICgpID0+IHt9LFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlID0gXCJidXR0b25cIixcbn06IEljb25CdXR0b25Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMudG9wT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInRvcFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICAgIFtzdHlsZXMuYm90dG9tT2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImJvdHRvbVwiKSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvYnV0dG9uPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uIH0gZnJvbSBcIi4vSWNvbkJ1dHRvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEVsZW1lbnRUeXBlLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSWNvbkJ1dHRvbkxpbmsubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgQnV0dG9uQmFkZ2UgfSBmcm9tIFwiLi4vQnV0dG9uQmFkZ2VcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJ0b3BcIiB8IFwicmlnaHRcIiB8IFwiYm90dG9tXCIgfCBcImxlZnRcIjtcblxudHlwZSBJY29uQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxFbGVtZW50PjtcbiAgICAgIHNyYzogc3RyaW5nO1xuICAgICAgYWx0OiBzdHJpbmc7XG4gICAgICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGludmVydGVkPzogYm9vbGVhbjtcbiAgICAgIHJvdW5kZWQ/OiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICAgICAgbm9TaGFkb3c/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc2l6ZT86IFNpemU7XG4gICAgICBvZmZzZXRTaWRlcz86IEFycmF5PE9mZnNldFNpZGU+O1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IEltZ0hUTUxBdHRyaWJ1dGVzLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9JbWFnZS5tb2R1bGUuY3NzXCI7XG5cbmV4cG9ydCB0eXBlIEltYWdlUHJvcHMgPSBJbWdIVE1MQXR0cmlidXRlczxIVE1MSW1hZ2VFbGVtZW50PiAmIHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG4gIC4uLm90aGVySW1hZ2VQcm9wc1xufTogSW1hZ2VQcm9wcykge1xuICBjb25zdCBpbWFnZUVsZW1lbnQgPSAoXG4gICAgPGltZ1xuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmltYWdlLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbWFnZVwiXG4gICAgICBhbHQ9e2FsdH1cbiAgICAgIHNyYz17c3JjfVxuICAgICAgd2lkdGg9e3NyY1dpZHRofVxuICAgICAgaGVpZ2h0PXtzcmNIZWlnaHR9XG4gICAgICBkZWNvZGluZz17ZGVjb2Rpbmd9XG4gICAgICBsb2FkaW5nPXtsb2FkaW5nfVxuICAgICAgc3R5bGU9e3N0eWxlfVxuICAgICAgey4uLm90aGVySW1hZ2VQcm9wc31cbiAgICAvPlxuICApO1xuXG4gIHJldHVybiBjaGlsZHJlbiA/IChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHN0eWxlcy5oYXNPdmVybGF5XSl9XG4gICAgPlxuICAgICAge2ltYWdlRWxlbWVudH1cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgaW1hZ2VFbGVtZW50XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEltYWdlQ29tcG9uZW50O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJbWFnZSwgSW1hZ2VQcm9wcyB9IGZyb20gXCIuL0ltYWdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MYWJlbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTGFiZWxJbnB1dFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTExhYmVsRWxlbWVudD47XG4gIHZhbHVlOiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBMYWJlbCh7IGNsYXNzTmFtZSwgY2hpbGRyZW4sIHZhbHVlLCBjb250YWluZXJSZWYgfTogTGFiZWxJbnB1dFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxhYmVsXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfVxuICAgID5cbiAgICAgIHt2YWx1ZX1cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xhYmVsPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMYWJlbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTGFiZWwgfSBmcm9tIFwiLi9MYWJlbFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXcubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogeyB0ZXh0OiBzdHJpbmc7IGlkOiBzdHJpbmcgfTtcbiAgaGVhZGVyQWN0aW9ucz86IFJlYWN0Tm9kZTtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3KHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY29udGFpbmVyUmVmLFxuICBoZWFkZXIsXG4gIGhlYWRlckFjdGlvbnMsXG59OiBMaXN0Vmlld1Byb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0gY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY2xhc3NOYW1lXSl9PlxuICAgICAgeyhoZWFkZXIgfHwgaGVhZGVyQWN0aW9ucykgJiYgKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+XG4gICAgICAgICAge2hlYWRlciAmJiAoXG4gICAgICAgICAgICA8aDMgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyTGFiZWx9IGlkPXtoZWFkZXIuaWR9PlxuICAgICAgICAgICAgICB7aGVhZGVyLnRleHR9XG4gICAgICAgICAgICA8L2gzPlxuICAgICAgICAgICl9XG4gICAgICAgICAge2hlYWRlckFjdGlvbnN9XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICAgIDx1bCBhcmlhLWxhYmVsbGVkYnk9e2hlYWRlcj8uaWR9IGNsYXNzTmFtZT17c3R5bGVzLmxpc3R9PlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L3VsPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0VmlldztcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIExpc3RWaWV3SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBhY3RpdmU/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIExpc3RWaWV3SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBhY3RpdmUgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IExpc3RWaWV3SXRlbVByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGxpIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5saXN0Vmlld0l0ZW1dKX0+XG4gICAgICA8QnV0dG9uXG4gICAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBFbGVtZW50VHlwZSwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi4vQnV0dG9uTGlua1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9MaXN0Vmlld0l0ZW0ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIExpc3RWaWV3TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGFzPzogRWxlbWVudFR5cGU7XG4gICAgICBhY3RpdmU6IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudDogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZzogYm9vbGVhbjtcbiAgICAgIGFsaWduOiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gICAgICBzaXplOiBTaXplO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIExpc3RWaWV3TGlua0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYXM6IENvbXBvbmVudCxcbiAgYWN0aXZlID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICAuLi5wcm9wc1xufTogTGlzdFZpZXdMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvbkxpbmtcbiAgICAgICAgYXM9e0NvbXBvbmVudH1cbiAgICAgICAgaW52ZXJ0ZWQ9e2FjdGl2ZX1cbiAgICAgICAgdHJhbnNwYXJlbnQ9e3RyYW5zcGFyZW50fVxuICAgICAgICBub1BhZGRpbmc9e25vUGFkZGluZ31cbiAgICAgICAgYWxpZ249e2FsaWdufVxuICAgICAgICBzaXplPXtzaXplfVxuICAgICAgICBzdHJldGNoSG9yaXpvbnRhbGx5XG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIHsuLi5wcm9wc31cbiAgICAgID5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9CdXR0b25MaW5rPlxuICAgIDwvbGk+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IExpc3RWaWV3TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3IH0gZnJvbSBcIi4vTGlzdFZpZXdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTGlzdFZpZXdJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdJdGVtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3TGlua0l0ZW0gfSBmcm9tIFwiLi9MaXN0Vmlld0xpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgUmVhY3ROb2RlLFxuICBSZWZPYmplY3QsXG4gIHVzZUNvbnRleHQsXG4gIHVzZUxheW91dEVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgUGxhY2VtZW50Q29udGV4dCB9IGZyb20gXCIuL01lbnVDb250YWluZXJcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlzT3Blbj86IGJvb2xlYW47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgZm9vdGVyPzogUmVhY3ROb2RlO1xuICBzbWFydExheW91dD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBNZW51KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgY2xhc3NOYW1lLFxuICBpc09wZW4gPSB0cnVlLFxuICBoZWFkZXIsXG4gIGZvb3RlcixcbiAgc21hcnRMYXlvdXQgPSB0cnVlLFxufTogTWVudVByb3BzKSB7XG4gIGNvbnN0IG1lbnVQbGFjZW1lbnQgPSB1c2VDb250ZXh0KFBsYWNlbWVudENvbnRleHQpO1xuICBjb25zdCBpbm5lclJlZiA9IHVzZVJlZjxIVE1MRGl2RWxlbWVudCB8IG51bGw+KG51bGwpO1xuICBjb25zdCByZWYgPSBjb250YWluZXJSZWYgfHwgaW5uZXJSZWY7XG5cbiAgaWYgKCFtZW51UGxhY2VtZW50KVxuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiTWVudSBjb21wb25lbnQgbXVzdCBiZSB3cmFwcGVkIGJ5IGEgTWVudUNvbnRhaW5lciBjb21wb25lbnQuXCJcbiAgICApO1xuXG4gIHVzZUxheW91dEVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNtYXJ0TGF5b3V0ICYmIHJlZi5jdXJyZW50KSB7XG4gICAgICBjb25zdCB7IHRvcCwgYm90dG9tIH0gPSByZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgIGNvbnN0IGRpc3RhbmNlVG9FZGdlID1cbiAgICAgICAgbWVudVBsYWNlbWVudC52ZXJ0aWNhbCA9PT0gXCJ0b3BcIiA/IHRvcCA6IHdpbmRvdy5pbm5lckhlaWdodCAtIGJvdHRvbTtcblxuICAgICAgaWYgKGRpc3RhbmNlVG9FZGdlIDwgMCkge1xuICAgICAgICBjb25zdCB1bEVsID0gcmVmLmN1cnJlbnQucXVlcnlTZWxlY3RvcihcInVsXCIpO1xuICAgICAgICBjb25zdCBjaGlsZEVsZW1lbnRzID0gdWxFbC5xdWVyeVNlbGVjdG9yQWxsKFwibGksYVwiKTtcbiAgICAgICAgY29uc3QgbmV3SGVpZ2h0ID0gdWxFbC5jbGllbnRIZWlnaHQgKyBkaXN0YW5jZVRvRWRnZTtcbiAgICAgICAgY29uc3Qgb2Zmc2V0ID0gY2hpbGRFbGVtZW50cy5sZW5ndGhcbiAgICAgICAgICA/IGdldENvbXB1dGVkU3R5bGUoY2hpbGRFbGVtZW50c1swXSkubWluSGVpZ2h0XG4gICAgICAgICAgOiAwO1xuICAgICAgICB1bEVsLnN0eWxlLm1heEhlaWdodCA9IGBjYWxjKCR7bmV3SGVpZ2h0fXB4IC0gJHtvZmZzZXR9KWA7XG4gICAgICB9XG4gICAgfVxuICB9LCBbaXNPcGVuLCBtZW51UGxhY2VtZW50LCBzbWFydExheW91dF0pO1xuXG4gIGlmICghaXNPcGVuKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17cmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubWVudSxcbiAgICAgICAgICB7IFtzdHlsZXMub3Blbl06IGlzT3BlbiB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXY+XG4gICAgICAgICAge2hlYWRlciAmJiBpc09wZW4gJiYgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlcn0+e2hlYWRlcn08L2gzPn1cbiAgICAgICAgICA8dWw+e2NoaWxkcmVufTwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7Zm9vdGVyICYmIGlzT3BlbiAmJiAoXG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5mb290ZXIsXG4gICAgICAgICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06ICFjaGlsZHJlbiB9LFxuICAgICAgICAgICAgXSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge2Zvb3Rlcn1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51O1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVhY3RFbGVtZW50LFxuICBmb3J3YXJkUmVmLFxuICBGb3J3YXJkZWRSZWYsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBNZW51UGxhY2VtZW50ID0ge1xuICBob3Jpem9udGFsOiBcInJpZ2h0XCIgfCBcImxlZnRcIjtcbiAgdmVydGljYWw6IFwidG9wXCIgfCBcImJvdHRvbVwiO1xufTtcblxudHlwZSBNZW51Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGJ1dHRvbj86IFJlYWN0RWxlbWVudDtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBwbGFjZW1lbnQ/OiBNZW51UGxhY2VtZW50O1xufTtcblxuZXhwb3J0IGNvbnN0IFBsYWNlbWVudENvbnRleHQgPSBSZWFjdC5jcmVhdGVDb250ZXh0PFxuICBNZW51Q29udGFpbmVyUHJvcHNbXCJwbGFjZW1lbnRcIl0gfCB1bmRlZmluZWRcbj4odW5kZWZpbmVkKTtcblxuZnVuY3Rpb24gTWVudUNvbnRhaW5lcihcbiAge1xuICAgIGNoaWxkcmVuLFxuICAgIGJ1dHRvbixcbiAgICBjbGFzc05hbWUsXG4gICAgcGxhY2VtZW50ID0geyBob3Jpem9udGFsOiBcImxlZnRcIiwgdmVydGljYWw6IFwiYm90dG9tXCIgfSxcbiAgfTogTWVudUNvbnRhaW5lclByb3BzLFxuICByZWY6IEZvcndhcmRlZFJlZjxIVE1MRGl2RWxlbWVudD5cbikge1xuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtyZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHtidXR0b259XG4gICAgICA8UGxhY2VtZW50Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17dXNlTWVtbygoKSA9PiBwbGFjZW1lbnQsIFtwbGFjZW1lbnRdKX0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tZW51Q29udGFpbmVyLFxuICAgICAgICAgICAgc3R5bGVzW3BsYWNlbWVudC5ob3Jpem9udGFsXSxcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQudmVydGljYWxdLFxuICAgICAgICAgIF0pfVxuICAgICAgICA+XG4gICAgICAgICAge2NoaWxkcmVufVxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvUGxhY2VtZW50Q29udGV4dC5Qcm92aWRlcj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZm9yd2FyZFJlZihNZW51Q29udGFpbmVyKTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFN5bnRoZXRpY0V2ZW50IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUl0ZW0ubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVJdGVtUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgaXNBY3RpdmU/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50PzogU3ludGhldGljRXZlbnQ8SFRNTExJRWxlbWVudD4pID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBNZW51SXRlbSh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBpc0FjdGl2ZSA9IGZhbHNlLFxufTogTWVudUl0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51SXRlbSxcbiAgICAgICAgeyBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlIH0sXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51SXRlbTtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTWVudUxpbmtJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51TGlua0l0ZW1Qcm9wcyA9XG4gIHwge1xuICAgICAgYXM6IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZTogc3RyaW5nO1xuICAgICAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBNZW51TGlua0l0ZW0oe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgLi4ucHJvcHNcbn06IE1lbnVMaW5rSXRlbVByb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIGRhdGEtdGVzdGlkPVwibWVudS1saW5rLWl0ZW1cIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5tZW51TGlua0l0ZW0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgeyBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyB9LFxuICAgICAgXSl9XG4gICAgICB7Li4ucHJvcHN9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNZW51TGlua0l0ZW07XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE1lbnUgfSBmcm9tIFwiLi9NZW51XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVDb250YWluZXIsIE1lbnVQbGFjZW1lbnQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVJdGVtIH0gZnJvbSBcIi4vTWVudUl0ZW1cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgTWVudUxpbmtJdGVtIH0gZnJvbSBcIi4vTWVudUxpbmtJdGVtXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyB1c2VIb3RrZXlzIH0gZnJvbSBcInJlYWN0LWhvdGtleXMtaG9va1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNb2RhbFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBpc09wZW46IGJvb2xlYW47XG4gIG1vZGFsQ2xhc3NOYW1lPzogc3RyaW5nO1xuICBmbGV4Q2VudGVyPzogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJ1dHRvbj86IFJlYWN0Tm9kZTtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBNb2RhbCh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGlzT3BlbixcbiAgYnV0dG9uLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBiYXNlWkluZGV4ID0gMTAwOSxcbiAgbW9kYWxDbGFzc05hbWUsXG4gIGZsZXhDZW50ZXIsXG59OiBNb2RhbFByb3BzKSB7XG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW29uQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIGlzT3BlbiAmJiAoXG4gICAgICA8ZGl2XG4gICAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBtb2RhbENsYXNzTmFtZSxcbiAgICAgICAgICB7IFtzdHlsZXMuZmxleENlbnRlcl06IGZsZXhDZW50ZXIgfSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAgbW9kYWxDbGFzc05hbWUsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtidXR0b24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL051bXBhZC5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBiYWNrc3BhY2VJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvYmFja3NwYWNlLnN2Z1wiO1xuXG50eXBlIERpZ2l0ID0gMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOTtcblxuY29uc3QgYXBwZW5kRGlnaXQgPSAobnVtYmVyOiBudW1iZXIsIGRpZ2l0OiBEaWdpdCkgPT4ge1xuICByZXR1cm4gbnVtYmVyICogMTAgKyBkaWdpdDtcbn07XG5cbmNvbnN0IHBvcERpZ2l0ID0gKG51bWJlcjogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKG51bWJlciAvIDEwKTtcbn07XG5cbmNvbnN0IGV2ZW50RGlnaXRLZXlzID0gW1wiMFwiLCBcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiXTtcblxuZXhwb3J0IGludGVyZmFjZSBOdW1wYWRQcm9wcyB7XG4gIG51bWJlcjogbnVtYmVyO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2hhbmdlOiAobmV3TnVtYmVyOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBOdW1wYWQgPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBOdW1wYWRQcm9wcz4oXG4gICh7IG51bWJlciwgb25DaGFuZ2UsIGRpc2FibGVkID0gZmFsc2UgfSwgcmVmKSA9PiB7XG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChlOiBSZWFjdC5LZXlib2FyZEV2ZW50PEhUTUxEaXZFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKGUua2V5ID09PSBcIkJhY2tzcGFjZVwiKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UocG9wRGlnaXQobnVtYmVyKSk7XG4gICAgICB9IGVsc2UgaWYgKGV2ZW50RGlnaXRLZXlzLmluY2x1ZGVzKGUua2V5KSkge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIGNvbnN0IGRpZ2l0ID0gcGFyc2VJbnQoZS5rZXksIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgb25DaGFuZ2UoYXBwZW5kRGlnaXQobnVtYmVyLCBkaWdpdCkpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdCBjcmVhdGVFbWl0TnVtYmVySGFuZGxlciA9XG4gICAgICAobmV3TnVtYmVyOiBudW1iZXIpID0+IChlOiBSZWFjdC5Qb2ludGVyRXZlbnQ8SFRNTEJ1dHRvbkVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgb25DaGFuZ2UobmV3TnVtYmVyKTtcbiAgICAgIH07XG5cbiAgICBjb25zdCBOdW1wYWRLZXlzID0gQXJyYXkoMTApXG4gICAgICAuZmlsbCgwKVxuICAgICAgLm1hcCgoXywgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgbnVtcGFkVmFsdWUgPSAoKGluZGV4ICsgMSkgJSAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPEJ1dHRvblxuICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgb25Qb2ludGVyRG93bj17Y3JlYXRlRW1pdE51bWJlckhhbmRsZXIoXG4gICAgICAgICAgICAgIGFwcGVuZERpZ2l0KG51bWJlciwgbnVtcGFkVmFsdWUpXG4gICAgICAgICAgICApfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtudW1wYWRWYWx1ZX1cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgKTtcbiAgICAgIH0pO1xuXG4gICAgcmV0dXJuIChcbiAgICAgIDxkaXZcbiAgICAgICAgY2xhc3NOYW1lPXtjc3MubnVtcGFkfVxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgdGFiSW5kZXg9ey0xfVxuICAgICAgICBvbktleURvd249e2hhbmRsZUtleURvd259XG4gICAgICAgIGRhdGEtdGVzdGlkPVwibnVtcGFkXCJcbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1iZXJzfT5cbiAgICAgICAgICB7TnVtcGFkS2V5c31cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBjbGFzc05hbWU9e2Nzcy5idXR0b259XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihwb3BEaWdpdChudW1iZXIpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBhbHQ9XCJCYWNrc3BhY2VcIiBzcmM9e2JhY2tzcGFjZUljb259IC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuKTtcbiIsImV4cG9ydCB7IE51bXBhZCB9IGZyb20gXCIuL051bXBhZFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vR3JvdXBPcHRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uLy4uL0ljb25CdXR0b25cIjtcbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPjtcbn07XG5cbmZ1bmN0aW9uIEdyb3VwT3B0aW9uKHsgY2xhc3NOYW1lLCBsYWJlbCwgb3B0aW9ucyB9OiBQcm9wcykge1xuICBjb25zdCB7IHNob3dFeHBhbmRlZEdyb3VwIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuICBjb25zdCBbZXhwYW5kZWQsIHRvZ2dsZUV4cGFuZF0gPSB1c2VUb2dnbGUoc2hvd0V4cGFuZGVkR3JvdXApO1xuXG4gIGNvbnN0IGhhbmRsZUdyb3VwQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlRXhwYW5kKCk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IG9uQ2xpY2s9e2hhbmRsZUdyb3VwQ2xpY2t9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57bGFiZWx9PC9kaXY+XG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbeyBbc3R5bGVzLmV4cGFuZGVkXTogZXhwYW5kZWQgfV0pfVxuICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICBhbHQ9e2V4cGFuZGVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgIC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIHtleHBhbmRlZCAmJlxuICAgICAgICBvcHRpb25zLm1hcCgob3B0aW9uKSA9PiAoXG4gICAgICAgICAgPE9wdGlvbiBrZXk9e2Ake29wdGlvbi52YWx1ZX0tJHtvcHRpb24ubGFiZWx9YH0gZGF0YT17b3B0aW9ufT5cbiAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgPC9PcHRpb24+XG4gICAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBHcm91cE9wdGlvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgR3JvdXBPcHRpb24gfSBmcm9tIFwiLi9Hcm91cE9wdGlvblwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0IH0gZnJvbSBcIi4uL1NlbGVjdENvbnRleHRcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBJY29uQ2hlY2tNYXJrIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc3Znci9jaGVjay1tYXJrLnN2Z1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGRhdGE6IE9wdGlvblR5cGU7XG59O1xuXG5mdW5jdGlvbiBPcHRpb24oeyBjaGlsZHJlbiwgY2xhc3NOYW1lLCBkYXRhIH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBtdWx0aXBsZSxcbiAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgc2hvd1NlbGVjdGVkV2l0aFRpY2ssXG4gIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGlzQ2hlY2tlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkuaW5jbHVkZXMoZGF0YS52YWx1ZSksXG4gICAgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihkYXRhKTtcbiAgfSwgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNlbGVjdGVkXTogaXNDaGVja2VkICYmICFtdWx0aXBsZSxcbiAgICAgICAgICBbc3R5bGVzLnNob3dTZWxlY3RlZFdpdGhUaWNrQ29udGFpbmVyXTpcbiAgICAgICAgICAgIHNob3dTZWxlY3RlZFdpdGhUaWNrICYmIGlzQ2hlY2tlZCxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICB7bXVsdGlwbGUgJiYgIXNob3dTZWxlY3RlZFdpdGhUaWNrICYmIChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3hDb250YWluZXJ9PlxuICAgICAgICAgIDxDaGVja2JveFxuICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICBjaGVja2VkPXtpc0NoZWNrZWR9XG4gICAgICAgICAgICBzaXplPVwic21hbGxcIlxuICAgICAgICAgIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgICA8c3BhblxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMubGFiZWwsXG4gICAgICAgICAgeyBbc3R5bGVzLnNlbGVjdGVkTGFiZWxdOiBzaG93U2VsZWN0ZWRXaXRoVGljayAmJiBpc0NoZWNrZWQgfSxcbiAgICAgICAgXSl9XG4gICAgICA+XG4gICAgICAgIHtkYXRhPy5ub2RlICYmIGRhdGEubm9kZX1cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC9zcGFuPlxuICAgICAge3Nob3dTZWxlY3RlZFdpdGhUaWNrICYmIGlzQ2hlY2tlZCAmJiAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMudGlja0NvbnRhaW5lcn0+XG4gICAgICAgICAgPEljb25DaGVja01hcmsgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbiB9IGZyb20gXCIuL09wdGlvblwiO1xuIiwiaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCIuLi9Hcm91cE9wdGlvblwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uTGlzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxuLy8gc2VlIGRvY3MgdG8gdW5kZXJzdGFuZCBuZWVkIG9mIHRoZSBmdW5jdGlvbiBiZWxvdyBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlc1xuZXhwb3J0IGNvbnN0IGlzT3B0aW9uID0gKFxuICBvcHRpb246IE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGVcbik6IG9wdGlvbiBpcyBPcHRpb25UeXBlID0+IHtcbiAgcmV0dXJuIChvcHRpb24gYXMgT3B0aW9uVHlwZSkudmFsdWUgIT09IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbkxpc3QoeyBvcHRpb25zLCBvbkZpbHRlciwgb25DaGFuZ2UgfTogUHJvcHMpIHtcbiAgY29uc3QgW3NlbGVjdEFsbENoZWNrZWQsIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIG11bHRpcGxlLFxuICAgIHNlYXJjaEtleXdvcmQsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhc0dyb3VwT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFpc09wdGlvbihvcHRpb24pKTtcblxuICBjb25zdCBmaWx0ZXJPcHRpb25zID0gKG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+KSA9PiB7XG4gICAgY29uc3Qga2V5d29yZCA9IHNlYXJjaEtleXdvcmQudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4ga2V5d29yZC5sZW5ndGhcbiAgICAgID8gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBvbkZpbHRlclxuICAgICAgICAgICAgPyBvbkZpbHRlcihvcHRpb24sIGtleXdvcmQpXG4gICAgICAgICAgICA6IG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgIClcbiAgICAgIDogb3B0aW9ucztcbiAgfTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB1c2VNZW1vPEFycmF5PEdyb3VwT3B0aW9uVHlwZSB8IE9wdGlvblR5cGU+PigoKSA9PiB7XG4gICAgaWYgKGhhc0dyb3VwT3B0aW9uKSB7XG4gICAgICByZXR1cm4gb3B0aW9ucy5yZWR1Y2UoXG4gICAgICAgIChmaWx0ZXJlZDogQXJyYXk8R3JvdXBPcHRpb25UeXBlPiwgZ3JvdXBPcHRpb246IEdyb3VwT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGZpbHRlcmVkR3JvdXBPcHRpb25zID0gZmlsdGVyT3B0aW9ucyhncm91cE9wdGlvbi5vcHRpb25zKTtcblxuICAgICAgICAgIGlmIChmaWx0ZXJlZEdyb3VwT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgIC4uLmZpbHRlcmVkLFxuICAgICAgICAgICAgICB7IC4uLmdyb3VwT3B0aW9uLCBvcHRpb25zOiBmaWx0ZXJlZEdyb3VwT3B0aW9ucyB9LFxuICAgICAgICAgICAgXTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XG4gICAgICAgIH0sXG4gICAgICAgIFtdXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmlsdGVyT3B0aW9ucyhvcHRpb25zIGFzIEFycmF5PE9wdGlvblR5cGU+KTtcbiAgICB9XG4gIH0sIFtoYXNHcm91cE9wdGlvbiwgb3B0aW9ucywgc2VhcmNoS2V5d29yZF0pO1xuXG4gIGNvbnN0IGZpbHRlcmVkT3B0aW9uc0NvdW50ID0gdXNlTWVtbygoKSA9PiB7XG4gICAgcmV0dXJuIGZpbHRlcmVkT3B0aW9ucy5yZWR1Y2UoKGxlbmd0aDogbnVtYmVyLCBuZXh0T3B0aW9uKSA9PiB7XG4gICAgICBpZiAoaXNPcHRpb24obmV4dE9wdGlvbikpIHtcbiAgICAgICAgcmV0dXJuIGxlbmd0aCArIDE7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbGVuZ3RoICsgbmV4dE9wdGlvbi5vcHRpb25zLmxlbmd0aDtcbiAgICAgIH1cbiAgICB9LCAwKTtcbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBmaWx0ZXJlZE9wdGlvbnMsIGlzT3B0aW9uXSk7XG5cbiAgY29uc3Qgc2VsZWN0ZWRPcHRpb25zQ291bnQgPSB1c2VNZW1vKCgpID0+IHtcbiAgICByZXR1cm4gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoc2VsZWN0ZWRPcHRpb24pID0+IHtcbiAgICAgIHJldHVybiBmaWx0ZXJlZE9wdGlvbnMuZmluZCgoZmlsdGVyZWRPcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKVxuICAgICAgICAgID8gZmlsdGVyZWRPcHRpb24udmFsdWUgPT09IHNlbGVjdGVkT3B0aW9uLnZhbHVlXG4gICAgICAgICAgOiBmaWx0ZXJlZE9wdGlvbi5vcHRpb25zLmZpbmQoXG4gICAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gc2VsZWN0ZWRPcHRpb24udmFsdWVcbiAgICAgICAgICAgICk7XG4gICAgICB9KTtcbiAgICB9KS5sZW5ndGg7XG4gIH0sIFtzZWxlY3RlZE9wdGlvbnMsIGZpbHRlcmVkT3B0aW9uc10pO1xuXG4gIGNvbnN0IGhhbmRsZVNlbGVjdEFsbENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc2VsZWN0QWxsQ2hlY2tlZCkge1xuICAgICAgY29uc3Qgb3B0aW9uc1RvU2VsZWN0ID0gZmlsdGVyZWRPcHRpb25zXG4gICAgICAgIC5tYXAoKGZpbHRlcmVkT3B0aW9uKSA9PlxuICAgICAgICAgIGlzT3B0aW9uKGZpbHRlcmVkT3B0aW9uKSA/IGZpbHRlcmVkT3B0aW9uIDogZmlsdGVyZWRPcHRpb24ub3B0aW9uc1xuICAgICAgICApXG4gICAgICAgIC5mbGF0KCk7XG5cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhvcHRpb25zVG9TZWxlY3QpO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2Uob3B0aW9uc1RvU2VsZWN0Lm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoW10pO1xuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UoW10pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoKTtcbiAgfSwgW1xuICAgIGZpbHRlcmVkT3B0aW9ucyxcbiAgICBpc09wdGlvbixcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkLFxuICBdKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzZWxlY3RlZE9wdGlvbnNDb3VudCA9PT0gZmlsdGVyZWRPcHRpb25zQ291bnQpIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQodHJ1ZSk7XG4gICAgfSBlbHNlIGlmIChzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICB0b2dnbGVTZWxlY3RBbGxDaGVja2VkKGZhbHNlKTtcbiAgICB9XG4gIH0sIFtcbiAgICBzZWxlY3RlZE9wdGlvbnNDb3VudCxcbiAgICBmaWx0ZXJlZE9wdGlvbnNDb3VudCxcbiAgICBzZWxlY3RBbGxDaGVja2VkLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3NlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAhIWZpbHRlcmVkT3B0aW9ucy5sZW5ndGggJiYgKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0QWxsQ29udGFpbmVyfVxuICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlbGVjdEFsbENsaWNrfVxuICAgICAgICA+XG4gICAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3hDb250YWluZXJ9PlxuICAgICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLmNoZWNrYm94fVxuICAgICAgICAgICAgICBjaGVja2VkPXtzZWxlY3RBbGxDaGVja2VkfVxuICAgICAgICAgICAgICBpbmRldGVybWluYXRlPXtcbiAgICAgICAgICAgICAgICAhIXNlbGVjdGVkT3B0aW9uc0NvdW50ICYmXG4gICAgICAgICAgICAgICAgc2VsZWN0ZWRPcHRpb25zQ291bnQgIT09IGZpbHRlcmVkT3B0aW9uc0NvdW50XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgc2l6ZT1cInNtYWxsXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT5TZWxlY3QgQWxsPC9zcGFuPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICB7ISFmaWx0ZXJlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgICAgICBmaWx0ZXJlZE9wdGlvbnMubWFwKChvcHRpb24pID0+XG4gICAgICAgICAgaXNPcHRpb24ob3B0aW9uKSA/IChcbiAgICAgICAgICAgIDxPcHRpb24ga2V5PXtgJHtvcHRpb24udmFsdWV9LSR7b3B0aW9uLmxhYmVsfWB9IGRhdGE9e29wdGlvbn0+XG4gICAgICAgICAgICAgIHtvcHRpb24ubGFiZWx9XG4gICAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgICApIDogKFxuICAgICAgICAgICAgPEdyb3VwT3B0aW9uXG4gICAgICAgICAgICAgIGtleT17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBsYWJlbD17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgICBvcHRpb25zPXtvcHRpb24ub3B0aW9uc31cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApIDogKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm5vT3B0aW9uc30+XG4gICAgICAgICAgTm8gbWF0Y2hlcyBmb3JcbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hLZXl3b3JkfT57YCAke3NlYXJjaEtleXdvcmR9YH08L3NwYW4+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgT3B0aW9uTGlzdDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgT3B0aW9uTGlzdCwgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWFyY2gubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUZXh0SW5wdXQgfSBmcm9tIFwiLi4vLi4vVGV4dElucHV0XCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uLy4uL0ljb25cIjtcbmltcG9ydCBpY29uU2VhcmNoIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvc2VhcmNoLnN2Z1wiO1xuaW1wb3J0IGljb25Dcm9zc2VkIGZyb20gXCIuLi8uLi8uLi8uLi9hc3NldHMvY3Jvc3NlZC5zdmdcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBTZWFyY2goeyBjbGFzc05hbWUgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UgPSB1c2VDYWxsYmFjayhcbiAgICAodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgc2V0U2VhcmNoS2V5d29yZCh2YWx1ZSk7XG4gICAgfSxcbiAgICBbc2VhcmNoS2V5d29yZF1cbiAgKTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBzZXRTZWFyY2hLZXl3b3JkKFwiXCIpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaWNvblNlYXJjaENvbnRhaW5lcn0+XG4gICAgICAgIDxJY29uIHNyYz17aWNvblNlYXJjaH0gLz5cbiAgICAgIDwvZGl2PlxuICAgICAgPFRleHRJbnB1dFxuICAgICAgICB2YWx1ZT17c2VhcmNoS2V5d29yZH1cbiAgICAgICAgcGxhY2Vob2xkZXI9XCJUeXBlIHRvIHNlYXJjaC4uLlwiXG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlfVxuICAgICAgICBub0JvcmRlclxuICAgICAgLz5cbiAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnJlc2V0QnV0dG9ufVxuICAgICAgICBzcmM9e2ljb25Dcm9zc2VkfVxuICAgICAgICBhbHQ9XCJDbGVhclwiXG4gICAgICAgIG9uQ2xpY2s9e2hhbmRsZVNlYXJjaEtleXdvcmRSZXNldENsaWNrfVxuICAgICAgICBkaXNhYmxlZD17IXNlYXJjaEtleXdvcmR9XG4gICAgICAgIG5vQm9yZGVyXG4gICAgICAgIG5vU2hhZG93XG4gICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAvPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWFyY2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlYXJjaCB9IGZyb20gXCIuL1NlYXJjaFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VMYXlvdXRFZmZlY3QsIHVzZVJlZiB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2ssIHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH0gZnJvbSBcIi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uL0ljb25CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHsgT3B0aW9uTGlzdCB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IGljb25TcGlubmVyIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvc3Bpbm5lci1jaXJjbGUuc3ZnXCI7XG5cbnR5cGUgU2VsZWN0UHJvcHMgPSB7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBsYWJlbD86IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dTZWxlY3RlZEFzVGFncz86IGJvb2xlYW47XG4gIHNob3dTZWFyY2g/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIHNjcm9sbE1lbnVJbnRvVmlldz86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICB3aWR0aDogc3RyaW5nO1xuICBsb2FkaW5nPzogYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgc2hvd1NlbGVjdGVkV2l0aFRpY2s/OiBib29sZWFuO1xuICBlbmFibGVTaW5nbGVEZWxldGlvbj86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBTZWxlY3Qoe1xuICBjbGFzc05hbWUsXG4gIGRlZmF1bHRWYWx1ZSxcbiAgZGlzYWJsZWQsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIG9wdGlvbnMsXG4gIHBsYWNlaG9sZGVyLFxuICBsYWJlbCxcbiAgc2VsZWN0QWxsLFxuICBzaG93RXhwYW5kZWRHcm91cCxcbiAgc2Nyb2xsTWVudUludG9WaWV3ID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBzaG93U2VsZWN0ZWRBc1RhZ3MgPSBmYWxzZSxcbiAgc2hvd1NlYXJjaCA9IGZhbHNlLFxuICBzaG93U2VsZWN0ZWRXaXRoVGljayA9IGZhbHNlLFxuICBlbmFibGVTaW5nbGVEZWxldGlvbiA9IGZhbHNlLFxuICB3aWR0aCxcbiAgbG9hZGluZyxcbiAgb25DaGFuZ2UsXG4gIG9uRmlsdGVyLFxufTogU2VsZWN0UHJvcHMpIHtcbiAgY29uc3QgW29wZW5lZCwgdG9nZ2xlT3BlbmVkXSA9IHVzZVRvZ2dsZShmYWxzZSk7XG5cbiAgY29uc3QgcmVmID0gdXNlT3V0c2lkZUNsaWNrKCgpID0+IHRvZ2dsZU9wZW5lZChmYWxzZSkpO1xuICBjb25zdCBjb250ZW50UmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PigpO1xuXG4gIGNvbnN0IG9uUmVzaXplID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghY29udGVudFJlZi5jdXJyZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGNvbnRlbnRSZWYuY3VycmVudC5zY3JvbGxJbnRvVmlldyh7IGJlaGF2aW9yOiBcInNtb290aFwiLCBibG9jazogXCJuZWFyZXN0XCIgfSk7XG4gIH0sIFtdKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmICghY29udGVudFJlZi5jdXJyZW50IHx8ICFvcGVuZWQgfHwgIXNjcm9sbE1lbnVJbnRvVmlldykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGxldCBSTyA9IG5ldyBSZXNpemVPYnNlcnZlcihvblJlc2l6ZSk7XG4gICAgUk8ub2JzZXJ2ZShjb250ZW50UmVmLmN1cnJlbnQpO1xuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIFJPLmRpc2Nvbm5lY3QoKTtcbiAgICAgIFJPID0gbnVsbDtcbiAgICB9O1xuICB9LCBbb3BlbmVkLCBzY3JvbGxNZW51SW50b1ZpZXcsIG9uUmVzaXplXSk7XG5cbiAgY29uc3QgaGFuZGxlT3BlblNlbGVjdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVPcGVuZWQoKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHtcbiAgICAgIGlmICghbXVsdGlwbGUpIHRvZ2dsZU9wZW5lZChmYWxzZSk7XG5cbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHZhbHVlcyk7XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dFByb3ZpZGVyXG4gICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGx9XG4gICAgICBzaG93RXhwYW5kZWRHcm91cD17c2hvd0V4cGFuZGVkR3JvdXB9XG4gICAgICBzaG93U2VsZWN0ZWRXaXRoVGljaz17c2hvd1NlbGVjdGVkV2l0aFRpY2t9XG4gICAgICBlbmFibGVTaW5nbGVEZWxldGlvbj17ZW5hYmxlU2luZ2xlRGVsZXRpb259XG4gICAgPlxuICAgICAgPGRpdiByZWY9e3JlZn0+XG4gICAgICAgIHtsYWJlbCA/IDxMYWJlbCB2YWx1ZT17bGFiZWx9IC8+IDogbnVsbH1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPGRpdlxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmhlYWRlciwgeyBbc3R5bGVzLmFjdGl2ZV06IG9wZW5lZCB9XSl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPcGVuU2VsZWN0fVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxTZWxlY3RvclxuICAgICAgICAgICAgICBwbGFjZWhvbGRlcj17cGxhY2Vob2xkZXJ9XG4gICAgICAgICAgICAgIHNob3dTZWxlY3RlZEFzVGFncz17c2hvd1NlbGVjdGVkQXNUYWdzfVxuICAgICAgICAgICAgICBpc0Ryb3Bkb3duT3BlbmVkPXtvcGVuZWR9XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgICAgc3R5bGVzLmljb25CdXR0b24sXG4gICAgICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogb3BlbmVkIH0sXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgICAgIGFsdD17b3BlbmVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICAge29wZW5lZCAmJiAoXG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICAgIHN0eWxlcy5jb250ZW50LFxuICAgICAgICAgICAgICAgIHsgW3N0eWxlcy5pc0xvYWRpbmddOiBsb2FkaW5nIH0sXG4gICAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgICByZWY9e2NvbnRlbnRSZWZ9XG4gICAgICAgICAgICA+XG4gICAgICAgICAgICAgIHtsb2FkaW5nID8gKFxuICAgICAgICAgICAgICAgIDxJY29uIHNpemU9XCJsYXJnZVwiIHNyYz17aWNvblNwaW5uZXJ9IC8+XG4gICAgICAgICAgICAgICkgOiAoXG4gICAgICAgICAgICAgICAgPD5cbiAgICAgICAgICAgICAgICAgIHtvcHRpb25zLmxlbmd0aCA9PT0gMCA/IChcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5ub09wdGlvbnN9Pk5vIG9wdGlvbnMgYXZhaWxhYmxlPC9kaXY+XG4gICAgICAgICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICAgICAgICA8PlxuICAgICAgICAgICAgICAgICAgICAgIHtzaG93U2VhcmNoICYmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuc2VhcmNoQ29udGFpbmVyfT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgPFNlYXJjaCAvPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgICAgICAgICA8T3B0aW9uTGlzdFxuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucz17b3B0aW9uc31cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uRmlsdGVyPXtvbkZpbHRlcn1cbiAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgICAgICAgICAgICAgICAgLz5cbiAgICAgICAgICAgICAgICAgICAgPC8+XG4gICAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICAgIDwvPlxuICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L1NlbGVjdENvbnRleHRQcm92aWRlcj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0O1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIGNyZWF0ZUNvbnRleHQsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VNZW1vLFxuICB1c2VTdGF0ZSxcbiAgdXNlRWZmZWN0LFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBpc09wdGlvbiB9IGZyb20gXCIuL09wdGlvbkxpc3RcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0LlJlYWN0Tm9kZTtcbiAgZGVmYXVsdFZhbHVlOiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzaG93RXhwYW5kZWRHcm91cD86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG4gIHNob3dTZWxlY3RlZFdpdGhUaWNrPzogYm9vbGVhbjtcbiAgZW5hYmxlU2luZ2xlRGVsZXRpb24/OiBib29sZWFuO1xufTtcblxudHlwZSBTZWxlY3RDb250ZXh0U3RhdGUgPSB7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd0V4cGFuZGVkR3JvdXA/OiBib29sZWFuO1xuICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4gdm9pZDtcbiAgc2VhcmNoS2V5d29yZDogc3RyaW5nO1xuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHZvaWQ7XG4gIHNob3dTZWxlY3RlZFdpdGhUaWNrPzogYm9vbGVhbjtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZTogZmFsc2UsXG4gIHNlbGVjdEFsbDogZmFsc2UsXG4gIHNob3dFeHBhbmRlZEdyb3VwOiB0cnVlLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKHZhbHVlOiBPcHRpb25UeXBlKSA9PiB7fSxcbiAgc2VhcmNoS2V5d29yZDogXCJcIixcbiAgc2V0U2VhcmNoS2V5d29yZDogKHZhbHVlOiBzdHJpbmcpID0+IHt9LFxuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4ge30sXG4gIHNob3dTZWxlY3RlZFdpdGhUaWNrOiBmYWxzZSxcbn07XG5cbmNvbnN0IFNlbGVjdENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNlbGVjdENvbnRleHRTdGF0ZT4oaW5pdGlhbFN0YXRlKTtcblxuY29uc3QgU2VsZWN0Q29udGV4dFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGRlZmF1bHRWYWx1ZSxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgc2VsZWN0QWxsID0gZmFsc2UsXG4gIHNob3dFeHBhbmRlZEdyb3VwID0gdHJ1ZSxcbiAgb3B0aW9ucyxcbiAgb25DaGFuZ2UsXG4gIHNob3dTZWxlY3RlZFdpdGhUaWNrID0gZmFsc2UsXG4gIGVuYWJsZVNpbmdsZURlbGV0aW9uID0gZmFsc2UsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdID0gdXNlU3RhdGU8T3B0aW9uVHlwZVtdPihcbiAgICBpbml0aWFsU3RhdGUuc2VsZWN0ZWRPcHRpb25zXG4gICk7XG4gIGNvbnN0IFtzZWFyY2hLZXl3b3JkLCBzZXRTZWFyY2hLZXl3b3JkXSA9IHVzZVN0YXRlKFxuICAgIGluaXRpYWxTdGF0ZS5zZWFyY2hLZXl3b3JkXG4gICk7XG5cbiAgY29uc3QgdXBkYXRlU2VsZWN0ZWRPcHRpb24gPSB1c2VDYWxsYmFjayhcbiAgICAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB7XG4gICAgICBsZXQgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucztcbiAgICAgIGNvbnN0IGlzT3B0aW9uU2VsZWN0ZWQgPSBzZWxlY3RlZE9wdGlvbnMuc29tZShcbiAgICAgICAgKHsgdmFsdWUgfSkgPT4gdmFsdWUgPT09IG9wdGlvbi52YWx1ZVxuICAgICAgKTtcbiAgICAgIGlmIChtdWx0aXBsZSkge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gaXNPcHRpb25TZWxlY3RlZFxuICAgICAgICAgID8gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB2YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKVxuICAgICAgICAgIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPVxuICAgICAgICAgIGlzT3B0aW9uU2VsZWN0ZWQgJiYgZW5hYmxlU2luZ2xlRGVsZXRpb24gLy8gQWxsb3cgZGVsZXRpb24gb2Ygc2VsZWN0ZWQgb3B0aW9uIGluIHNpbmdsZSBzZWxlY3QgbW9kZVxuICAgICAgICAgICAgPyAoW10gYXMgT3B0aW9uVHlwZVtdKVxuICAgICAgICAgICAgOiBbb3B0aW9uXTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcblxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UodXBkYXRlZFNlbGVjdGVkT3B0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9ucywgb25DaGFuZ2VdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpXG4gICAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICAgIDogW2RlZmF1bHRWYWx1ZV07XG5cbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKChhbGwsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXNPcHRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIC4uLml0ZW0ub3B0aW9uc107XG4gICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IGFsbE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG4gICAgfVxuICB9LCBbZGVmYXVsdFZhbHVlLCBvcHRpb25zXSk7XG5cbiAgY29uc3QgY29udGV4dFZhbHVlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBtdWx0aXBsZSxcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNob3dFeHBhbmRlZEdyb3VwLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHNob3dTZWxlY3RlZFdpdGhUaWNrLFxuICAgICAgZW5hYmxlU2luZ2xlRGVsZXRpb24sXG4gICAgfSksXG4gICAgW1xuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NlbGVjdENvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgeyBTZWxlY3RDb250ZXh0LCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdG9yLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSBcIi4uLy4uL1RhZ1wiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M6IGJvb2xlYW47XG4gIGlzRHJvcGRvd25PcGVuZWQ6IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBTZWxlY3Rvcih7XG4gIHBsYWNlaG9sZGVyLFxuICBzaG93U2VsZWN0ZWRBc1RhZ3MsXG4gIGlzRHJvcGRvd25PcGVuZWQsXG59OiBQcm9wcykge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucywgbXVsdGlwbGUsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xpY2sgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0Nsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3QgcGxhY2Vob2xkZXJUb1Nob3cgPSB1c2VNZW1vKFxuICAgICgpID0+IChcbiAgICAgIDxzcGFuXG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5wbGFjZWhvbGRlcixcbiAgICAgICAgICB7IFtzdHlsZXMuYWN0aXZlXTogaXNEcm9wZG93bk9wZW5lZCB9LFxuICAgICAgICBdKX1cbiAgICAgID5cbiAgICAgICAge3BsYWNlaG9sZGVyfVxuICAgICAgPC9zcGFuPlxuICAgICksXG4gICAgW3BsYWNlaG9sZGVyLCBpc0Ryb3Bkb3duT3BlbmVkXVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RhZ3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgICAgcGxhY2Vob2xkZXJUb1Nob3dcbiAgICAgICkgOiAoXG4gICAgICAgIDw+XG4gICAgICAgICAge3NlbGVjdGVkT3B0aW9ucy5tYXAoKHsgbGFiZWwsIHZhbHVlIH0pID0+IChcbiAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgIGtleT17dmFsdWV9XG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRhZ1dyYXBwZXJ9XG4gICAgICAgICAgICAgIG9uQ2xpY2s9e2hhbmRsZVRhZ0NsaWNrfVxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICA8VGFnIGtleT17dmFsdWV9IHZhbHVlPXt2YWx1ZX0gY2xvc2FibGUgb25DbG9zZT17aGFuZGxlVGFnQ2xvc2V9PlxuICAgICAgICAgICAgICAgIHtsYWJlbH1cbiAgICAgICAgICAgICAgPC9UYWc+XG4gICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgKSl9XG4gICAgICAgIDwvPlxuICAgICAgKSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBwbGFjZWhvbGRlclRvU2hvd11cbiAgKTtcblxuICBjb25zdCBzaG93QXNUZXh0ID0gc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICA8c3BhblxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuc2VsZWN0ZWRPcHRpb25zfVxuICAgID57YCR7cGxhY2Vob2xkZXJ9ICgke3NlbGVjdGVkT3B0aW9ucy5sZW5ndGh9KWB9PC9zcGFuPlxuICApIDogKFxuICAgIHBsYWNlaG9sZGVyVG9TaG93XG4gICk7XG5cbiAgbGV0IGNvbnRlbnQ7XG4gIGlmIChtdWx0aXBsZSkge1xuICAgIGNvbnRlbnQgPSBzaG93U2VsZWN0ZWRBc1RhZ3MgPyBzaG93QXNUYWdzIDogc2hvd0FzVGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyAoXG4gICAgICBwbGFjZWhvbGRlclRvU2hvd1xuICAgICkgOiAoXG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RlZE9wdGlvbn0+XG4gICAgICAgIHtzZWxlY3RlZE9wdGlvbnNbMF0ubm9kZSAmJiBzZWxlY3RlZE9wdGlvbnNbMF0ubm9kZX1cbiAgICAgICAge3NlbGVjdGVkT3B0aW9uc1swXS5sYWJlbH1cbiAgICAgIDwvc3Bhbj5cbiAgICApO1xuICB9XG5cbiAgcmV0dXJuIGNvbnRlbnQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdG9yO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFNlbGVjdCB9IGZyb20gXCIuL1NlbGVjdFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VFZmZlY3QsIHVzZVJlZiwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIExpc3RPblNjcm9sbFByb3BzIH0gZnJvbSBcInJlYWN0LXdpbmRvd1wiO1xuaW1wb3J0IEluZmluaXRlTG9hZGVyIGZyb20gXCJyZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyXCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tIFwiLi9UYWJsZUhlYWRlclwiO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gXCIuL1RhYmxlUm93XCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBKU1guRWxlbWVudCB8IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhSW5kZXg6IHN0cmluZztcbiAgcmVuZGVyPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcpID0+IEpTWC5FbGVtZW50O1xuICB3aWR0aD86IHN0cmluZztcbiAgZGVmYXVsdFNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgc29ydGVkPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBvblNvcnQ/OiAoc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIGRhdGFTb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFibGVIZWlnaHQ6IG51bWJlcjtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmU/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlPzogbnVtYmVyO1xuICBzZXRQYWdlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICByb3dIZWlnaHQ/OiBudW1iZXI7XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbiAgZGlzYWJsZUxhenlMb2FkZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXRlbXNDb3VudD86IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoYXNWaXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBzY3JvbGxUb1RvcD86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZSh7XG4gIGNvbHVtbnMsXG4gIGRhdGFTb3VyY2UsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICBvbkxvYWRNb3JlLFxuICBwYWdlLFxuICBzZXRQYWdlLFxuICBwYWdlU2l6ZSA9IFRhYmxlQ29uZmlnLlBBR0VfU0laRSxcbiAgdGFibGVIZWlnaHQsXG4gIHBsYWNlaG9sZGVyLFxuICByb3dIZWlnaHQgPSBUYWJsZUNvbmZpZy5ST1dfSEVJR0hULFxuICBoZWFkZXJIZWlnaHQgPSBUYWJsZUNvbmZpZy5IRUFERVJfSEVJR0hULFxuICBkaXNhYmxlTGF6eUxvYWRlcixcbiAgYWN0aXZlUm93cyxcbiAgaXRlbXNDb3VudCxcbiAgaXNIZWFkZXJTdGlja3kgPSBmYWxzZSxcbiAgaGFzVmlydHVhbFNjcm9sbCA9IHRydWUsXG4gIHNjcm9sbFRvVG9wID0gZmFsc2UsXG4gIGNsYXNzTmFtZSxcbn06IFByb3BzKSB7XG4gIGNvbnN0IFtzY3JvbGxUb3AsIHNldFNjcm9sbFRvcF0gPSB1c2VTdGF0ZSgwKTtcblxuICBjb25zdCByZW5kZXJSb3cgPSB1c2VDYWxsYmFjayhcbiAgICAoeyBkYXRhLCBpbmRleCwgc3R5bGUgfTogeyBkYXRhOiBhbnk7IGluZGV4OiBudW1iZXI7IHN0eWxlOiBhbnkgfSkgPT4ge1xuICAgICAgY29uc3Qgcm93ID0gZGF0YVtpbmRleF07XG4gICAgICByZXR1cm4gKFxuICAgICAgICA8ZGl2IHN0eWxlPXt7IC4uLnN0eWxlLCB0b3A6IHN0eWxlLnRvcCB9fT5cbiAgICAgICAgICA8VGFibGVSb3dcbiAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBvblJvd0NsaWNrPXtvblJvd0NsaWNrfVxuICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgcm93SGVpZ2h0PXtyb3dIZWlnaHR9XG4gICAgICAgICAgICBpc0FjdGl2ZT17ISFhY3RpdmVSb3dzPy5bcm93LmlkXX1cbiAgICAgICAgICAvPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICk7XG4gICAgfSxcbiAgICBbY29sdW1ucywgYWN0aXZlUm93cywgaGFzQXJyb3csIHJvd0hlaWdodCwgb25Sb3dDbGlja11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVMaXN0U2Nyb2xsID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgc2Nyb2xsT2Zmc2V0IH06IExpc3RPblNjcm9sbFByb3BzKSA9PiB7XG4gICAgICBzZXRTY3JvbGxUb3Aoc2Nyb2xsT2Zmc2V0KTtcbiAgICB9LFxuICAgIFtdXG4gICk7XG5cbiAgY29uc3QgbG9hZE1vcmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKGRpc2FibGVMYXp5TG9hZGVyKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoID09PSBpdGVtc0NvdW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGRhdGFTb3VyY2UubGVuZ3RoIDwgcGFnZVNpemUgKiBwYWdlKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHNldFBhZ2UgJiYgb25Mb2FkTW9yZSkge1xuICAgICAgc2V0UGFnZShwYWdlICsgMSk7XG4gICAgICBvbkxvYWRNb3JlKHBhZ2UgKyAxKTtcbiAgICB9XG4gIH0sIFtcbiAgICBkaXNhYmxlTGF6eUxvYWRlcixcbiAgICBkYXRhU291cmNlLmxlbmd0aCxcbiAgICBpdGVtc0NvdW50LFxuICAgIHBhZ2VTaXplLFxuICAgIHBhZ2UsXG4gICAgc2V0UGFnZSxcbiAgICBvbkxvYWRNb3JlLFxuICBdKTtcblxuICBjb25zdCBpc0l0ZW1Mb2FkZWQgPSB1c2VDYWxsYmFjayhcbiAgICAoaW5kZXg6IG51bWJlcikgPT4ge1xuICAgICAgaWYgKGRpc2FibGVMYXp5TG9hZGVyKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluZGV4IDwgZGF0YVNvdXJjZS5sZW5ndGggLSBUYWJsZUNvbmZpZy5JVEVNU19MT0FERUQ7XG4gICAgfSxcbiAgICBbZGF0YVNvdXJjZS5sZW5ndGgsIGRpc2FibGVMYXp5TG9hZGVyXVxuICApO1xuXG4gIGNvbnN0IGxpc3RSZWYgPSB1c2VSZWYobnVsbCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoc2Nyb2xsVG9Ub3AgJiYgbGlzdFJlZi5jdXJyZW50KSB7XG4gICAgICBsaXN0UmVmLmN1cnJlbnQuc2Nyb2xsVG9JdGVtKDApO1xuICAgIH1cbiAgfSwgW2RhdGFTb3VyY2VdKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzVmlydHVhbFNjcm9sbCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWJsZX0+XG4gICAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshIXBsYWNlaG9sZGVyICYmICFkYXRhU291cmNlLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnBsYWNlaG9sZGVyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICAgICAgICBpc0l0ZW1Mb2FkZWQ9e2lzSXRlbUxvYWRlZH1cbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgIGxvYWRNb3JlSXRlbXM9e2xvYWRNb3JlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7IG9uSXRlbXNSZW5kZXJlZCB9KSA9PiAoXG4gICAgICAgICAgICAgICAgICA8Rml4ZWRTaXplTGlzdFxuICAgICAgICAgICAgICAgICAgICByZWY9e2xpc3RSZWZ9XG4gICAgICAgICAgICAgICAgICAgIGhlaWdodD17dGFibGVIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1TaXplPXtyb3dIZWlnaHR9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Db3VudD17ZGF0YVNvdXJjZS5sZW5ndGh9XG4gICAgICAgICAgICAgICAgICAgIGl0ZW1EYXRhPXtkYXRhU291cmNlfVxuICAgICAgICAgICAgICAgICAgICBvblNjcm9sbD17aGFuZGxlTGlzdFNjcm9sbH1cbiAgICAgICAgICAgICAgICAgICAgb25JdGVtc1JlbmRlcmVkPXtvbkl0ZW1zUmVuZGVyZWR9XG4gICAgICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcn1cbiAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAge3JlbmRlclJvd31cbiAgICAgICAgICAgICAgICAgIDwvRml4ZWRTaXplTGlzdD5cbiAgICAgICAgICAgICAgICApfVxuICAgICAgICAgICAgICA8L0luZmluaXRlTG9hZGVyPlxuICAgICAgICAgICAgKX1cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICAgICAgc3R5bGVzLnNjcm9sbGJhckNvbnRhaW5lcixcbiAgICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzdHlsZT17eyBoZWlnaHQ6IHRhYmxlSGVpZ2h0IH19XG4gICAgICAgID5cbiAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgIGNvbHVtbnM9e2NvbHVtbnN9XG4gICAgICAgICAgICBzY3JvbGxUb3A9e3Njcm9sbFRvcH1cbiAgICAgICAgICAgIGlzSGVhZGVyU3RpY2t5PXtpc0hlYWRlclN0aWNreX1cbiAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgIC8+XG4gICAgICAgICAge2RhdGFTb3VyY2UubWFwKChyb3csIGluZGV4KSA9PiAoXG4gICAgICAgICAgICA8VGFibGVSb3dcbiAgICAgICAgICAgICAga2V5PXtpbmRleH1cbiAgICAgICAgICAgICAgZGF0YT17cm93fVxuICAgICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgICBvblJvd0NsaWNrPXtvblJvd0NsaWNrfVxuICAgICAgICAgICAgICBoYXNBcnJvdz17aGFzQXJyb3d9XG4gICAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICBpc0FjdGl2ZT17ISFhY3RpdmVSb3dzPy5bcm93Py5pZF19XG4gICAgICAgICAgICAvPlxuICAgICAgICAgICkpfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgPC8+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgVGFibGVIZWFkZXJDZWxsIGZyb20gXCIuL1RhYmxlSGVhZGVyQ2VsbFwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIHNjcm9sbFRvcDogbnVtYmVyO1xuICBpc0hlYWRlclN0aWNreT86IGJvb2xlYW47XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlSGVhZGVyKHtcbiAgY29sdW1ucyxcbiAgc2Nyb2xsVG9wLFxuICBpc0hlYWRlclN0aWNreSxcbiAgaGVhZGVySGVpZ2h0LFxufTogUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgeyBbc3R5bGVzLmJvcmRlckJvdHRvbV06ICEhc2Nyb2xsVG9wIH0sXG4gICAgICAgIHsgW3N0eWxlcy5pc0hlYWRlclN0aWNreV06IGlzSGVhZGVyU3RpY2t5IH0sXG4gICAgICBdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogaGVhZGVySGVpZ2h0IH19XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZUhlYWRlckNlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1oZWFkLWNlbGwtJHtjb2x1bW5JbmRleH1gfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlSGVhZGVyO1xuIiwiaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VTdGF0ZSB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBpY29uQ2FyZXREb3duIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcbmltcG9ydCBpY29uQ2FyZXRVcCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LXVwLnN2Z1wiO1xuaW1wb3J0IHsgU29ydE9yZGVyIH0gZnJvbSBcIi4uLy4uL3R5cGVzL3RhYmxlXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW46IENvbHVtblR5cGU7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlckNlbGwoeyBjb2x1bW4gfTogUHJvcHMpIHtcbiAgY29uc3Qge1xuICAgIG9uU29ydCxcbiAgICBzb3J0YWJsZSxcbiAgICBzb3J0ZWQsXG4gICAgZGVmYXVsdFNvcnRPcmRlcixcbiAgICB0aXRsZSxcbiAgICB3aWR0aCxcbiAgICBjbGFzc05hbWUsXG4gIH0gPSBjb2x1bW47XG5cbiAgY29uc3QgW3NvcnRPcmRlciwgc2V0U29ydE9yZGVyXSA9IHVzZVN0YXRlKFxuICAgICgpID0+IGRlZmF1bHRTb3J0T3JkZXIgfHwgU29ydE9yZGVyLkRFU0NcbiAgKTtcblxuICBjb25zdCBoYW5kbGVTb3J0Q29sdW1uID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICghc29ydGVkKSB7XG4gICAgICByZXR1cm4gb25Tb3J0KHNvcnRPcmRlcik7XG4gICAgfVxuICAgIGNvbnN0IG5ld1NvcnRPcmRlciA9XG4gICAgICBzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5ERVNDID8gU29ydE9yZGVyLkFTQyA6IFNvcnRPcmRlci5ERVNDO1xuICAgIHNldFNvcnRPcmRlcihuZXdTb3J0T3JkZXIpO1xuICAgIG9uU29ydChuZXdTb3J0T3JkZXIpO1xuICB9LCBbb25Tb3J0LCBzb3J0T3JkZXIsIHNvcnRlZF0pO1xuXG4gIGNvbnN0IGNlbGxQcm9wcyA9XG4gICAgb25Tb3J0ICYmIHNvcnRhYmxlXG4gICAgICA/IHtcbiAgICAgICAgICBvbkNsaWNrOiBoYW5kbGVTb3J0Q29sdW1uLFxuICAgICAgICB9XG4gICAgICA6IHt9O1xuXG4gIGNvbnN0IGRpc3BsYXlBcnJvdyA9ICgpOiBzdHJpbmcgPT4ge1xuICAgIGlmIChzb3J0T3JkZXIgPT09IFNvcnRPcmRlci5ERVNDKSB7XG4gICAgICByZXR1cm4gaWNvbkNhcmV0RG93bjtcbiAgICB9XG4gICAgcmV0dXJuIGljb25DYXJldFVwO1xuICB9O1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgey4uLmNlbGxQcm9wc31cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGFibGVIZWFkZXJDZWxsLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnNvcnRJY29uVmlzaWJsZV06IHNvcnRhYmxlICYmIHNvcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnNvcnRhYmxlXTogc29ydGFibGUsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgPlxuICAgICAge3RpdGxlfVxuICAgICAge3NvcnRhYmxlID8gKFxuICAgICAgICA8SWNvbiBhbHQ9e1wiU29ydCBidXR0b25cIn0gc2l6ZT1cInNtYWxsXCIgc3JjPXtkaXNwbGF5QXJyb3coKX0gLz5cbiAgICAgICkgOiBudWxsfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlckNlbGw7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlUm93Q2VsbCBmcm9tIFwiLi9UYWJsZVJvd0NlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlUm93Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgZGF0YTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBvblJvd0NsaWNrPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4pID0+IHZvaWQ7XG4gIGhhc0Fycm93PzogYm9vbGVhbjtcbiAgcm93SGVpZ2h0OiBudW1iZXI7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93KHtcbiAgZGF0YSxcbiAgY29sdW1ucyxcbiAgb25Sb3dDbGljayxcbiAgaGFzQXJyb3csXG4gIHJvd0hlaWdodCxcbiAgaXNBY3RpdmUsXG59OiBQcm9wcykge1xuICBjb25zdCBoYW5kbGVSb3dDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAob25Sb3dDbGljayAmJiB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIikge1xuICAgICAgb25Sb3dDbGljayhkYXRhKTtcbiAgICB9XG4gIH0sIFtkYXRhLCBvblJvd0NsaWNrXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaGFzQXJyb3ddOiBoYXNBcnJvdyxcbiAgICAgICAgICBbc3R5bGVzLmFjdGl2ZV06IGlzQWN0aXZlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVSb3dDbGlja31cbiAgICA+XG4gICAgICB7Y29sdW1ucy5tYXAoKGNvbHVtbiwgY29sdW1uSW5kZXgpID0+IChcbiAgICAgICAgPFRhYmxlUm93Q2VsbFxuICAgICAgICAgIGtleT17YHRhYmxlLXJvdy1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBpdGVtPXtkYXRhfVxuICAgICAgICAgIGNvbHVtbj17Y29sdW1ufVxuICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAvPlxuICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93O1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvd0NlbGwubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBpdGVtOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgc3RyaW5nO1xuICBjb2x1bW46IENvbHVtblR5cGU7XG4gIHJvd0hlaWdodDogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gVGFibGVSb3dDZWxsKHsgaXRlbSwgY29sdW1uLCByb3dIZWlnaHQgfTogUHJvcHMpOiBKU1guRWxlbWVudCB7XG4gIGNvbnN0IGRhdGEgPSB0eXBlb2YgaXRlbSA9PT0gXCJzdHJpbmdcIiA/IGl0ZW0gOiBpdGVtW2NvbHVtbi5kYXRhSW5kZXhdO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgY29sdW1uLmNsYXNzTmFtZV0pfVxuICAgICAgc3R5bGU9e3sgaGVpZ2h0OiByb3dIZWlnaHQsIHdpZHRoOiBjb2x1bW4/LndpZHRoIH19XG4gICAgPlxuICAgICAge2NvbHVtbi5yZW5kZXIgPyBjb2x1bW4ucmVuZGVyKGRhdGEpIDogZGF0YX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVSb3dDZWxsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUYWJsZSB9IGZyb20gXCIuL1RhYmxlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IGljb25Dcm9zc2VkIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY3Jvc3NlZC5zdmdcIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWcubW9kdWxlLmNzc1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNsb3NhYmxlPzogYm9vbGVhbjtcbiAgdmFsdWU/OiBzdHJpbmc7XG4gIGlkPzogc3RyaW5nO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uRGVsZXRlPzogKGlkOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQ2xvc2U/OiAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTEVsZW1lbnQ+LCB2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVGFnKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgY2xvc2FibGUsXG4gIHZhbHVlLFxuICBvbkNsb3NlLFxuICBkaXNhYmxlZCxcbiAgb25EZWxldGUsXG4gIGlkLFxufTogUHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSB1c2VDYWxsYmFjayhcbiAgICAoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQ8SFRNTFNwYW5FbGVtZW50PikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkRlbGV0ZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uRGVsZXRlKGlkKTtcbiAgICAgIH1cbiAgICAgIGlmICh0eXBlb2Ygb25DbG9zZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNsb3NlLCBvbkRlbGV0ZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIHsgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkIH1dKX1cbiAgICA+XG4gICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9zcGFuPlxuICAgICAge2Nsb3NhYmxlICYmIChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuY2xvc2VCdXR0b259IG9uQ2xpY2s9e2hhbmRsZUNsaWNrfT5cbiAgICAgICAgICA8SWNvbiBzcmM9e2ljb25Dcm9zc2VkfSBhbHQ9XCJDbG9zZVwiIHNpemU9XCJzbWFsbFwiIC8+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhZztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFnIH0gZnJvbSBcIi4vVGFnXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IHY0IGFzIHV1aWR2NCB9IGZyb20gXCJ1dWlkXCI7XG5pbXBvcnQgeyBIaW50IH0gZnJvbSBcInJlYWN0LWF1dG9jb21wbGV0ZS1oaW50XCI7XG5cbmltcG9ydCB7IHVzZU91dHNpZGVDbGljayB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSBcIi4uL1RhZ1wiO1xuaW1wb3J0IHsgU2l6ZSwgVGV4dElucHV0TW9kZSwgVGV4dElucHV0VHlwZSwgVGFnVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhZ3NJbnB1dC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVGFnc0lucHV0UHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBzdHJpbmdbXSkgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nW107XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHBhdHRlcm4/OiBzdHJpbmc7XG4gIHR5cGU/OiBUZXh0SW5wdXRUeXBlO1xuICBzaXplPzogU2l6ZTtcbiAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICB3aXRoU2Nyb2xsPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGlucHV0TW9kZT86IFRleHRJbnB1dE1vZGU7XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgdGFnT3B0aW9ucz86IHN0cmluZ1tdO1xufTtcblxuZnVuY3Rpb24gVGFnc0lucHV0KHtcbiAgY2xhc3NOYW1lLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwic21hbGxcIixcbiAgdHlwZSA9IFwidGV4dFwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgd2l0aFNjcm9sbCA9IGZhbHNlLFxuICBpbnB1dE1vZGUsXG4gIGRpc2FibGVkLFxuICB0YWdPcHRpb25zID0gW10sXG59OiBUYWdzSW5wdXRQcm9wcykge1xuICBjb25zdCBbdGV4dCwgc2V0VGV4dF0gPSB1c2VTdGF0ZTxzdHJpbmc+KFwiXCIpO1xuICBjb25zdCBbdGFncywgc2V0VGFnc10gPSB1c2VTdGF0ZTxUYWdUeXBlW10+KCk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIGNvbnN0IHRhZ3NBcnIgPSB2YWx1ZS5tYXAoKHRhZykgPT4gKHsgaWQ6IHV1aWR2NCgpLCBsYWJlbDogdGFnIH0pKTtcbiAgICAgIHNldFRhZ3ModGFnc0Fycik7XG4gICAgfVxuICB9LCBbdmFsdWUsIHNldFRhZ3NdKTtcblxuICBjb25zdCBoYW5kbGVUZXh0Q2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSAoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWU7XG5cbiAgICAgIHNldFRleHQodmFsdWUpO1xuICAgIH0sXG4gICAgW3NldFRleHRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlVGFnRGVsZXRlID0gdXNlQ2FsbGJhY2soXG4gICAgKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgIGNvbnN0IHVwZGF0ZWRUYWdzID0gdGFncy5maWx0ZXIoKHRhZykgPT4gdGFnLmlkICE9PSBpZCk7XG4gICAgICBzZXRUYWdzKHVwZGF0ZWRUYWdzKTtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBjb25zdCB0YWdzQXJyID0gdXBkYXRlZFRhZ3MubWFwKCh0YWcpID0+IHRhZy5sYWJlbCk7XG4gICAgICAgIG9uQ2hhbmdlKHRhZ3NBcnIpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW3RhZ3MsIHNldFRhZ3MsIG9uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0FkZCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRleHQudHJpbSgpO1xuICAgIGxldCB1cGRhdGVkVGFncyA9IFsuLi50YWdzXTtcblxuICAgIGlmICh0cmltbWVkVGV4dC5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCB0YWcgPSB7IGlkOiB1dWlkdjQoKSwgbGFiZWw6IHRyaW1tZWRUZXh0IH07XG4gICAgICB1cGRhdGVkVGFncyA9IFsuLi50YWdzLCB0YWddO1xuICAgIH1cblxuICAgIHNldFRhZ3ModXBkYXRlZFRhZ3MpO1xuICAgIHNldFRleHQoXCJcIik7XG5cbiAgICBpZiAob25DaGFuZ2UpIHtcbiAgICAgIGNvbnN0IHRhZ3NBcnIgPSB1cGRhdGVkVGFncy5tYXAoKHRhZykgPT4gdGFnLmxhYmVsKTtcbiAgICAgIG9uQ2hhbmdlKHRhZ3NBcnIpO1xuICAgIH1cbiAgfSwgW3RhZ3MsIHRleHQsIHNldFRhZ3MsIHNldFRleHRdKTtcblxuICBjb25zdCBoYW5kbGVLZXlEb3duID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5jb2RlID09PSBcIkVudGVyXCIgfHwgZS5jb2RlID09PSBcIk51bXBhZEVudGVyXCIpIHtcbiAgICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBoYW5kbGVUYWdBZGQoKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtoYW5kbGVUYWdBZGRdXG4gICk7XG5cbiAgY29uc3QgcmVmID0gdXNlT3V0c2lkZUNsaWNrKCgpID0+IHtcbiAgICBjb25zdCB0cmltbWVkVGV4dCA9IHRleHQudHJpbSgpO1xuXG4gICAgaWYgKHRyaW1tZWRUZXh0Lmxlbmd0aCA+IDApIHtcbiAgICAgIGhhbmRsZVRhZ0FkZCgpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxIaW50IG9wdGlvbnM9e3RhZ09wdGlvbnN9IGFsbG93RW50ZXJGaWxsPXt0cnVlfSBhbGxvd1RhYkZpbGw9e3RydWV9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlciB9LFxuICAgICAgICBdKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZVRleHRDaGFuZ2V9XG4gICAgICAgIG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn1cbiAgICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPXt0eXBlfVxuICAgICAgICB2YWx1ZT17dGV4dH1cbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAvPlxuICAgIDwvSGludD5cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICB7IFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCwgW3N0eWxlcy5zY3JvbGxhYmxlXTogd2l0aFNjcm9sbCB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHJlZj17cmVmfVxuICAgID5cbiAgICAgIHt0YWdzPy5tYXAoKHsgaWQsIGxhYmVsIH0pID0+IChcbiAgICAgICAgPFRhZyBrZXk9e2lkfSB2YWx1ZT17bGFiZWx9IGlkPXtpZH0gb25EZWxldGU9e2hhbmRsZVRhZ0RlbGV0ZX0gY2xvc2FibGU+XG4gICAgICAgICAge2xhYmVsfVxuICAgICAgICA8L1RhZz5cbiAgICAgICkpfVxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWdJbnB1dH0+e2lucHV0RWxlbWVudH08L2Rpdj5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cbmV4cG9ydCBkZWZhdWx0IFRhZ3NJbnB1dDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFnc0lucHV0IH0gZnJvbSBcIi4vVGFnc0lucHV0XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGV4dElucHV0Lm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUsIFRleHRJbnB1dE1vZGUsIFRleHRJbnB1dFR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBUZXh0SW5wdXRQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBzdHJpbmcpID0+IHZvaWQ7XG4gIG9uQmx1cj86ICgpID0+IHZvaWQ7XG4gIG9uS2V5RG93bj86IChldmVudDogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIHZhbHVlPzogc3RyaW5nO1xuICBuYW1lPzogc3RyaW5nO1xuICBwYXR0ZXJuPzogc3RyaW5nO1xuICB0eXBlPzogVGV4dElucHV0VHlwZTtcbiAgc2l6ZT86IFNpemU7XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgaW5wdXRSZWY/OiBSZWFjdC5SZWZPYmplY3Q8SFRNTElucHV0RWxlbWVudD47XG4gIGlucHV0TW9kZT86IFRleHRJbnB1dE1vZGU7XG59O1xuXG5mdW5jdGlvbiBUZXh0SW5wdXQoe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIG9uQmx1cixcbiAgb25LZXlEb3duLFxuICBwbGFjZWhvbGRlcixcbiAgdmFsdWUsXG4gIG5hbWUsXG4gIHBhdHRlcm4sXG4gIGlucHV0UmVmLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSA9IFwidGV4dFwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgaW5wdXRNb2RlLFxufTogVGV4dElucHV0UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKG9uQ2hhbmdlKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS52YWx1ZSk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgY29uc3QgaW5wdXRFbGVtZW50ID0gKFxuICAgIDxpbnB1dFxuICAgICAgZGF0YS10ZXN0aWQ9XCJpbnB1dFwiXG4gICAgICByZWY9e2lucHV0UmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy50ZXh0SW5wdXQsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgeyBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIgfSxcbiAgICAgIF0pfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIG9uQmx1cj17b25CbHVyfVxuICAgICAgb25LZXlEb3duPXtvbktleURvd259XG4gICAgICBwYXR0ZXJuPXtwYXR0ZXJufVxuICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgbmFtZT17bmFtZX1cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICB2YWx1ZT17dmFsdWV9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIGlucHV0TW9kZT17aW5wdXRNb2RlfVxuICAgIC8+XG4gICk7XG4gIGlmIChsYWJlbCkge1xuICAgIHJldHVybiA8TGFiZWwgdmFsdWU9e2xhYmVsfT57aW5wdXRFbGVtZW50fTwvTGFiZWw+O1xuICB9IGVsc2Uge1xuICAgIHJldHVybiA8PntpbnB1dEVsZW1lbnR9PC8+O1xuICB9XG59XG5leHBvcnQgZGVmYXVsdCBUZXh0SW5wdXQ7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRleHRJbnB1dCB9IGZyb20gXCIuL1RleHRJbnB1dFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3QubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0UHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gVG9hc3QoeyBjaGlsZHJlbiwgY29udGFpbmVyUmVmLCBvbkNsaWNrID0gKCkgPT4ge30gfTogVG9hc3RQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtzdHlsZXMudG9hc3R9XG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJ0b2FzdFwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdDtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Ub2FzdENvbnRhaW5lci5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9hc3RDb250YWluZXJQcm9wcyA9IHtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuZnVuY3Rpb24gVG9hc3RDb250YWluZXIoeyBjaGlsZHJlbiwgYmFzZVpJbmRleCB9OiBUb2FzdENvbnRhaW5lclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnRvYXN0Q29udGFpbmVyXSl9XG4gICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3QtY29udGFpbmVyXCJcbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvYXN0Q29udGFpbmVyO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdCB9IGZyb20gXCIuL1RvYXN0XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIFRvYXN0Q29udGFpbmVyIH0gZnJvbSBcIi4vVG9hc3RDb250YWluZXJcIjtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIHVzZUNhbGxiYWNrLFxuICB1c2VFZmZlY3QsXG4gIHVzZVN0YXRlLFxuICB1c2VSZWYsXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgY3JlYXRlUG9ydGFsIH0gZnJvbSBcInJlYWN0LWRvbVwiO1xuaW1wb3J0IHNjcm9sbFBhcmVudCBmcm9tIFwic2Nyb2xscGFyZW50XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9vbHRpcC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgVG9vbHRpcFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICB0ZXh0OiBzdHJpbmc7XG4gIHBsYWNlbWVudDogXCJsZWZ0XCIgfCBcInJpZ2h0XCIgfCBcInRvcFwiIHwgXCJib3R0b21cIjtcbiAgcG9zaXRpb24/OiBcImFic29sdXRlXCIgfCBcImZpeGVkXCI7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgdG91Y2hTY3JlZW5IaWRpbmdEZWxheT86IG51bWJlcjtcbiAgc2hvd1Rvb2x0aXA6IGJvb2xlYW47XG59O1xuXG5jb25zdCBtYXBQbGFjZW1lbnRUb1Bvc2l0aW9uU3R5bGVzID0gKFxuICBwbGFjZW1lbnQ6IFwibGVmdFwiIHwgXCJyaWdodFwiIHwgXCJ0b3BcIiB8IFwiYm90dG9tXCIsXG4gIHBvc2l0aW9uOiBcImFic29sdXRlXCIgfCBcImZpeGVkXCIsXG4gIHJlY3Q6IERPTVJlY3RcbikgPT4ge1xuICBjb25zdCB7IHRvcCwgbGVmdCwgaGVpZ2h0LCB3aWR0aCB9ID0gcmVjdDtcbiAgbGV0IHBvc2l0aW9uU3R5bGVzID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcbiAgc3dpdGNoIChwbGFjZW1lbnQpIHtcbiAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wICsgaGVpZ2h0IC8gMixcbiAgICAgICAgbGVmdDogbGVmdCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwicmlnaHRcIjpcbiAgICAgIHBvc2l0aW9uU3R5bGVzID0ge1xuICAgICAgICB0b3A6IHRvcCArIGhlaWdodCAvIDIsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCxcbiAgICAgIH07XG4gICAgICBicmVhaztcbiAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICBwb3NpdGlvblN0eWxlcyA9IHtcbiAgICAgICAgdG9wOiB0b3AgKyBoZWlnaHQsXG4gICAgICAgIGxlZnQ6IGxlZnQgKyB3aWR0aCAvIDIsXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG4gICAgY2FzZSBcInRvcFwiOlxuICAgICAgcG9zaXRpb25TdHlsZXMgPSB7XG4gICAgICAgIHRvcDogdG9wLFxuICAgICAgICBsZWZ0OiBsZWZ0ICsgd2lkdGggLyAyLFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHBvc2l0aW9uID09PSBcImFic29sdXRlXCJcbiAgICA/IHtcbiAgICAgICAgdG9wOiBwb3NpdGlvblN0eWxlcy50b3AgKyB3aW5kb3cuc2Nyb2xsWSxcbiAgICAgICAgbGVmdDogcG9zaXRpb25TdHlsZXMubGVmdCArIHdpbmRvdy5zY3JvbGxYLFxuICAgICAgfVxuICAgIDogcG9zaXRpb25TdHlsZXM7XG59O1xuXG5mdW5jdGlvbiBUb29sdGlwKHtcbiAgY2hpbGRyZW4sXG4gIHRleHQsXG4gIHBsYWNlbWVudCxcbiAgcG9zaXRpb24gPSBcImFic29sdXRlXCIsXG4gIHNob3dUb29sdGlwLFxuICBjbGFzc05hbWUsXG4gIHRvdWNoU2NyZWVuSGlkaW5nRGVsYXkgPSA1MDAwLFxufTogVG9vbHRpcFByb3BzKSB7XG4gIGNvbnN0IFtwb3NpdGlvblN0eWxlcywgc2V0UG9zaXRpb25TdHlsZXNdID0gdXNlU3RhdGUoe1xuICAgIGxlZnQ6IDAsXG4gICAgdG9wOiAwLFxuICB9KTtcbiAgY29uc3QgW3Rvb2x0aXBJc1Zpc2libGUsIHNldFRvb2x0aXBJc1Zpc2libGVdID0gdXNlU3RhdGUoZmFsc2UpO1xuXG4gIGNvbnN0IHRpbWVyUmVmID0gdXNlUmVmPE5vZGVKUy5UaW1lb3V0PihudWxsKTtcbiAgY29uc3QgY29udGFpbmVyUmVmID0gdXNlUmVmPEhUTUxTcGFuRWxlbWVudD4obnVsbCk7XG5cbiAgY29uc3QgdXBkYXRlUG9zaXRpb25TdHlsZXMgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFjb250YWluZXJSZWYuY3VycmVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnN0IHJlY3QgPSBjb250YWluZXJSZWYuY3VycmVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICBjb25zdCBuZXdQb3NpdGlvblN0eWxlcyA9IG1hcFBsYWNlbWVudFRvUG9zaXRpb25TdHlsZXMoXG4gICAgICBwbGFjZW1lbnQsXG4gICAgICBwb3NpdGlvbixcbiAgICAgIHJlY3RcbiAgICApO1xuICAgIHNldFBvc2l0aW9uU3R5bGVzKG5ld1Bvc2l0aW9uU3R5bGVzKTtcbiAgICBzZXRUb29sdGlwSXNWaXNpYmxlKHRydWUpO1xuICB9LCBbcGxhY2VtZW50LCBwb3NpdGlvbl0pO1xuXG4gIGNvbnN0IG9uTW91c2VFbnRlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVQb3NpdGlvblN0eWxlcygpO1xuICB9LCBbdXBkYXRlUG9zaXRpb25TdHlsZXNdKTtcblxuICBjb25zdCBvbk1vdXNlTGVhdmUgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0VG9vbHRpcElzVmlzaWJsZShmYWxzZSk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBvblRvdWNoU3RhcnRIYW5kbGVyID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmICh0aW1lclJlZi5jdXJyZW50KSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZXJSZWYuY3VycmVudCk7XG4gICAgICB0aW1lclJlZi5jdXJyZW50ID0gbnVsbDtcbiAgICB9XG5cbiAgICB1cGRhdGVQb3NpdGlvblN0eWxlcygpO1xuICB9LCBbdXBkYXRlUG9zaXRpb25TdHlsZXNdKTtcblxuICBjb25zdCBvblRvdWNoRW5kSGFuZGxlciA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0aW1lclJlZi5jdXJyZW50ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBzZXRUb29sdGlwSXNWaXNpYmxlKGZhbHNlKTtcbiAgICAgIHRpbWVyUmVmLmN1cnJlbnQgPSBudWxsO1xuICAgIH0sIHRvdWNoU2NyZWVuSGlkaW5nRGVsYXkpO1xuICB9LCBbdG91Y2hTY3JlZW5IaWRpbmdEZWxheV0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgcmV0dXJuICgpID0+IHRpbWVyUmVmLmN1cnJlbnQgJiYgY2xlYXJUaW1lb3V0KHRpbWVyUmVmLmN1cnJlbnQpO1xuICB9LCBbXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWNvbnRhaW5lclJlZi5jdXJyZW50IHx8IHBvc2l0aW9uICE9PSBcImFic29sdXRlXCIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBzY3JvbGxhYmxlUGFyZW50ID0gc2Nyb2xsUGFyZW50KGNvbnRhaW5lclJlZi5jdXJyZW50KTtcbiAgICBpZiAoIXNjcm9sbGFibGVQYXJlbnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBoaWRlVG9vbHRpcCA9ICgpID0+IHNldFRvb2x0aXBJc1Zpc2libGUoZmFsc2UpO1xuICAgIHNjcm9sbGFibGVQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcihcInNjcm9sbFwiLCBoaWRlVG9vbHRpcCk7XG4gICAgc2Nyb2xsYWJsZVBhcmVudC5hZGRFdmVudExpc3RlbmVyKFwicmVzaXplXCIsIGhpZGVUb29sdGlwKTtcbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgc2Nyb2xsYWJsZVBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwic2Nyb2xsXCIsIGhpZGVUb29sdGlwKTtcbiAgICAgIHNjcm9sbGFibGVQYXJlbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInJlc2l6ZVwiLCBoaWRlVG9vbHRpcCk7XG4gICAgfTtcbiAgfSwgW3Bvc2l0aW9uXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8c3BhblxuICAgICAgb25Ub3VjaFN0YXJ0PXtvblRvdWNoU3RhcnRIYW5kbGVyfVxuICAgICAgb25Nb3VzZUVudGVyPXtvbk1vdXNlRW50ZXJ9XG4gICAgICBvbk1vdXNlTGVhdmU9e29uTW91c2VMZWF2ZX1cbiAgICAgIG9uVG91Y2hFbmQ9e29uVG91Y2hFbmRIYW5kbGVyfVxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgICAge2NyZWF0ZVBvcnRhbChcbiAgICAgICAgPD5cbiAgICAgICAgICB7c2hvd1Rvb2x0aXAgJiYgdG9vbHRpcElzVmlzaWJsZSA/IChcbiAgICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgICAgc3R5bGU9e3Bvc2l0aW9uU3R5bGVzfVxuICAgICAgICAgICAgICBkYXRhLXRleHQ9e3RleHR9XG4gICAgICAgICAgICAgIGRhdGEtdGVzdGlkPVwidG9vbHRpcFwiXG4gICAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICAgIHN0eWxlcy50b29sdGlwLFxuICAgICAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnRdLFxuICAgICAgICAgICAgICAgIHN0eWxlc1twb3NpdGlvbl0sXG4gICAgICAgICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIC8+XG4gICAgICAgICAgKSA6IG51bGx9XG4gICAgICAgIDwvPixcbiAgICAgICAgZG9jdW1lbnQuYm9keVxuICAgICAgKX1cbiAgICA8L3NwYW4+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXA7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRvb2x0aXAgfSBmcm9tIFwiLi9Ub29sdGlwXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QsIFZpZGVvSFRNTEF0dHJpYnV0ZXMgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSBWaWRlb0hUTUxBdHRyaWJ1dGVzPEhUTUxWaWRlb0VsZW1lbnQ+ICYge1xuICBzcmM6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBsYXlvdXQ/OiBMYXlvdXQ7XG4gIGF1dG9QbGF5PzogYm9vbGVhbjtcbiAgbG9vcD86IGJvb2xlYW47XG4gIG11dGVkPzogYm9vbGVhbjtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIHBvc3Rlcj86IHN0cmluZztcbn07XG5cbmZ1bmN0aW9uIFZpZGVvKHtcbiAgc3JjLFxuICB0eXBlLFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBwb3N0ZXIsXG4gIG11dGVkID0gdHJ1ZSxcbiAgbG9vcCA9IHRydWUsXG4gIGF1dG9QbGF5ID0gdHJ1ZSxcbiAgbGF5b3V0ID0gXCJjb250YWluXCIsXG4gIC4uLm90aGVyVmlkZW9Qcm9wc1xufTogVmlkZW9Qcm9wcykge1xuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIDx2aWRlb1xuICAgICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgICAgY3Jvc3NPcmlnaW49XCJhbm9ueW1vdXNcIlxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgICAgbG9vcD17bG9vcH1cbiAgICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgICAgcGxheXNJbmxpbmVcbiAgICAgICAgey4uLm90aGVyVmlkZW9Qcm9wc31cbiAgICAgID5cbiAgICAgICAgPHNvdXJjZSBkYXRhLXRlc3RpZD1cInNvdXJjZVwiIHNyYz17c3JjfSB0eXBlPXt0eXBlfSAvPlxuICAgICAgPC92aWRlbz5cbiAgICAgIHtjaGlsZHJlbiAmJiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm92ZXJsYXl9PntjaGlsZHJlbn08L2Rpdj59XG4gICAgPC9kaXY+XG4gICkgOiAoXG4gICAgPHZpZGVvXG4gICAgICBkYXRhLXRlc3RpZD1cInZpZGVvXCJcbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy52aWRlbywgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIG11dGVkPXttdXRlZH1cbiAgICAgIGxvb3A9e2xvb3B9XG4gICAgICBhdXRvUGxheT17YXV0b1BsYXl9XG4gICAgICBwb3N0ZXI9e3Bvc3Rlcn1cbiAgICAgIHBsYXlzSW5saW5lXG4gICAgICB7Li4ub3RoZXJWaWRlb1Byb3BzfVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xuIiwiZXhwb3J0IGVudW0gVGFibGVDb25maWcge1xuICBST1dfSEVJR0hUID0gNDgsXG4gIEhFQURFUl9IRUlHSFQ9MzIsXG4gIFBBR0VfU0laRSA9IDEwMCxcbiAgSVRFTVNfTE9BREVEID0gNSxcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuLi9jb25zdGFudHMvVGFibGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTnVtcGFkXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL092ZXJsYXlcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvU2VsZWN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhYmxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhZ1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9UYWdzSW5wdXRcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGV4dElucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RvYXN0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1Rvb2x0aXBcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVmlkZW9cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJhd2VyXCI7XG4iLCJleHBvcnQgZW51bSBTb3J0T3JkZXIge1xuICAgIEFTQyA9IFwiYXNjXCIsXG4gICAgREVTQyA9IFwiZGVzY1wiLFxuICB9XG4iLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzY5JyBoZWlnaHQ9JzI3JyB2aWV3Qm94PScwIDAgNjkgMjcnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQuMTMzMyAyNkwxMy43ODg2IDI2LjM2MjJDMTMuODgxNiAyNi40NTA3IDE0LjAwNSAyNi41IDE0LjEzMzMgMjYuNVYyNlpNMSAxMy41TDAuNjU1Mjg3IDEzLjEzNzhDMC41NTYxMjcgMTMuMjMyMiAwLjUgMTMuMzYzMSAwLjUgMTMuNUMwLjUgMTMuNjM2OSAwLjU1NjEyNyAxMy43Njc4IDAuNjU1Mjg3IDEzLjg2MjJMMSAxMy41Wk0xNC4xMzMzIDFWMC41QzE0LjAwNSAwLjUgMTMuODgxNiAwLjU0OTM0NSAxMy43ODg2IDAuNjM3ODIyTDE0LjEzMzMgMVpNNjcuNSAyVjI1SDY4LjVWMkg2Ny41Wk02My40NjY3IDI1LjVIMTQuMTMzM1YyNi41SDYzLjQ2NjdWMjUuNVpNMTQuNDc4IDI1LjYzNzhMMS4zNDQ3MSAxMy4xMzc4TDAuNjU1Mjg3IDEzLjg2MjJMMTMuNzg4NiAyNi4zNjIyTDE0LjQ3OCAyNS42Mzc4Wk0xLjM0NDcxIDEzLjg2MjJMMTQuNDc4IDEuMzYyMThMMTMuNzg4NiAwLjYzNzgyMkwwLjY1NTI4NyAxMy4xMzc4TDEuMzQ0NzEgMTMuODYyMlpNMTQuMTMzMyAxLjVINjMuNDY2N1YwLjVIMTQuMTMzM1YxLjVaTTY3IDI1LjVINjMuNDY2N1YyNi41SDY3VjI1LjVaTTY3IDAuNUg2My40NjY3VjEuNUg2N1YwLjVaTTY3LjUgMjVDNjcuNSAyNS4yNzYxIDY3LjI3NjEgMjUuNSA2NyAyNS41VjI2LjVDNjcuODI4NCAyNi41IDY4LjUgMjUuODI4NCA2OC41IDI1SDY3LjVaTTY4LjUgMkM2OC41IDEuMTcxNTcgNjcuODI4NCAwLjUgNjcgMC41VjEuNUM2Ny4yNzYxIDEuNSA2Ny41IDEuNzIzODYgNjcuNSAySDY4LjVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2NwYXRoIGQ9J00zMi42NDY0IDYuMzUzNTVMNDYuNjQ2NCAyMC4zNTM2TDQ3LjM1MzYgMTkuNjQ2NEwzMy4zNTM2IDUuNjQ2NDVMMzIuNjQ2NCA2LjM1MzU1Wk00Ni42NDY0IDUuNjQ2NDVMMzIuNjQ2NCAxOS42NDY0TDMzLjM1MzYgMjAuMzUzNkw0Ny4zNTM2IDYuMzUzNTVMNDYuNjQ2NCA1LjY0NjQ1WicgZmlsbD0nJTIzMjYyNjI2Jy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTE0IDVMNy41IDEyTDEgNScgc3Ryb2tlPSdibGFjaycgc3Ryb2tlLWxpbmVjYXA9J3NxdWFyZScvJTNlICUzYy9zdmclM2VcIiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nMTUnIGhlaWdodD0nMTUnIHZpZXdCb3g9JzAgMCAxNSAxNScgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xIDEwTDcuNSAzTDE0IDEwJyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScyMCcgaGVpZ2h0PScyMCcgdmlld0JveD0nMCAwIDIwIDIwJyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTAuMzk4NDM4IDAuMzk5OTAyTDE5LjU5ODQgMTkuNTk5OU0wLjM5ODQzOCAxOS41OTk5TDE5LjU5ODQgMC4zOTk5MDInIHN0cm9rZT0nYmxhY2snLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS41IDEuNUwxMy41IDEzLjVNMS41IDEzLjVMMTMuNSAxLjUnIHN0cm9rZT0nYmxhY2snLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTUuNDY4NSAxNS40NjY1TDExLjIwMTggMTEuMTk5OU02LjkzNTE2IDEzLjMzMzJDMy40MDA1MyAxMy4zMzMyIDAuNTM1MTU2IDEwLjQ2NzggMC41MzUxNTYgNi45MzMyQzAuNTM1MTU2IDMuMzk4NTggMy40MDA1MyAwLjUzMzIwMyA2LjkzNTE2IDAuNTMzMjAzQzEwLjQ2OTggMC41MzMyMDMgMTMuMzM1MiAzLjM5ODU4IDEzLjMzNTIgNi45MzMyQzEzLjMzNTIgMTAuNDY3OCAxMC40Njk4IDEzLjMzMzIgNi45MzUxNiAxMy4zMzMyWicgc3Ryb2tlPSclMjM4OTg4OTEnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQuOTMzMSA0LjI2NzU4TDcuOTk5NzQgMTEuNzM0MkwxLjA2NjQxIDQuMjY3NTgnIHN0cm9rZT0nJTIzODk4ODkxJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjJTNmeG1sIHZlcnNpb249JzEuMCcgZW5jb2Rpbmc9J1VURi04JyBzdGFuZGFsb25lPSdubyclM2YlM2UgJTNjIURPQ1RZUEUgc3ZnIFBVQkxJQyAnLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4nICdodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQnJTNlICUzY3N2ZyB3aWR0aD0nMTAwJTI1JyBoZWlnaHQ9JzEwMCUyNScgdmlld0JveD0nMCAwIDQ2IDQ2JyB2ZXJzaW9uPScxLjEnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycgeG1sbnM6eGxpbms9J2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsnIHhtbDpzcGFjZT0ncHJlc2VydmUnIHhtbG5zOnNlcmlmPSdodHRwOi8vd3d3LnNlcmlmLmNvbS8nIHN0eWxlPSdmaWxsLXJ1bGU6ZXZlbm9kZCUzYmNsaXAtcnVsZTpldmVub2RkJTNic3Ryb2tlLWxpbmVqb2luOnJvdW5kJTNic3Ryb2tlLW1pdGVybGltaXQ6MiUzYiclM2UgJTNjZyB0cmFuc2Zvcm09J21hdHJpeCgxJTJjMCUyYzAlMmMxJTJjLTI3JTJjLTI3KSclM2UgJTNjcGF0aCBkPSdNNzMlMmM1MEM3MyUyYzM3LjMgNjIuNyUyYzI3IDUwJTJjMjdDMzcuMyUyYzI3IDI3JTJjMzcuMyAyNyUyYzUwTTMwLjklMmM1MEMzMC45JTJjMzkuNSAzOS40JTJjMzAuOSA1MCUyYzMwLjlDNjAuNiUyYzMwLjkgNjkuMSUyYzM5LjUgNjkuMSUyYzUwJyBzdHlsZT0nZmlsbC1ydWxlOm5vbnplcm8lM2InJTNlICUzY2FuaW1hdGVUcmFuc2Zvcm0gYXR0cmlidXRlTmFtZT0ndHJhbnNmb3JtJyBhdHRyaWJ1dGVUeXBlPSdYTUwnIHR5cGU9J3JvdGF0ZScgZHVyPScxcycgZnJvbT0nMCA1MCA1MCcgdG89JzM2MCA1MCA1MCcgcmVwZWF0Q291bnQ9J2luZGVmaW5pdGUnIC8lM2UgJTNjL3BhdGglM2UgJTNjL2clM2UgJTNjL3N2ZyUzZVwiIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGU9cmVxdWlyZShcInJlYWN0XCIpO2Z1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBrPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmgsbD1lLnVzZVN0YXRlLG09ZS51c2VFZmZlY3Qsbj1lLnVzZUxheW91dEVmZmVjdCxwPWUudXNlRGVidWdWYWx1ZTtmdW5jdGlvbiBxKGEsYil7dmFyIGQ9YigpLGY9bCh7aW5zdDp7dmFsdWU6ZCxnZXRTbmFwc2hvdDpifX0pLGM9ZlswXS5pbnN0LGc9ZlsxXTtuKGZ1bmN0aW9uKCl7Yy52YWx1ZT1kO2MuZ2V0U25hcHNob3Q9YjtyKGMpJiZnKHtpbnN0OmN9KX0sW2EsZCxiXSk7bShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pO3JldHVybiBhKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSl9KX0sW2FdKTtwKGQpO3JldHVybiBkfVxuZnVuY3Rpb24gcihhKXt2YXIgYj1hLmdldFNuYXBzaG90O2E9YS52YWx1ZTt0cnl7dmFyIGQ9YigpO3JldHVybiFrKGEsZCl9Y2F0Y2goZil7cmV0dXJuITB9fWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gYigpfXZhciB1PVwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD90OnE7ZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZT12b2lkIDAhPT1lLnVzZVN5bmNFeHRlcm5hbFN0b3JlP2UudXNlU3luY0V4dGVybmFsU3RvcmU6dTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJOSUxcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX25pbC5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInBhcnNlXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF9wYXJzZS5kZWZhdWx0O1xuICB9XG59KTtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcInN0cmluZ2lmeVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfc3RyaW5naWZ5LmRlZmF1bHQ7XG4gIH1cbn0pO1xuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwidjFcIiwge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHtcbiAgICByZXR1cm4gX3YuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2M1wiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdjIuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NFwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdjMuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2NVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdjQuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2YWxpZGF0ZVwiLCB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIGdldDogZnVuY3Rpb24gZ2V0KCkge1xuICAgIHJldHVybiBfdmFsaWRhdGUuZGVmYXVsdDtcbiAgfVxufSk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJ2ZXJzaW9uXCIsIHtcbiAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgZ2V0OiBmdW5jdGlvbiBnZXQoKSB7XG4gICAgcmV0dXJuIF92ZXJzaW9uLmRlZmF1bHQ7XG4gIH1cbn0pO1xuXG52YXIgX3YgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3YxLmpzXCIpKTtcblxudmFyIF92MiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjMuanNcIikpO1xuXG52YXIgX3YzID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92NC5qc1wiKSk7XG5cbnZhciBfdjQgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3Y1LmpzXCIpKTtcblxudmFyIF9uaWwgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL25pbC5qc1wiKSk7XG5cbnZhciBfdmVyc2lvbiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmVyc2lvbi5qc1wiKSk7XG5cbnZhciBfdmFsaWRhdGUgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3ZhbGlkYXRlLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3N0cmluZ2lmeS5qc1wiKSk7XG5cbnZhciBfcGFyc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnNlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLypcbiAqIEJyb3dzZXItY29tcGF0aWJsZSBKYXZhU2NyaXB0IE1ENVxuICpcbiAqIE1vZGlmaWNhdGlvbiBvZiBKYXZhU2NyaXB0IE1ENVxuICogaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvSmF2YVNjcmlwdC1NRDVcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMSwgU2ViYXN0aWFuIFRzY2hhblxuICogaHR0cHM6Ly9ibHVlaW1wLm5ldFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKlxuICogQmFzZWQgb25cbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2VcbiAqIERpZ2VzdCBBbGdvcml0aG0sIGFzIGRlZmluZWQgaW4gUkZDIDEzMjEuXG4gKiBWZXJzaW9uIDIuMiBDb3B5cmlnaHQgKEMpIFBhdWwgSm9obnN0b24gMTk5OSAtIDIwMDlcbiAqIE90aGVyIGNvbnRyaWJ1dG9yczogR3JlZyBIb2x0LCBBbmRyZXcgS2VwZXJ0LCBZZG5hciwgTG9zdGluZXRcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxuICogU2VlIGh0dHA6Ly9wYWpob21lLm9yZy51ay9jcnlwdC9tZDUgZm9yIG1vcmUgaW5mby5cbiAqL1xuZnVuY3Rpb24gbWQ1KGJ5dGVzKSB7XG4gIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgbXNnID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGJ5dGVzKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgICBieXRlcyA9IG5ldyBVaW50OEFycmF5KG1zZy5sZW5ndGgpO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ5dGVzW2ldID0gbXNnLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1kNVRvSGV4RW5jb2RlZEFycmF5KHdvcmRzVG9NZDUoYnl0ZXNUb1dvcmRzKGJ5dGVzKSwgYnl0ZXMubGVuZ3RoICogOCkpO1xufVxuLypcbiAqIENvbnZlcnQgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcyB0byBhbiBhcnJheSBvZiBieXRlc1xuICovXG5cblxuZnVuY3Rpb24gbWQ1VG9IZXhFbmNvZGVkQXJyYXkoaW5wdXQpIHtcbiAgY29uc3Qgb3V0cHV0ID0gW107XG4gIGNvbnN0IGxlbmd0aDMyID0gaW5wdXQubGVuZ3RoICogMzI7XG4gIGNvbnN0IGhleFRhYiA9ICcwMTIzNDU2Nzg5YWJjZGVmJztcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbmd0aDMyOyBpICs9IDgpIHtcbiAgICBjb25zdCB4ID0gaW5wdXRbaSA+PiA1XSA+Pj4gaSAlIDMyICYgMHhmZjtcbiAgICBjb25zdCBoZXggPSBwYXJzZUludChoZXhUYWIuY2hhckF0KHggPj4+IDQgJiAweDBmKSArIGhleFRhYi5jaGFyQXQoeCAmIDB4MGYpLCAxNik7XG4gICAgb3V0cHV0LnB1c2goaGV4KTtcbiAgfVxuXG4gIHJldHVybiBvdXRwdXQ7XG59XG4vKipcbiAqIENhbGN1bGF0ZSBvdXRwdXQgbGVuZ3RoIHdpdGggcGFkZGluZyBhbmQgYml0IGxlbmd0aFxuICovXG5cblxuZnVuY3Rpb24gZ2V0T3V0cHV0TGVuZ3RoKGlucHV0TGVuZ3RoOCkge1xuICByZXR1cm4gKGlucHV0TGVuZ3RoOCArIDY0ID4+PiA5IDw8IDQpICsgMTQgKyAxO1xufVxuLypcbiAqIENhbGN1bGF0ZSB0aGUgTUQ1IG9mIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMsIGFuZCBhIGJpdCBsZW5ndGguXG4gKi9cblxuXG5mdW5jdGlvbiB3b3Jkc1RvTWQ1KHgsIGxlbikge1xuICAvKiBhcHBlbmQgcGFkZGluZyAqL1xuICB4W2xlbiA+PiA1XSB8PSAweDgwIDw8IGxlbiAlIDMyO1xuICB4W2dldE91dHB1dExlbmd0aChsZW4pIC0gMV0gPSBsZW47XG4gIGxldCBhID0gMTczMjU4NDE5MztcbiAgbGV0IGIgPSAtMjcxNzMzODc5O1xuICBsZXQgYyA9IC0xNzMyNTg0MTk0O1xuICBsZXQgZCA9IDI3MTczMzg3ODtcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IHgubGVuZ3RoOyBpICs9IDE2KSB7XG4gICAgY29uc3Qgb2xkYSA9IGE7XG4gICAgY29uc3Qgb2xkYiA9IGI7XG4gICAgY29uc3Qgb2xkYyA9IGM7XG4gICAgY29uc3Qgb2xkZCA9IGQ7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaV0sIDcsIC02ODA4NzY5MzYpO1xuICAgIGQgPSBtZDVmZihkLCBhLCBiLCBjLCB4W2kgKyAxXSwgMTIsIC0zODk1NjQ1ODYpO1xuICAgIGMgPSBtZDVmZihjLCBkLCBhLCBiLCB4W2kgKyAyXSwgMTcsIDYwNjEwNTgxOSk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xuICAgIGEgPSBtZDVmZihhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNywgLTE3NjQxODg5Nyk7XG4gICAgZCA9IG1kNWZmKGQsIGEsIGIsIGMsIHhbaSArIDVdLCAxMiwgMTIwMDA4MDQyNik7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDZdLCAxNywgLTE0NzMyMzEzNDEpO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyA3XSwgMjIsIC00NTcwNTk4Myk7XG4gICAgYSA9IG1kNWZmKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA3LCAxNzcwMDM1NDE2KTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgOV0sIDEyLCAtMTk1ODQxNDQxNyk7XG4gICAgYyA9IG1kNWZmKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTcsIC00MjA2Myk7XG4gICAgYiA9IG1kNWZmKGIsIGMsIGQsIGEsIHhbaSArIDExXSwgMjIsIC0xOTkwNDA0MTYyKTtcbiAgICBhID0gbWQ1ZmYoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA3LCAxODA0NjAzNjgyKTtcbiAgICBkID0gbWQ1ZmYoZCwgYSwgYiwgYywgeFtpICsgMTNdLCAxMiwgLTQwMzQxMTAxKTtcbiAgICBjID0gbWQ1ZmYoYywgZCwgYSwgYiwgeFtpICsgMTRdLCAxNywgLTE1MDIwMDIyOTApO1xuICAgIGIgPSBtZDVmZihiLCBjLCBkLCBhLCB4W2kgKyAxNV0sIDIyLCAxMjM2NTM1MzI5KTtcbiAgICBhID0gbWQ1Z2coYSwgYiwgYywgZCwgeFtpICsgMV0sIDUsIC0xNjU3OTY1MTApO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyA2XSwgOSwgLTEwNjk1MDE2MzIpO1xuICAgIGMgPSBtZDVnZyhjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE0LCA2NDM3MTc3MTMpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2ldLCAyMCwgLTM3Mzg5NzMwMik7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDVdLCA1LCAtNzAxNTU4NjkxKTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTBdLCA5LCAzODAxNjA4Myk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTQsIC02NjA0NzgzMzUpO1xuICAgIGIgPSBtZDVnZyhiLCBjLCBkLCBhLCB4W2kgKyA0XSwgMjAsIC00MDU1Mzc4NDgpO1xuICAgIGEgPSBtZDVnZyhhLCBiLCBjLCBkLCB4W2kgKyA5XSwgNSwgNTY4NDQ2NDM4KTtcbiAgICBkID0gbWQ1Z2coZCwgYSwgYiwgYywgeFtpICsgMTRdLCA5LCAtMTAxOTgwMzY5MCk7XG4gICAgYyA9IG1kNWdnKGMsIGQsIGEsIGIsIHhbaSArIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XG4gICAgYiA9IG1kNWdnKGIsIGMsIGQsIGEsIHhbaSArIDhdLCAyMCwgMTE2MzUzMTUwMSk7XG4gICAgYSA9IG1kNWdnKGEsIGIsIGMsIGQsIHhbaSArIDEzXSwgNSwgLTE0NDQ2ODE0NjcpO1xuICAgIGQgPSBtZDVnZyhkLCBhLCBiLCBjLCB4W2kgKyAyXSwgOSwgLTUxNDAzNzg0KTtcbiAgICBjID0gbWQ1Z2coYywgZCwgYSwgYiwgeFtpICsgN10sIDE0LCAxNzM1MzI4NDczKTtcbiAgICBiID0gbWQ1Z2coYiwgYywgZCwgYSwgeFtpICsgMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyA1XSwgNCwgLTM3ODU1OCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaSArIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xuICAgIGMgPSBtZDVoaChjLCBkLCBhLCBiLCB4W2kgKyAxMV0sIDE2LCAxODM5MDMwNTYyKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTRdLCAyMywgLTM1MzA5NTU2KTtcbiAgICBhID0gbWQ1aGgoYSwgYiwgYywgZCwgeFtpICsgMV0sIDQsIC0xNTMwOTkyMDYwKTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgNF0sIDExLCAxMjcyODkzMzUzKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgN10sIDE2LCAtMTU1NDk3NjMyKTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xuICAgIGEgPSBtZDVoaChhLCBiLCBjLCBkLCB4W2kgKyAxM10sIDQsIDY4MTI3OTE3NCk7XG4gICAgZCA9IG1kNWhoKGQsIGEsIGIsIGMsIHhbaV0sIDExLCAtMzU4NTM3MjIyKTtcbiAgICBjID0gbWQ1aGgoYywgZCwgYSwgYiwgeFtpICsgM10sIDE2LCAtNzIyNTIxOTc5KTtcbiAgICBiID0gbWQ1aGgoYiwgYywgZCwgYSwgeFtpICsgNl0sIDIzLCA3NjAyOTE4OSk7XG4gICAgYSA9IG1kNWhoKGEsIGIsIGMsIGQsIHhbaSArIDldLCA0LCAtNjQwMzY0NDg3KTtcbiAgICBkID0gbWQ1aGgoZCwgYSwgYiwgYywgeFtpICsgMTJdLCAxMSwgLTQyMTgxNTgzNSk7XG4gICAgYyA9IG1kNWhoKGMsIGQsIGEsIGIsIHhbaSArIDE1XSwgMTYsIDUzMDc0MjUyMCk7XG4gICAgYiA9IG1kNWhoKGIsIGMsIGQsIGEsIHhbaSArIDJdLCAyMywgLTk5NTMzODY1MSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaV0sIDYsIC0xOTg2MzA4NDQpO1xuICAgIGQgPSBtZDVpaShkLCBhLCBiLCBjLCB4W2kgKyA3XSwgMTAsIDExMjY4OTE0MTUpO1xuICAgIGMgPSBtZDVpaShjLCBkLCBhLCBiLCB4W2kgKyAxNF0sIDE1LCAtMTQxNjM1NDkwNSk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDVdLCAyMSwgLTU3NDM0MDU1KTtcbiAgICBhID0gbWQ1aWkoYSwgYiwgYywgZCwgeFtpICsgMTJdLCA2LCAxNzAwNDg1NTcxKTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgM10sIDEwLCAtMTg5NDk4NjYwNik7XG4gICAgYyA9IG1kNWlpKGMsIGQsIGEsIGIsIHhbaSArIDEwXSwgMTUsIC0xMDUxNTIzKTtcbiAgICBiID0gbWQ1aWkoYiwgYywgZCwgYSwgeFtpICsgMV0sIDIxLCAtMjA1NDkyMjc5OSk7XG4gICAgYSA9IG1kNWlpKGEsIGIsIGMsIGQsIHhbaSArIDhdLCA2LCAxODczMzEzMzU5KTtcbiAgICBkID0gbWQ1aWkoZCwgYSwgYiwgYywgeFtpICsgMTVdLCAxMCwgLTMwNjExNzQ0KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XG4gICAgYiA9IG1kNWlpKGIsIGMsIGQsIGEsIHhbaSArIDEzXSwgMjEsIDEzMDkxNTE2NDkpO1xuICAgIGEgPSBtZDVpaShhLCBiLCBjLCBkLCB4W2kgKyA0XSwgNiwgLTE0NTUyMzA3MCk7XG4gICAgZCA9IG1kNWlpKGQsIGEsIGIsIGMsIHhbaSArIDExXSwgMTAsIC0xMTIwMjEwMzc5KTtcbiAgICBjID0gbWQ1aWkoYywgZCwgYSwgYiwgeFtpICsgMl0sIDE1LCA3MTg3ODcyNTkpO1xuICAgIGIgPSBtZDVpaShiLCBjLCBkLCBhLCB4W2kgKyA5XSwgMjEsIC0zNDM0ODU1NTEpO1xuICAgIGEgPSBzYWZlQWRkKGEsIG9sZGEpO1xuICAgIGIgPSBzYWZlQWRkKGIsIG9sZGIpO1xuICAgIGMgPSBzYWZlQWRkKGMsIG9sZGMpO1xuICAgIGQgPSBzYWZlQWRkKGQsIG9sZGQpO1xuICB9XG5cbiAgcmV0dXJuIFthLCBiLCBjLCBkXTtcbn1cbi8qXG4gKiBDb252ZXJ0IGFuIGFycmF5IGJ5dGVzIHRvIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcbiAqIENoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpZ2gtYnl0ZSBzaWxlbnRseSBpZ25vcmVkLlxuICovXG5cblxuZnVuY3Rpb24gYnl0ZXNUb1dvcmRzKGlucHV0KSB7XG4gIGlmIChpbnB1dC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICBjb25zdCBsZW5ndGg4ID0gaW5wdXQubGVuZ3RoICogODtcbiAgY29uc3Qgb3V0cHV0ID0gbmV3IFVpbnQzMkFycmF5KGdldE91dHB1dExlbmd0aChsZW5ndGg4KSk7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg4OyBpICs9IDgpIHtcbiAgICBvdXRwdXRbaSA+PiA1XSB8PSAoaW5wdXRbaSAvIDhdICYgMHhmZikgPDwgaSAlIDMyO1xuICB9XG5cbiAgcmV0dXJuIG91dHB1dDtcbn1cbi8qXG4gKiBBZGQgaW50ZWdlcnMsIHdyYXBwaW5nIGF0IDJeMzIuIFRoaXMgdXNlcyAxNi1iaXQgb3BlcmF0aW9ucyBpbnRlcm5hbGx5XG4gKiB0byB3b3JrIGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLlxuICovXG5cblxuZnVuY3Rpb24gc2FmZUFkZCh4LCB5KSB7XG4gIGNvbnN0IGxzdyA9ICh4ICYgMHhmZmZmKSArICh5ICYgMHhmZmZmKTtcbiAgY29uc3QgbXN3ID0gKHggPj4gMTYpICsgKHkgPj4gMTYpICsgKGxzdyA+PiAxNik7XG4gIHJldHVybiBtc3cgPDwgMTYgfCBsc3cgJiAweGZmZmY7XG59XG4vKlxuICogQml0d2lzZSByb3RhdGUgYSAzMi1iaXQgbnVtYmVyIHRvIHRoZSBsZWZ0LlxuICovXG5cblxuZnVuY3Rpb24gYml0Um90YXRlTGVmdChudW0sIGNudCkge1xuICByZXR1cm4gbnVtIDw8IGNudCB8IG51bSA+Pj4gMzIgLSBjbnQ7XG59XG4vKlxuICogVGhlc2UgZnVuY3Rpb25zIGltcGxlbWVudCB0aGUgZm91ciBiYXNpYyBvcGVyYXRpb25zIHRoZSBhbGdvcml0aG0gdXNlcy5cbiAqL1xuXG5cbmZ1bmN0aW9uIG1kNWNtbihxLCBhLCBiLCB4LCBzLCB0KSB7XG4gIHJldHVybiBzYWZlQWRkKGJpdFJvdGF0ZUxlZnQoc2FmZUFkZChzYWZlQWRkKGEsIHEpLCBzYWZlQWRkKHgsIHQpKSwgcyksIGIpO1xufVxuXG5mdW5jdGlvbiBtZDVmZihhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiAmIGMgfCB+YiAmIGQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVnZyhhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiAmIGQgfCBjICYgfmQsIGEsIGIsIHgsIHMsIHQpO1xufVxuXG5mdW5jdGlvbiBtZDVoaChhLCBiLCBjLCBkLCB4LCBzLCB0KSB7XG4gIHJldHVybiBtZDVjbW4oYiBeIGMgXiBkLCBhLCBiLCB4LCBzLCB0KTtcbn1cblxuZnVuY3Rpb24gbWQ1aWkoYSwgYiwgYywgZCwgeCwgcywgdCkge1xuICByZXR1cm4gbWQ1Y21uKGMgXiAoYiB8IH5kKSwgYSwgYiwgeCwgcywgdCk7XG59XG5cbnZhciBfZGVmYXVsdCA9IG1kNTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuY29uc3QgcmFuZG9tVVVJRCA9IHR5cGVvZiBjcnlwdG8gIT09ICd1bmRlZmluZWQnICYmIGNyeXB0by5yYW5kb21VVUlEICYmIGNyeXB0by5yYW5kb21VVUlELmJpbmQoY3J5cHRvKTtcbnZhciBfZGVmYXVsdCA9IHtcbiAgcmFuZG9tVVVJRFxufTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xudmFyIF9kZWZhdWx0ID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiBwYXJzZSh1dWlkKSB7XG4gIGlmICghKDAsIF92YWxpZGF0ZS5kZWZhdWx0KSh1dWlkKSkge1xuICAgIHRocm93IFR5cGVFcnJvcignSW52YWxpZCBVVUlEJyk7XG4gIH1cblxuICBsZXQgdjtcbiAgY29uc3QgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMTYpOyAvLyBQYXJzZSAjIyMjIyMjIy0uLi4uLS4uLi4tLi4uLi0uLi4uLi4uLi4uLi5cblxuICBhcnJbMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMCwgOCksIDE2KSkgPj4+IDI0O1xuICBhcnJbMV0gPSB2ID4+PiAxNiAmIDB4ZmY7XG4gIGFyclsyXSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbM10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tIyMjIy0uLi4uLS4uLi4tLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzRdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDksIDEzKSwgMTYpKSA+Pj4gODtcbiAgYXJyWzVdID0gdiAmIDB4ZmY7IC8vIFBhcnNlIC4uLi4uLi4uLS4uLi4tIyMjIy0uLi4uLS4uLi4uLi4uLi4uLlxuXG4gIGFycls2XSA9ICh2ID0gcGFyc2VJbnQodXVpZC5zbGljZSgxNCwgMTgpLCAxNikpID4+PiA4O1xuICBhcnJbN10gPSB2ICYgMHhmZjsgLy8gUGFyc2UgLi4uLi4uLi4tLi4uLi0uLi4uLSMjIyMtLi4uLi4uLi4uLi4uXG5cbiAgYXJyWzhdID0gKHYgPSBwYXJzZUludCh1dWlkLnNsaWNlKDE5LCAyMyksIDE2KSkgPj4+IDg7XG4gIGFycls5XSA9IHYgJiAweGZmOyAvLyBQYXJzZSAuLi4uLi4uLi0uLi4uLS4uLi4tLi4uLi0jIyMjIyMjIyMjIyNcbiAgLy8gKFVzZSBcIi9cIiB0byBhdm9pZCAzMi1iaXQgdHJ1bmNhdGlvbiB3aGVuIGJpdC1zaGlmdGluZyBoaWdoLW9yZGVyIGJ5dGVzKVxuXG4gIGFyclsxMF0gPSAodiA9IHBhcnNlSW50KHV1aWQuc2xpY2UoMjQsIDM2KSwgMTYpKSAvIDB4MTAwMDAwMDAwMDAgJiAweGZmO1xuICBhcnJbMTFdID0gdiAvIDB4MTAwMDAwMDAwICYgMHhmZjtcbiAgYXJyWzEyXSA9IHYgPj4+IDI0ICYgMHhmZjtcbiAgYXJyWzEzXSA9IHYgPj4+IDE2ICYgMHhmZjtcbiAgYXJyWzE0XSA9IHYgPj4+IDggJiAweGZmO1xuICBhcnJbMTVdID0gdiAmIDB4ZmY7XG4gIHJldHVybiBhcnI7XG59XG5cbnZhciBfZGVmYXVsdCA9IHBhcnNlO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG52YXIgX2RlZmF1bHQgPSAvXig/OlswLTlhLWZdezh9LVswLTlhLWZdezR9LVsxLTVdWzAtOWEtZl17M30tWzg5YWJdWzAtOWEtZl17M30tWzAtOWEtZl17MTJ9fDAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCkkL2k7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHJuZztcbi8vIFVuaXF1ZSBJRCBjcmVhdGlvbiByZXF1aXJlcyBhIGhpZ2ggcXVhbGl0eSByYW5kb20gIyBnZW5lcmF0b3IuIEluIHRoZSBicm93c2VyIHdlIHRoZXJlZm9yZVxuLy8gcmVxdWlyZSB0aGUgY3J5cHRvIEFQSSBhbmQgZG8gbm90IHN1cHBvcnQgYnVpbHQtaW4gZmFsbGJhY2sgdG8gbG93ZXIgcXVhbGl0eSByYW5kb20gbnVtYmVyXG4vLyBnZW5lcmF0b3JzIChsaWtlIE1hdGgucmFuZG9tKCkpLlxubGV0IGdldFJhbmRvbVZhbHVlcztcbmNvbnN0IHJuZHM4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuXG5mdW5jdGlvbiBybmcoKSB7XG4gIC8vIGxhenkgbG9hZCBzbyB0aGF0IGVudmlyb25tZW50cyB0aGF0IG5lZWQgdG8gcG9seWZpbGwgaGF2ZSBhIGNoYW5jZSB0byBkbyBzb1xuICBpZiAoIWdldFJhbmRvbVZhbHVlcykge1xuICAgIC8vIGdldFJhbmRvbVZhbHVlcyBuZWVkcyB0byBiZSBpbnZva2VkIGluIGEgY29udGV4dCB3aGVyZSBcInRoaXNcIiBpcyBhIENyeXB0byBpbXBsZW1lbnRhdGlvbi5cbiAgICBnZXRSYW5kb21WYWx1ZXMgPSB0eXBlb2YgY3J5cHRvICE9PSAndW5kZWZpbmVkJyAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMuYmluZChjcnlwdG8pO1xuXG4gICAgaWYgKCFnZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY3J5cHRvLmdldFJhbmRvbVZhbHVlcygpIG5vdCBzdXBwb3J0ZWQuIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQjZ2V0cmFuZG9tdmFsdWVzLW5vdC1zdXBwb3J0ZWQnKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZ2V0UmFuZG9tVmFsdWVzKHJuZHM4KTtcbn0iLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxuLy8gQWRhcHRlZCBmcm9tIENocmlzIFZlbmVzcycgU0hBMSBjb2RlIGF0XG4vLyBodHRwOi8vd3d3Lm1vdmFibGUtdHlwZS5jby51ay9zY3JpcHRzL3NoYTEuaHRtbFxuZnVuY3Rpb24gZihzLCB4LCB5LCB6KSB7XG4gIHN3aXRjaCAocykge1xuICAgIGNhc2UgMDpcbiAgICAgIHJldHVybiB4ICYgeSBeIH54ICYgejtcblxuICAgIGNhc2UgMTpcbiAgICAgIHJldHVybiB4IF4geSBeIHo7XG5cbiAgICBjYXNlIDI6XG4gICAgICByZXR1cm4geCAmIHkgXiB4ICYgeiBeIHkgJiB6O1xuXG4gICAgY2FzZSAzOlxuICAgICAgcmV0dXJuIHggXiB5IF4gejtcbiAgfVxufVxuXG5mdW5jdGlvbiBST1RMKHgsIG4pIHtcbiAgcmV0dXJuIHggPDwgbiB8IHggPj4+IDMyIC0gbjtcbn1cblxuZnVuY3Rpb24gc2hhMShieXRlcykge1xuICBjb25zdCBLID0gWzB4NWE4Mjc5OTksIDB4NmVkOWViYTEsIDB4OGYxYmJjZGMsIDB4Y2E2MmMxZDZdO1xuICBjb25zdCBIID0gWzB4Njc0NTIzMDEsIDB4ZWZjZGFiODksIDB4OThiYWRjZmUsIDB4MTAzMjU0NzYsIDB4YzNkMmUxZjBdO1xuXG4gIGlmICh0eXBlb2YgYnl0ZXMgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uc3QgbXNnID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KGJ5dGVzKSk7IC8vIFVURjggZXNjYXBlXG5cbiAgICBieXRlcyA9IFtdO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyArK2kpIHtcbiAgICAgIGJ5dGVzLnB1c2gobXNnLmNoYXJDb2RlQXQoaSkpO1xuICAgIH1cbiAgfSBlbHNlIGlmICghQXJyYXkuaXNBcnJheShieXRlcykpIHtcbiAgICAvLyBDb252ZXJ0IEFycmF5LWxpa2UgdG8gQXJyYXlcbiAgICBieXRlcyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGJ5dGVzKTtcbiAgfVxuXG4gIGJ5dGVzLnB1c2goMHg4MCk7XG4gIGNvbnN0IGwgPSBieXRlcy5sZW5ndGggLyA0ICsgMjtcbiAgY29uc3QgTiA9IE1hdGguY2VpbChsIC8gMTYpO1xuICBjb25zdCBNID0gbmV3IEFycmF5KE4pO1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgTjsgKytpKSB7XG4gICAgY29uc3QgYXJyID0gbmV3IFVpbnQzMkFycmF5KDE2KTtcblxuICAgIGZvciAobGV0IGogPSAwOyBqIDwgMTY7ICsraikge1xuICAgICAgYXJyW2pdID0gYnl0ZXNbaSAqIDY0ICsgaiAqIDRdIDw8IDI0IHwgYnl0ZXNbaSAqIDY0ICsgaiAqIDQgKyAxXSA8PCAxNiB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgMl0gPDwgOCB8IGJ5dGVzW2kgKiA2NCArIGogKiA0ICsgM107XG4gICAgfVxuXG4gICAgTVtpXSA9IGFycjtcbiAgfVxuXG4gIE1bTiAtIDFdWzE0XSA9IChieXRlcy5sZW5ndGggLSAxKSAqIDggLyBNYXRoLnBvdygyLCAzMik7XG4gIE1bTiAtIDFdWzE0XSA9IE1hdGguZmxvb3IoTVtOIC0gMV1bMTRdKTtcbiAgTVtOIC0gMV1bMTVdID0gKGJ5dGVzLmxlbmd0aCAtIDEpICogOCAmIDB4ZmZmZmZmZmY7XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBOOyArK2kpIHtcbiAgICBjb25zdCBXID0gbmV3IFVpbnQzMkFycmF5KDgwKTtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgMTY7ICsrdCkge1xuICAgICAgV1t0XSA9IE1baV1bdF07XG4gICAgfVxuXG4gICAgZm9yIChsZXQgdCA9IDE2OyB0IDwgODA7ICsrdCkge1xuICAgICAgV1t0XSA9IFJPVEwoV1t0IC0gM10gXiBXW3QgLSA4XSBeIFdbdCAtIDE0XSBeIFdbdCAtIDE2XSwgMSk7XG4gICAgfVxuXG4gICAgbGV0IGEgPSBIWzBdO1xuICAgIGxldCBiID0gSFsxXTtcbiAgICBsZXQgYyA9IEhbMl07XG4gICAgbGV0IGQgPSBIWzNdO1xuICAgIGxldCBlID0gSFs0XTtcblxuICAgIGZvciAobGV0IHQgPSAwOyB0IDwgODA7ICsrdCkge1xuICAgICAgY29uc3QgcyA9IE1hdGguZmxvb3IodCAvIDIwKTtcbiAgICAgIGNvbnN0IFQgPSBST1RMKGEsIDUpICsgZihzLCBiLCBjLCBkKSArIGUgKyBLW3NdICsgV1t0XSA+Pj4gMDtcbiAgICAgIGUgPSBkO1xuICAgICAgZCA9IGM7XG4gICAgICBjID0gUk9UTChiLCAzMCkgPj4+IDA7XG4gICAgICBiID0gYTtcbiAgICAgIGEgPSBUO1xuICAgIH1cblxuICAgIEhbMF0gPSBIWzBdICsgYSA+Pj4gMDtcbiAgICBIWzFdID0gSFsxXSArIGIgPj4+IDA7XG4gICAgSFsyXSA9IEhbMl0gKyBjID4+PiAwO1xuICAgIEhbM10gPSBIWzNdICsgZCA+Pj4gMDtcbiAgICBIWzRdID0gSFs0XSArIGUgPj4+IDA7XG4gIH1cblxuICByZXR1cm4gW0hbMF0gPj4gMjQgJiAweGZmLCBIWzBdID4+IDE2ICYgMHhmZiwgSFswXSA+PiA4ICYgMHhmZiwgSFswXSAmIDB4ZmYsIEhbMV0gPj4gMjQgJiAweGZmLCBIWzFdID4+IDE2ICYgMHhmZiwgSFsxXSA+PiA4ICYgMHhmZiwgSFsxXSAmIDB4ZmYsIEhbMl0gPj4gMjQgJiAweGZmLCBIWzJdID4+IDE2ICYgMHhmZiwgSFsyXSA+PiA4ICYgMHhmZiwgSFsyXSAmIDB4ZmYsIEhbM10gPj4gMjQgJiAweGZmLCBIWzNdID4+IDE2ICYgMHhmZiwgSFszXSA+PiA4ICYgMHhmZiwgSFszXSAmIDB4ZmYsIEhbNF0gPj4gMjQgJiAweGZmLCBIWzRdID4+IDE2ICYgMHhmZiwgSFs0XSA+PiA4ICYgMHhmZiwgSFs0XSAmIDB4ZmZdO1xufVxuXG52YXIgX2RlZmF1bHQgPSBzaGExO1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5leHBvcnRzLnVuc2FmZVN0cmluZ2lmeSA9IHVuc2FmZVN0cmluZ2lmeTtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG4vKipcbiAqIENvbnZlcnQgYXJyYXkgb2YgMTYgYnl0ZSB2YWx1ZXMgdG8gVVVJRCBzdHJpbmcgZm9ybWF0IG9mIHRoZSBmb3JtOlxuICogWFhYWFhYWFgtWFhYWC1YWFhYLVhYWFgtWFhYWFhYWFhYWFhYXG4gKi9cbmNvbnN0IGJ5dGVUb0hleCA9IFtdO1xuXG5mb3IgKGxldCBpID0gMDsgaSA8IDI1NjsgKytpKSB7XG4gIGJ5dGVUb0hleC5wdXNoKChpICsgMHgxMDApLnRvU3RyaW5nKDE2KS5zbGljZSgxKSk7XG59XG5cbmZ1bmN0aW9uIHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgLy8gTm90ZTogQmUgY2FyZWZ1bCBlZGl0aW5nIHRoaXMgY29kZSEgIEl0J3MgYmVlbiB0dW5lZCBmb3IgcGVyZm9ybWFuY2VcbiAgLy8gYW5kIHdvcmtzIGluIHdheXMgeW91IG1heSBub3QgZXhwZWN0LiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3V1aWRqcy91dWlkL3B1bGwvNDM0XG4gIHJldHVybiAoYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDFdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgMl1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyAzXV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDRdXSArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgNV1dICsgJy0nICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA2XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDddXSArICctJyArIGJ5dGVUb0hleFthcnJbb2Zmc2V0ICsgOF1dICsgYnl0ZVRvSGV4W2FycltvZmZzZXQgKyA5XV0gKyAnLScgKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEwXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDExXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEyXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDEzXV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE0XV0gKyBieXRlVG9IZXhbYXJyW29mZnNldCArIDE1XV0pLnRvTG93ZXJDYXNlKCk7XG59XG5cbmZ1bmN0aW9uIHN0cmluZ2lmeShhcnIsIG9mZnNldCA9IDApIHtcbiAgY29uc3QgdXVpZCA9IHVuc2FmZVN0cmluZ2lmeShhcnIsIG9mZnNldCk7IC8vIENvbnNpc3RlbmN5IGNoZWNrIGZvciB2YWxpZCBVVUlELiAgSWYgdGhpcyB0aHJvd3MsIGl0J3MgbGlrZWx5IGR1ZSB0byBvbmVcbiAgLy8gb2YgdGhlIGZvbGxvd2luZzpcbiAgLy8gLSBPbmUgb3IgbW9yZSBpbnB1dCBhcnJheSB2YWx1ZXMgZG9uJ3QgbWFwIHRvIGEgaGV4IG9jdGV0IChsZWFkaW5nIHRvXG4gIC8vIFwidW5kZWZpbmVkXCIgaW4gdGhlIHV1aWQpXG4gIC8vIC0gSW52YWxpZCBpbnB1dCB2YWx1ZXMgZm9yIHRoZSBSRkMgYHZlcnNpb25gIG9yIGB2YXJpYW50YCBmaWVsZHNcblxuICBpZiAoISgwLCBfdmFsaWRhdGUuZGVmYXVsdCkodXVpZCkpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ1N0cmluZ2lmaWVkIFVVSUQgaXMgaW52YWxpZCcpO1xuICB9XG5cbiAgcmV0dXJuIHV1aWQ7XG59XG5cbnZhciBfZGVmYXVsdCA9IHN0cmluZ2lmeTtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX3JuZyA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcm5nLmpzXCIpKTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbmZ1bmN0aW9uIF9pbnRlcm9wUmVxdWlyZURlZmF1bHQob2JqKSB7IHJldHVybiBvYmogJiYgb2JqLl9fZXNNb2R1bGUgPyBvYmogOiB7IGRlZmF1bHQ6IG9iaiB9OyB9XG5cbi8vICoqYHYxKClgIC0gR2VuZXJhdGUgdGltZS1iYXNlZCBVVUlEKipcbi8vXG4vLyBJbnNwaXJlZCBieSBodHRwczovL2dpdGh1Yi5jb20vTGlvc0svVVVJRC5qc1xuLy8gYW5kIGh0dHA6Ly9kb2NzLnB5dGhvbi5vcmcvbGlicmFyeS91dWlkLmh0bWxcbmxldCBfbm9kZUlkO1xuXG5sZXQgX2Nsb2Nrc2VxOyAvLyBQcmV2aW91cyB1dWlkIGNyZWF0aW9uIHRpbWVcblxuXG5sZXQgX2xhc3RNU2VjcyA9IDA7XG5sZXQgX2xhc3ROU2VjcyA9IDA7IC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdXVpZGpzL3V1aWQgZm9yIEFQSSBkZXRhaWxzXG5cbmZ1bmN0aW9uIHYxKG9wdGlvbnMsIGJ1Ziwgb2Zmc2V0KSB7XG4gIGxldCBpID0gYnVmICYmIG9mZnNldCB8fCAwO1xuICBjb25zdCBiID0gYnVmIHx8IG5ldyBBcnJheSgxNik7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsZXQgbm9kZSA9IG9wdGlvbnMubm9kZSB8fCBfbm9kZUlkO1xuICBsZXQgY2xvY2tzZXEgPSBvcHRpb25zLmNsb2Nrc2VxICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLmNsb2Nrc2VxIDogX2Nsb2Nrc2VxOyAvLyBub2RlIGFuZCBjbG9ja3NlcSBuZWVkIHRvIGJlIGluaXRpYWxpemVkIHRvIHJhbmRvbSB2YWx1ZXMgaWYgdGhleSdyZSBub3RcbiAgLy8gc3BlY2lmaWVkLiAgV2UgZG8gdGhpcyBsYXppbHkgdG8gbWluaW1pemUgaXNzdWVzIHJlbGF0ZWQgdG8gaW5zdWZmaWNpZW50XG4gIC8vIHN5c3RlbSBlbnRyb3B5LiAgU2VlICMxODlcblxuICBpZiAobm9kZSA9PSBudWxsIHx8IGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICBjb25zdCBzZWVkQnl0ZXMgPSBvcHRpb25zLnJhbmRvbSB8fCAob3B0aW9ucy5ybmcgfHwgX3JuZy5kZWZhdWx0KSgpO1xuXG4gICAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgICAgLy8gUGVyIDQuNSwgY3JlYXRlIGFuZCA0OC1iaXQgbm9kZSBpZCwgKDQ3IHJhbmRvbSBiaXRzICsgbXVsdGljYXN0IGJpdCA9IDEpXG4gICAgICBub2RlID0gX25vZGVJZCA9IFtzZWVkQnl0ZXNbMF0gfCAweDAxLCBzZWVkQnl0ZXNbMV0sIHNlZWRCeXRlc1syXSwgc2VlZEJ5dGVzWzNdLCBzZWVkQnl0ZXNbNF0sIHNlZWRCeXRlc1s1XV07XG4gICAgfVxuXG4gICAgaWYgKGNsb2Nrc2VxID09IG51bGwpIHtcbiAgICAgIC8vIFBlciA0LjIuMiwgcmFuZG9taXplICgxNCBiaXQpIGNsb2Nrc2VxXG4gICAgICBjbG9ja3NlcSA9IF9jbG9ja3NlcSA9IChzZWVkQnl0ZXNbNl0gPDwgOCB8IHNlZWRCeXRlc1s3XSkgJiAweDNmZmY7XG4gICAgfVxuICB9IC8vIFVVSUQgdGltZXN0YW1wcyBhcmUgMTAwIG5hbm8tc2Vjb25kIHVuaXRzIHNpbmNlIHRoZSBHcmVnb3JpYW4gZXBvY2gsXG4gIC8vICgxNTgyLTEwLTE1IDAwOjAwKS4gIEpTTnVtYmVycyBhcmVuJ3QgcHJlY2lzZSBlbm91Z2ggZm9yIHRoaXMsIHNvXG4gIC8vIHRpbWUgaXMgaGFuZGxlZCBpbnRlcm5hbGx5IGFzICdtc2VjcycgKGludGVnZXIgbWlsbGlzZWNvbmRzKSBhbmQgJ25zZWNzJ1xuICAvLyAoMTAwLW5hbm9zZWNvbmRzIG9mZnNldCBmcm9tIG1zZWNzKSBzaW5jZSB1bml4IGVwb2NoLCAxOTcwLTAxLTAxIDAwOjAwLlxuXG5cbiAgbGV0IG1zZWNzID0gb3B0aW9ucy5tc2VjcyAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5tc2VjcyA6IERhdGUubm93KCk7IC8vIFBlciA0LjIuMS4yLCB1c2UgY291bnQgb2YgdXVpZCdzIGdlbmVyYXRlZCBkdXJpbmcgdGhlIGN1cnJlbnQgY2xvY2tcbiAgLy8gY3ljbGUgdG8gc2ltdWxhdGUgaGlnaGVyIHJlc29sdXRpb24gY2xvY2tcblxuICBsZXQgbnNlY3MgPSBvcHRpb25zLm5zZWNzICE9PSB1bmRlZmluZWQgPyBvcHRpb25zLm5zZWNzIDogX2xhc3ROU2VjcyArIDE7IC8vIFRpbWUgc2luY2UgbGFzdCB1dWlkIGNyZWF0aW9uIChpbiBtc2VjcylcblxuICBjb25zdCBkdCA9IG1zZWNzIC0gX2xhc3RNU2VjcyArIChuc2VjcyAtIF9sYXN0TlNlY3MpIC8gMTAwMDA7IC8vIFBlciA0LjIuMS4yLCBCdW1wIGNsb2Nrc2VxIG9uIGNsb2NrIHJlZ3Jlc3Npb25cblxuICBpZiAoZHQgPCAwICYmIG9wdGlvbnMuY2xvY2tzZXEgPT09IHVuZGVmaW5lZCkge1xuICAgIGNsb2Nrc2VxID0gY2xvY2tzZXEgKyAxICYgMHgzZmZmO1xuICB9IC8vIFJlc2V0IG5zZWNzIGlmIGNsb2NrIHJlZ3Jlc3NlcyAobmV3IGNsb2Nrc2VxKSBvciB3ZSd2ZSBtb3ZlZCBvbnRvIGEgbmV3XG4gIC8vIHRpbWUgaW50ZXJ2YWxcblxuXG4gIGlmICgoZHQgPCAwIHx8IG1zZWNzID4gX2xhc3RNU2VjcykgJiYgb3B0aW9ucy5uc2VjcyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbnNlY3MgPSAwO1xuICB9IC8vIFBlciA0LjIuMS4yIFRocm93IGVycm9yIGlmIHRvbyBtYW55IHV1aWRzIGFyZSByZXF1ZXN0ZWRcblxuXG4gIGlmIChuc2VjcyA+PSAxMDAwMCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcInV1aWQudjEoKTogQ2FuJ3QgY3JlYXRlIG1vcmUgdGhhbiAxME0gdXVpZHMvc2VjXCIpO1xuICB9XG5cbiAgX2xhc3RNU2VjcyA9IG1zZWNzO1xuICBfbGFzdE5TZWNzID0gbnNlY3M7XG4gIF9jbG9ja3NlcSA9IGNsb2Nrc2VxOyAvLyBQZXIgNC4xLjQgLSBDb252ZXJ0IGZyb20gdW5peCBlcG9jaCB0byBHcmVnb3JpYW4gZXBvY2hcblxuICBtc2VjcyArPSAxMjIxOTI5MjgwMDAwMDsgLy8gYHRpbWVfbG93YFxuXG4gIGNvbnN0IHRsID0gKChtc2VjcyAmIDB4ZmZmZmZmZikgKiAxMDAwMCArIG5zZWNzKSAlIDB4MTAwMDAwMDAwO1xuICBiW2krK10gPSB0bCA+Pj4gMjQgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gMTYgJiAweGZmO1xuICBiW2krK10gPSB0bCA+Pj4gOCAmIDB4ZmY7XG4gIGJbaSsrXSA9IHRsICYgMHhmZjsgLy8gYHRpbWVfbWlkYFxuXG4gIGNvbnN0IHRtaCA9IG1zZWNzIC8gMHgxMDAwMDAwMDAgKiAxMDAwMCAmIDB4ZmZmZmZmZjtcbiAgYltpKytdID0gdG1oID4+PiA4ICYgMHhmZjtcbiAgYltpKytdID0gdG1oICYgMHhmZjsgLy8gYHRpbWVfaGlnaF9hbmRfdmVyc2lvbmBcblxuICBiW2krK10gPSB0bWggPj4+IDI0ICYgMHhmIHwgMHgxMDsgLy8gaW5jbHVkZSB2ZXJzaW9uXG5cbiAgYltpKytdID0gdG1oID4+PiAxNiAmIDB4ZmY7IC8vIGBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkYCAoUGVyIDQuMi4yIC0gaW5jbHVkZSB2YXJpYW50KVxuXG4gIGJbaSsrXSA9IGNsb2Nrc2VxID4+PiA4IHwgMHg4MDsgLy8gYGNsb2NrX3NlcV9sb3dgXG5cbiAgYltpKytdID0gY2xvY2tzZXEgJiAweGZmOyAvLyBgbm9kZWBcblxuICBmb3IgKGxldCBuID0gMDsgbiA8IDY7ICsrbikge1xuICAgIGJbaSArIG5dID0gbm9kZVtuXTtcbiAgfVxuXG4gIHJldHVybiBidWYgfHwgKDAsIF9zdHJpbmdpZnkudW5zYWZlU3RyaW5naWZ5KShiKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdjE7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92ID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi92MzUuanNcIikpO1xuXG52YXIgX21kID0gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChyZXF1aXJlKFwiLi9tZDUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCB2MyA9ICgwLCBfdi5kZWZhdWx0KSgndjMnLCAweDMwLCBfbWQuZGVmYXVsdCk7XG52YXIgX2RlZmF1bHQgPSB2MztcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5VUkwgPSBleHBvcnRzLkROUyA9IHZvaWQgMDtcbmV4cG9ydHMuZGVmYXVsdCA9IHYzNTtcblxudmFyIF9zdHJpbmdpZnkgPSByZXF1aXJlKFwiLi9zdHJpbmdpZnkuanNcIik7XG5cbnZhciBfcGFyc2UgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3BhcnNlLmpzXCIpKTtcblxuZnVuY3Rpb24gX2ludGVyb3BSZXF1aXJlRGVmYXVsdChvYmopIHsgcmV0dXJuIG9iaiAmJiBvYmouX19lc01vZHVsZSA/IG9iaiA6IHsgZGVmYXVsdDogb2JqIH07IH1cblxuZnVuY3Rpb24gc3RyaW5nVG9CeXRlcyhzdHIpIHtcbiAgc3RyID0gdW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KHN0cikpOyAvLyBVVEY4IGVzY2FwZVxuXG4gIGNvbnN0IGJ5dGVzID0gW107XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBieXRlcy5wdXNoKHN0ci5jaGFyQ29kZUF0KGkpKTtcbiAgfVxuXG4gIHJldHVybiBieXRlcztcbn1cblxuY29uc3QgRE5TID0gJzZiYTdiODEwLTlkYWQtMTFkMS04MGI0LTAwYzA0ZmQ0MzBjOCc7XG5leHBvcnRzLkROUyA9IEROUztcbmNvbnN0IFVSTCA9ICc2YmE3YjgxMS05ZGFkLTExZDEtODBiNC0wMGMwNGZkNDMwYzgnO1xuZXhwb3J0cy5VUkwgPSBVUkw7XG5cbmZ1bmN0aW9uIHYzNShuYW1lLCB2ZXJzaW9uLCBoYXNoZnVuYykge1xuICBmdW5jdGlvbiBnZW5lcmF0ZVVVSUQodmFsdWUsIG5hbWVzcGFjZSwgYnVmLCBvZmZzZXQpIHtcbiAgICB2YXIgX25hbWVzcGFjZTtcblxuICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICB2YWx1ZSA9IHN0cmluZ1RvQnl0ZXModmFsdWUpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgbmFtZXNwYWNlID09PSAnc3RyaW5nJykge1xuICAgICAgbmFtZXNwYWNlID0gKDAsIF9wYXJzZS5kZWZhdWx0KShuYW1lc3BhY2UpO1xuICAgIH1cblxuICAgIGlmICgoKF9uYW1lc3BhY2UgPSBuYW1lc3BhY2UpID09PSBudWxsIHx8IF9uYW1lc3BhY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9uYW1lc3BhY2UubGVuZ3RoKSAhPT0gMTYpIHtcbiAgICAgIHRocm93IFR5cGVFcnJvcignTmFtZXNwYWNlIG11c3QgYmUgYXJyYXktbGlrZSAoMTYgaXRlcmFibGUgaW50ZWdlciB2YWx1ZXMsIDAtMjU1KScpO1xuICAgIH0gLy8gQ29tcHV0ZSBoYXNoIG9mIG5hbWVzcGFjZSBhbmQgdmFsdWUsIFBlciA0LjNcbiAgICAvLyBGdXR1cmU6IFVzZSBzcHJlYWQgc3ludGF4IHdoZW4gc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMsIGUuZy4gYGJ5dGVzID1cbiAgICAvLyBoYXNoZnVuYyhbLi4ubmFtZXNwYWNlLCAuLi4gdmFsdWVdKWBcblxuXG4gICAgbGV0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoMTYgKyB2YWx1ZS5sZW5ndGgpO1xuICAgIGJ5dGVzLnNldChuYW1lc3BhY2UpO1xuICAgIGJ5dGVzLnNldCh2YWx1ZSwgbmFtZXNwYWNlLmxlbmd0aCk7XG4gICAgYnl0ZXMgPSBoYXNoZnVuYyhieXRlcyk7XG4gICAgYnl0ZXNbNl0gPSBieXRlc1s2XSAmIDB4MGYgfCB2ZXJzaW9uO1xuICAgIGJ5dGVzWzhdID0gYnl0ZXNbOF0gJiAweDNmIHwgMHg4MDtcblxuICAgIGlmIChidWYpIHtcbiAgICAgIG9mZnNldCA9IG9mZnNldCB8fCAwO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDE2OyArK2kpIHtcbiAgICAgICAgYnVmW29mZnNldCArIGldID0gYnl0ZXNbaV07XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBidWY7XG4gICAgfVxuXG4gICAgcmV0dXJuICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkoYnl0ZXMpO1xuICB9IC8vIEZ1bmN0aW9uI25hbWUgaXMgbm90IHNldHRhYmxlIG9uIHNvbWUgcGxhdGZvcm1zICgjMjcwKVxuXG5cbiAgdHJ5IHtcbiAgICBnZW5lcmF0ZVVVSUQubmFtZSA9IG5hbWU7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1lbXB0eVxuICB9IGNhdGNoIChlcnIpIHt9IC8vIEZvciBDb21tb25KUyBkZWZhdWx0IGV4cG9ydCBzdXBwb3J0XG5cblxuICBnZW5lcmF0ZVVVSUQuRE5TID0gRE5TO1xuICBnZW5lcmF0ZVVVSUQuVVJMID0gVVJMO1xuICByZXR1cm4gZ2VuZXJhdGVVVUlEO1xufSIsIlwidXNlIHN0cmljdFwiO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgXCJfX2VzTW9kdWxlXCIsIHtcbiAgdmFsdWU6IHRydWVcbn0pO1xuZXhwb3J0cy5kZWZhdWx0ID0gdm9pZCAwO1xuXG52YXIgX25hdGl2ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vbmF0aXZlLmpzXCIpKTtcblxudmFyIF9ybmcgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3JuZy5qc1wiKSk7XG5cbnZhciBfc3RyaW5naWZ5ID0gcmVxdWlyZShcIi4vc3RyaW5naWZ5LmpzXCIpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiB2NChvcHRpb25zLCBidWYsIG9mZnNldCkge1xuICBpZiAoX25hdGl2ZS5kZWZhdWx0LnJhbmRvbVVVSUQgJiYgIWJ1ZiAmJiAhb3B0aW9ucykge1xuICAgIHJldHVybiBfbmF0aXZlLmRlZmF1bHQucmFuZG9tVVVJRCgpO1xuICB9XG5cbiAgb3B0aW9ucyA9IG9wdGlvbnMgfHwge307XG5cbiAgY29uc3Qgcm5kcyA9IG9wdGlvbnMucmFuZG9tIHx8IChvcHRpb25zLnJuZyB8fCBfcm5nLmRlZmF1bHQpKCk7IC8vIFBlciA0LjQsIHNldCBiaXRzIGZvciB2ZXJzaW9uIGFuZCBgY2xvY2tfc2VxX2hpX2FuZF9yZXNlcnZlZGBcblxuXG4gIHJuZHNbNl0gPSBybmRzWzZdICYgMHgwZiB8IDB4NDA7XG4gIHJuZHNbOF0gPSBybmRzWzhdICYgMHgzZiB8IDB4ODA7IC8vIENvcHkgYnl0ZXMgdG8gYnVmZmVyLCBpZiBwcm92aWRlZFxuXG4gIGlmIChidWYpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfHwgMDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7ICsraSkge1xuICAgICAgYnVmW29mZnNldCArIGldID0gcm5kc1tpXTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmO1xuICB9XG5cbiAgcmV0dXJuICgwLCBfc3RyaW5naWZ5LnVuc2FmZVN0cmluZ2lmeSkocm5kcyk7XG59XG5cbnZhciBfZGVmYXVsdCA9IHY0O1xuZXhwb3J0cy5kZWZhdWx0ID0gX2RlZmF1bHQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBcIl9fZXNNb2R1bGVcIiwge1xuICB2YWx1ZTogdHJ1ZVxufSk7XG5leHBvcnRzLmRlZmF1bHQgPSB2b2lkIDA7XG5cbnZhciBfdiA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdjM1LmpzXCIpKTtcblxudmFyIF9zaGEgPSBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KHJlcXVpcmUoXCIuL3NoYTEuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5jb25zdCB2NSA9ICgwLCBfdi5kZWZhdWx0KSgndjUnLCAweDUwLCBfc2hhLmRlZmF1bHQpO1xudmFyIF9kZWZhdWx0ID0gdjU7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF9yZWdleCA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vcmVnZXguanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiB2YWxpZGF0ZSh1dWlkKSB7XG4gIHJldHVybiB0eXBlb2YgdXVpZCA9PT0gJ3N0cmluZycgJiYgX3JlZ2V4LmRlZmF1bHQudGVzdCh1dWlkKTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdmFsaWRhdGU7XG5leHBvcnRzLmRlZmF1bHQgPSBfZGVmYXVsdDsiLCJcInVzZSBzdHJpY3RcIjtcblxuT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFwiX19lc01vZHVsZVwiLCB7XG4gIHZhbHVlOiB0cnVlXG59KTtcbmV4cG9ydHMuZGVmYXVsdCA9IHZvaWQgMDtcblxudmFyIF92YWxpZGF0ZSA9IF9pbnRlcm9wUmVxdWlyZURlZmF1bHQocmVxdWlyZShcIi4vdmFsaWRhdGUuanNcIikpO1xuXG5mdW5jdGlvbiBfaW50ZXJvcFJlcXVpcmVEZWZhdWx0KG9iaikgeyByZXR1cm4gb2JqICYmIG9iai5fX2VzTW9kdWxlID8gb2JqIDogeyBkZWZhdWx0OiBvYmogfTsgfVxuXG5mdW5jdGlvbiB2ZXJzaW9uKHV1aWQpIHtcbiAgaWYgKCEoMCwgX3ZhbGlkYXRlLmRlZmF1bHQpKHV1aWQpKSB7XG4gICAgdGhyb3cgVHlwZUVycm9yKCdJbnZhbGlkIFVVSUQnKTtcbiAgfVxuXG4gIHJldHVybiBwYXJzZUludCh1dWlkLnNsaWNlKDE0LCAxNSksIDE2KTtcbn1cblxudmFyIF9kZWZhdWx0ID0gdmVyc2lvbjtcbmV4cG9ydHMuZGVmYXVsdCA9IF9kZWZhdWx0OyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0XCIpOyIsIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZShcInJlYWN0LWRvbVwiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MDcpO1xuIl0sIm5hbWVzIjpbIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJfZXh0ZW5kcyIsIk9iamVjdCIsImFzc2lnbiIsInRhcmdldCIsImkiLCJhcmd1bWVudHMiLCJsZW5ndGgiLCJzb3VyY2UiLCJrZXkiLCJwcm90b3R5cGUiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGwiLCJhcHBseSIsInRoaXMiLCJfaW5oZXJpdHNMb29zZSIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsImNyZWF0ZSIsImNvbnN0cnVjdG9yIiwiX19wcm90b19fIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJrZXlzIiwiaW5kZXhPZiIsIl9wYXRoIiwiYmluZCIsInByb3BzIiwieG1sbnMiLCJ3aWR0aCIsImhlaWdodCIsImZpbGwiLCJzdHJva2UiLCJzdHJva2VMaW5lY2FwIiwiZCIsIm9wdGlvbnMiLCJjYXB0dXJlIiwidXNlT3V0c2lkZUNsaWNrIiwiY2FsbGJhY2siLCJyZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJoYW5kbGVDbGljayIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9fcmVhZCIsIm8iLCJuIiwibSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiciIsImUiLCJhciIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJfYSIsInVzZVN0YXRlIiwiZGF0YSIsInVuZGVmaW5lZCIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwicmVzdWx0Iiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwiZGlzcGF0Y2giLCJ1c2VDYWxsYmFjayIsInByb21pc2UiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsImVycm9yXzEiLCJib2R5IiwiZiIsInkiLCJ0IiwiZyIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsInYiLCJvcCIsIlR5cGVFcnJvciIsInBvcCIsInN0ZXAiLCJfX2dlbmVyYXRvciIsIlAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwidGhlbiIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwiSU5JVElBTF9DQUNIRSIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsIlNUUl9VTkRFRklORUQiLCJpc1dpbmRvd0RlZmluZWQiLCJ3aW5kb3ciLCJpc0RvY3VtZW50RGVmaW5lZCIsImNyZWF0ZUNhY2hlSGVscGVyIiwiY2FjaGUiLCJzdGF0ZSIsImdldCIsImluZm8iLCJwcmV2IiwidGFibGUiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsInR5cGUiLCJpc0RhdGUiLCJEYXRlIiwiaW5kZXgiLCJSZWdFeHAiLCJ0b0pTT04iLCJ0b1N0cmluZyIsIkpTT04iLCJzdHJpbmdpZnkiLCJzZXQiLCJBcnJheSIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJwcmVzZXQiLCJpc09ubGluZSIsImlzVmlzaWJsZSIsInZpc2liaWxpdHlTdGF0ZSIsImRlZmF1bHRDb25maWdPcHRpb25zIiwiaW5pdEZvY3VzIiwiaW5pdFJlY29ubmVjdCIsIm9uT25saW5lIiwib25PZmZsaW5lIiwiSVNfUkVBQ1RfTEVHQUNZIiwiSVNfU0VSVkVSIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJpbmNsdWRlcyIsImVmZmVjdGl2ZVR5cGUiLCJzYXZlRGF0YSIsImVyciIsImFyZ3MiLCJpc0FycmF5IiwiX190aW1lc3RhbXAiLCJnZXRUaW1lc3RhbXAiLCJNVVRBVEVfRVZFTlQiLCJjb25zdGFudHMiLCJhc3luYyIsImludGVybmFsTXV0YXRlIiwiX2tleSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwidGhyb3dPbkVycm9yIiwicmV2YWxpZGF0ZSIsInJvbGxiYWNrT25FcnJvck9wdGlvbiIsInJvbGxiYWNrT25FcnJvciIsIm9wdGltaXN0aWNEYXRhIiwia2V5RmlsdGVyIiwibWF0Y2hlZEtleXMiLCJpdCIsImtleUl0IiwidGVzdCIsIl9rIiwiYWxsIiwibWFwIiwibXV0YXRlQnlLZXkiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJNVVRBVElPTiIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwic3RhcnRSZXZhbGlkYXRlIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwiZGlzcGxheWVkRGF0YSIsImN1cnJlbnREYXRhIiwiX2MiLCJjb21taXR0ZWREYXRhIiwiY2F0Y2giLCJyZXMiLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJzdWJzY3JpcHRpb25zIiwic3Vic2NyaWJlIiwic3VicyIsInNwbGljZSIsInNldHRlciIsImZuIiwiaW5pdFByb3ZpZGVyIiwicmVsZWFzZUZvY3VzIiwic2V0VGltZW91dCIsInJlbGVhc2VSZWNvbm5lY3QiLCJkZWxldGUiLCJNYXAiLCJkZWZhdWx0Q29uZmlnIiwib25Mb2FkaW5nU2xvdyIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJvbkVycm9yUmV0cnkiLCJfXyIsImNvbmZpZyIsIm1heFJldHJ5Q291bnQiLCJlcnJvclJldHJ5Q291bnQiLCJjdXJyZW50UmV0cnlDb3VudCIsInJldHJ5Q291bnQiLCJ0aW1lb3V0IiwiTWF0aCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIlNXUkNvbmZpZ0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZW5hYmxlRGV2dG9vbHMiLCJfX1NXUl9ERVZUT09MU19VU0VfXyIsInVzZSIsInVzZVNXUkNvbmZpZyIsInVzZUNvbnRleHQiLCJjb25jYXQiLCJ1c2VTV1JOZXh0Iiwia2V5XyIsImZldGNoZXJfIiwiUFJFTE9BRCIsInJlcSIsIl9fU1dSX0RFVlRPT0xTX1JFQUNUX18iLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlTWVtbyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsInBhcmVudENvbmZpZyIsImlzRnVuY3Rpb25hbENvbmZpZyIsImV4dGVuZGVkQ29uZmlnIiwidTEiLCJmMSIsInUyIiwiZjIiLCJtZXJnZUNvbmZpZ3MiLCJjYWNoZUNvbnRleHRSZWYiLCJjYWNoZUNvbnRleHQiLCJjcmVhdGVFbGVtZW50IiwiUHJvdmlkZXIiLCJjYyIsIm9iaiIsIm91dCIsInRtcCIsImsiLCJfX2Fzc2lnbiIsInMiLCJwIiwiX19jcmVhdGVCaW5kaW5nIiwiazIiLCJlbnVtZXJhYmxlIiwiX19zZXRNb2R1bGVEZWZhdWx0IiwiX19pbXBvcnRTdGFyIiwibW9kIiwiX19lc01vZHVsZSIsImV4cG9ydHMiLCJIaW50IiwicmVhY3RfMSIsInV0aWxzXzEiLCJfYiIsImNoaWxkIiwiZGVmYXVsdCIsIkNoaWxkcmVuIiwib25seSIsImNoaWxkcmVuIiwidG9Mb3dlckNhc2UiLCJkaXNhYmxlSGludCIsImFsbG93VGFiRmlsbCIsImFsbG93RW50ZXJGaWxsIiwib25GaWxsIiwib25IaW50IiwidmFsdWVNb2RpZmllciIsImNoaWxkUHJvcHMiLCJtYWluSW5wdXRSZWYiLCJoaW50V3JhcHBlclJlZiIsImhpbnRSZWYiLCJ1bk1vZGlmaWVkSW5wdXRUZXh0Iiwic2V0VW5tb2RpZmllZElucHV0VGV4dCIsIl9kIiwidGV4dCIsInNldFRleHQiLCJfZSIsImhpbnQiLCJzZXRIaW50IiwiX2YiLCJtYXRjaCIsInNldE1hdGNoIiwiX2ciLCJjaGFuZ2VFdmVudCIsInNldENoYW5nZUV2ZW50IiwiZHVwbGljYXRlIiwiZ2V0Rmlyc3REdXBsaWNhdGVPcHRpb24iLCJjb25zb2xlIiwid2FybiIsImlucHV0U3R5bGUiLCJnZXRDb21wdXRlZFN0eWxlIiwic3R5bGVIaW50Iiwic2V0SGludFRleHRBbmRJZCIsImZpbHRlciIsIngiLCJzdGFydHNXaXRoIiwic29ydEFzYyIsImdldE1hdGNoIiwic2xpY2UiLCJoYW5kbGVPbkZpbGwiLCJuZXdVbk1vZGlmaWVkVGV4dCIsIm9uQ2hhbmdlIiwic3R5bGUiLCJmb250RmFtaWx5IiwiZm9udFNpemUiLCJsaW5lSGVpZ2h0IiwiYm94U2l6aW5nIiwibWFyZ2luIiwiaW50ZXJwb2xhdGVTdHlsZSIsInBhZGRpbmciLCJib3JkZXJTdHlsZSIsImJvcmRlcldpZHRoIiwiY2hpbGRSZWYiLCJjbG9uZUVsZW1lbnQiLCJtYWluSW5wdXQiLCJwZXJzaXN0IiwibW9kaWZpZWRWYWx1ZSIsIm9uQmx1ciIsInJlbGF0ZWRUYXJnZXQiLCJvbkZvY3VzIiwib25LZXlEb3duIiwiY2FyZXRJc0F0VGV4dEVuZCIsImN1cnJlbnRUYXJnZXQiLCJzZWxlY3Rpb25FbmQiLCJwcmV2ZW50RGVmYXVsdCIsIm1lcmdlUmVmcyIsImNsYXNzTmFtZSIsInBvc2l0aW9uIiwiRnJhZ21lbnQiLCJkaXNwbGF5IiwicG9pbnRlckV2ZW50cyIsImJhY2tncm91bmRDb2xvciIsImJvcmRlckNvbG9yIiwiYm94U2hhZG93IiwiY29sb3IiLCJ0b3AiLCJsZWZ0IiwidmlzaWJpbGl0eSIsIndoaXRlU3BhY2UiLCJvbkNsaWNrIiwiaGludENhcmV0UG9zaXRpb24iLCJmb2N1cyIsImNhcmV0UG9zaXRpb24iLCJzZXRTZWxlY3Rpb25SYW5nZSIsImJhY2tncm91bmQiLCJvdXRsaW5lIiwiYm9yZGVyIiwiY2FyZXRDb2xvciIsImRlZmF1bHRWYWx1ZSIsInRhYkluZGV4IiwicmVmcyIsIl9pIiwiZmlsdGVyZWRSZWZzIiwiQm9vbGVhbiIsImluc3QiLCJmaWx0ZXJlZFJlZnNfMSIsInN0eWxlcyIsImF0dHIiLCJzdWJhdHRyIiwicmVwbGFjZSIsInRvVXBwZXJDYXNlIiwiZGlyIiwiam9pbiIsImFycmF5IiwidHJhY2tlciIsImlzZmYiLCJ1c2VyQWdlbnQiLCJhZGRFdmVudCIsIm9iamVjdCIsIm1ldGhvZCIsInVzZUNhcHR1cmUiLCJhdHRhY2hFdmVudCIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJnZXRLZXlzIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJ1cCIsInJpZ2h0IiwiZG93biIsImRlbCIsImlucyIsImluc2VydCIsImhvbWUiLCJlbmQiLCJwYWdldXAiLCJwYWdlZG93biIsImNhcHNsb2NrIiwibnVtXzAiLCJudW1fMSIsIm51bV8yIiwibnVtXzMiLCJudW1fNCIsIm51bV81IiwibnVtXzYiLCJudW1fNyIsIm51bV84IiwibnVtXzkiLCJudW1fbXVsdGlwbHkiLCJudW1fYWRkIiwibnVtX2VudGVyIiwibnVtX3N1YnRyYWN0IiwibnVtX2RlY2ltYWwiLCJudW1fZGl2aWRlIiwiX21vZGlmaWVyIiwic2hpZnQiLCJhbHQiLCJvcHRpb24iLCJjdHJsIiwiY29udHJvbCIsImNtZCIsImNvbW1hbmQiLCJtb2RpZmllck1hcCIsInNoaWZ0S2V5IiwiY3RybEtleSIsImFsdEtleSIsIm1ldGFLZXkiLCJfbW9kcyIsIl9oYW5kbGVycyIsIl9kb3duS2V5cyIsIndpbkxpc3RlbmRGb2N1cyIsIl9zY29wZSIsImVsZW1lbnRIYXNCaW5kRXZlbnQiLCJjb2RlIiwiY2hhckNvZGVBdCIsInNldFNjb3BlIiwic2NvcGUiLCJnZXRTY29wZSIsImVhY2hVbmJpbmQiLCJfcmVmIiwiX3JlZiRzcGxpdEtleSIsInNwbGl0S2V5IiwiZm9yRWFjaCIsIm9yaWdpbktleSIsInVuYmluZEtleXMiLCJsZW4iLCJsYXN0S2V5Iiwia2V5Q29kZSIsInJlY29yZCIsImExIiwiYTIiLCJhcnIxIiwiYXJyMiIsImlzSW5kZXgiLCJjb21wYXJlQXJyYXkiLCJldmVudEhhbmRsZXIiLCJoYW5kbGVyIiwiZWxlbWVudCIsIm1vZGlmaWVyc01hdGNoIiwic2hvcnRjdXQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImlzRWxlbWVudEJpbmQiLCJjbGVhck1vZGlmaWVyIiwiX2FwaSIsImRlbGV0ZVNjb3BlIiwibmV3U2NvcGUiLCJoYW5kbGVycyIsImdldFByZXNzZWRLZXlDb2RlcyIsImlzUHJlc3NlZCIsInNyY0VsZW1lbnQiLCJ0YWdOYW1lIiwiZmxhZyIsImlzQ29udGVudEVkaXRhYmxlIiwicmVhZE9ubHkiLCJ0cmlnZ2VyIiwiZmluZCIsIml0ZW0iLCJ1bmJpbmQiLCJrZXlzSW5mbyIsIl9sZW4iLCJrZXlNYXAiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsImlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQiLCJldiIsInVzZUhvdGtleXMiLCJkZXBzIiwiX3JlZjIiLCJfcmVmMiRmaWx0ZXJQcmV2ZW50RGUiLCJmaWx0ZXJQcmV2ZW50RGVmYXVsdCIsIl9yZWYyJGVuYWJsZWQiLCJlbmFibGVkIiwiX3JlZjIkZW5hYmxlT25Db250ZW50IiwiZW5hYmxlT25Db250ZW50RWRpdGFibGUiLCJtZW1vaXNlZENhbGxiYWNrIiwia2V5Ym9hcmRFdmVudCIsImhvdGtleXNFdmVudCIsIl9rZXlib2FyZEV2ZW50JHRhcmdldCIsIl9yZWYkY3VycmVudCIsImFjdGl2ZUVsZW1lbnQiLCJpc0hvdGtleVByZXNzZWQiLCJyZXBsYWNlQ2xhc3NOYW1lIiwib3JpZ0NsYXNzIiwiY2xhc3NUb1JlbW92ZSIsImRpc2FibGVkIiwiZm9yY2VSZWZsb3ciLCJub2RlIiwic2Nyb2xsVG9wIiwiVU5NT1VOVEVEIiwiRVhJVEVEIiwiRU5URVJJTkciLCJFTlRFUkVEIiwiRVhJVElORyIsIlRyYW5zaXRpb24iLCJfUmVhY3QkQ29tcG9uZW50IiwiY29udGV4dCIsImluaXRpYWxTdGF0dXMiLCJhcHBlYXIiLCJpc01vdW50aW5nIiwiYXBwZWFyU3RhdHVzIiwiaW4iLCJ1bm1vdW50T25FeGl0IiwibW91bnRPbkVudGVyIiwic3RhdHVzIiwibmV4dENhbGxiYWNrIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwicHJldlN0YXRlIiwiX3Byb3RvIiwiY29tcG9uZW50RGlkTW91bnQiLCJ1cGRhdGVTdGF0dXMiLCJjb21wb25lbnREaWRVcGRhdGUiLCJwcmV2UHJvcHMiLCJuZXh0U3RhdHVzIiwiY29tcG9uZW50V2lsbFVubW91bnQiLCJjYW5jZWxOZXh0Q2FsbGJhY2siLCJnZXRUaW1lb3V0cyIsImV4aXQiLCJtb3VudGluZyIsIm5vZGVSZWYiLCJwZXJmb3JtRW50ZXIiLCJwZXJmb3JtRXhpdCIsInNldFN0YXRlIiwiX3RoaXMyIiwiYXBwZWFyaW5nIiwibWF5YmVOb2RlIiwibWF5YmVBcHBlYXJpbmciLCJ0aW1lb3V0cyIsImVudGVyVGltZW91dCIsInNhZmVTZXRTdGF0ZSIsIm9uRW50ZXJlZCIsIm9uRW50ZXIiLCJvbkVudGVyaW5nIiwib25UcmFuc2l0aW9uRW5kIiwiX3RoaXMzIiwib25FeGl0Iiwib25FeGl0aW5nIiwib25FeGl0ZWQiLCJjYW5jZWwiLCJuZXh0U3RhdGUiLCJzZXROZXh0Q2FsbGJhY2siLCJfdGhpczQiLCJhY3RpdmUiLCJkb2VzTm90SGF2ZVRpbWVvdXRPckxpc3RlbmVyIiwiYWRkRW5kTGlzdGVuZXIiLCJfcmVmMyIsIm1heWJlTmV4dENhbGxiYWNrIiwicmVuZGVyIiwiX3RoaXMkcHJvcHMiLCJUcmFuc2l0aW9uR3JvdXBDb250ZXh0IiwiY29udGV4dFR5cGUiLCJwcm9wVHlwZXMiLCJkZWZhdWx0UHJvcHMiLCJyZW1vdmVDbGFzcyIsImNsYXNzZXMiLCJjIiwiY2xhc3NMaXN0IiwicmVtb3ZlIiwic2V0QXR0cmlidXRlIiwiYmFzZVZhbCIsIkNTU1RyYW5zaXRpb24iLCJhcHBsaWVkQ2xhc3NlcyIsIl90aGlzJHJlc29sdmVBcmd1bWVudCIsInJlc29sdmVBcmd1bWVudHMiLCJyZW1vdmVDbGFzc2VzIiwiYWRkQ2xhc3MiLCJfdGhpcyRyZXNvbHZlQXJndW1lbnQyIiwiX3RoaXMkcmVzb2x2ZUFyZ3VtZW50MyIsImdldENsYXNzTmFtZXMiLCJjbGFzc05hbWVzIiwiaXNTdHJpbmdDbGFzc05hbWVzIiwiYmFzZUNsYXNzTmFtZSIsImFjdGl2ZUNsYXNzTmFtZSIsImRvbmVDbGFzc05hbWUiLCJwaGFzZSIsImFkZCIsImhhc0NsYXNzIiwiX2FkZENsYXNzIiwiX3RoaXMkYXBwbGllZENsYXNzZXMkIiwiYmFzZSIsImdldENoaWxkTWFwcGluZyIsIm1hcEZuIiwiaXNWYWxpZEVsZW1lbnQiLCJtYXBwZXIiLCJnZXRQcm9wIiwicHJvcCIsImdldE5leHRDaGlsZE1hcHBpbmciLCJuZXh0UHJvcHMiLCJwcmV2Q2hpbGRNYXBwaW5nIiwibmV4dENoaWxkTWFwcGluZyIsImdldFZhbHVlRm9yS2V5IiwibmV4dEtleXNQZW5kaW5nIiwicGVuZGluZ0tleXMiLCJwcmV2S2V5IiwiY2hpbGRNYXBwaW5nIiwibmV4dEtleSIsInBlbmRpbmdOZXh0S2V5IiwibWVyZ2VDaGlsZE1hcHBpbmdzIiwiaGFzUHJldiIsImhhc05leHQiLCJwcmV2Q2hpbGQiLCJpc0xlYXZpbmciLCJ2YWx1ZXMiLCJUcmFuc2l0aW9uR3JvdXAiLCJoYW5kbGVFeGl0ZWQiLCJjb250ZXh0VmFsdWUiLCJmaXJzdFJlbmRlciIsIm1vdW50ZWQiLCJjdXJyZW50Q2hpbGRNYXBwaW5nIiwiQ29tcG9uZW50IiwiY29tcG9uZW50IiwiY2hpbGRGYWN0b3J5IiwiUmVwbGFjZVRyYW5zaXRpb24iLCJfYXJncyIsImhhbmRsZUVudGVyIiwiX2xlbjIiLCJfa2V5MiIsImhhbmRsZUxpZmVjeWNsZSIsImhhbmRsZUVudGVyaW5nIiwiX2xlbjMiLCJfa2V5MyIsImhhbmRsZUVudGVyZWQiLCJfbGVuNCIsIl9rZXk0IiwiaGFuZGxlRXhpdCIsIl9sZW41IiwiX2tleTUiLCJoYW5kbGVFeGl0aW5nIiwiX2xlbjYiLCJfa2V5NiIsIl9sZW43IiwiX2tleTciLCJpZHgiLCJvcmlnaW5hbEFyZ3MiLCJfY2hpbGQkcHJvcHMiLCJpblByb3AiLCJfUmVhY3QkQ2hpbGRyZW4kdG9BcnIiLCJmaXJzdCIsInNlY29uZCIsIl9sZWF2ZVJlbmRlcnMiLCJfZW50ZXJSZW5kZXJzIiwibW9kZXMiLCJjYWxsSG9vayIsIm5hbWUiLCJjYiIsIl9lbGVtZW50JHByb3BzIiwibGVhdmVSZW5kZXJzIiwiY2hhbmdlU3RhdGUiLCJlbnRlclJlbmRlcnMiLCJfcmVmNCIsIlN3aXRjaFRyYW5zaXRpb24iLCJhcHBlYXJlZCIsIm1vZGUiLCJvbGRDaGlsZHJlbiIsIm5ld0NoaWxkcmVuIiwiX3RoaXMkc3RhdGUiLCJjcmVhdGVDbGFzcyIsImRlZmluZVByb3BlcnRpZXMiLCJkZXNjcmlwdG9yIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJDb25zdHJ1Y3RvciIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3RlbXAiLCJpbnN0YW5jZSIsImNsYXNzQ2FsbENoZWNrIiwiZ2V0UHJvdG90eXBlT2YiLCJfbGFzdFJlbmRlcmVkU3RhcnRJbmRleCIsIl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJfbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyIsIl9vbkl0ZW1zUmVuZGVyZWQiLCJ2aXNpYmxlU3RhcnRJbmRleCIsInZpc2libGVTdG9wSW5kZXgiLCJfZW5zdXJlUm93c0xvYWRlZCIsIl9zZXRSZWYiLCJsaXN0UmVmIiwiX2xpc3RSZWYiLCJzZXRQcm90b3R5cGVPZiIsImluaGVyaXRzIiwiYXV0b1JlbG9hZCIsIm9uSXRlbXNSZW5kZXJlZCIsInN0YXJ0SW5kZXgiLCJzdG9wSW5kZXgiLCJfcHJvcHMiLCJpc0l0ZW1Mb2FkZWQiLCJpdGVtQ291bnQiLCJfcHJvcHMkbWluaW11bUJhdGNoU2kiLCJtaW5pbXVtQmF0Y2hTaXplIiwiX3Byb3BzJHRocmVzaG9sZCIsInRocmVzaG9sZCIsInVubG9hZGVkUmFuZ2VzIiwicmFuZ2VTdGFydEluZGV4IiwicmFuZ2VTdG9wSW5kZXgiLCJfaW5kZXgiLCJwb3RlbnRpYWxTdG9wSW5kZXgiLCJtaW4iLCJtYXgiLCJfaW5kZXgyIiwiX2luZGV4MyIsInNjYW5Gb3JVbmxvYWRlZFJhbmdlcyIsInNvbWUiLCJzdGFydE9yU3RvcCIsIl9sb2FkVW5sb2FkZWRSYW5nZXMiLCJsb2FkTW9yZUl0ZW1zIiwibG9hZE1vcmVSb3dzIiwiX2xvb3AiLCJsYXN0UmVuZGVyZWRTdGFydEluZGV4IiwibGFzdFJlbmRlcmVkU3RvcEluZGV4IiwicmVzZXRBZnRlckluZGV4IiwiX2dldEl0ZW1TdHlsZUNhY2hlIiwiZm9yY2VVcGRhdGUiLCJQdXJlQ29tcG9uZW50Iiwic2FmZUlzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJhcmVJbnB1dHNFcXVhbCIsIm5ld0lucHV0cyIsImxhc3RJbnB1dHMiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwibm93IiwicGVyZm9ybWFuY2UiLCJjYW5jZWxUaW1lb3V0IiwidGltZW91dElEIiwiY2FuY2VsQW5pbWF0aW9uRnJhbWUiLCJpZCIsInJlcXVlc3RUaW1lb3V0IiwiZGVsYXkiLCJzdGFydCIsInJlcXVlc3RBbmltYXRpb25GcmFtZSIsInRpY2siLCJzaXplIiwiZ2V0U2Nyb2xsYmFyU2l6ZSIsInJlY2FsY3VsYXRlIiwiZGl2Iiwib3ZlcmZsb3ciLCJhcHBlbmRDaGlsZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsImNhY2hlZFJUTFJlc3VsdCIsImdldFJUTE9mZnNldFR5cGUiLCJvdXRlckRpdiIsIm91dGVyU3R5bGUiLCJkaXJlY3Rpb24iLCJpbm5lckRpdiIsImlubmVyU3R5bGUiLCJzY3JvbGxMZWZ0IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwiZGVmYXVsdEl0ZW1LZXkiLCJjb2x1bW5JbmRleCIsInJvd0luZGV4IiwiY3JlYXRlR3JpZENvbXBvbmVudCIsIl9jbGFzcyIsImdldENvbHVtbk9mZnNldCIsImdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCIsImdldEVzdGltYXRlZFRvdGFsV2lkdGgiLCJnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQiLCJnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQiLCJnZXRSb3dIZWlnaHQiLCJnZXRSb3dPZmZzZXQiLCJnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsImluaXRJbnN0YW5jZVByb3BzIiwic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsInZhbGlkYXRlUHJvcHMiLCJHcmlkIiwiX2luc3RhbmNlUHJvcHMiLCJfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCIsIl9vdXRlclJlZiIsImlzU2Nyb2xsaW5nIiwiaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxMZWZ0IiwiaW5pdGlhbFNjcm9sbFRvcCIsInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsInZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX2NhbGxPbkl0ZW1zUmVuZGVyZWQiLCJvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgiLCJvdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIm92ZXJzY2FuUm93U3RhcnRJbmRleCIsIm92ZXJzY2FuUm93U3RvcEluZGV4IiwidmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwidmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJ2aXNpYmxlUm93U3RvcEluZGV4IiwiX2NhbGxPblNjcm9sbCIsIm9uU2Nyb2xsIiwiX2dldEl0ZW1TdHlsZSIsImNvbHVtbldpZHRoIiwicm93SGVpZ2h0IiwiaXRlbVN0eWxlQ2FjaGUiLCJfb2Zmc2V0IiwiaXNSdGwiLCJfX18iLCJfb25TY3JvbGwiLCJfZXZlbnQkY3VycmVudFRhcmdldCIsImNsaWVudEhlaWdodCIsInNjcm9sbEhlaWdodCIsInNjcm9sbFdpZHRoIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsInNjcm9sbFRvIiwic2Nyb2xsVG9JdGVtIiwiX3JlZjQkYWxpZ24iLCJhbGlnbiIsIl90aGlzJHByb3BzMiIsImNvbHVtbkNvdW50Iiwicm93Q291bnQiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsIl90aGlzJHByb3BzMyIsIl9jYWxsUHJvcHNDYWxsYmFja3MiLCJfdGhpcyRzdGF0ZTIiLCJfdGhpcyRwcm9wczQiLCJpbm5lclJlZiIsImlubmVyRWxlbWVudFR5cGUiLCJpbm5lclRhZ05hbWUiLCJpdGVtRGF0YSIsIl90aGlzJHByb3BzNCRpdGVtS2V5IiwiaXRlbUtleSIsIm91dGVyRWxlbWVudFR5cGUiLCJvdXRlclRhZ05hbWUiLCJ1c2VJc1Njcm9sbGluZyIsIl90aGlzJF9nZXRIb3Jpem9udGFsUiIsIl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlciIsImNvbHVtblN0YXJ0SW5kZXgiLCJjb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4iLCJfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyIiwicm93U3RhcnRJbmRleCIsInJvd1N0b3BJbmRleCIsIml0ZW1zIiwiX3Jvd0luZGV4IiwiX2NvbHVtbkluZGV4IiwiZXN0aW1hdGVkVG90YWxXaWR0aCIsIldlYmtpdE92ZXJmbG93U2Nyb2xsaW5nIiwid2lsbENoYW5nZSIsIl90aGlzJHByb3BzNSIsIl90aGlzJF9nZXRIb3Jpem9udGFsUjIiLCJfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4IiwiX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdGFydEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4yIiwiX292ZXJzY2FuUm93U3RhcnRJbmRleCIsIl9vdmVyc2NhblJvd1N0b3BJbmRleCIsIl92aXNpYmxlUm93U3RhcnRJbmRleCIsIl92aXNpYmxlUm93U3RvcEluZGV4IiwiX3RoaXMkc3RhdGUzIiwiX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsTGVmdCIsIl9zY3JvbGxUb3AiLCJfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwiX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX3RoaXMkcHJvcHM2Iiwib3ZlcnNjYW5Db2x1bW5Db3VudCIsIm92ZXJzY2FuQ29sdW1uc0NvdW50Iiwib3ZlcnNjYW5Db3VudCIsIl90aGlzJHN0YXRlNCIsIm92ZXJzY2FuQ291bnRSZXNvbHZlZCIsIm92ZXJzY2FuQmFja3dhcmQiLCJvdmVyc2NhbkZvcndhcmQiLCJfdGhpcyRwcm9wczciLCJvdmVyc2NhblJvd0NvdW50Iiwib3ZlcnNjYW5Sb3dzQ291bnQiLCJfdGhpcyRzdGF0ZTUiLCJfcmVmNSIsIl9yZWY2Iiwicm93TWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRSb3dIZWlnaHQiLCJsYXN0TWVhc3VyZWRSb3dJbmRleCIsInRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzIiwiaXRlbU1ldGFkYXRhIiwib2Zmc2V0IiwiY29sdW1uTWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRDb2x1bW5XaWR0aCIsImxhc3RNZWFzdXJlZENvbHVtbkluZGV4IiwiZ2V0SXRlbU1ldGFkYXRhIiwiaXRlbVR5cGUiLCJpbnN0YW5jZVByb3BzIiwiaXRlbU1ldGFkYXRhTWFwIiwiaXRlbVNpemUiLCJsYXN0TWVhc3VyZWRJbmRleCIsImZpbmROZWFyZXN0SXRlbSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoIiwiaGlnaCIsImxvdyIsIm1pZGRsZSIsImZsb29yIiwiY3VycmVudE9mZnNldCIsImludGVydmFsIiwiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCJzY3JvbGxPZmZzZXQiLCJlc3RpbWF0ZWRUb3RhbFNpemUiLCJtYXhPZmZzZXQiLCJtaW5PZmZzZXQiLCJyb3VuZCIsIlZhcmlhYmxlU2l6ZUdyaWQiLCJyZXNldEFmdGVyQ29sdW1uSW5kZXgiLCJzaG91bGRGb3JjZVVwZGF0ZSIsInJlc2V0QWZ0ZXJJbmRpY2VzIiwicmVzZXRBZnRlclJvd0luZGV4IiwiX3JlZjYkc2hvdWxkRm9yY2VVcGRhIiwiX3JlZjciLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSIsImRlZmF1bHRJdGVtS2V5JDEiLCJjcmVhdGVMaXN0Q29tcG9uZW50IiwiZ2V0SXRlbU9mZnNldCIsImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsImdldEl0ZW1TaXplIiwiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJMaXN0Iiwic2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbE9mZnNldCIsIm92ZXJzY2FuU3RhcnRJbmRleCIsIm92ZXJzY2FuU3RvcEluZGV4IiwibGF5b3V0IiwiaXNIb3Jpem9udGFsIiwib2Zmc2V0SG9yaXpvbnRhbCIsIl9vblNjcm9sbEhvcml6b250YWwiLCJfb25TY3JvbGxWZXJ0aWNhbCIsIl9ldmVudCRjdXJyZW50VGFyZ2V0MiIsInZhbGlkYXRlU2hhcmVkUHJvcHMkMSIsIl90aGlzJHByb3BzNSRpdGVtS2V5IiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kIiwiX2dldFJhbmdlVG9SZW5kZXIiLCJfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyIiwiX292ZXJzY2FuU3RhcnRJbmRleCIsIl9vdmVyc2NhblN0b3BJbmRleCIsIl92aXNpYmxlU3RhcnRJbmRleCIsIl92aXNpYmxlU3RvcEluZGV4IiwiX3Njcm9sbERpcmVjdGlvbiIsIl9zY3JvbGxPZmZzZXQiLCJnZXRJdGVtTWV0YWRhdGEkMSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxIiwiZXN0aW1hdGVkSXRlbVNpemUiLCJ0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMiLCJWYXJpYWJsZVNpemVMaXN0IiwiZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSIsImZpbmROZWFyZXN0SXRlbSQxIiwiRml4ZWRTaXplR3JpZCIsImxhc3RDb2x1bW5PZmZzZXQiLCJtaWRkbGVPZmZzZXQiLCJjZWlsIiwiX3JlZjgiLCJsYXN0Um93T2Zmc2V0IiwiX3JlZjkiLCJfcmVmMTAiLCJudW1WaXNpYmxlQ29sdW1ucyIsIl9yZWYxMSIsIl9yZWYxMiIsIm51bVZpc2libGVSb3dzIiwiX3JlZjEzIiwiRml4ZWRTaXplTGlzdCIsImxhc3RJdGVtT2Zmc2V0IiwibnVtVmlzaWJsZUl0ZW1zIiwic2hhbGxvd0RpZmZlcnMiLCJhdHRyaWJ1dGUiLCJfYXR0cmlidXRlIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImFyZUVxdWFsIiwicHJldlN0eWxlIiwicHJldlJlc3QiLCJuZXh0U3R5bGUiLCJuZXh0UmVzdCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsInJlZ2V4IiwicGFyZW50cyIsInBzIiwicGFyZW50Tm9kZSIsImdldFByb3BlcnR5VmFsdWUiLCJzY3JvbGwiLCJIVE1MRWxlbWVudCIsIlNWR0VsZW1lbnQiLCJzY3JvbGxpbmdFbGVtZW50IiwiZG9jdW1lbnRFbGVtZW50Iiwib25Qb2ludGVyRG93biIsImNvbnRhaW5lclJlZiIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJzdHJldGNoVmVydGljYWxseSIsImF1dG9Gb2N1cyIsIm9mZnNldFNpZGVzIiwiY29udGFpbmVyIiwibGVmdE9mZnNldCIsInJpZ2h0T2Zmc2V0Iiwicm9sZSIsImNvbnRlbnQiLCJidXR0b25CYWRnZSIsInBsYWNlaG9sZGVyIiwiY2hlY2tlZCIsImluZGV0ZXJtaW5hdGUiLCJoYW5kbGVDaGFuZ2UiLCJpbnB1dEVsZW1lbnQiLCJpbnB1dFJlZiIsImNoZWNrYm94IiwiTGFiZWwiLCJjb2xvcnMiLCJvblNlbGVjdCIsInNlbGVjdGVkQ29sb3IiLCJjYW5Ub2dnbGUiLCJjb2xvclBpY2tlciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwibW9kYWxDbGFzc05hbWUiLCJmbGV4Q2VudGVyIiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiRHJhd2VyQ29udGV4dCIsIlRSQU5TSVRJT05fQ0xBU1NfTkFNRVMiLCJkcmF3ZXJQYXBlckVudGVyIiwiZW50ZXJBY3RpdmUiLCJkcmF3ZXJQYXBlckVudGVyQWN0aXZlIiwiZW50ZXJEb25lIiwiZHJhd2VyUGFwZXJFbnRlckRvbmUiLCJkcmF3ZXJQYXBlckV4aXQiLCJleGl0QWN0aXZlIiwiZHJhd2VyUGFwZXJFeGl0QWN0aXZlIiwiZXhpdERvbmUiLCJkcmF3ZXJQYXBlckV4aXREb25lIiwiRHJhd2VyIiwib3BlbiIsIm5vQ2xvc2VJY29uIiwicG9ydGFsQ29udGFpbmVyIiwib25DbG9zZUFuaW1hdGlvbkVuZCIsImlzRHJhd2VyVmlzaWJsZSIsInNldERyYXdlclZpc2libGUiLCJpc092ZXJsYXlWaXNpYmxlIiwic2V0SXNPdmVybGF5VmlzaWJsZSIsImN1cnJlbnRUcmFuc2l0aW9uQ2xhc3NOYW1lIiwiZ2V0Q3VycmVudFRyYW5zaXRpb25DbGFzc05hbWUiLCJjcmVhdGVQb3J0YWwiLCJkcmF3ZXIiLCJ2aXNpYmxlIiwiZHJhd2VyUGFwZXIiLCJkcmF3ZXJQYXBlckNvbnRlbnQiLCJkcmF3ZXJPdmVybGF5IiwiSGVhZGVyIiwiRHJhd2VySGVhZGVyIiwiQ29udGVudCIsIkRyYXdlckNvbnRlbnQiLCJGb290ZXIiLCJEcmF3ZXJGb290ZXIiLCJkcmF3ZXJDb250ZW50IiwiZHJhd2VyRm9vdGVyIiwidXNlRHJhd2VyQ29udGV4dCIsImRyYXdlckhlYWRlciIsImRyYXdlckhlYWRlckNsb3NlIiwiZHJhd2VySGVhZGVyQ2xvc2VJY29uIiwiSWNvbiIsInNyYyIsImlzRGlzYWJsZWQiLCJCdXR0b24iLCJpdGVtQm9keVJlbmRlcmVyIiwiaGFuZGxlU2VsZWN0IiwicmVuZGVyQ2xpY2thYmxlIiwic2VsZWN0ZWRJdGVtIiwicGxhY2VtZW50IiwidmVydGljYWwiLCJob3Jpem9udGFsIiwic2V0SXNPcGVuIiwidG9nZ2xlSXNPcGVuIiwiTWVudUNvbnRhaW5lciIsImJ1dHRvbiIsIkNsaWNrYWJsZSIsIk1lbnUiLCJNZW51SXRlbSIsImlzQWN0aXZlIiwiRHJvcGRvd24iLCJhY2NlcHQiLCJtdWx0aXBsZSIsImlucHV0IiwicGFyZW50IiwiaG9yaXpvbnRhbFBsYWNlbWVudCIsInZlcnRpY2FsUGxhY2VtZW50IiwiZml4ZWQiLCJpY29uIiwiY3Jvc3NPcmlnaW4iLCJ0b3BPZmZzZXQiLCJib3R0b21PZmZzZXQiLCJzcmNXaWR0aCIsInNyY0hlaWdodCIsImRlY29kaW5nIiwibG9hZGluZyIsIm90aGVySW1hZ2VQcm9wcyIsImltYWdlRWxlbWVudCIsImltYWdlIiwiaGFzT3ZlcmxheSIsIm92ZXJsYXkiLCJoZWFkZXJBY3Rpb25zIiwiaGVhZGVyTGFiZWwiLCJsaXN0IiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiZm9vdGVyIiwic21hcnRMYXlvdXQiLCJtZW51UGxhY2VtZW50IiwiUGxhY2VtZW50Q29udGV4dCIsIkVycm9yIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiYm90dG9tIiwiZGlzdGFuY2VUb0VkZ2UiLCJpbm5lckhlaWdodCIsInVsRWwiLCJxdWVyeVNlbGVjdG9yIiwiY2hpbGRFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJuZXdIZWlnaHQiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJtZW51IiwiZm9yd2FyZFJlZiIsIm1lbnVDb250YWluZXIiLCJtZW51SXRlbSIsIm1lbnVMaW5rSXRlbSIsImhhbmRsZU92ZXJsYXlDbGljayIsInpJbmRleCIsIm1vZGFsIiwibW9kYWxCdXR0b24iLCJhcHBlbmREaWdpdCIsIm51bWJlciIsImRpZ2l0IiwicG9wRGlnaXQiLCJldmVudERpZ2l0S2V5cyIsIk51bXBhZCIsImNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyIiwibmV3TnVtYmVyIiwiTnVtcGFkS2V5cyIsIm51bXBhZFZhbHVlIiwibnVtcGFkIiwicGFyc2VJbnQiLCJudW1iZXJzIiwiaXNGaXhlZCIsInNob3dFeHBhbmRlZEdyb3VwIiwiU2VsZWN0Q29udGV4dCIsImV4cGFuZGVkIiwidG9nZ2xlRXhwYW5kIiwiaGFuZGxlR3JvdXBDbGljayIsIkljb25CdXR0b24iLCJPcHRpb24iLCJzZWxlY3RlZE9wdGlvbnMiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsInNob3dTZWxlY3RlZFdpdGhUaWNrIiwiaXNDaGVja2VkIiwic2hvd1NlbGVjdGVkV2l0aFRpY2tDb250YWluZXIiLCJjaGVja2JveENvbnRhaW5lciIsIkNoZWNrYm94Iiwic2VsZWN0ZWRMYWJlbCIsInRpY2tDb250YWluZXIiLCJpc09wdGlvbiIsIm9uRmlsdGVyIiwic2VsZWN0QWxsQ2hlY2tlZCIsInRvZ2dsZVNlbGVjdEFsbENoZWNrZWQiLCJzZWFyY2hLZXl3b3JkIiwic2VsZWN0QWxsIiwic2V0U2VsZWN0ZWRPcHRpb25zIiwiaGFzR3JvdXBPcHRpb24iLCJmaWx0ZXJPcHRpb25zIiwia2V5d29yZCIsInRyaW0iLCJmaWx0ZXJlZE9wdGlvbnMiLCJyZWR1Y2UiLCJmaWx0ZXJlZCIsImdyb3VwT3B0aW9uIiwiZmlsdGVyZWRHcm91cE9wdGlvbnMiLCJmaWx0ZXJlZE9wdGlvbnNDb3VudCIsIm5leHRPcHRpb24iLCJzZWxlY3RlZE9wdGlvbnNDb3VudCIsInNlbGVjdGVkT3B0aW9uIiwiZmlsdGVyZWRPcHRpb24iLCJoYW5kbGVTZWxlY3RBbGxDbGljayIsIm9wdGlvbnNUb1NlbGVjdCIsImZsYXQiLCJzZWxlY3RBbGxDb250YWluZXIiLCJHcm91cE9wdGlvbiIsIm5vT3B0aW9ucyIsInNldFNlYXJjaEtleXdvcmQiLCJoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlIiwiaGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2siLCJpY29uU2VhcmNoQ29udGFpbmVyIiwiVGV4dElucHV0IiwicmVzZXRCdXR0b24iLCJzY3JvbGxNZW51SW50b1ZpZXciLCJzaG93U2VsZWN0ZWRBc1RhZ3MiLCJzaG93U2VhcmNoIiwiZW5hYmxlU2luZ2xlRGVsZXRpb24iLCJvcGVuZWQiLCJ0b2dnbGVPcGVuZWQiLCJjb250ZW50UmVmIiwib25SZXNpemUiLCJzY3JvbGxJbnRvVmlldyIsImJlaGF2aW9yIiwiYmxvY2siLCJSTyIsIlJlc2l6ZU9ic2VydmVyIiwib2JzZXJ2ZSIsImRpc2Nvbm5lY3QiLCJoYW5kbGVPcGVuU2VsZWN0IiwiU2VsZWN0Q29udGV4dFByb3ZpZGVyIiwiU2VsZWN0b3IiLCJpc0Ryb3Bkb3duT3BlbmVkIiwiaWNvbkJ1dHRvbiIsImlzTG9hZGluZyIsInNlYXJjaENvbnRhaW5lciIsIlNlYXJjaCIsIk9wdGlvbkxpc3QiLCJpbml0aWFsU3RhdGUiLCJ1cGRhdGVkU2VsZWN0ZWRPcHRpb25zIiwiaXNPcHRpb25TZWxlY3RlZCIsImhhbmRsZVRhZ0NsaWNrIiwiaGFuZGxlVGFnQ2xvc2UiLCJwbGFjZWhvbGRlclRvU2hvdyIsInNob3dBc1RhZ3MiLCJ0YWdXcmFwcGVyIiwiVGFnIiwiY2xvc2FibGUiLCJzaG93QXNUZXh0IiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJvblJvd0NsaWNrIiwiaGFzQXJyb3ciLCJvbkxvYWRNb3JlIiwicGFnZSIsInNldFBhZ2UiLCJwYWdlU2l6ZSIsIlRhYmxlQ29uZmlnIiwiUEFHRV9TSVpFIiwidGFibGVIZWlnaHQiLCJST1dfSEVJR0hUIiwiaGVhZGVySGVpZ2h0IiwiSEVBREVSX0hFSUdIVCIsImRpc2FibGVMYXp5TG9hZGVyIiwiYWN0aXZlUm93cyIsIml0ZW1zQ291bnQiLCJpc0hlYWRlclN0aWNreSIsImhhc1ZpcnR1YWxTY3JvbGwiLCJzY3JvbGxUb1RvcCIsInNldFNjcm9sbFRvcCIsInJlbmRlclJvdyIsInJvdyIsImhhbmRsZUxpc3RTY3JvbGwiLCJsb2FkTW9yZSIsIklURU1TX0xPQURFRCIsInBsYWNlaG9sZGVyQ29udGFpbmVyIiwic2Nyb2xsYmFyQ29udGFpbmVyIiwiYm9yZGVyQm90dG9tIiwiY29sdW1uIiwib25Tb3J0Iiwic29ydGFibGUiLCJzb3J0ZWQiLCJkZWZhdWx0U29ydE9yZGVyIiwidGl0bGUiLCJTb3J0T3JkZXIiLCJERVNDIiwic29ydE9yZGVyIiwic2V0U29ydE9yZGVyIiwiaGFuZGxlU29ydENvbHVtbiIsIm5ld1NvcnRPcmRlciIsIkFTQyIsImNlbGxQcm9wcyIsInRhYmxlSGVhZGVyQ2VsbCIsInNvcnRJY29uVmlzaWJsZSIsImhhbmRsZVJvd0NsaWNrIiwiZGF0YUluZGV4Iiwib25EZWxldGUiLCJjbG9zZUJ1dHRvbiIsInBhdHRlcm4iLCJ3aXRoU2Nyb2xsIiwiaW5wdXRNb2RlIiwidGFnT3B0aW9ucyIsInRhZ3MiLCJzZXRUYWdzIiwidGFnc0FyciIsInRhZyIsImhhbmRsZVRleHRDaGFuZ2UiLCJoYW5kbGVUYWdEZWxldGUiLCJ1cGRhdGVkVGFncyIsImhhbmRsZVRhZ0FkZCIsInRyaW1tZWRUZXh0IiwiaGFuZGxlS2V5RG93biIsInRleHRJbnB1dCIsInNjcm9sbGFibGUiLCJ0YWdJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJzaG93VG9vbHRpcCIsInRvdWNoU2NyZWVuSGlkaW5nRGVsYXkiLCJwb3NpdGlvblN0eWxlcyIsInNldFBvc2l0aW9uU3R5bGVzIiwidG9vbHRpcElzVmlzaWJsZSIsInNldFRvb2x0aXBJc1Zpc2libGUiLCJ0aW1lclJlZiIsInVwZGF0ZVBvc2l0aW9uU3R5bGVzIiwicmVjdCIsIm5ld1Bvc2l0aW9uU3R5bGVzIiwic2Nyb2xsWSIsInNjcm9sbFgiLCJtYXBQbGFjZW1lbnRUb1Bvc2l0aW9uU3R5bGVzIiwib25Nb3VzZUVudGVyIiwib25Nb3VzZUxlYXZlIiwib25Ub3VjaFN0YXJ0SGFuZGxlciIsImNsZWFyVGltZW91dCIsIm9uVG91Y2hFbmRIYW5kbGVyIiwic2Nyb2xsYWJsZVBhcmVudCIsImhpZGVUb29sdGlwIiwib25Ub3VjaFN0YXJ0Iiwib25Ub3VjaEVuZCIsInRvb2x0aXAiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsIm90aGVyVmlkZW9Qcm9wcyIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJpcyIsImwiLCJ1c2VEZWJ1Z1ZhbHVlIiwiZ2V0U25hcHNob3QiLCJ1IiwidXNlU3luY0V4dGVybmFsU3RvcmUiLCJtb2R1bGUiLCJfbmlsIiwiX3BhcnNlIiwiX3N0cmluZ2lmeSIsIl92IiwiX3YyIiwiX3YzIiwiX3Y0IiwiX3ZhbGlkYXRlIiwiX3ZlcnNpb24iLCJfaW50ZXJvcFJlcXVpcmVEZWZhdWx0IiwiZ2V0T3V0cHV0TGVuZ3RoIiwiaW5wdXRMZW5ndGg4Iiwic2FmZUFkZCIsImxzdyIsIm1kNWNtbiIsInEiLCJudW0iLCJjbnQiLCJtZDVmZiIsIm1kNWdnIiwibWQ1aGgiLCJtZDVpaSIsImJ5dGVzIiwibXNnIiwidW5lc2NhcGUiLCJlbmNvZGVVUklDb21wb25lbnQiLCJVaW50OEFycmF5Iiwib3V0cHV0IiwibGVuZ3RoMzIiLCJoZXhUYWIiLCJoZXgiLCJjaGFyQXQiLCJtZDVUb0hleEVuY29kZWRBcnJheSIsIm9sZGEiLCJvbGRiIiwib2xkYyIsIm9sZGQiLCJ3b3Jkc1RvTWQ1IiwibGVuZ3RoOCIsIlVpbnQzMkFycmF5IiwiYnl0ZXNUb1dvcmRzIiwiX2RlZmF1bHQiLCJyYW5kb21VVUlEIiwiY3J5cHRvIiwidXVpZCIsImFyciIsImdldFJhbmRvbVZhbHVlcyIsInJuZHM4IiwieiIsIlJPVEwiLCJLIiwiSCIsIk4iLCJNIiwiaiIsInBvdyIsIlciLCJUIiwidW5zYWZlU3RyaW5naWZ5IiwiYnl0ZVRvSGV4IiwiX3JuZyIsIl9ub2RlSWQiLCJfY2xvY2tzZXEiLCJfbGFzdE1TZWNzIiwiX2xhc3ROU2VjcyIsImJ1ZiIsImNsb2Nrc2VxIiwic2VlZEJ5dGVzIiwicm5nIiwibXNlY3MiLCJuc2VjcyIsImR0IiwidGwiLCJ0bWgiLCJfbWQiLCJVUkwiLCJETlMiLCJ2ZXJzaW9uIiwiaGFzaGZ1bmMiLCJnZW5lcmF0ZVVVSUQiLCJuYW1lc3BhY2UiLCJfbmFtZXNwYWNlIiwic3RyIiwic3RyaW5nVG9CeXRlcyIsIl9uYXRpdmUiLCJybmRzIiwiX3NoYSIsIl9yZWdleCIsInJlcXVpcmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiZGVmaW5pdGlvbiIsInRvU3RyaW5nVGFnIiwiX193ZWJwYWNrX2V4cG9ydHNfXyJdLCJzb3VyY2VSb290IjoiIn0=