@touchtech/baselayer-ui 8.1.15 → 8.1.16

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
- (()=>{"use strict";var e={5348:(e,t,n)=>{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 c=new WeakMap,d={},s={},f=()=>{},v=f(),p=Object,h=e=>e===v,m=e=>"function"==typeof e,_=(e,t)=>({...e,...t}),g="undefined",b=typeof window!=g,y=typeof document!=g,O=(e,t)=>{const n=c.get(e);return[()=>e.get(t)||d,r=>{if(!h(t)){const o=e.get(t);t in s||(s[t]=o),n[5](t,_(o,r),o||d)}},n[6],()=>!h(t)&&t in s?s[t]:e.get(t)||d]},w=new WeakMap;let M=0;const S=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(p(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=++M+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=S(e[a])+",";w.set(e,o)}if(n==p){o="#";const t=p.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+S(e[a])+",");w.set(e,o)}}return o};let P=!0;const[C,x]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],j={isOnline:()=>P,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},I={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),x("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{x("online",t),x("offline",n)}}},E=!r.useId,k=!b||"Deno"in window,R=k?r.useEffect:r.useLayoutEffect,D="undefined"!=typeof navigator&&navigator.connection,z=!k&&D&&(["slow-2g","2g"].includes(D.effectiveType)||D.saveData),L=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)?S(e):"",t]};let T=0;const N=()=>++T,H=2;var A=H;async function B(...e){const[t,n,r,o]=e,a=_({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const d=!1!==a.revalidate,s=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;!o.startsWith("$inf$")&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(p))}return p(n);async function p(n){const[o]=L(n);if(!o)return;const[a,l]=O(t,o),[p,_,g]=c.get(t),b=p[o],y=()=>d&&(delete g[o],b&&b[0])?b[0](H).then((()=>a().data)):a().data;if(e.length<3)return y();let w,M=r;const S=N();_[o]=[S,0];const P=!h(u),C=a(),x=C.data,j=C._c,I=h(j)?x:j;if(P&&(u=m(u)?u(I):u,l({data:u,_c:I})),m(M))try{M=M(I)}catch(e){w=e}if(M&&m(M.then)){if(M=await M.catch((e=>{w=e})),S!==_[o][0]){if(w)throw w;return M}w&&P&&s(w)&&(i=!0,M=I,l({data:M,_c:v}))}i&&(w||(m(i)&&(M=i(M,I)),l({data:M,_c:v}))),_[o][1]=N();const E=await y();if(l({_c:v}),!w)return i?E:M;if(f)throw w}}const F=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},W=(e,t)=>{if(!c.has(e)){const n=_(I,t),r={},o=B.bind(v,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(let e=o.length;e--;)o[e](n,r)},d=()=>{if(!c.has(e)&&(c.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(v,F.bind(v,r,0))),o=n.initReconnect(setTimeout.bind(v,F.bind(v,r,1)));a=()=>{t&&t(),o&&o(),c.delete(e)}}};return d(),[e,o,d,a]}return[e,c.get(e)[4]]},[V,G]=W(new Map),K=_({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:z?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:z?5e3:3e3,compare:(e,t)=>S(e)==S(t),isPaused:()=>!1,cache:V,mutate:G,fallback:{}},j),q=(0,r.createContext)({}),Z=b&&window.__SWR_DEVTOOLS_USE__,Q=Z?window.__SWR_DEVTOOLS_USE__:[],U=()=>_(K,(0,r.useContext)(q));Q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=L(t)[0],[,,,o]=c.get(V),a=o[r];return a?(delete o[r],a):n(...e)}),r)));Z&&(window.__SWR_DEVTOOLS_REACT__=r);const Y={dedupe:!0};function X(){var e=U();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})}),[])]}p.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(q),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=_(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=_(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,[u]=(0,r.useState)((()=>l?W(l(i.cache||V),a):v));return u&&(i.cache=u[0],i.mutate=u[1]),R((()=>{if(u)return u[2]&&u[2](),u[3]}),[]),(0,r.createElement)(q.Provider,_(e,{value:i}))}),"defaultValue",{value:K})},7659:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},6114:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{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)=>{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)=>{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)=>{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)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={label:"b55hyZ0oHl0s4Ot9OhwM"}},8054:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz"}},4822:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn"}},2396:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ"}},7917:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",header:"XAoJhxTApcR9lGegyp9A",content:"rRDWv2qqwSrBy3evZ7Dw",searchContainer:"yOECDJeDVT5z5YaXpeJn",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"_1v4ljOoGXqTJTneMNPz"}},6684:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",closeButton:"ZZPRZLUq9MQyifD8x2jH"}},7792:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},6504:(e,t,n)=>{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"}},5172:(e,t,n)=>{n.r(t),n.d(t,{isHotkeyPressed:()=>R,useHotkeys:()=>k,useIsHotkeyPressed:()=>j});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},c={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},d={16:!1,18:!1,17:!1,91:!1},s={},f=1;f<20;f++)l["f".concat(f)]=111+f;var v=[],p=!1,h="all",m=[],_=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function g(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],c="*"===i?"*":_(i);if(s[c]){n||(n=b());var d=o>1?a(u,t):[];s[c]=s[c].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,d))}))}}))};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,d)Object.prototype.hasOwnProperty.call(d,a)&&(!d[a]&&t.mods.indexOf(+a)>-1||d[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||d[16]||d[18]||d[17]||d[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=s["*"],r=e.keyCode||e.which||e.charCode;if(M.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===v.indexOf(r)&&229!==r&&v.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=c[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),r in d){for(var o in d[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in d)Object.prototype.hasOwnProperty.call(d,a)&&(d[a]=e[c[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),d[17]=!0,d[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 s)for(var f=0;f<s[r].length;f++)if(("keydown"===e.type&&s[r][f].keydown||"keyup"===e.type&&s[r][f].keyup)&&s[r][f].key){for(var p=s[r][f],h=p.splitKey,m=p.key.split(h),g=[],y=0;y<m.length;y++)g.push(_(m[y]));g.sort().join("")===v.sort().join("")&&O(e,p,i,t)}}}function M(e,t,n){v=[];var r=i(e),l=[],c="all",f=document,h=0,g=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(c=t.scope),t.element&&(f=t.element),t.keyup&&(g=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&&(c=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":_(e))in s||(s[e]=[]),s[e].push({keyup:g,keydown:b,scope:c,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),p||(p=!0,o(window,"focus",(function(){v=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in d)for(var r in d[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),s)if(Object.prototype.hasOwnProperty.call(s,o))for(n=s[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&g(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=_(e)),-1!==v.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(s).forEach((function(n){var r=s[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(s).forEach((function(e){return delete s[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:c};for(var P in S)Object.prototype.hasOwnProperty.call(S,P)&&(M[P]=S[P]);if("undefined"!=typeof window){var C=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=C),M},window.hotkeys=M}var x=n(6689);function j(){return M.isPressed}M.filter=function(){return!0};var I=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},E=function(e){return I(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,c=o.filterPreventDefault,d=void 0===c||c,s=o.enabled,f=void 0===s||s,v=o.enableOnContentEditable,p=void 0!==v&&v,h=(0,x.useRef)(null),m=(0,x.useCallback)((function(e,n){var r,o;return i&&!i(e)?!d:!!(E(e)&&!I(e,a)||null!=(r=e.target)&&r.isContentEditable&&!p)||!!(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,x.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),h}var R=M.isPressed},5691:(e,t,n)=>{n.r(t),n.d(t,{default:()=>u});var r=n(6689),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=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}}(),i=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},l=function(e){function t(){var e,n,r;o(this,t);for(var a=arguments.length,l=Array(a),u=0;u<a;u++)l[u]=arguments[u];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),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},i(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),a(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,c=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 c=Math.min(Math.max(l,i+r-1),n-1),d=l+1;d<=c&&!t(d);d++)l=d;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var s=a[0]-1;if(t(s))break;a[0]=s}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{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 u=l},5022:(e,t,n)=>{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)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.r(t),n.d(t,{FixedSizeGrid:()=>H,FixedSizeList:()=>A,VariableSizeGrid:()=>I,VariableSizeList:()=>N,areEqual:()=>V,shouldComponentUpdate:()=>G});var 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 c=n(6689);function d(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}var s="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function v(e,t){var n=s(),r={id:requestAnimationFrame((function o(){s()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var p=-1;function h(e){if(void 0===e&&(e=!1),-1===p||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),p=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return p}var m=null;function _(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 g=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,d=e.getColumnWidth,s=e.getEstimatedTotalHeight,p=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,M=e.getRowOffset,S=e.getRowStartIndexForOffset,P=e.getRowStopIndexForStartIndex,C=e.initInstanceProps,x=e.shouldResetStyleCacheOnItemSizeChange,j=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=C(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(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,c=r._getItemStyleCache(x&&i,x&&l,x&&u),s=e+":"+t;if(c.hasOwnProperty(s))o=c[s];else{var f=n(r.props,t,r._instanceProps),v="rtl"===l;c[s]=o={position:"absolute",left:v?void 0:f,right:v?f:void 0,top:M(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:d(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,c=a;if("rtl"===t)switch(_()){case"negative":c=-a;break;case"positive-descending":c=u-o-a}c=Math.max(0,Math.min(c,u-o));var d=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:c,scrollTop:d,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=v(r._resetIsScrolling,g)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),j(e),null};var I=t.prototype;return I.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)},I.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,c=a.width,d=this.state,f=d.scrollLeft,v=d.scrollTop,_=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 g=s(this.props,this._instanceProps),b=p(this.props,this._instanceProps)>c?_:0,O=g>l?_: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,v,this._instanceProps,b):v})},I.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()},I.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(_()){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()},I.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},I.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,d=e.innerTagName,f=e.itemData,v=e.itemKey,h=void 0===v?b:v,m=e.outerElementType,_=e.outerTagName,g=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),P=S[0],C=S[1],x=this._getVerticalRangeToRender(),j=x[0],I=x[1],E=[];if(o>0&&g)for(var k=j;k<=I;k++)for(var R=P;R<=C;R++)E.push((0,c.createElement)(t,{columnIndex:R,data:f,isScrolling:O?M:void 0,key:h({columnIndex:R,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,R)}));var D=s(this.props,this._instanceProps),z=p(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,c.createElement)(u||d||"div",{children:E,ref:l,style:{height:D,pointerEvents:M?"none":void 0,width:z}}))},I._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],c=a[3],d=this._getVerticalRangeToRender(),s=d[0],f=d[1],v=d[2],p=d[3];this._callOnItemsRendered(i,l,s,f,u,c,v,p)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,_=h.scrollLeft,g=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(_,g,m,y,b)}},I._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,c=u.horizontalScrollDirection,d=u.isScrolling,s=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var v=i(this.props,s,this._instanceProps),p=l(this.props,v,s,this._instanceProps),h=d&&"backward"!==c?1:Math.max(1,f),m=d&&"forward"!==c?1:Math.max(1,f);return[Math.max(0,v-h),Math.max(0,Math.min(t-1,p+m)),v,p]},I._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,c=i.scrollTop,d=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var s=S(this.props,c,this._instanceProps),f=P(this.props,s,c,this._instanceProps),v=l&&"backward"!==u?1:Math.max(1,d),p=l&&"forward"!==u?1:Math.max(1,d);return[Math.max(0,s-v),Math.max(0,Math.min(a-1,f+p)),s,f]},t}(c.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},M=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},S=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 c=i+1;c<=n;c++){var d=a(c);o[c]={offset:l,size:d},l+=d}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},P=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?C(e,t,n,a,0,r):x(e,t,n,Math.max(0,a),r)},C=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(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},x=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return C(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},j=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),c="column"===e?M(t,a):w(t,a),d=Math.max(0,Math.min(c-l,u.offset)),s=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=s-l&&o<=d+l?"auto":"center"),r){case"start":return d;case"end":return s;case"center":return Math.round(s+(d-s)/2);default:return o>=s&&o<=d?o:s>d||o<s?s:d}},I=y({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return P("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("column",e,c,r).size;return c},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return j("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return j("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return P("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("row",e,c,r).size;return c},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}}),E=150,k=function(e,t){return e};function R(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,d=e.getOffsetForIndexAndAlignment,s=e.getStartIndexForOffset,p=e.getStopIndexForStartIndex,m=e.initInstanceProps,g=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,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(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,c=r._getItemStyleCache(g&&i,g&&u,g&&a);if(c.hasOwnProperty(e))t=c[e];else{var d=n(r.props,e,r._instanceProps),s=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,v="rtl"===a,p=f?d:0;c[e]=t={position:"absolute",left:v?void 0:p,right:v?p:void 0,top:f?0:d,height:f?"100%":s,width:f?s:"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(_()){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=v(r._resetIsScrolling,E)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return D(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(d(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(_()){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,d=e.innerTagName,s=e.itemCount,f=e.itemData,v=e.itemKey,p=void 0===v?k:v,h=e.layout,m=e.outerElementType,_=e.outerTagName,g=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),P=S[0],C=S[1],x=[];if(s>0)for(var j=P;j<=C;j++)x.push((0,c.createElement)(t,{data:f,key:p(j,f),index:j,isScrolling:b?O:void 0,style:this._getItemStyle(j)}));var I=i(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,c.createElement)(u||d||"div",{children:x,ref:l,style:{height:w?"100%":I,pointerEvents:O?"none":void 0,width:w?I:"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=s(this.props,i,this._instanceProps),u=p(this.props,l,i,this._instanceProps),c=o&&"backward"!==a?1:Math.max(1,n),d=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-c),Math.max(0,Math.min(t-1,u+d)),l,u]},t}(c.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var D=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},z=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 c=r(u);o[u]={offset:i,size:c},i+=c}n.lastMeasuredIndex=t}return o[t]},L=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=z(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},T=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},N=R({getItemOffset:function(e,t,n){return z(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:T,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,c=e.width,d="horizontal"===i||"horizontal"===u?c:l,s=z(e,t,o),f=T(e,o),v=Math.max(0,Math.min(f-d,s.offset)),p=Math.max(0,s.offset-d+s.size+a);switch("smart"===n&&(n=r>=p-d&&r<=v+d?"auto":"center"),n){case"start":return v;case"end":return p;case"center":return Math.round(p+(v-p)/2);default:return r>=p&&r<=v?r:r<p?p:v}},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?L(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&z(e,n,t).offset<r;)n+=a,a*=2;return L(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,c="horizontal"===o||"horizontal"===l?u:a,d=z(e,t,r),s=n+c,f=d.offset+d.size,v=t;v<i-1&&f<s;)v++,f+=z(e,v,r).size;return v},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}}),H=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,c=Math.max(0,i*l-u),d=Math.min(c,t*l),s=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=s-u&&r<=d+u?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(u/2)?0:f>c+Math.floor(u/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,c=Math.max(0,u*i-l),d=Math.min(c,t*i),s=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=s-l&&r<=d+l?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(l/2)?0:f>c+Math.floor(l/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},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}}),A=R({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,c=e.itemSize,d=e.layout,s=e.width,f="horizontal"===i||"horizontal"===d?s:l,v=Math.max(0,u*c-f),p=Math.min(v,t*c),h=Math.max(0,t*c-f+c+a);switch("smart"===n&&(n=r>=h-f&&r<=p+f?"auto":"center"),n){case"start":return p;case"end":return h;case"center":var m=Math.round(h+(p-h)/2);return m<Math.ceil(f/2)?0:m>v+Math.floor(f/2)?v:m;default:return r>=h&&r<=p?r:r<h?h:p}},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,c=t*i,d="horizontal"===r||"horizontal"===l?u:o,s=Math.ceil((d+n-c)/i);return Math.max(0,Math.min(a-1,t+s-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"],W=["style"];function V(e,t){var n=e.style,r=d(e,F),o=t.style,a=d(t,W);return!B(n,o)&&!B(r,a)}function G(e,t){return!V(this.props,e)||B(this.state,t)}},7237:function(e,t,n){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,c=e.containerRef,d=e.disabled,s=void 0!==d&&d,f=e.inverted,v=void 0!==f&&f,p=e.rounded,h=void 0!==p&&p,m=e.noShadow,_=void 0!==m&&m,g=e.noPadding,b=void 0!==g&&g,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.autoFocus,I=void 0!==j&&j,E=e.offsetSides,k=void 0===E?[]:E,R=e.align,D=void 0===R?"center":R,z=e.size,L=void 0===z?"medium":z,T=e.type;return o.default.createElement("button",{ref:c,className:(0,a.default)([i.default.container,i.default[L],i.default[D],(t={},t[i.default.inverted]=v,t[i.default.rounded]=h,t[i.default.noShadow]=_,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=M,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=x,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:s,autoFocus:I,type:T,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){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){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){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){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,c=e.className,d=e.size,s=e.containerRef,f=e.inverted,v=void 0!==f&&f,p=e.rounded,h=void 0!==p&&p,m=e.transparent,_=void 0!==m&&m,g=e.noShadow,b=void 0!==g&&g,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.disabled,I=void 0!==j&&j,E=e.offsetSides,k=void 0===E?[]:E,R=e.align,D=void 0===R?"center":R,z=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:s,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[d],u.default[D],(t={},t[u.default.inverted]=v,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=M,t[u.default.disabled]=I,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=P,t[u.default.stretchVertically]=x,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),c])},z),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){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){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)),c=n(4115),d=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,s=e.className,f=e.indeterminate,v=e.size,p=void 0===v?"medium":v,h=e.autoFocus,m=void 0!==h&&h,_=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]);return l.default.createElement(c.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([d.default.checkbox,s,d.default[p]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){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){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,c=e.direction,d=void 0===c?"vertical":c,s=e.canToggle,f=void 0!==s&&s;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[d]])},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){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){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,c=e.size,d=void 0===c?"medium":c,s=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[d],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){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){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,c=e.header,d=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,v=e.buttonsRight,p=void 0===v?[]:v,h=e.onClose,m=void 0===h?function(){}:h,_=e.noPadding,g=void 0!==_&&_,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:d,onClose:m,noOverlay:y,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!c&&o.default.createElement("h1",{className:l.default.modalHeader},c),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=g,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},p))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){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}})},943:function(e,t,n){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){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),c=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,d=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,v=(0,i.useState)(!1),p=v[0],h=v[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),_=!n||0===n.length,g=function(){return h(!p)};return i.default.createElement(c.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:d,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(c.Menu,{isOpen:p},n&&n.map((function(e){return i.default.createElement(c.MenuItem,{isActive:e.id===(null==d?void 0:d.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==d?void 0:d.id)}):e.name)}))))}},1889:(e,t,n)=>{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){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,c=e.multiple,d=void 0!==c&&c,s=e.disabled,f=void 0!==s&&s,v=e.inverted,p=void 0!==v&&v,h=e.noShadow,m=void 0!==h&&h,_=e.noBorder,g=void 0!==_&&_,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,M=e.stretchHorizontally,S=void 0!==M&&M,P=e.stretchVertically,C=void 0!==P&&P,x=e.rounded,j=void 0!==x&&x,I=e.size,E=void 0===I?"medium":I;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[E],(t={},t[i.default.inverted]=p,t[i.default.rounded]=j,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:d,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){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){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,c=void 0===u?"column":u,d=e.placement,s=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===s.horizontal?"horizontalCenter":s.horizontal,v="center"===s.vertical?"verticalCenter":s.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[v],i.default[c],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},6384:function(e,t,n){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){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,c=void 0===u?"medium":u,d=e.inverted,s=void 0!==d&&d;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[c],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){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){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,c=e.src,d=e.alt,s=e.offsetSides,f=void 0===s?[]:s,v=e.onClick,p=void 0===v?function(){}:v,h=e.disabled,m=void 0!==h&&h,_=e.inverted,g=void 0!==_&&_,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.transparent,S=void 0!==M&&M,P=e.rounded,C=void 0!==P&&P,x=e.size,j=void 0===x?"medium":x,I=e.type,E=void 0===I?"button":I;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[j],(t={},t[l.default.inverted]=g,t[l.default.rounded]=C,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=C&&f.includes("top"),t[l.default.rightOffset]=C&&f.includes("right"),t[l.default.bottomOffset]=C&&f.includes("bottom"),t[l.default.leftOffset]=C&&f.includes("left"),t),n]),disabled:m,onClick:p,type:E,role:"button"},o.default.createElement(i.Icon,{src:c,alt:d,size:j,inverted:g}),u)}},2847:function(e,t,n){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){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),c=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,d=e.children,s=e.className,f=e.src,v=e.alt,p=e.inverted,h=void 0!==p&&p,m=e.noShadow,_=void 0!==m&&m,g=e.noBorder,b=void 0!==g&&g,y=e.transparent,O=void 0!==y&&y,w=e.rounded,M=void 0!==w&&w,S=e.offsetSides,P=void 0===S?[]:S,C=e.disabled,x=void 0!==C&&C,j=e.size,I=void 0===j?"medium":j,E=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)([c.default.container,c.default[I],(t={},t[c.default.inverted]=h,t[c.default.rounded]=M,t[c.default.noShadow]=_,t[c.default.noBorder]=b,t[c.default.disabled]=x,t[c.default.transparent]=O,t[c.default.topOffset]=M&&P.includes("top"),t[c.default.rightOffset]=M&&P.includes("right"),t[c.default.bottomOffset]=M&&P.includes("bottom"),t[c.default.leftOffset]=M&&P.includes("left"),t),s])},E),i.default.createElement(u.Icon,{src:f,alt:v,size:I,inverted:h}),d)}},5860:function(e,t,n){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){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(1513));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,c=e.containerRef,d=e.layout,s=void 0===d?"contain":d,f=e.decoding,v=void 0===f?"auto":f,p=e.loading,h=void 0===p?"eager":p,m=e.style,_=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[s]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:v,loading:h,style:m});return u?o.default.createElement("div",{ref:c,className:(0,a.default)([i.default.container,i.default.hasOverlay])},_,u&&o.default.createElement("div",{className:i.default.overlay},u)):_}},3928:function(e,t,n){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){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){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){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){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,c=void 0!==u&&u,d=e.transparent,s=void 0!==d&&d,f=e.noPadding,v=void 0!==f&&f,p=e.size,h=void 0===p?"medium":p,m=e.align,_=void 0===m?"center":m,g=e.onClick,b=void 0===g?function(){}:g;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:c,inverted:r,transparent:s,noPadding:v,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){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),c=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,d=void 0!==a&&a,s=e.transparent,f=void 0!==s&&s,v=e.noPadding,p=void 0!==v&&v,h=e.align,m=void 0===h?"center":h,_=e.size,g=void 0===_?"medium":_,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([c.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:d,transparent:f,noPadding:p,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){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){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)),c=n(9633),d=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,v=e.footer,p=e.smartLayout,h=void 0===p||p,m=(0,l.useContext)(c.PlacementContext),_=(0,l.useRef)(null),g=o||_;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&g.current){var e=g.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=g.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,")")}}}),[s,m,h]),s?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([d.default.menu,(t={},t[d.default.open]=s,t),a])},l.default.createElement("div",null,f&&s&&l.default.createElement("h3",{className:d.default.header},f),l.default.createElement("ul",null,r)),v&&s&&l.default.createElement("div",{className:(0,u.default)([d.default.footer,(n={},n[d.default.noBorder]=!r,n)])},v))):null}},9633:function(e,t,n){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)),c=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,d=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([c.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return d}),[d])},l.default.createElement("div",{className:(0,u.default)([c.default.menuContainer,c.default[d.horizontal],c.default[d.vertical]])},r)))}))},9385:function(e,t,n){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,c=e.noPadding,d=void 0!==c&&c,s=e.isActive,f=void 0!==s&&s;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=d,n),l]),onClick:u},r)}},9762:function(e,t,n){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,c=e.className,d=e.noPadding,s=void 0!==d&&d,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,c,(t={},t[u.default.noPadding]=s,t)])},f),a)}},3814:function(e,t,n){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){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),c=i(n(7659)),d=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,v=e.noShadow,p=void 0!==v&&v,h=e.noOverlay,m=void 0!==h&&h,_=e.onClose,g=void 0===_?function(){}:_,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",g);var O=(0,l.useCallback)((function(){g()}),[g]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,c.default)([d.default.overlay,(t={},t[d.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,c.default)([d.default.modal,(n={},n[d.default.transparent]=f,n[d.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:d.default.modalButton},i))}},1391:function(e,t,n){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){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)),c=function(e,t){return 10*e+t},d=function(e){return Math.floor(e/10)},s=["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,v=void 0!==f&&f,p=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:v,noBorder:!0,noShadow:!0,onPointerDown:p(c(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(d(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(c(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{disabled:v,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:p(d(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{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){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,c=e.isFixed,d=void 0!==c&&c,s=e.onClick,f=void 0===s?function(){}:s;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]=d,t)]),onClick:f},n)}},6650:function(e,t,n){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){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)),c=i(n(4685)),d=n(5348),s=n(3781);t.default=function(e){var t=e.className,n=e.label,r=e.options,o=(0,d.useToggle)(!1),a=o[0],i=o[1],f=(0,l.useCallback)((function(){i()}),[]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,t])},l.default.createElement("div",{className:c.default.label,onClick:f},n),!a&&r.map((function(e){return l.default.createElement(s.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){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){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)),c=i(n(8054)),d=n(4616),s=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(s.SelectContext),i=a.multiple,f=a.selectedOptions,v=a.updateSelectedOption,p=(0,l.useMemo)((function(){return f.map((function(e){return e.value})).includes(o.value)}),[o,f]),h=(0,l.useCallback)((function(){v(o)}),[o,f]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.selected]=p&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:c.default.checkboxContainer},l.default.createElement(d.Checkbox,{className:c.default.checkbox,checked:p,size:"small"})),l.default.createElement("span",{className:c.default.label},n))}},3781:function(e,t,n){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){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 c=n(5348),d=i(n(6689)),s=n(4616),f=n(9087),v=n(3781),p=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,c.useToggle)(!1),u=i[0],m=i[1],_=(0,d.useContext)(p.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,M=n.some((function(e){return!(0,t.isOption)(e)})),S=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},P=(0,d.useMemo)((function(){return M?n.reduce((function(e,t){var n=S(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):S(n)}),[M,n,b]),C=(0,d.useCallback)((function(){u?(w([]),a&&a([])):(w(P),a&&a(P.map((function(e){return e.value})))),m()}),[P,u,w,m]);return(0,d.useEffect)((function(){0===O.length&&m(!1)}),[O,m]),d.default.createElement("div",{className:h.default.container},y&&g&&d.default.createElement("div",{className:h.default.selectAllContainer,onClick:C},d.default.createElement("span",{className:h.default.checkboxContainer},d.default.createElement(s.Checkbox,{className:h.default.checkbox,checked:u,size:"small"})),d.default.createElement("span",{className:h.default.label},"Select All")),P.map((function(e){return(0,t.isOption)(e)?d.default.createElement(v.Option,{key:e.value,data:e},e.label):d.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})))}},4292:function(e,t,n){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){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)),c=i(n(2396)),d=n(2568),s=n(1143),f=n(4958),v=i(n(5585));t.default=function(e){var t=e.className,n=(0,l.useContext)(d.SelectContext),r=n.searchKeyword,o=n.setSearchKeyword,a=(0,l.useCallback)((function(e){o(e)}),[r]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,t])},l.default.createElement(s.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(f.Icon,{src:v.default}))}},8947:function(e,t,n){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){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)),c=i(n(3210)),d=i(n(7917)),s=n(5348),f=n(2568),v=n(4745),p=n(8947),h=n(2847),m=n(4292);t.default=function(e){var t,n,r=e.className,o=e.defaultValue,a=e.disabled,i=e.multiple,_=void 0!==i&&i,g=e.options,b=e.placeholder,y=e.selectAll,O=e.size,w=void 0===O?"medium":O,M=e.showSelectedAsTags,S=void 0!==M&&M,P=e.width,C=e.onChange,x=e.onFilter,j=(0,s.useToggle)(!1),I=j[0],E=j[1],k=(0,s.useOutsideClick)((function(){return E(!1)})),R=(0,l.useCallback)((function(){E()}),[]),D=(0,l.useCallback)((function(e){_||E(!1),C&&C(e)}),[]);return l.default.createElement(f.SelectContextProvider,{defaultValue:o,multiple:_,options:g,onChange:D,selectAll:y},l.default.createElement("div",{ref:k,className:(0,u.default)([d.default.container,d.default[w],(t={},t[d.default.disabled]=a,t),r]),style:{width:P}},l.default.createElement("div",{className:d.default.header,onClick:R},l.default.createElement(v.Selector,{placeholder:b,showSelectedAsTags:S}),l.default.createElement(h.IconButton,{className:(0,u.default)([d.default.iconButton,(n={},n[d.default.expanded]=I,n)]),src:c.default,alt:I?"Collapse":"Expand",noBorder:!0,transparent:!0})),I&&l.default.createElement("div",{className:d.default.content},l.default.createElement("div",{className:d.default.searchContainer},l.default.createElement(p.Search,null)),l.default.createElement(m.OptionList,{options:g,onFilter:x,onChange:D}))))}},2568:function(e,t,n){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),c={multiple:!1,selectAll:!1,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},d=(0,l.createContext)(c);t.SelectContext=d,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,s=void 0!==a&&a,f=e.options,v=e.onChange,p=(0,l.useState)(c.selectedOptions),h=p[0],m=p[1],_=(0,l.useState)(c.searchKeyword),g=_[0],b=_[1],y=(0,l.useCallback)((function(e){var t;t=o?h.some((function(t){return t.value===e.value}))?h.filter((function(t){return t.value!==e.value})):i(i([],h,!0),[e],!1):[e],m(t),v&&v(t.map((function(e){return e.value})))}),[h,m]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=f.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)}))),m(t)}}),[n]);var O=(0,l.useMemo)((function(){return{multiple:o,selectAll:s,selectedOptions:h,updateSelectedOption:y,searchKeyword:g,setSearchKeyword:b,setSelectedOptions:m}}),[s,h,m,y,g,b]);return l.default.createElement(d.Provider,{value:O},t)}},237:function(e,t,n){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)),c=n(2568),d=n(2149);t.default=function(e){var t,n=e.placeholder,r=e.showSelectedAsTags,o=(0,l.useContext)(c.SelectContext),a=o.selectedOptions,i=o.multiple,s=o.updateSelectedOption,f=(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&&s(n)}e.stopPropagation()}),[a]),p=(0,l.useMemo)((function(){return a.length?a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{onClick:f},l.default.createElement(d.Tag,{key:n,value:n,closable:!0,onClose:v},t))})):n}),[a]),h=a.length?"".concat(n," (").concat(a.length,")"):n;return t=i?r?p:h:a.length?a[0].label:n,l.default.createElement("div",{className:u.default.container},t)}},4745:function(e,t,n){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){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){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)),c=l(n(7659)),d=n(5022),s=l(n(5691)),f=l(n(5038)),v=l(n(8784)),p=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,_=e.pageSize,g=void 0===_?p.TableConfig.PAGE_SIZE:_,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?p.TableConfig.ROW_HEIGHT:O,M=e.headerHeight,S=void 0===M?p.TableConfig.HEADER_HEIGHT:M,P=e.disableLazyLoader,C=e.activeRows,x=e.itemsCount,j=e.isHeaderSticky,I=void 0!==j&&j,E=e.hasVirtualScroll,k=void 0===E||E,R=e.className,D=(0,u.useState)(0),z=D[0],L=D[1],T=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,c=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(v.default,{data:c,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[c.id])}))}),[t,C,a,w,o]),N=(0,u.useCallback)((function(e){var t=e.scrollOffset;L(t)}),[]),H=(0,u.useCallback)((function(){P||n.length!==x&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[P,n.length,x,g,l,m,i]),A=(0,u.useCallback)((function(e){return!P&&e<n.length-p.TableConfig.ITEMS_LOADED}),[n.length,P]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,c.default)([h.default.container,R])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:z,headerHeight:S}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(s.default,{isItemLoaded:A,itemCount:n.length,loadMoreItems:H},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(d.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:N,onItemsRendered:t,className:h.default.scrollbarContainer},T)})))):u.default.createElement("div",{className:(0,c.default)([h.default.container,h.default.scrollbarContainer,R]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:z,isHeaderSticky:I,headerHeight:S}),n.map((function(e,n){return u.default.createElement(v.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){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,c=e.isHeaderSticky,d=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]=c,n)]),style:{height:d}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){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)),c=i(n(6689)),d=n(4958),s=l(n(3210)),f=l(n(2223)),v=n(2802),p=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,_=n.className,g=(0,c.useState)((function(){return l||v.SortOrder.DESC})),b=g[0],y=g[1],O=(0,c.useCallback)((function(){if(!i)return o(b);var e=b===v.SortOrder.DESC?v.SortOrder.ASC:v.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return c.default.createElement("div",r({},w,{className:(0,u.default)([p.default.tableHeaderCell,_,(t={},t[p.default.sortIconVisible]=a&&i,t[p.default.sortable]=a,t)]),style:{width:m}}),h,a?c.default.createElement(d.Icon,{alt:"Sort button",size:"small",src:b===v.SortOrder.DESC?s.default:f.default}):null)}},8784:function(e,t,n){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)),c=i(n(8605)),d=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,s=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.hasArrow]=a,t[d.default.active]=s,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(c.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){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){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){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(7451)),c=n(4958),d=i(n(5374));t.default=function(e){var t=e.children,n=(e.className,e.closable),r=e.value,o=e.onClose,a=(0,l.useCallback)((function(e){"function"==typeof o&&o(e,r)}),[o]);return l.default.createElement("div",{className:d.default.container},l.default.createElement("span",null,t),n&&l.default.createElement("span",{className:d.default.closeButton,onClick:a},l.default.createElement(c.Icon,{src:u.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){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}})},2506:function(e,t,n){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)),c=n(4115),d=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,s=e.value,f=e.name,v=e.pattern,p=e.inputRef,h=e.size,m=void 0===h?"medium":h,_=e.type,g=void 0===_?"text":_,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=l.default.createElement("input",{"data-testid":"input",ref:p,className:(0,u.default)([d.default.textInput,d.default[m],(t={},t[d.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:v,placeholder:i,name:f,type:g,value:s,autoFocus:y,inputMode:M});return n?l.default.createElement(c.Label,{value:n},P):l.default.createElement(l.default.Fragment,null,P)}},1143:function(e,t,n){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){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){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){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}})},1918:function(e,t,n){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(6504));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,c=e.muted,d=void 0===c||c,s=e.loop,f=void 0===s||s,v=e.autoPlay,p=void 0===v||v,h=e.layout,m=void 0===h?"contain":h;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:p,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:p,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){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)=>{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){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){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(6650),t),o(n(9929),t),o(n(2149),t),o(n(2285),t),o(n(1143),t),o(n(393),t),o(n(6975),t),o(n(7387),t)},2802:(e,t)=>{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)=>{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)=>{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)=>{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"},7451:(e,t,n)=>{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)=>{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"},3250:(e,t,n)=>{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 c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var d="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,d=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&d({inst:o})}),[e,n,t]),i((function(){return c(o)&&d({inst:o}),e((function(){c(o)&&d({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:d},1688:(e,t,n)=>{e.exports=n(3250)},6689:e=>{e.exports=require("react")}},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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RixRQUFTRSxFQUFRQSxFQUFPRixRQUFTSyxHQUdwRUgsRUFBT0YsT0FDZixDQ3JCQUssRUFBb0JyakMsRUFBS2tqQyxJQUN4QixJQUFJTyxFQUFTUCxHQUFVQSxFQUFPUSxXQUM3QixJQUFPUixFQUFpQixRQUN4QixJQUFNLEVBRVAsT0FEQUcsRUFBb0JULEVBQUVhLEVBQVEsQ0FBRWgvQixFQUFHZy9CLElBQzVCQSxDQUFNLEVDTGRKLEVBQW9CVCxFQUFJLENBQUNJLEVBQVNXLEtBQ2pDLElBQUksSUFBSTErQixLQUFPMCtCLEVBQ1hOLEVBQW9CdGpDLEVBQUU0akMsRUFBWTErQixLQUFTbytCLEVBQW9CdGpDLEVBQUVpakMsRUFBUy85QixJQUM1RXBCLE9BQU9pTCxlQUFlazBCLEVBQVMvOUIsRUFBSyxDQUFFNlYsWUFBWSxFQUFNM1YsSUFBS3crQixFQUFXMStCLElBRTFFLEVDTkRvK0IsRUFBb0J0akMsRUFBSSxDQUFDNlAsRUFBS2cwQixJQUFVLy9CLE9BQU95UyxVQUFVdEcsZUFBZXpQLEtBQUtxUCxFQUFLZzBCLEdDQ2xGUCxFQUFvQmpqQyxFQUFLNGlDLElBQ0gsb0JBQVg5aUMsUUFBMEJBLE9BQU8yakMsYUFDMUNoZ0MsT0FBT2lMLGVBQWVrMEIsRUFBUzlpQyxPQUFPMmpDLFlBQWEsQ0FBRWpqQyxNQUFPLFdBRTdEaUQsT0FBT2lMLGVBQWVrMEIsRUFBUyxhQUFjLENBQUVwaUMsT0FBTyxHQUFPLEVDRjlELElBQUlrakMsRUFBc0JULEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvX2ludGVybmFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9mZjFiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz80MzI4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/YzBiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/ZmYyZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ODcxOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/ZmNlMiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/YThhZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS5tb2R1bGUuY3NzPzdhMGQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/ZDU1NyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzA5OWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24ubW9kdWxlLmNzcz8xY2FjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/NTk2ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/MmM0NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLm1vZHVsZS5jc3M/ZjEwZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLm1vZHVsZS5jc3M/NDY5ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/M2NkNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzP2RmZmEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8xOTBhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/Y2QzNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0ubW9kdWxlLmNzcz9hYWNlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz9iNWRiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwubW9kdWxlLmNzcz84YTg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzY1YmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8zNzE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3M/NGRiNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLm1vZHVsZS5jc3M/YjY3NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L09wdGlvbkxpc3QubW9kdWxlLmNzcz80OWFjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gubW9kdWxlLmNzcz9lZDQzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5tb2R1bGUuY3NzPzFlNzkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvU2VsZWN0b3IubW9kdWxlLmNzcz85YWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz85M2E5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIubW9kdWxlLmNzcz83MGRmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3M/MWQwYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/Yjk1NSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzP2RhNWEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLm1vZHVsZS5jc3M/OGYzNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQubW9kdWxlLmNzcz8zZjFmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz81ODg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIubW9kdWxlLmNzcz9lYzg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8ubW9kdWxlLmNzcz9lZGE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb25zdGFudHMvVGFibGUudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL3R5cGVzL3RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2FyZXQtdXAuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2Nyb3NzZWQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlYXJjaC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvY2pzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlLXNoaW0ucHJvZHVjdGlvbi5taW4uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS9leHRlcm5hbCBjb21tb25qcyBcInJlYWN0XCIiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ib290c3RyYXAiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2NvbXBhdCBnZXQgZGVmYXVsdCBleHBvcnQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9ydW50aW1lL21ha2UgbmFtZXNwYWNlIG9iamVjdCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3N0YXJ0dXAiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbnZhciBvcHRpb25zID0ge1xuICAgIGNhcHR1cmU6IHRydWUsXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlT3V0c2lkZUNsaWNrKGNhbGxiYWNrKSB7XG4gICAgdmFyIHJlZiA9IHVzZVJlZigpO1xuICAgIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHZhciBoYW5kbGVDbGljayA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICAgICAgaWYgKCFyZWYuY3VycmVudCB8fCByZWYuY3VycmVudC5jb250YWlucyhldmVudC50YXJnZXQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FsbGJhY2soZXZlbnQpO1xuICAgICAgICB9O1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ0b3VjaGVuZFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwibW91c2V1cFwiLCBoYW5kbGVDbGljaywgb3B0aW9ucyk7XG4gICAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICB9O1xuICAgIH0sIFtjYWxsYmFja10pO1xuICAgIHJldHVybiByZWY7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VPdXRzaWRlQ2xpY2suanMubWFwIiwiLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxyXG5Db3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi5cclxuXHJcblBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZC9vciBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueVxyXG5wdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQuXHJcblxyXG5USEUgU09GVFdBUkUgSVMgUFJPVklERUQgXCJBUyBJU1wiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIXHJcblJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWVxyXG5BTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsXHJcbklORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTVxyXG5MT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUlxyXG5PVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SXHJcblBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXHJcbioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqICovXHJcbi8qIGdsb2JhbCBSZWZsZWN0LCBQcm9taXNlICovXHJcblxyXG52YXIgZXh0ZW5kU3RhdGljcyA9IGZ1bmN0aW9uKGQsIGIpIHtcclxuICAgIGV4dGVuZFN0YXRpY3MgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHxcclxuICAgICAgICAoeyBfX3Byb3RvX186IFtdIH0gaW5zdGFuY2VvZiBBcnJheSAmJiBmdW5jdGlvbiAoZCwgYikgeyBkLl9fcHJvdG9fXyA9IGI7IH0pIHx8XHJcbiAgICAgICAgZnVuY3Rpb24gKGQsIGIpIHsgZm9yICh2YXIgcCBpbiBiKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGIsIHApKSBkW3BdID0gYltwXTsgfTtcclxuICAgIHJldHVybiBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXh0ZW5kcyhkLCBiKSB7XHJcbiAgICBpZiAodHlwZW9mIGIgIT09IFwiZnVuY3Rpb25cIiAmJiBiICE9PSBudWxsKVxyXG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDbGFzcyBleHRlbmRzIHZhbHVlIFwiICsgU3RyaW5nKGIpICsgXCIgaXMgbm90IGEgY29uc3RydWN0b3Igb3IgbnVsbFwiKTtcclxuICAgIGV4dGVuZFN0YXRpY3MoZCwgYik7XHJcbiAgICBmdW5jdGlvbiBfXygpIHsgdGhpcy5jb25zdHJ1Y3RvciA9IGQ7IH1cclxuICAgIGQucHJvdG90eXBlID0gYiA9PT0gbnVsbCA/IE9iamVjdC5jcmVhdGUoYikgOiAoX18ucHJvdG90eXBlID0gYi5wcm90b3R5cGUsIG5ldyBfXygpKTtcclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkge1xyXG4gICAgX19hc3NpZ24gPSBPYmplY3QuYXNzaWduIHx8IGZ1bmN0aW9uIF9fYXNzaWduKHQpIHtcclxuICAgICAgICBmb3IgKHZhciBzLCBpID0gMSwgbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBuOyBpKyspIHtcclxuICAgICAgICAgICAgcyA9IGFyZ3VtZW50c1tpXTtcclxuICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApKSB0W3BdID0gc1twXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHQ7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX19hc3NpZ24uYXBwbHkodGhpcywgYXJndW1lbnRzKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVzdChzLCBlKSB7XHJcbiAgICB2YXIgdCA9IHt9O1xyXG4gICAgZm9yICh2YXIgcCBpbiBzKSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHMsIHApICYmIGUuaW5kZXhPZihwKSA8IDApXHJcbiAgICAgICAgdFtwXSA9IHNbcF07XHJcbiAgICBpZiAocyAhPSBudWxsICYmIHR5cGVvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzID09PSBcImZ1bmN0aW9uXCIpXHJcbiAgICAgICAgZm9yICh2YXIgaSA9IDAsIHAgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKHMpOyBpIDwgcC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoZS5pbmRleE9mKHBbaV0pIDwgMCAmJiBPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwocywgcFtpXSkpXHJcbiAgICAgICAgICAgICAgICB0W3BbaV1dID0gc1twW2ldXTtcclxuICAgICAgICB9XHJcbiAgICByZXR1cm4gdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpIHtcclxuICAgIHZhciBjID0gYXJndW1lbnRzLmxlbmd0aCwgciA9IGMgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5KSA6IGRlc2MsIGQ7XHJcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIFJlZmxlY3QuZGVjb3JhdGUgPT09IFwiZnVuY3Rpb25cIikgciA9IFJlZmxlY3QuZGVjb3JhdGUoZGVjb3JhdG9ycywgdGFyZ2V0LCBrZXksIGRlc2MpO1xyXG4gICAgZWxzZSBmb3IgKHZhciBpID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkgaWYgKGQgPSBkZWNvcmF0b3JzW2ldKSByID0gKGMgPCAzID8gZChyKSA6IGMgPiAzID8gZCh0YXJnZXQsIGtleSwgcikgOiBkKHRhcmdldCwga2V5KSkgfHwgcjtcclxuICAgIHJldHVybiBjID4gMyAmJiByICYmIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgciksIHI7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3BhcmFtKHBhcmFtSW5kZXgsIGRlY29yYXRvcikge1xyXG4gICAgcmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQsIGtleSkgeyBkZWNvcmF0b3IodGFyZ2V0LCBrZXksIHBhcmFtSW5kZXgpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2VzRGVjb3JhdGUoY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHtcclxuICAgIGZ1bmN0aW9uIGFjY2VwdChmKSB7IGlmIChmICE9PSB2b2lkIDAgJiYgdHlwZW9mIGYgIT09IFwiZnVuY3Rpb25cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bmN0aW9uIGV4cGVjdGVkXCIpOyByZXR1cm4gZjsgfVxyXG4gICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5ID0ga2luZCA9PT0gXCJnZXR0ZXJcIiA/IFwiZ2V0XCIgOiBraW5kID09PSBcInNldHRlclwiID8gXCJzZXRcIiA6IFwidmFsdWVcIjtcclxuICAgIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bXCJzdGF0aWNcIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsO1xyXG4gICAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7XHJcbiAgICB2YXIgXywgZG9uZSA9IGZhbHNlO1xyXG4gICAgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICB2YXIgY29udGV4dCA9IHt9O1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluKSBjb250ZXh0W3BdID0gcCA9PT0gXCJhY2Nlc3NcIiA/IHt9IDogY29udGV4dEluW3BdO1xyXG4gICAgICAgIGZvciAodmFyIHAgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dC5hY2Nlc3NbcF0gPSBjb250ZXh0SW4uYWNjZXNzW3BdO1xyXG4gICAgICAgIGNvbnRleHQuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbiAoZikgeyBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZFwiKTsgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZiB8fCBudWxsKSk7IH07XHJcbiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2ldKShraW5kID09PSBcImFjY2Vzc29yXCIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5XSwgY29udGV4dCk7XHJcbiAgICAgICAgaWYgKGtpbmQgPT09IFwiYWNjZXNzb3JcIikge1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09IFwib2JqZWN0XCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJPYmplY3QgZXhwZWN0ZWRcIik7XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF87XHJcbiAgICAgICAgICAgIGlmIChfID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKF8gPSBhY2NlcHQocmVzdWx0KSkge1xyXG4gICAgICAgICAgICBpZiAoa2luZCA9PT0gXCJmaWVsZFwiKSBpbml0aWFsaXplcnMucHVzaChfKTtcclxuICAgICAgICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleV0gPSBfO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuICAgIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTtcclxuICAgIGRvbmUgPSB0cnVlO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcnVuSW5pdGlhbGl6ZXJzKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUpIHtcclxuICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyO1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICB2YWx1ZSA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZywgdmFsdWUpIDogaW5pdGlhbGl6ZXJzW2ldLmNhbGwodGhpc0FyZyk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZSA6IHZvaWQgMDtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Byb3BLZXkoeCkge1xyXG4gICAgcmV0dXJuIHR5cGVvZiB4ID09PSBcInN5bWJvbFwiID8geCA6IFwiXCIuY29uY2F0KHgpO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGYsIG5hbWUsIHByZWZpeCkge1xyXG4gICAgaWYgKHR5cGVvZiBuYW1lID09PSBcInN5bWJvbFwiKSBuYW1lID0gbmFtZS5kZXNjcmlwdGlvbiA/IFwiW1wiLmNvbmNhdChuYW1lLmRlc2NyaXB0aW9uLCBcIl1cIikgOiBcIlwiO1xyXG4gICAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShmLCBcIm5hbWVcIiwgeyBjb25maWd1cmFibGU6IHRydWUsIHZhbHVlOiBwcmVmaXggPyBcIlwiLmNvbmNhdChwcmVmaXgsIFwiIFwiLCBuYW1lKSA6IG5hbWUgfSk7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSkge1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0Lm1ldGFkYXRhID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiBSZWZsZWN0Lm1ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcclxuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxyXG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxyXG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XHJcbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5KSB7XHJcbiAgICB2YXIgXyA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgeyBpZiAodFswXSAmIDEpIHRocm93IHRbMV07IHJldHVybiB0WzFdOyB9LCB0cnlzOiBbXSwgb3BzOiBbXSB9LCBmLCB5LCB0LCBnO1xyXG4gICAgcmV0dXJuIGcgPSB7IG5leHQ6IHZlcmIoMCksIFwidGhyb3dcIjogdmVyYigxKSwgXCJyZXR1cm5cIjogdmVyYigyKSB9LCB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgJiYgKGdbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gdGhpczsgfSksIGc7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgcmV0dXJuIGZ1bmN0aW9uICh2KSB7IHJldHVybiBzdGVwKFtuLCB2XSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAob3ApIHtcclxuICAgICAgICBpZiAoZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkdlbmVyYXRvciBpcyBhbHJlYWR5IGV4ZWN1dGluZy5cIik7XHJcbiAgICAgICAgd2hpbGUgKGcgJiYgKGcgPSAwLCBvcFswXSAmJiAoXyA9IDApKSwgXykgdHJ5IHtcclxuICAgICAgICAgICAgaWYgKGYgPSAxLCB5ICYmICh0ID0gb3BbMF0gJiAyID8geVtcInJldHVyblwiXSA6IG9wWzBdID8geVtcInRocm93XCJdIHx8ICgodCA9IHlbXCJyZXR1cm5cIl0pICYmIHQuY2FsbCh5KSwgMCkgOiB5Lm5leHQpICYmICEodCA9IHQuY2FsbCh5LCBvcFsxXSkpLmRvbmUpIHJldHVybiB0O1xyXG4gICAgICAgICAgICBpZiAoeSA9IDAsIHQpIG9wID0gW29wWzBdICYgMiwgdC52YWx1ZV07XHJcbiAgICAgICAgICAgIHN3aXRjaCAob3BbMF0pIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgMDogY2FzZSAxOiB0ID0gb3A7IGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSA0OiBfLmxhYmVsKys7IHJldHVybiB7IHZhbHVlOiBvcFsxXSwgZG9uZTogZmFsc2UgfTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNTogXy5sYWJlbCsrOyB5ID0gb3BbMV07IG9wID0gWzBdOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGNhc2UgNzogb3AgPSBfLm9wcy5wb3AoKTsgXy50cnlzLnBvcCgpOyBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEodCA9IF8udHJ5cywgdCA9IHQubGVuZ3RoID4gMCAmJiB0W3QubGVuZ3RoIC0gMV0pICYmIChvcFswXSA9PT0gNiB8fCBvcFswXSA9PT0gMikpIHsgXyA9IDA7IGNvbnRpbnVlOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdCB8fCAob3BbMV0gPiB0WzBdICYmIG9wWzFdIDwgdFszXSkpKSB7IF8ubGFiZWwgPSBvcFsxXTsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAob3BbMF0gPT09IDYgJiYgXy5sYWJlbCA8IHRbMV0pIHsgXy5sYWJlbCA9IHRbMV07IHQgPSBvcDsgYnJlYWs7IH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodCAmJiBfLmxhYmVsIDwgdFsyXSkgeyBfLmxhYmVsID0gdFsyXTsgXy5vcHMucHVzaChvcCk7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRbMl0pIF8ub3BzLnBvcCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgb3AgPSBib2R5LmNhbGwodGhpc0FyZywgXyk7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkgeyBvcCA9IFs2LCBlXTsgeSA9IDA7IH0gZmluYWxseSB7IGYgPSB0ID0gMDsgfVxyXG4gICAgICAgIGlmIChvcFswXSAmIDUpIHRocm93IG9wWzFdOyByZXR1cm4geyB2YWx1ZTogb3BbMF0gPyBvcFsxXSA6IHZvaWQgMCwgZG9uZTogdHJ1ZSB9O1xyXG4gICAgfVxyXG59XHJcblxyXG5leHBvcnQgdmFyIF9fY3JlYXRlQmluZGluZyA9IE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICB2YXIgZGVzYyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IobSwgayk7XHJcbiAgICBpZiAoIWRlc2MgfHwgKFwiZ2V0XCIgaW4gZGVzYyA/ICFtLl9fZXNNb2R1bGUgOiBkZXNjLndyaXRhYmxlIHx8IGRlc2MuY29uZmlndXJhYmxlKSkge1xyXG4gICAgICAgIGRlc2MgPSB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7IHJldHVybiBtW2tdOyB9IH07XHJcbiAgICB9XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgazIsIGRlc2MpO1xyXG59KSA6IChmdW5jdGlvbihvLCBtLCBrLCBrMikge1xyXG4gICAgaWYgKGsyID09PSB1bmRlZmluZWQpIGsyID0gaztcclxuICAgIG9bazJdID0gbVtrXTtcclxufSk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19leHBvcnRTdGFyKG0sIG8pIHtcclxuICAgIGZvciAodmFyIHAgaW4gbSkgaWYgKHAgIT09IFwiZGVmYXVsdFwiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobywgcCkpIF9fY3JlYXRlQmluZGluZyhvLCBtLCBwKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fdmFsdWVzKG8pIHtcclxuICAgIHZhciBzID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIFN5bWJvbC5pdGVyYXRvciwgbSA9IHMgJiYgb1tzXSwgaSA9IDA7XHJcbiAgICBpZiAobSkgcmV0dXJuIG0uY2FsbChvKTtcclxuICAgIGlmIChvICYmIHR5cGVvZiBvLmxlbmd0aCA9PT0gXCJudW1iZXJcIikgcmV0dXJuIHtcclxuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmIChvICYmIGkgPj0gby5sZW5ndGgpIG8gPSB2b2lkIDA7XHJcbiAgICAgICAgICAgIHJldHVybiB7IHZhbHVlOiBvICYmIG9baSsrXSwgZG9uZTogIW8gfTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihzID8gXCJPYmplY3QgaXMgbm90IGl0ZXJhYmxlLlwiIDogXCJTeW1ib2wuaXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19yZWFkKG8sIG4pIHtcclxuICAgIHZhciBtID0gdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIG9bU3ltYm9sLml0ZXJhdG9yXTtcclxuICAgIGlmICghbSkgcmV0dXJuIG87XHJcbiAgICB2YXIgaSA9IG0uY2FsbChvKSwgciwgYXIgPSBbXSwgZTtcclxuICAgIHRyeSB7XHJcbiAgICAgICAgd2hpbGUgKChuID09PSB2b2lkIDAgfHwgbi0tID4gMCkgJiYgIShyID0gaS5uZXh0KCkpLmRvbmUpIGFyLnB1c2goci52YWx1ZSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHsgZSA9IHsgZXJyb3I6IGVycm9yIH07IH1cclxuICAgIGZpbmFsbHkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChyICYmICFyLmRvbmUgJiYgKG0gPSBpW1wicmV0dXJuXCJdKSkgbS5jYWxsKGkpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmaW5hbGx5IHsgaWYgKGUpIHRocm93IGUuZXJyb3I7IH1cclxuICAgIH1cclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZCgpIHtcclxuICAgIGZvciAodmFyIGFyID0gW10sIGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKVxyXG4gICAgICAgIGFyID0gYXIuY29uY2F0KF9fcmVhZChhcmd1bWVudHNbaV0pKTtcclxuICAgIHJldHVybiBhcjtcclxufVxyXG5cclxuLyoqIEBkZXByZWNhdGVkICovXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NwcmVhZEFycmF5cygpIHtcclxuICAgIGZvciAodmFyIHMgPSAwLCBpID0gMCwgaWwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgaWw7IGkrKykgcyArPSBhcmd1bWVudHNbaV0ubGVuZ3RoO1xyXG4gICAgZm9yICh2YXIgciA9IEFycmF5KHMpLCBrID0gMCwgaSA9IDA7IGkgPCBpbDsgaSsrKVxyXG4gICAgICAgIGZvciAodmFyIGEgPSBhcmd1bWVudHNbaV0sIGogPSAwLCBqbCA9IGEubGVuZ3RoOyBqIDwgamw7IGorKywgaysrKVxyXG4gICAgICAgICAgICByW2tdID0gYVtqXTtcclxuICAgIHJldHVybiByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bywgZnJvbSwgcGFjaykge1xyXG4gICAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaSA9IDAsIGwgPSBmcm9tLmxlbmd0aCwgYXI7IGkgPCBsOyBpKyspIHtcclxuICAgICAgICBpZiAoYXIgfHwgIShpIGluIGZyb20pKSB7XHJcbiAgICAgICAgICAgIGlmICghYXIpIGFyID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZnJvbSwgMCwgaSk7XHJcbiAgICAgICAgICAgIGFyW2ldID0gZnJvbVtpXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdG8uY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20pKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXdhaXQodikge1xyXG4gICAgcmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBfX2F3YWl0ID8gKHRoaXMudiA9IHYsIHRoaXMpIDogbmV3IF9fYXdhaXQodik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2FzeW5jR2VuZXJhdG9yKHRoaXNBcmcsIF9hcmd1bWVudHMsIGdlbmVyYXRvcikge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBnID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pLCBpLCBxID0gW107XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIpLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaWYgKGdbbl0pIGlbbl0gPSBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKGEsIGIpIHsgcS5wdXNoKFtuLCB2LCBhLCBiXSkgPiAxIHx8IHJlc3VtZShuLCB2KTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHJlc3VtZShuLCB2KSB7IHRyeSB7IHN0ZXAoZ1tuXSh2KSk7IH0gY2F0Y2ggKGUpIHsgc2V0dGxlKHFbMF1bM10sIGUpOyB9IH1cclxuICAgIGZ1bmN0aW9uIHN0ZXAocikgeyByLnZhbHVlIGluc3RhbmNlb2YgX19hd2FpdCA/IFByb21pc2UucmVzb2x2ZShyLnZhbHVlLnYpLnRoZW4oZnVsZmlsbCwgcmVqZWN0KSA6IHNldHRsZShxWzBdWzJdLCByKTsgfVxyXG4gICAgZnVuY3Rpb24gZnVsZmlsbCh2YWx1ZSkgeyByZXN1bWUoXCJuZXh0XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gcmVqZWN0KHZhbHVlKSB7IHJlc3VtZShcInRocm93XCIsIHZhbHVlKTsgfVxyXG4gICAgZnVuY3Rpb24gc2V0dGxlKGYsIHYpIHsgaWYgKGYodiksIHEuc2hpZnQoKSwgcS5sZW5ndGgpIHJlc3VtZShxWzBdWzBdLCBxWzBdWzFdKTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvKSB7XHJcbiAgICB2YXIgaSwgcDtcclxuICAgIHJldHVybiBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiwgZnVuY3Rpb24gKGUpIHsgdGhyb3cgZTsgfSksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH0sIGk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4sIGYpIHsgaVtuXSA9IG9bbl0gPyBmdW5jdGlvbiAodikgeyByZXR1cm4gKHAgPSAhcCkgPyB7IHZhbHVlOiBfX2F3YWl0KG9bbl0odikpLCBkb25lOiBmYWxzZSB9IDogZiA/IGYodikgOiB2OyB9IDogZjsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY1ZhbHVlcyhvKSB7XHJcbiAgICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3ltYm9sLmFzeW5jSXRlcmF0b3IgaXMgbm90IGRlZmluZWQuXCIpO1xyXG4gICAgdmFyIG0gPSBvW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSwgaTtcclxuICAgIHJldHVybiBtID8gbS5jYWxsKG8pIDogKG8gPSB0eXBlb2YgX192YWx1ZXMgPT09IFwiZnVuY3Rpb25cIiA/IF9fdmFsdWVzKG8pIDogb1tTeW1ib2wuaXRlcmF0b3JdKCksIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpKTtcclxuICAgIGZ1bmN0aW9uIHZlcmIobikgeyBpW25dID0gb1tuXSAmJiBmdW5jdGlvbiAodikgeyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2ID0gb1tuXSh2KSwgc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgdi5kb25lLCB2LnZhbHVlKTsgfSk7IH07IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShyZXNvbHZlLCByZWplY3QsIGQsIHYpIHsgUHJvbWlzZS5yZXNvbHZlKHYpLnRoZW4oZnVuY3Rpb24odikgeyByZXNvbHZlKHsgdmFsdWU6IHYsIGRvbmU6IGQgfSk7IH0sIHJlamVjdCk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3KSB7XHJcbiAgICBpZiAoT2JqZWN0LmRlZmluZVByb3BlcnR5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsIFwicmF3XCIsIHsgdmFsdWU6IHJhdyB9KTsgfSBlbHNlIHsgY29va2VkLnJhdyA9IHJhdzsgfVxyXG4gICAgcmV0dXJuIGNvb2tlZDtcclxufTtcclxuXHJcbnZhciBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIHYpIHtcclxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvLCBcImRlZmF1bHRcIiwgeyBlbnVtZXJhYmxlOiB0cnVlLCB2YWx1ZTogdiB9KTtcclxufSkgOiBmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBvW1wiZGVmYXVsdFwiXSA9IHY7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnRTdGFyKG1vZCkge1xyXG4gICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDtcclxuICAgIHZhciByZXN1bHQgPSB7fTtcclxuICAgIGlmIChtb2QgIT0gbnVsbCkgZm9yICh2YXIgayBpbiBtb2QpIGlmIChrICE9PSBcImRlZmF1bHRcIiAmJiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobW9kLCBrKSkgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrKTtcclxuICAgIF9fc2V0TW9kdWxlRGVmYXVsdChyZXN1bHQsIG1vZCk7XHJcbiAgICByZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19pbXBvcnREZWZhdWx0KG1vZCkge1xyXG4gICAgcmV0dXJuIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRHZXQocmVjZWl2ZXIsIHN0YXRlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCByZWFkIHByaXZhdGUgbWVtYmVyIGZyb20gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdFwiKTtcclxuICAgIHJldHVybiBraW5kID09PSBcIm1cIiA/IGYgOiBraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlcikgOiBmID8gZi52YWx1ZSA6IHN0YXRlLmdldChyZWNlaXZlcik7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkU2V0KHJlY2VpdmVyLCBzdGF0ZSwgdmFsdWUsIGtpbmQsIGYpIHtcclxuICAgIGlmIChraW5kID09PSBcIm1cIikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZVwiKTtcclxuICAgIGlmIChraW5kID09PSBcImFcIiAmJiAhZikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUgYWNjZXNzb3Igd2FzIGRlZmluZWQgd2l0aG91dCBhIHNldHRlclwiKTtcclxuICAgIGlmICh0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyICE9PSBzdGF0ZSB8fCAhZiA6ICFzdGF0ZS5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IHdyaXRlIHByaXZhdGUgbWVtYmVyIHRvIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4gKGtpbmQgPT09IFwiYVwiID8gZi5jYWxsKHJlY2VpdmVyLCB2YWx1ZSkgOiBmID8gZi52YWx1ZSA9IHZhbHVlIDogc3RhdGUuc2V0KHJlY2VpdmVyLCB2YWx1ZSkpLCB2YWx1ZTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fY2xhc3NQcml2YXRlRmllbGRJbihzdGF0ZSwgcmVjZWl2ZXIpIHtcclxuICAgIGlmIChyZWNlaXZlciA9PT0gbnVsbCB8fCAodHlwZW9mIHJlY2VpdmVyICE9PSBcIm9iamVjdFwiICYmIHR5cGVvZiByZWNlaXZlciAhPT0gXCJmdW5jdGlvblwiKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB1c2UgJ2luJyBvcGVyYXRvciBvbiBub24tb2JqZWN0XCIpO1xyXG4gICAgcmV0dXJuIHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgPT09IHN0YXRlIDogc3RhdGUuaGFzKHJlY2VpdmVyKTtcclxufVxyXG4iLCJpbXBvcnQgeyBfX2F3YWl0ZXIsIF9fZ2VuZXJhdG9yLCBfX3JlYWQgfSBmcm9tIFwidHNsaWJcIjtcbmltcG9ydCB7IHVzZVN0YXRlLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0LCB1c2VSZWYgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVByb21pc2UoKSB7XG4gICAgdmFyIF90aGlzID0gdGhpcztcbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoe1xuICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICB9KSwgMiksIHJlc3VsdCA9IF9hWzBdLCBzZXRSZXN1bHQgPSBfYVsxXTtcbiAgICAvLyBXZSBuZWVkIHRvIGtlZXAgdHJhY2sgaWYgdGhlIGNvbXBvbmVudCBoYXMgYmVlbiB1bm1vdW50ZWRcbiAgICAvLyB3aGlsZSB0aGUgcHJvbWlzZSB3YXMgc3RpbGwgcGVuZGluZyB0byBhdm9pZCBzZXR0aW5nIHN0YXRlXG4gICAgLy8gb24gYW4gdW5tb3VudGVkIGNvbXBvbmVudC5cbiAgICB2YXIgaGFzVW5tb3VudGVkID0gdXNlUmVmKGZhbHNlKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICBoYXNVbm1vdW50ZWQuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0sIFtdKTtcbiAgICB2YXIgZGlzcGF0Y2ggPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAocHJvbWlzZSkgeyByZXR1cm4gX19hd2FpdGVyKF90aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgZGF0YSwgZXJyb3JfMTtcbiAgICAgICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uIChfYSkge1xuICAgICAgICAgICAgc3dpdGNoIChfYS5sYWJlbCkge1xuICAgICAgICAgICAgICAgIGNhc2UgMDpcbiAgICAgICAgICAgICAgICAgICAgX2EudHJ5cy5wdXNoKFswLCAyLCAsIDNdKTtcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbNCAvKnlpZWxkKi8sIHByb21pc2VdO1xuICAgICAgICAgICAgICAgIGNhc2UgMTpcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IF9hLnNlbnQoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGhhc1VubW91bnRlZC5jdXJyZW50ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiBkYXRhLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1Jlc29sdmVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBbMiAvKnJldHVybiovLCBkYXRhXTtcbiAgICAgICAgICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgICAgICAgICAgIGVycm9yXzEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGVycm9yXzEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWplY3RlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzMgLypicmVhayovLCAzXTtcbiAgICAgICAgICAgICAgICBjYXNlIDM6IHJldHVybiBbMiAvKnJldHVybiovXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfSk7IH0sIFtoYXNVbm1vdW50ZWRdKTtcbiAgICByZXR1cm4gW3Jlc3VsdCwgZGlzcGF0Y2hdO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlUHJvbWlzZS5qcy5tYXAiLCJpbXBvcnQgUmVhY3QsIHsgdXNlRWZmZWN0LCB1c2VMYXlvdXRFZmZlY3QsIGNyZWF0ZUNvbnRleHQsIHVzZUNvbnRleHQsIHVzZU1lbW8sIHVzZVN0YXRlLCBjcmVhdGVFbGVtZW50LCB1c2VSZWYsIHVzZUNhbGxiYWNrIH0gZnJvbSAncmVhY3QnO1xuXG4vLyBHbG9iYWwgc3RhdGUgdXNlZCB0byBkZWR1cGxpY2F0ZSByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzXG5jb25zdCBTV1JHbG9iYWxTdGF0ZSA9IG5ldyBXZWFrTWFwKCk7XG5cbmNvbnN0IEVNUFRZX0NBQ0hFID0ge307XG5jb25zdCBJTklUSUFMX0NBQ0hFID0ge307XG5jb25zdCBub29wID0gKCk9Pnt9O1xuLy8gVXNpbmcgbm9vcCgpIGFzIHRoZSB1bmRlZmluZWQgdmFsdWUgYXMgdW5kZWZpbmVkIGNhbiBiZSByZXBsYWNlZFxuLy8gYnkgc29tZXRoaW5nIGVsc2UuIFByZXR0aWVyIGlnbm9yZSBhbmQgZXh0cmEgcGFyZW50aGVzZXMgYXJlIG5lY2Vzc2FyeSBoZXJlXG4vLyB0byBlbnN1cmUgdGhhdCB0c2MgZG9lc24ndCByZW1vdmUgdGhlIF9fTk9JTkxJTkVfXyBjb21tZW50LlxuLy8gcHJldHRpZXItaWdub3JlXG5jb25zdCBVTkRFRklORUQgPSAvKiNfX05PSU5MSU5FX18qLyBub29wKCk7XG5jb25zdCBPQkpFQ1QgPSBPYmplY3Q7XG5jb25zdCBpc1VuZGVmaW5lZCA9ICh2KT0+diA9PT0gVU5ERUZJTkVEO1xuY29uc3QgaXNGdW5jdGlvbiA9ICh2KT0+dHlwZW9mIHYgPT0gJ2Z1bmN0aW9uJztcbmNvbnN0IG1lcmdlT2JqZWN0cyA9IChhLCBiKT0+KHtcbiAgICAgICAgLi4uYSxcbiAgICAgICAgLi4uYlxuICAgIH0pO1xuY29uc3QgU1RSX1VOREVGSU5FRCA9ICd1bmRlZmluZWQnO1xuLy8gTk9URTogVXNlIHRoZSBmdW5jdGlvbiB0byBndWFyYW50ZWUgaXQncyByZS1ldmFsdWF0ZWQgYmV0d2VlbiBqc2RvbSBhbmQgbm9kZSBydW50aW1lIGZvciB0ZXN0cy5cbmNvbnN0IGlzV2luZG93RGVmaW5lZCA9IHR5cGVvZiB3aW5kb3cgIT0gU1RSX1VOREVGSU5FRDtcbmNvbnN0IGlzRG9jdW1lbnREZWZpbmVkID0gdHlwZW9mIGRvY3VtZW50ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBoYXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSAoKT0+aXNXaW5kb3dEZWZpbmVkICYmIHR5cGVvZiB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBjcmVhdGVDYWNoZUhlbHBlciA9IChjYWNoZSwga2V5KT0+e1xuICAgIGNvbnN0IHN0YXRlID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICByZXR1cm4gW1xuICAgICAgICAvLyBHZXR0ZXJcbiAgICAgICAgKCk9PmNhY2hlLmdldChrZXkpIHx8IEVNUFRZX0NBQ0hFLFxuICAgICAgICAvLyBTZXR0ZXJcbiAgICAgICAgKGluZm8pPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcmV2ID0gY2FjaGUuZ2V0KGtleSk7XG4gICAgICAgICAgICAgICAgLy8gQmVmb3JlIHdyaXRpbmcgdG8gdGhlIHN0b3JlLCB3ZSBrZWVwIHRoZSB2YWx1ZSBpbiB0aGUgaW5pdGlhbCBjYWNoZVxuICAgICAgICAgICAgICAgIC8vIGlmIGl0J3Mgbm90IHRoZXJlIHlldC5cbiAgICAgICAgICAgICAgICBpZiAoIShrZXkgaW4gSU5JVElBTF9DQUNIRSkpIHtcbiAgICAgICAgICAgICAgICAgICAgSU5JVElBTF9DQUNIRVtrZXldID0gcHJldjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgc3RhdGVbNV0oa2V5LCBtZXJnZU9iamVjdHMocHJldiwgaW5mbyksIHByZXYgfHwgRU1QVFlfQ0FDSEUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICAvLyBTdWJzY3JpYmVyXG4gICAgICAgIHN0YXRlWzZdLFxuICAgICAgICAvLyBHZXQgc2VydmVyIGNhY2hlIHNuYXBzaG90XG4gICAgICAgICgpPT57XG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGtleSkpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgY2FjaGUgd2FzIHVwZGF0ZWQgb24gdGhlIGNsaWVudCwgd2UgcmV0dXJuIHRoZSBzdG9yZWQgaW5pdGlhbCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBpZiAoa2V5IGluIElOSVRJQUxfQ0FDSEUpIHJldHVybiBJTklUSUFMX0NBQ0hFW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IGRvbmUgYW55IGNsaWVudC1zaWRlIHVwZGF0ZXMsIHdlIHJldHVybiB0aGUgY3VycmVudCB2YWx1ZS5cbiAgICAgICAgICAgIHJldHVybiBjYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRTtcbiAgICAgICAgfVxuICAgIF07XG59O1xuXG4vLyB1c2UgV2Vha01hcCB0byBzdG9yZSB0aGUgb2JqZWN0LT5rZXkgbWFwcGluZ1xuLy8gc28gdGhlIG9iamVjdHMgY2FuIGJlIGdhcmJhZ2UgY29sbGVjdGVkLlxuLy8gV2Vha01hcCB1c2VzIGEgaGFzaHRhYmxlIHVuZGVyIHRoZSBob29kLCBzbyB0aGUgbG9va3VwXG4vLyBjb21wbGV4aXR5IGlzIGFsbW9zdCBPKDEpLlxuY29uc3QgdGFibGUgPSBuZXcgV2Vha01hcCgpO1xuLy8gY291bnRlciBvZiB0aGUga2V5XG5sZXQgY291bnRlciA9IDA7XG4vLyBBIHN0YWJsZSBoYXNoIGltcGxlbWVudGF0aW9uIHRoYXQgc3VwcG9ydHM6XG4vLyAtIEZhc3QgYW5kIGVuc3VyZXMgdW5pcXVlIGhhc2ggcHJvcGVydGllc1xuLy8gLSBIYW5kbGVzIHVuc2VyaWFsaXphYmxlIHZhbHVlc1xuLy8gLSBIYW5kbGVzIG9iamVjdCBrZXkgb3JkZXJpbmdcbi8vIC0gR2VuZXJhdGVzIHNob3J0IHJlc3VsdHNcbi8vXG4vLyBUaGlzIGlzIG5vdCBhIHNlcmlhbGl6YXRpb24gZnVuY3Rpb24sIGFuZCB0aGUgcmVzdWx0IGlzIG5vdCBndWFyYW50ZWVkIHRvIGJlXG4vLyBwYXJzYWJsZS5cbmNvbnN0IHN0YWJsZUhhc2ggPSAoYXJnKT0+e1xuICAgIGNvbnN0IHR5cGUgPSB0eXBlb2YgYXJnO1xuICAgIGNvbnN0IGNvbnN0cnVjdG9yID0gYXJnICYmIGFyZy5jb25zdHJ1Y3RvcjtcbiAgICBjb25zdCBpc0RhdGUgPSBjb25zdHJ1Y3RvciA9PSBEYXRlO1xuICAgIGxldCByZXN1bHQ7XG4gICAgbGV0IGluZGV4O1xuICAgIGlmIChPQkpFQ1QoYXJnKSA9PT0gYXJnICYmICFpc0RhdGUgJiYgY29uc3RydWN0b3IgIT0gUmVnRXhwKSB7XG4gICAgICAgIC8vIE9iamVjdC9mdW5jdGlvbiwgbm90IG51bGwvZGF0ZS9yZWdleHAuIFVzZSBXZWFrTWFwIHRvIHN0b3JlIHRoZSBpZCBmaXJzdC5cbiAgICAgICAgLy8gSWYgaXQncyBhbHJlYWR5IGhhc2hlZCwgZGlyZWN0bHkgcmV0dXJuIHRoZSByZXN1bHQuXG4gICAgICAgIHJlc3VsdCA9IHRhYmxlLmdldChhcmcpO1xuICAgICAgICBpZiAocmVzdWx0KSByZXR1cm4gcmVzdWx0O1xuICAgICAgICAvLyBTdG9yZSB0aGUgaGFzaCBmaXJzdCBmb3IgY2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGlvbiBiZWZvcmUgZW50ZXJpbmcgdGhlXG4gICAgICAgIC8vIHJlY3Vyc2l2ZSBgc3RhYmxlSGFzaGAgY2FsbHMuXG4gICAgICAgIC8vIEZvciBvdGhlciBvYmplY3RzIGxpa2Ugc2V0IGFuZCBtYXAsIHdlIHVzZSB0aGlzIGlkIGRpcmVjdGx5IGFzIHRoZSBoYXNoLlxuICAgICAgICByZXN1bHQgPSArK2NvdW50ZXIgKyAnfic7XG4gICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIGlmIChjb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuICAgICAgICAgICAgLy8gQXJyYXkuXG4gICAgICAgICAgICByZXN1bHQgPSAnQCc7XG4gICAgICAgICAgICBmb3IoaW5kZXggPSAwOyBpbmRleCA8IGFyZy5sZW5ndGg7IGluZGV4Kyspe1xuICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gT0JKRUNUKSB7XG4gICAgICAgICAgICAvLyBPYmplY3QsIHNvcnQga2V5cy5cbiAgICAgICAgICAgIHJlc3VsdCA9ICcjJztcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPQkpFQ1Qua2V5cyhhcmcpLnNvcnQoKTtcbiAgICAgICAgICAgIHdoaWxlKCFpc1VuZGVmaW5lZChpbmRleCA9IGtleXMucG9wKCkpKXtcbiAgICAgICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKGFyZ1tpbmRleF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSBpbmRleCArICc6JyArIHN0YWJsZUhhc2goYXJnW2luZGV4XSkgKyAnLCc7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGFibGUuc2V0KGFyZywgcmVzdWx0KTtcbiAgICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAgIHJlc3VsdCA9IGlzRGF0ZSA/IGFyZy50b0pTT04oKSA6IHR5cGUgPT0gJ3N5bWJvbCcgPyBhcmcudG9TdHJpbmcoKSA6IHR5cGUgPT0gJ3N0cmluZycgPyBKU09OLnN0cmluZ2lmeShhcmcpIDogJycgKyBhcmc7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59O1xuXG4vKipcbiAqIER1ZSB0byB0aGUgYnVnIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTY3ODA3NSxcbiAqIGl0J3Mgbm90IHJlbGlhYmxlIHRvIGRldGVjdCBpZiB0aGUgYnJvd3NlciBpcyBjdXJyZW50bHkgb25saW5lIG9yIG9mZmxpbmVcbiAqIGJhc2VkIG9uIGBuYXZpZ2F0b3Iub25MaW5lYC5cbiAqIEFzIGEgd29ya2Fyb3VuZCwgd2UgYWx3YXlzIGFzc3VtZSBpdCdzIG9ubGluZSBvbiB0aGUgZmlyc3QgbG9hZCwgYW5kIGNoYW5nZVxuICogdGhlIHN0YXR1cyB1cG9uIGBvbmxpbmVgIG9yIGBvZmZsaW5lYCBldmVudHMuXG4gKi8gbGV0IG9ubGluZSA9IHRydWU7XG5jb25zdCBpc09ubGluZSA9ICgpPT5vbmxpbmU7XG4vLyBGb3Igbm9kZSBhbmQgUmVhY3QgTmF0aXZlLCBgYWRkL3JlbW92ZUV2ZW50TGlzdGVuZXJgIGRvZXNuJ3QgZXhpc3Qgb24gd2luZG93LlxuY29uc3QgW29uV2luZG93RXZlbnQsIG9mZldpbmRvd0V2ZW50XSA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciA/IFtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lci5iaW5kKHdpbmRvdyksXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpXG5dIDogW1xuICAgIG5vb3AsXG4gICAgbm9vcFxuXTtcbmNvbnN0IGlzVmlzaWJsZSA9ICgpPT57XG4gICAgY29uc3QgdmlzaWJpbGl0eVN0YXRlID0gaXNEb2N1bWVudERlZmluZWQgJiYgZG9jdW1lbnQudmlzaWJpbGl0eVN0YXRlO1xuICAgIHJldHVybiBpc1VuZGVmaW5lZCh2aXNpYmlsaXR5U3RhdGUpIHx8IHZpc2liaWxpdHlTdGF0ZSAhPT0gJ2hpZGRlbic7XG59O1xuY29uc3QgaW5pdEZvY3VzID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIGZvY3VzIHJldmFsaWRhdGVcbiAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICB9XG4gICAgb25XaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGlmIChpc0RvY3VtZW50RGVmaW5lZCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndmlzaWJpbGl0eWNoYW5nZScsIGNhbGxiYWNrKTtcbiAgICAgICAgfVxuICAgICAgICBvZmZXaW5kb3dFdmVudCgnZm9jdXMnLCBjYWxsYmFjayk7XG4gICAgfTtcbn07XG5jb25zdCBpbml0UmVjb25uZWN0ID0gKGNhbGxiYWNrKT0+e1xuICAgIC8vIHJldmFsaWRhdGUgb24gcmVjb25uZWN0ZWRcbiAgICBjb25zdCBvbk9ubGluZSA9ICgpPT57XG4gICAgICAgIG9ubGluZSA9IHRydWU7XG4gICAgICAgIGNhbGxiYWNrKCk7XG4gICAgfTtcbiAgICAvLyBub3RoaW5nIHRvIHJldmFsaWRhdGUsIGp1c3QgdXBkYXRlIHRoZSBzdGF0dXNcbiAgICBjb25zdCBvbk9mZmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSBmYWxzZTtcbiAgICB9O1xuICAgIG9uV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICBvbldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29ubGluZScsIG9uT25saW5lKTtcbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ29mZmxpbmUnLCBvbk9mZmxpbmUpO1xuICAgIH07XG59O1xuY29uc3QgcHJlc2V0ID0ge1xuICAgIGlzT25saW5lLFxuICAgIGlzVmlzaWJsZVxufTtcbmNvbnN0IGRlZmF1bHRDb25maWdPcHRpb25zID0ge1xuICAgIGluaXRGb2N1cyxcbiAgICBpbml0UmVjb25uZWN0XG59O1xuXG5jb25zdCBJU19SRUFDVF9MRUdBQ1kgPSAhUmVhY3QudXNlSWQ7XG5jb25zdCBJU19TRVJWRVIgPSAhaXNXaW5kb3dEZWZpbmVkIHx8ICdEZW5vJyBpbiB3aW5kb3c7XG4vLyBQb2x5ZmlsbCByZXF1ZXN0QW5pbWF0aW9uRnJhbWVcbmNvbnN0IHJBRiA9IChmKT0+aGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lKCkgPyB3aW5kb3dbJ3JlcXVlc3RBbmltYXRpb25GcmFtZSddKGYpIDogc2V0VGltZW91dChmLCAxKTtcbi8vIFJlYWN0IGN1cnJlbnRseSB0aHJvd3MgYSB3YXJuaW5nIHdoZW4gdXNpbmcgdXNlTGF5b3V0RWZmZWN0IG9uIHRoZSBzZXJ2ZXIuXG4vLyBUbyBnZXQgYXJvdW5kIGl0LCB3ZSBjYW4gY29uZGl0aW9uYWxseSB1c2VFZmZlY3Qgb24gdGhlIHNlcnZlciAobm8tb3ApIGFuZFxuLy8gdXNlTGF5b3V0RWZmZWN0IGluIHRoZSBicm93c2VyLlxuY29uc3QgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCA9IElTX1NFUlZFUiA/IHVzZUVmZmVjdCA6IHVzZUxheW91dEVmZmVjdDtcbi8vIFRoaXMgYXNzaWdubWVudCBpcyB0byBleHRlbmQgdGhlIE5hdmlnYXRvciB0eXBlIHRvIHVzZSBlZmZlY3RpdmVUeXBlLlxuY29uc3QgbmF2aWdhdG9yQ29ubmVjdGlvbiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIG5hdmlnYXRvci5jb25uZWN0aW9uO1xuLy8gQWRqdXN0IHRoZSBjb25maWcgYmFzZWQgb24gc2xvdyBjb25uZWN0aW9uIHN0YXR1cyAoPD0gNzBLYnBzKS5cbmNvbnN0IHNsb3dDb25uZWN0aW9uID0gIUlTX1NFUlZFUiAmJiBuYXZpZ2F0b3JDb25uZWN0aW9uICYmIChbXG4gICAgJ3Nsb3ctMmcnLFxuICAgICcyZydcbl0uaW5jbHVkZXMobmF2aWdhdG9yQ29ubmVjdGlvbi5lZmZlY3RpdmVUeXBlKSB8fCBuYXZpZ2F0b3JDb25uZWN0aW9uLnNhdmVEYXRhKTtcblxuY29uc3Qgc2VyaWFsaXplID0gKGtleSk9PntcbiAgICBpZiAoaXNGdW5jdGlvbihrZXkpKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBrZXkgPSBrZXkoKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAvLyBkZXBlbmRlbmNpZXMgbm90IHJlYWR5XG4gICAgICAgICAgICBrZXkgPSAnJztcbiAgICAgICAgfVxuICAgIH1cbiAgICAvLyBVc2UgdGhlIG9yaWdpbmFsIGtleSBhcyB0aGUgYXJndW1lbnQgb2YgZmV0Y2hlci4gVGhpcyBjYW4gYmUgYSBzdHJpbmcgb3IgYW5cbiAgICAvLyBhcnJheSBvZiB2YWx1ZXMuXG4gICAgY29uc3QgYXJncyA9IGtleTtcbiAgICAvLyBJZiBrZXkgaXMgbm90IGZhbHN5LCBvciBub3QgYW4gZW1wdHkgYXJyYXksIGhhc2ggaXQuXG4gICAga2V5ID0gdHlwZW9mIGtleSA9PSAnc3RyaW5nJyA/IGtleSA6IChBcnJheS5pc0FycmF5KGtleSkgPyBrZXkubGVuZ3RoIDoga2V5KSA/IHN0YWJsZUhhc2goa2V5KSA6ICcnO1xuICAgIHJldHVybiBbXG4gICAgICAgIGtleSxcbiAgICAgICAgYXJnc1xuICAgIF07XG59O1xuXG4vLyBHbG9iYWwgdGltZXN0YW1wLlxubGV0IF9fdGltZXN0YW1wID0gMDtcbmNvbnN0IGdldFRpbWVzdGFtcCA9ICgpPT4rK19fdGltZXN0YW1wO1xuXG5jb25zdCBGT0NVU19FVkVOVCA9IDA7XG5jb25zdCBSRUNPTk5FQ1RfRVZFTlQgPSAxO1xuY29uc3QgTVVUQVRFX0VWRU5UID0gMjtcblxudmFyIGNvbnN0YW50cyA9IHtcbiAgX19wcm90b19fOiBudWxsLFxuICBGT0NVU19FVkVOVDogRk9DVVNfRVZFTlQsXG4gIFJFQ09OTkVDVF9FVkVOVDogUkVDT05ORUNUX0VWRU5ULFxuICBNVVRBVEVfRVZFTlQ6IE1VVEFURV9FVkVOVFxufTtcblxuYXN5bmMgZnVuY3Rpb24gaW50ZXJuYWxNdXRhdGUoLi4uYXJncykge1xuICAgIGNvbnN0IFtjYWNoZSwgX2tleSwgX2RhdGEsIF9vcHRzXSA9IGFyZ3M7XG4gICAgLy8gV2hlbiBwYXNzaW5nIGFzIGEgYm9vbGVhbiwgaXQncyBleHBsaWNpdGx5IHVzZWQgdG8gZGlzYWJsZS9lbmFibGVcbiAgICAvLyByZXZhbGlkYXRpb24uXG4gICAgY29uc3Qgb3B0aW9ucyA9IG1lcmdlT2JqZWN0cyh7XG4gICAgICAgIHBvcHVsYXRlQ2FjaGU6IHRydWUsXG4gICAgICAgIHRocm93T25FcnJvcjogdHJ1ZVxuICAgIH0sIHR5cGVvZiBfb3B0cyA9PT0gJ2Jvb2xlYW4nID8ge1xuICAgICAgICByZXZhbGlkYXRlOiBfb3B0c1xuICAgIH0gOiBfb3B0cyB8fCB7fSk7XG4gICAgbGV0IHBvcHVsYXRlQ2FjaGUgPSBvcHRpb25zLnBvcHVsYXRlQ2FjaGU7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yT3B0aW9uID0gb3B0aW9ucy5yb2xsYmFja09uRXJyb3I7XG4gICAgbGV0IG9wdGltaXN0aWNEYXRhID0gb3B0aW9ucy5vcHRpbWlzdGljRGF0YTtcbiAgICBjb25zdCByZXZhbGlkYXRlID0gb3B0aW9ucy5yZXZhbGlkYXRlICE9PSBmYWxzZTtcbiAgICBjb25zdCByb2xsYmFja09uRXJyb3IgPSAoZXJyb3IpPT57XG4gICAgICAgIHJldHVybiB0eXBlb2Ygcm9sbGJhY2tPbkVycm9yT3B0aW9uID09PSAnZnVuY3Rpb24nID8gcm9sbGJhY2tPbkVycm9yT3B0aW9uKGVycm9yKSA6IHJvbGxiYWNrT25FcnJvck9wdGlvbiAhPT0gZmFsc2U7XG4gICAgfTtcbiAgICBjb25zdCB0aHJvd09uRXJyb3IgPSBvcHRpb25zLnRocm93T25FcnJvcjtcbiAgICAvLyBJZiB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzIGEga2V5IGZpbHRlciwgcmV0dXJuIHRoZSBtdXRhdGlvbiByZXN1bHRzIGZvciBhbGxcbiAgICAvLyBmaWx0ZXJlZCBrZXlzLlxuICAgIGlmIChpc0Z1bmN0aW9uKF9rZXkpKSB7XG4gICAgICAgIGNvbnN0IGtleUZpbHRlciA9IF9rZXk7XG4gICAgICAgIGNvbnN0IG1hdGNoZWRLZXlzID0gW107XG4gICAgICAgIGNvbnN0IGl0ID0gY2FjaGUua2V5cygpO1xuICAgICAgICBmb3IobGV0IGtleUl0ID0gaXQubmV4dCgpOyAha2V5SXQuZG9uZTsga2V5SXQgPSBpdC5uZXh0KCkpe1xuICAgICAgICAgICAgY29uc3Qga2V5ID0ga2V5SXQudmFsdWU7XG4gICAgICAgICAgICBpZiAoLy8gU2tpcCB0aGUgc3BlY2lhbCB1c2VTV1JJbmZpbml0ZSBrZXlzLlxuICAgICAgICAgICAgIWtleS5zdGFydHNXaXRoKCckaW5mJCcpICYmIGtleUZpbHRlcihjYWNoZS5nZXQoa2V5KS5faykpIHtcbiAgICAgICAgICAgICAgICBtYXRjaGVkS2V5cy5wdXNoKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKG1hdGNoZWRLZXlzLm1hcChtdXRhdGVCeUtleSkpO1xuICAgIH1cbiAgICByZXR1cm4gbXV0YXRlQnlLZXkoX2tleSk7XG4gICAgYXN5bmMgZnVuY3Rpb24gbXV0YXRlQnlLZXkoX2spIHtcbiAgICAgICAgLy8gU2VyaWFsaXplIGtleVxuICAgICAgICBjb25zdCBba2V5XSA9IHNlcmlhbGl6ZShfayk7XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IFtnZXQsIHNldF0gPSBjcmVhdGVDYWNoZUhlbHBlcihjYWNoZSwga2V5KTtcbiAgICAgICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgICAgIGNvbnN0IHJldmFsaWRhdG9ycyA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldO1xuICAgICAgICBjb25zdCBzdGFydFJldmFsaWRhdGUgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKHJldmFsaWRhdGUpIHtcbiAgICAgICAgICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBrZXkgYnkgZGVsZXRpbmcgdGhlIGNvbmN1cnJlbnQgcmVxdWVzdCBtYXJrZXJzIHNvIG5ld1xuICAgICAgICAgICAgICAgIC8vIHJlcXVlc3RzIHdpbGwgbm90IGJlIGRlZHVwZWQuXG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICAgICAgaWYgKHJldmFsaWRhdG9ycyAmJiByZXZhbGlkYXRvcnNbMF0pIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldmFsaWRhdG9yc1swXShNVVRBVEVfRVZFTlQpLnRoZW4oKCk9PmdldCgpLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBnZXQoKS5kYXRhO1xuICAgICAgICB9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBuZXcgZGF0YSBwcm92aWRlZCwgcmV2YWxpZGF0ZSB0aGUga2V5IHdpdGggY3VycmVudCBzdGF0ZS5cbiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgLy8gUmV2YWxpZGF0ZSBhbmQgYnJvYWRjYXN0IHN0YXRlLlxuICAgICAgICAgICAgcmV0dXJuIHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICB9XG4gICAgICAgIGxldCBkYXRhID0gX2RhdGE7XG4gICAgICAgIGxldCBlcnJvcjtcbiAgICAgICAgLy8gVXBkYXRlIGdsb2JhbCB0aW1lc3RhbXBzLlxuICAgICAgICBjb25zdCBiZWZvcmVNdXRhdGlvblRzID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIE1VVEFUSU9OW2tleV0gPSBbXG4gICAgICAgICAgICBiZWZvcmVNdXRhdGlvblRzLFxuICAgICAgICAgICAgMFxuICAgICAgICBdO1xuICAgICAgICBjb25zdCBoYXNPcHRpbWlzdGljRGF0YSA9ICFpc1VuZGVmaW5lZChvcHRpbWlzdGljRGF0YSk7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gZ2V0KCk7XG4gICAgICAgIC8vIGBkaXNwbGF5ZWREYXRhYCBpcyB0aGUgY3VycmVudCB2YWx1ZSBvbiBzY3JlZW4uIEl0IGNvdWxkIGJlIHRoZSBvcHRpbWlzdGljIHZhbHVlXG4gICAgICAgIC8vIHRoYXQgaXMgZ29pbmcgdG8gYmUgb3ZlcnJpZGRlbiBieSBhIGBjb21taXR0ZWREYXRhYCwgb3IgZ2V0IHJldmVydGVkIGJhY2suXG4gICAgICAgIC8vIGBjb21taXR0ZWREYXRhYCBpcyB0aGUgdmFsaWRhdGVkIHZhbHVlIHRoYXQgY29tZXMgZnJvbSBhIGZldGNoIG9yIG11dGF0aW9uLlxuICAgICAgICBjb25zdCBkaXNwbGF5ZWREYXRhID0gc3RhdGUuZGF0YTtcbiAgICAgICAgY29uc3QgY3VycmVudERhdGEgPSBzdGF0ZS5fYztcbiAgICAgICAgY29uc3QgY29tbWl0dGVkRGF0YSA9IGlzVW5kZWZpbmVkKGN1cnJlbnREYXRhKSA/IGRpc3BsYXllZERhdGEgOiBjdXJyZW50RGF0YTtcbiAgICAgICAgLy8gRG8gb3B0aW1pc3RpYyBkYXRhIHVwZGF0ZS5cbiAgICAgICAgaWYgKGhhc09wdGltaXN0aWNEYXRhKSB7XG4gICAgICAgICAgICBvcHRpbWlzdGljRGF0YSA9IGlzRnVuY3Rpb24ob3B0aW1pc3RpY0RhdGEpID8gb3B0aW1pc3RpY0RhdGEoY29tbWl0dGVkRGF0YSkgOiBvcHRpbWlzdGljRGF0YTtcbiAgICAgICAgICAgIC8vIFdoZW4gd2Ugc2V0IG9wdGltaXN0aWMgZGF0YSwgYmFja3VwIHRoZSBjdXJyZW50IGNvbW1pdHRlZERhdGEgZGF0YSBpbiBgX2NgLlxuICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICBkYXRhOiBvcHRpbWlzdGljRGF0YSxcbiAgICAgICAgICAgICAgICBfYzogY29tbWl0dGVkRGF0YVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzRnVuY3Rpb24oZGF0YSkpIHtcbiAgICAgICAgICAgIC8vIGBkYXRhYCBpcyBhIGZ1bmN0aW9uLCBjYWxsIGl0IHBhc3NpbmcgY3VycmVudCBjYWNoZSB2YWx1ZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgZGF0YSA9IGRhdGEoY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiBpdCB0aHJvd3MgYW4gZXJyb3Igc3luY2hyb25vdXNseSwgd2Ugc2hvdWxkbid0IHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gYGRhdGFgIGlzIGEgcHJvbWlzZS90aGVuYWJsZSwgcmVzb2x2ZSB0aGUgZmluYWwgZGF0YSBmaXJzdC5cbiAgICAgICAgaWYgKGRhdGEgJiYgaXNGdW5jdGlvbihkYXRhLnRoZW4pKSB7XG4gICAgICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlIG11dGF0aW9uIGlzIGFzeW5jLCB3ZSBuZWVkIHRvIGNoZWNrIHRpbWVzdGFtcHMgdG9cbiAgICAgICAgICAgIC8vIGF2b2lkIHJhY2UgY29uZGl0aW9ucy5cbiAgICAgICAgICAgIGRhdGEgPSBhd2FpdCBkYXRhLmNhdGNoKChlcnIpPT57XG4gICAgICAgICAgICAgICAgZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIG90aGVyIG11dGF0aW9ucyBoYXZlIG9jY3VycmVkIHNpbmNlIHdlJ3ZlIHN0YXJ0ZWQgdGhpcyBtdXRhdGlvbi5cbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3MgYSByYWNlIHdlIGRvbid0IHVwZGF0ZSBjYWNoZSBvciBicm9hZGNhc3QgdGhlIGNoYW5nZSxcbiAgICAgICAgICAgIC8vIGp1c3QgcmV0dXJuIHRoZSBkYXRhLlxuICAgICAgICAgICAgaWYgKGJlZm9yZU11dGF0aW9uVHMgIT09IE1VVEFUSU9OW2tleV1bMF0pIHtcbiAgICAgICAgICAgICAgICBpZiAoZXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRhO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChlcnJvciAmJiBoYXNPcHRpbWlzdGljRGF0YSAmJiByb2xsYmFja09uRXJyb3IoZXJyb3IpKSB7XG4gICAgICAgICAgICAgICAgLy8gUm9sbGJhY2suIEFsd2F5cyBwb3B1bGF0ZSB0aGUgY2FjaGUgaW4gdGhpcyBjYXNlIGJ1dCB3aXRob3V0XG4gICAgICAgICAgICAgICAgLy8gdHJhbnNmb3JtaW5nIHRoZSBkYXRhLlxuICAgICAgICAgICAgICAgIHBvcHVsYXRlQ2FjaGUgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGRhdGEgPSBjb21taXR0ZWREYXRhO1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGRhdGEgdG8gYmUgdGhlIGxhdGVzdCBjb21taXR0ZWQgZGF0YSwgYW5kIGNsZWFyIHRoZSBgX2NgIHZhbHVlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBJZiB3ZSBzaG91bGQgd3JpdGUgYmFjayB0aGUgY2FjaGUgYWZ0ZXIgcmVxdWVzdC5cbiAgICAgICAgaWYgKHBvcHVsYXRlQ2FjaGUpIHtcbiAgICAgICAgICAgIGlmICghZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAvLyBUcmFuc2Zvcm0gdGhlIHJlc3VsdCBpbnRvIGRhdGEuXG4gICAgICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24ocG9wdWxhdGVDYWNoZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSA9IHBvcHVsYXRlQ2FjaGUoZGF0YSwgY29tbWl0dGVkRGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIC8vIE9ubHkgdXBkYXRlIGNhY2hlZCBkYXRhIGlmIHRoZXJlJ3Mgbm8gZXJyb3IuIERhdGEgY2FuIGJlIGB1bmRlZmluZWRgIGhlcmUuXG4gICAgICAgICAgICAgICAgc2V0KHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIFJlc2V0IHRoZSB0aW1lc3RhbXAgdG8gbWFyayB0aGUgbXV0YXRpb24gaGFzIGVuZGVkLlxuICAgICAgICBNVVRBVElPTltrZXldWzFdID0gZ2V0VGltZXN0YW1wKCk7XG4gICAgICAgIC8vIFVwZGF0ZSBleGlzdGluZyBTV1IgSG9va3MnIGludGVybmFsIHN0YXRlczpcbiAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgc3RhcnRSZXZhbGlkYXRlKCk7XG4gICAgICAgIC8vIFRoZSBtdXRhdGlvbiBhbmQgcmV2YWxpZGF0aW9uIGFyZSBlbmRlZCwgd2UgY2FuIGNsZWFyIGl0IHNpbmNlIHRoZSBkYXRhIGlzXG4gICAgICAgIC8vIG5vdCBhbiBvcHRpbWlzdGljIHZhbHVlIGFueW1vcmUuXG4gICAgICAgIHNldCh7XG4gICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgIH0pO1xuICAgICAgICAvLyBUaHJvdyBlcnJvciBvciByZXR1cm4gZGF0YVxuICAgICAgICBpZiAoZXJyb3IpIHtcbiAgICAgICAgICAgIGlmICh0aHJvd09uRXJyb3IpIHRocm93IGVycm9yO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwb3B1bGF0ZUNhY2hlID8gcmVzIDogZGF0YTtcbiAgICB9XG59XG5cbmNvbnN0IHJldmFsaWRhdGVBbGxLZXlzID0gKHJldmFsaWRhdG9ycywgdHlwZSk9PntcbiAgICBmb3IoY29uc3Qga2V5IGluIHJldmFsaWRhdG9ycyl7XG4gICAgICAgIGlmIChyZXZhbGlkYXRvcnNba2V5XVswXSkgcmV2YWxpZGF0b3JzW2tleV1bMF0odHlwZSk7XG4gICAgfVxufTtcbmNvbnN0IGluaXRDYWNoZSA9IChwcm92aWRlciwgb3B0aW9ucyk9PntcbiAgICAvLyBUaGUgZ2xvYmFsIHN0YXRlIGZvciBhIHNwZWNpZmljIHByb3ZpZGVyIHdpbGwgYmUgdXNlZCB0byBkZWR1cGxpY2F0ZVxuICAgIC8vIHJlcXVlc3RzIGFuZCBzdG9yZSBsaXN0ZW5lcnMuIEFzIHdlbGwgYXMgYSBtdXRhdGUgZnVuY3Rpb24gdGhhdCBpcyBib3VuZCB0b1xuICAgIC8vIHRoZSBjYWNoZS5cbiAgICAvLyBUaGUgcHJvdmlkZXIncyBnbG9iYWwgc3RhdGUgbWlnaHQgYmUgYWxyZWFkeSBpbml0aWFsaXplZC4gTGV0J3MgdHJ5IHRvIGdldCB0aGVcbiAgICAvLyBnbG9iYWwgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBwcm92aWRlciBmaXJzdC5cbiAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgY29uc3Qgb3B0cyA9IG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnT3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIC8vIElmIHRoZXJlJ3Mgbm8gZ2xvYmFsIHN0YXRlIGJvdW5kIHRvIHRoZSBwcm92aWRlciwgY3JlYXRlIGEgbmV3IG9uZSB3aXRoIHRoZVxuICAgICAgICAvLyBuZXcgbXV0YXRlIGZ1bmN0aW9uLlxuICAgICAgICBjb25zdCBFVkVOVF9SRVZBTElEQVRPUlMgPSB7fTtcbiAgICAgICAgY29uc3QgbXV0YXRlID0gaW50ZXJuYWxNdXRhdGUuYmluZChVTkRFRklORUQsIHByb3ZpZGVyKTtcbiAgICAgICAgbGV0IHVubW91bnQgPSBub29wO1xuICAgICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0ge307XG4gICAgICAgIGNvbnN0IHN1YnNjcmliZSA9IChrZXksIGNhbGxiYWNrKT0+e1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNba2V5XSA9IHN1YnM7XG4gICAgICAgICAgICBzdWJzLnB1c2goY2FsbGJhY2spO1xuICAgICAgICAgICAgcmV0dXJuICgpPT5zdWJzLnNwbGljZShzdWJzLmluZGV4T2YoY2FsbGJhY2spLCAxKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3Qgc2V0dGVyID0gKGtleSwgdmFsdWUsIHByZXYpPT57XG4gICAgICAgICAgICBwcm92aWRlci5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICBjb25zdCBzdWJzID0gc3Vic2NyaXB0aW9uc1trZXldO1xuICAgICAgICAgICAgaWYgKHN1YnMpIHtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGkgPSBzdWJzLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICAgICAgICAgIHN1YnNbaV0odmFsdWUsIHByZXYpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgaW5pdFByb3ZpZGVyID0gKCk9PntcbiAgICAgICAgICAgIGlmICghU1dSR2xvYmFsU3RhdGUuaGFzKHByb3ZpZGVyKSkge1xuICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgc3RhdGUgaWYgaXQncyBuZXcsIG9yIGlmIHRoZSBwcm92aWRlciBoYXMgYmVlbiBleHRlbmRlZC5cbiAgICAgICAgICAgICAgICBTV1JHbG9iYWxTdGF0ZS5zZXQocHJvdmlkZXIsIFtcbiAgICAgICAgICAgICAgICAgICAgRVZFTlRfUkVWQUxJREFUT1JTLFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICBtdXRhdGUsXG4gICAgICAgICAgICAgICAgICAgIHNldHRlcixcbiAgICAgICAgICAgICAgICAgICAgc3Vic2NyaWJlXG4gICAgICAgICAgICAgICAgXSk7XG4gICAgICAgICAgICAgICAgaWYgKCFJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBsaXN0ZW5pbmcgdG8gdGhlIG5hdGl2ZSBldmVudHMgZm9yIGF1dG8gcmV2YWxpZGF0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2UgaW50ZW50aW9uYWxseSBwdXQgYSBkZWxheSAoc2V0VGltZW91dCkgaGVyZSB0byBtYWtlIHN1cmUgdGhleSBhcmVcbiAgICAgICAgICAgICAgICAgICAgLy8gZmlyZWQgYWZ0ZXIgaW1tZWRpYXRlIEphdmFTY3JpcHQgZXhlY3V0aW9ucywgd2hpY2ggY2FuIGJlXG4gICAgICAgICAgICAgICAgICAgIC8vIFJlYWN0J3Mgc3RhdGUgdXBkYXRlcy5cbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBhdm9pZHMgc29tZSB1bm5lY2Vzc2FyeSByZXZhbGlkYXRpb25zIHN1Y2ggYXNcbiAgICAgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvaXNzdWVzLzE2ODAuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlbGVhc2VGb2N1cyA9IG9wdHMuaW5pdEZvY3VzKHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIEZPQ1VTX0VWRU5UKSkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlUmVjb25uZWN0ID0gb3B0cy5pbml0UmVjb25uZWN0KHNldFRpbWVvdXQuYmluZChVTkRFRklORUQsIHJldmFsaWRhdGVBbGxLZXlzLmJpbmQoVU5ERUZJTkVELCBFVkVOVF9SRVZBTElEQVRPUlMsIFJFQ09OTkVDVF9FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgdW5tb3VudCA9ICgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlRm9jdXMgJiYgcmVsZWFzZUZvY3VzKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlUmVjb25uZWN0ICYmIHJlbGVhc2VSZWNvbm5lY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gdW4tbW91bnRpbmcsIHdlIG5lZWQgdG8gcmVtb3ZlIHRoZSBjYWNoZSBwcm92aWRlciBmcm9tIHRoZSBzdGF0ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gc3RvcmFnZSB0b28gYmVjYXVzZSBpdCdzIGEgc2lkZS1lZmZlY3QuIE90aGVyd2lzZSwgd2hlbiByZS1tb3VudGluZyB3ZVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gd2lsbCBub3QgcmUtcmVnaXN0ZXIgdGhvc2UgZXZlbnQgbGlzdGVuZXJzLlxuICAgICAgICAgICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuZGVsZXRlKHByb3ZpZGVyKTtcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGluaXRQcm92aWRlcigpO1xuICAgICAgICAvLyBUaGlzIGlzIGEgbmV3IHByb3ZpZGVyLCB3ZSBuZWVkIHRvIGluaXRpYWxpemUgaXQgYW5kIHNldHVwIERPTSBldmVudHNcbiAgICAgICAgLy8gbGlzdGVuZXJzIGZvciBgZm9jdXNgIGFuZCBgcmVjb25uZWN0YCBhY3Rpb25zLlxuICAgICAgICAvLyBXZSBtaWdodCB3YW50IHRvIGluamVjdCBhbiBleHRyYSBsYXllciBvbiB0b3Agb2YgYHByb3ZpZGVyYCBpbiB0aGUgZnV0dXJlLFxuICAgICAgICAvLyBzdWNoIGFzIGtleSBzZXJpYWxpemF0aW9uLCBhdXRvIEdDLCBldGMuXG4gICAgICAgIC8vIEZvciBub3csIGl0J3MganVzdCBhIGBNYXBgIGludGVyZmFjZSB3aXRob3V0IGFueSBtb2RpZmljYXRpb25zLlxuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgcHJvdmlkZXIsXG4gICAgICAgICAgICBtdXRhdGUsXG4gICAgICAgICAgICBpbml0UHJvdmlkZXIsXG4gICAgICAgICAgICB1bm1vdW50XG4gICAgICAgIF07XG4gICAgfVxuICAgIHJldHVybiBbXG4gICAgICAgIHByb3ZpZGVyLFxuICAgICAgICBTV1JHbG9iYWxTdGF0ZS5nZXQocHJvdmlkZXIpWzRdXG4gICAgXTtcbn07XG5cbi8vIGVycm9yIHJldHJ5XG5jb25zdCBvbkVycm9yUmV0cnkgPSAoXywgX18sIGNvbmZpZywgcmV2YWxpZGF0ZSwgb3B0cyk9PntcbiAgICBjb25zdCBtYXhSZXRyeUNvdW50ID0gY29uZmlnLmVycm9yUmV0cnlDb3VudDtcbiAgICBjb25zdCBjdXJyZW50UmV0cnlDb3VudCA9IG9wdHMucmV0cnlDb3VudDtcbiAgICAvLyBFeHBvbmVudGlhbCBiYWNrb2ZmXG4gICAgY29uc3QgdGltZW91dCA9IH5+KChNYXRoLnJhbmRvbSgpICsgMC41KSAqICgxIDw8IChjdXJyZW50UmV0cnlDb3VudCA8IDggPyBjdXJyZW50UmV0cnlDb3VudCA6IDgpKSkgKiBjb25maWcuZXJyb3JSZXRyeUludGVydmFsO1xuICAgIGlmICghaXNVbmRlZmluZWQobWF4UmV0cnlDb3VudCkgJiYgY3VycmVudFJldHJ5Q291bnQgPiBtYXhSZXRyeUNvdW50KSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgc2V0VGltZW91dChyZXZhbGlkYXRlLCB0aW1lb3V0LCBvcHRzKTtcbn07XG5jb25zdCBjb21wYXJlID0gKGN1cnJlbnREYXRhLCBuZXdEYXRhKT0+c3RhYmxlSGFzaChjdXJyZW50RGF0YSkgPT0gc3RhYmxlSGFzaChuZXdEYXRhKTtcbi8vIERlZmF1bHQgY2FjaGUgcHJvdmlkZXJcbmNvbnN0IFtjYWNoZSwgbXV0YXRlXSA9IGluaXRDYWNoZShuZXcgTWFwKCkpO1xuLy8gRGVmYXVsdCBjb25maWdcbmNvbnN0IGRlZmF1bHRDb25maWcgPSBtZXJnZU9iamVjdHMoe1xuICAgIC8vIGV2ZW50c1xuICAgIG9uTG9hZGluZ1Nsb3c6IG5vb3AsXG4gICAgb25TdWNjZXNzOiBub29wLFxuICAgIG9uRXJyb3I6IG5vb3AsXG4gICAgb25FcnJvclJldHJ5LFxuICAgIG9uRGlzY2FyZGVkOiBub29wLFxuICAgIC8vIHN3aXRjaGVzXG4gICAgcmV2YWxpZGF0ZU9uRm9jdXM6IHRydWUsXG4gICAgcmV2YWxpZGF0ZU9uUmVjb25uZWN0OiB0cnVlLFxuICAgIHJldmFsaWRhdGVJZlN0YWxlOiB0cnVlLFxuICAgIHNob3VsZFJldHJ5T25FcnJvcjogdHJ1ZSxcbiAgICAvLyB0aW1lb3V0c1xuICAgIGVycm9yUmV0cnlJbnRlcnZhbDogc2xvd0Nvbm5lY3Rpb24gPyAxMDAwMCA6IDUwMDAsXG4gICAgZm9jdXNUaHJvdHRsZUludGVydmFsOiA1ICogMTAwMCxcbiAgICBkZWR1cGluZ0ludGVydmFsOiAyICogMTAwMCxcbiAgICBsb2FkaW5nVGltZW91dDogc2xvd0Nvbm5lY3Rpb24gPyA1MDAwIDogMzAwMCxcbiAgICAvLyBwcm92aWRlcnNcbiAgICBjb21wYXJlLFxuICAgIGlzUGF1c2VkOiAoKT0+ZmFsc2UsXG4gICAgY2FjaGUsXG4gICAgbXV0YXRlLFxuICAgIGZhbGxiYWNrOiB7fVxufSwgLy8gdXNlIHdlYiBwcmVzZXQgYnkgZGVmYXVsdFxucHJlc2V0KTtcblxuY29uc3QgbWVyZ2VDb25maWdzID0gKGEsIGIpPT57XG4gICAgLy8gTmVlZCB0byBjcmVhdGUgYSBuZXcgb2JqZWN0IHRvIGF2b2lkIG11dGF0aW5nIHRoZSBvcmlnaW5hbCBoZXJlLlxuICAgIGNvbnN0IHYgPSBtZXJnZU9iamVjdHMoYSwgYik7XG4gICAgLy8gSWYgdHdvIGNvbmZpZ3MgYXJlIHByb3ZpZGVkLCBtZXJnZSB0aGVpciBgdXNlYCBhbmQgYGZhbGxiYWNrYCBvcHRpb25zLlxuICAgIGlmIChiKSB7XG4gICAgICAgIGNvbnN0IHsgdXNlOiB1MSAsIGZhbGxiYWNrOiBmMSAgfSA9IGE7XG4gICAgICAgIGNvbnN0IHsgdXNlOiB1MiAsIGZhbGxiYWNrOiBmMiAgfSA9IGI7XG4gICAgICAgIGlmICh1MSAmJiB1Mikge1xuICAgICAgICAgICAgdi51c2UgPSB1MS5jb25jYXQodTIpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmMSAmJiBmMikge1xuICAgICAgICAgICAgdi5mYWxsYmFjayA9IG1lcmdlT2JqZWN0cyhmMSwgZjIpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB2O1xufTtcblxuY29uc3QgU1dSQ29uZmlnQ29udGV4dCA9IGNyZWF0ZUNvbnRleHQoe30pO1xuY29uc3QgU1dSQ29uZmlnID0gKHByb3BzKT0+e1xuICAgIGNvbnN0IHsgdmFsdWUgIH0gPSBwcm9wcztcbiAgICBjb25zdCBwYXJlbnRDb25maWcgPSB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpO1xuICAgIGNvbnN0IGlzRnVuY3Rpb25hbENvbmZpZyA9IGlzRnVuY3Rpb24odmFsdWUpO1xuICAgIGNvbnN0IGNvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IHZhbHVlKHBhcmVudENvbmZpZykgOiB2YWx1ZSwgW1xuICAgICAgICBpc0Z1bmN0aW9uYWxDb25maWcsXG4gICAgICAgIHBhcmVudENvbmZpZyxcbiAgICAgICAgdmFsdWVcbiAgICBdKTtcbiAgICAvLyBFeHRlbmQgcGFyZW50IGNvbnRleHQgdmFsdWVzIGFuZCBtaWRkbGV3YXJlLlxuICAgIGNvbnN0IGV4dGVuZGVkQ29uZmlnID0gdXNlTWVtbygoKT0+aXNGdW5jdGlvbmFsQ29uZmlnID8gY29uZmlnIDogbWVyZ2VDb25maWdzKHBhcmVudENvbmZpZywgY29uZmlnKSwgW1xuICAgICAgICBpc0Z1bmN0aW9uYWxDb25maWcsXG4gICAgICAgIHBhcmVudENvbmZpZyxcbiAgICAgICAgY29uZmlnXG4gICAgXSk7XG4gICAgLy8gU2hvdWxkIG5vdCB1c2UgdGhlIGluaGVyaXRlZCBwcm92aWRlci5cbiAgICBjb25zdCBwcm92aWRlciA9IGNvbmZpZyAmJiBjb25maWcucHJvdmlkZXI7XG4gICAgLy8gVXNlIGEgbGF6eSBpbml0aWFsaXplZCBzdGF0ZSB0byBjcmVhdGUgdGhlIGNhY2hlIG9uIGZpcnN0IGFjY2Vzcy5cbiAgICBjb25zdCBbY2FjaGVDb250ZXh0XSA9IHVzZVN0YXRlKCgpPT5wcm92aWRlciA/IGluaXRDYWNoZShwcm92aWRlcihleHRlbmRlZENvbmZpZy5jYWNoZSB8fCBjYWNoZSksIGNvbmZpZykgOiBVTkRFRklORUQpO1xuICAgIC8vIE92ZXJyaWRlIHRoZSBjYWNoZSBpZiBhIG5ldyBwcm92aWRlciBpcyBnaXZlbi5cbiAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgIGV4dGVuZGVkQ29uZmlnLmNhY2hlID0gY2FjaGVDb250ZXh0WzBdO1xuICAgICAgICBleHRlbmRlZENvbmZpZy5tdXRhdGUgPSBjYWNoZUNvbnRleHRbMV07XG4gICAgfVxuICAgIC8vIFVuc3Vic2NyaWJlIGV2ZW50cy5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmIChjYWNoZUNvbnRleHQpIHtcbiAgICAgICAgICAgIGNhY2hlQ29udGV4dFsyXSAmJiBjYWNoZUNvbnRleHRbMl0oKTtcbiAgICAgICAgICAgIHJldHVybiBjYWNoZUNvbnRleHRbM107XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoU1dSQ29uZmlnQ29udGV4dC5Qcm92aWRlciwgbWVyZ2VPYmplY3RzKHByb3BzLCB7XG4gICAgICAgIHZhbHVlOiBleHRlbmRlZENvbmZpZ1xuICAgIH0pKTtcbn07XG5cbi8vIEB0cy1leHBlY3QtZXJyb3JcbmNvbnN0IGVuYWJsZURldnRvb2xzID0gaXNXaW5kb3dEZWZpbmVkICYmIHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXztcbmNvbnN0IHVzZSA9IGVuYWJsZURldnRvb2xzID8gd2luZG93Ll9fU1dSX0RFVlRPT0xTX1VTRV9fIDogW107XG5jb25zdCBzZXR1cERldlRvb2xzID0gKCk9PntcbiAgICBpZiAoZW5hYmxlRGV2dG9vbHMpIHtcbiAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvclxuICAgICAgICB3aW5kb3cuX19TV1JfREVWVE9PTFNfUkVBQ1RfXyA9IFJlYWN0O1xuICAgIH1cbn07XG5cbmNvbnN0IG5vcm1hbGl6ZSA9IChhcmdzKT0+e1xuICAgIHJldHVybiBpc0Z1bmN0aW9uKGFyZ3NbMV0pID8gW1xuICAgICAgICBhcmdzWzBdLFxuICAgICAgICBhcmdzWzFdLFxuICAgICAgICBhcmdzWzJdIHx8IHt9XG4gICAgXSA6IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgbnVsbCxcbiAgICAgICAgKGFyZ3NbMV0gPT09IG51bGwgPyBhcmdzWzJdIDogYXJnc1sxXSkgfHwge31cbiAgICBdO1xufTtcblxuY29uc3QgdXNlU1dSQ29uZmlnID0gKCk9PntcbiAgICByZXR1cm4gbWVyZ2VPYmplY3RzKGRlZmF1bHRDb25maWcsIHVzZUNvbnRleHQoU1dSQ29uZmlnQ29udGV4dCkpO1xufTtcblxuY29uc3QgcHJlbG9hZCA9IChrZXlfLCBmZXRjaGVyKT0+e1xuICAgIGNvbnN0IGtleSA9IHNlcmlhbGl6ZShrZXlfKVswXTtcbiAgICBjb25zdCBbLCAsICwgUFJFTE9BRF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgIC8vIFByZXZlbnQgcHJlbG9hZCB0byBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgYmVmb3JlIHVzZWQuXG4gICAgaWYgKFBSRUxPQURba2V5XSkgcmV0dXJuIFBSRUxPQURba2V5XTtcbiAgICBjb25zdCByZXEgPSBmZXRjaGVyKGtleV8pO1xuICAgIFBSRUxPQURba2V5XSA9IHJlcTtcbiAgICByZXR1cm4gcmVxO1xufTtcbmNvbnN0IG1pZGRsZXdhcmUgPSAodXNlU1dSTmV4dCk9PihrZXlfLCBmZXRjaGVyXywgY29uZmlnKT0+e1xuICAgICAgICAvLyBmZXRjaGVyIG1pZ2h0IGJlIGEgc3luYyBmdW5jdGlvbiwgc28gdGhpcyBzaG91bGQgbm90IGJlIGFuIGFzeW5jIGZ1bmN0aW9uXG4gICAgICAgIGNvbnN0IGZldGNoZXIgPSBmZXRjaGVyXyAmJiAoKC4uLmFyZ3MpPT57XG4gICAgICAgICAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgICAgICAgICBjb25zdCBbLCAsICwgUFJFTE9BRF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgICAgICAgICAgY29uc3QgcmVxID0gUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcSkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBQUkVMT0FEW2tleV07XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJlcTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmZXRjaGVyXyguLi5hcmdzKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiB1c2VTV1JOZXh0KGtleV8sIGZldGNoZXIsIGNvbmZpZyk7XG4gICAgfTtcblxuY29uc3QgQlVJTFRfSU5fTUlERExFV0FSRSA9IHVzZS5jb25jYXQobWlkZGxld2FyZSk7XG5cbi8vIEl0J3MgdHJpY2t5IHRvIHBhc3MgZ2VuZXJpYyB0eXBlcyBhcyBwYXJhbWV0ZXJzLCBzbyB3ZSBqdXN0IGRpcmVjdGx5IG92ZXJyaWRlXG4vLyB0aGUgdHlwZXMgaGVyZS5cbmNvbnN0IHdpdGhBcmdzID0gKGhvb2spPT57XG4gICAgcmV0dXJuIGZ1bmN0aW9uIHVzZVNXUkFyZ3MoLi4uYXJncykge1xuICAgICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgYW5kIGluaGVyaXRlZCBjb25maWd1cmF0aW9uLlxuICAgICAgICBjb25zdCBmYWxsYmFja0NvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgICAgICAvLyBOb3JtYWxpemUgYXJndW1lbnRzLlxuICAgICAgICBjb25zdCBba2V5LCBmbiwgX2NvbmZpZ10gPSBub3JtYWxpemUoYXJncyk7XG4gICAgICAgIC8vIE1lcmdlIGNvbmZpZ3VyYXRpb25zLlxuICAgICAgICBjb25zdCBjb25maWcgPSBtZXJnZUNvbmZpZ3MoZmFsbGJhY2tDb25maWcsIF9jb25maWcpO1xuICAgICAgICAvLyBBcHBseSBtaWRkbGV3YXJlXG4gICAgICAgIGxldCBuZXh0ID0gaG9vaztcbiAgICAgICAgY29uc3QgeyB1c2UgIH0gPSBjb25maWc7XG4gICAgICAgIGNvbnN0IG1pZGRsZXdhcmUgPSAodXNlIHx8IFtdKS5jb25jYXQoQlVJTFRfSU5fTUlERExFV0FSRSk7XG4gICAgICAgIGZvcihsZXQgaSA9IG1pZGRsZXdhcmUubGVuZ3RoOyBpLS07KXtcbiAgICAgICAgICAgIG5leHQgPSBtaWRkbGV3YXJlW2ldKG5leHQpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBuZXh0KGtleSwgZm4gfHwgY29uZmlnLmZldGNoZXIgfHwgbnVsbCwgY29uZmlnKTtcbiAgICB9O1xufTtcblxuLyoqXG4gKiBBbiBpbXBsZW1lbnRhdGlvbiBvZiBzdGF0ZSB3aXRoIGRlcGVuZGVuY3ktdHJhY2tpbmcuXG4gKi8gY29uc3QgdXNlU3RhdGVXaXRoRGVwcyA9IChzdGF0ZSk9PntcbiAgICBjb25zdCByZXJlbmRlciA9IHVzZVN0YXRlKHt9KVsxXTtcbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIGNvbnN0IHN0YXRlUmVmID0gdXNlUmVmKHN0YXRlKTtcbiAgICAvLyBJZiBhIHN0YXRlIHByb3BlcnR5IChkYXRhLCBlcnJvciwgb3IgaXNWYWxpZGF0aW5nKSBpcyBhY2Nlc3NlZCBieSB0aGUgcmVuZGVyXG4gICAgLy8gZnVuY3Rpb24sIHdlIG1hcmsgdGhlIHByb3BlcnR5IGFzIGEgZGVwZW5kZW5jeSBzbyBpZiBpdCBpcyB1cGRhdGVkIGFnYWluXG4gICAgLy8gaW4gdGhlIGZ1dHVyZSwgd2UgdHJpZ2dlciBhIHJlcmVuZGVyLlxuICAgIC8vIFRoaXMgaXMgYWxzbyBrbm93biBhcyBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICAgIGNvbnN0IHN0YXRlRGVwZW5kZW5jaWVzUmVmID0gdXNlUmVmKHtcbiAgICAgICAgZGF0YTogZmFsc2UsXG4gICAgICAgIGVycm9yOiBmYWxzZSxcbiAgICAgICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgIH0pO1xuICAgIC8qKlxuICAgKiBAcGFyYW0gcGF5bG9hZCBUbyBjaGFuZ2Ugc3RhdGVSZWYsIHBhc3MgdGhlIHZhbHVlcyBleHBsaWNpdGx5IHRvIHNldFN0YXRlOlxuICAgKiBAZXhhbXBsZVxuICAgKiBgYGBqc1xuICAgKiBzZXRTdGF0ZSh7XG4gICAqICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgKiAgIGRhdGE6IG5ld0RhdGEgLy8gc2V0IGRhdGEgdG8gbmV3RGF0YVxuICAgKiAgIGVycm9yOiB1bmRlZmluZWQgLy8gc2V0IGVycm9yIHRvIHVuZGVmaW5lZFxuICAgKiB9KVxuICAgKlxuICAgKiBzZXRTdGF0ZSh7XG4gICAqICAgaXNWYWxpZGF0aW5nOiBmYWxzZVxuICAgKiAgIGRhdGE6IHVuZGVmaW5lZCAvLyBzZXQgZGF0YSB0byB1bmRlZmluZWRcbiAgICogICBlcnJvcjogZXJyIC8vIHNldCBlcnJvciB0byBlcnJcbiAgICogfSlcbiAgICogYGBgXG4gICAqLyBjb25zdCBzZXRTdGF0ZSA9IHVzZUNhbGxiYWNrKChwYXlsb2FkKT0+e1xuICAgICAgICBsZXQgc2hvdWxkUmVyZW5kZXIgPSBmYWxzZTtcbiAgICAgICAgY29uc3QgY3VycmVudFN0YXRlID0gc3RhdGVSZWYuY3VycmVudDtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gcGF5bG9hZCl7XG4gICAgICAgICAgICBjb25zdCBrID0gXztcbiAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBoYXMgY2hhbmdlZCwgdXBkYXRlIHRoZSBzdGF0ZSBhbmQgbWFyayByZXJlbmRlciBhc1xuICAgICAgICAgICAgLy8gbmVlZGVkLlxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTdGF0ZVtrXSAhPT0gcGF5bG9hZFtrXSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRTdGF0ZVtrXSA9IHBheWxvYWRba107XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIHByb3BlcnR5IGlzIGFjY2Vzc2VkIGJ5IHRoZSBjb21wb25lbnQsIGEgcmVyZW5kZXIgc2hvdWxkIGJlXG4gICAgICAgICAgICAgICAgLy8gdHJpZ2dlcmVkLlxuICAgICAgICAgICAgICAgIGlmIChzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50W2tdKSB7XG4gICAgICAgICAgICAgICAgICAgIHNob3VsZFJlcmVuZGVyID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHNob3VsZFJlcmVuZGVyICYmICF1bm1vdW50ZWRSZWYuY3VycmVudCkge1xuICAgICAgICAgICAgaWYgKElTX1JFQUNUX0xFR0FDWSkge1xuICAgICAgICAgICAgICAgIHJlcmVuZGVyKHt9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgUmVhY3Quc3RhcnRUcmFuc2l0aW9uKCgpPT5yZXJlbmRlcih7fSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSwgLy8gY29uZmlnLnN1c3BlbnNlIGlzbid0IGFsbG93ZWQgdG8gY2hhbmdlIGR1cmluZyB0aGUgbGlmZWN5Y2xlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gZmFsc2U7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICB9O1xuICAgIH0pO1xuICAgIHJldHVybiBbXG4gICAgICAgIHN0YXRlUmVmLFxuICAgICAgICBzdGF0ZURlcGVuZGVuY2llc1JlZi5jdXJyZW50LFxuICAgICAgICBzZXRTdGF0ZVxuICAgIF07XG59O1xuXG4vLyBBZGQgYSBjYWxsYmFjayBmdW5jdGlvbiB0byBhIGxpc3Qgb2Yga2V5ZWQgY2FsbGJhY2sgZnVuY3Rpb25zIGFuZCByZXR1cm5cbi8vIHRoZSB1bnN1YnNjcmliZSBmdW5jdGlvbi5cbmNvbnN0IHN1YnNjcmliZUNhbGxiYWNrID0gKGtleSwgY2FsbGJhY2tzLCBjYWxsYmFjayk9PntcbiAgICBjb25zdCBrZXllZFJldmFsaWRhdG9ycyA9IGNhbGxiYWNrc1trZXldIHx8IChjYWxsYmFja3Nba2V5XSA9IFtdKTtcbiAgICBrZXllZFJldmFsaWRhdG9ycy5wdXNoKGNhbGxiYWNrKTtcbiAgICByZXR1cm4gKCk9PntcbiAgICAgICAgY29uc3QgaW5kZXggPSBrZXllZFJldmFsaWRhdG9ycy5pbmRleE9mKGNhbGxiYWNrKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIC8vIE8oMSk6IGZhc3RlciB0aGFuIHNwbGljZVxuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnNbaW5kZXhdID0ga2V5ZWRSZXZhbGlkYXRvcnNba2V5ZWRSZXZhbGlkYXRvcnMubGVuZ3RoIC0gMV07XG4gICAgICAgICAgICBrZXllZFJldmFsaWRhdG9ycy5wb3AoKTtcbiAgICAgICAgfVxuICAgIH07XG59O1xuXG4vLyBDcmVhdGUgYSBjdXN0b20gaG9vayB3aXRoIGEgbWlkZGxld2FyZVxuY29uc3Qgd2l0aE1pZGRsZXdhcmUgPSAodXNlU1dSLCBtaWRkbGV3YXJlKT0+e1xuICAgIHJldHVybiAoLi4uYXJncyk9PntcbiAgICAgICAgY29uc3QgW2tleSwgZm4sIGNvbmZpZ10gPSBub3JtYWxpemUoYXJncyk7XG4gICAgICAgIGNvbnN0IHVzZXMgPSAoY29uZmlnLnVzZSB8fCBbXSkuY29uY2F0KG1pZGRsZXdhcmUpO1xuICAgICAgICByZXR1cm4gdXNlU1dSKGtleSwgZm4sIHtcbiAgICAgICAgICAgIC4uLmNvbmZpZyxcbiAgICAgICAgICAgIHVzZTogdXNlc1xuICAgICAgICB9KTtcbiAgICB9O1xufTtcblxuc2V0dXBEZXZUb29scygpO1xuXG5leHBvcnQgeyBJU19SRUFDVF9MRUdBQ1ksIElTX1NFUlZFUiwgT0JKRUNULCBTV1JDb25maWcsIFNXUkdsb2JhbFN0YXRlLCBVTkRFRklORUQsIGNhY2hlLCBjb21wYXJlLCBjcmVhdGVDYWNoZUhlbHBlciwgZGVmYXVsdENvbmZpZywgZGVmYXVsdENvbmZpZ09wdGlvbnMsIGdldFRpbWVzdGFtcCwgaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lLCBpbml0Q2FjaGUsIGludGVybmFsTXV0YXRlLCBpc0RvY3VtZW50RGVmaW5lZCwgaXNGdW5jdGlvbiwgaXNVbmRlZmluZWQsIGlzV2luZG93RGVmaW5lZCwgbWVyZ2VDb25maWdzLCBtZXJnZU9iamVjdHMsIG11dGF0ZSwgbm9vcCwgbm9ybWFsaXplLCBwcmVsb2FkLCBwcmVzZXQsIHJBRiwgY29uc3RhbnRzIGFzIHJldmFsaWRhdGVFdmVudHMsIHNlcmlhbGl6ZSwgc2xvd0Nvbm5lY3Rpb24sIHN0YWJsZUhhc2gsIHN1YnNjcmliZUNhbGxiYWNrLCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LCB1c2VTV1JDb25maWcsIHVzZVN0YXRlV2l0aERlcHMsIHdpdGhBcmdzLCB3aXRoTWlkZGxld2FyZSB9O1xuIiwiaW1wb3J0IHsgdXNlUmVmLCB1c2VNZW1vLCB1c2VDYWxsYmFjaywgdXNlRGVidWdWYWx1ZSB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCB7IHVzZVN5bmNFeHRlcm5hbFN0b3JlIH0gZnJvbSAndXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUvc2hpbS9pbmRleC5qcyc7XG5pbXBvcnQgeyBPQkpFQ1QsIFNXUkNvbmZpZyBhcyBTV1JDb25maWckMSwgZGVmYXVsdENvbmZpZywgd2l0aEFyZ3MsIFNXUkdsb2JhbFN0YXRlLCBzZXJpYWxpemUsIGNyZWF0ZUNhY2hlSGVscGVyLCBpc1VuZGVmaW5lZCwgZ2V0VGltZXN0YW1wLCBVTkRFRklORUQsIGlzRnVuY3Rpb24sIGludGVybmFsTXV0YXRlLCB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0LCBzdWJzY3JpYmVDYWxsYmFjaywgSVNfU0VSVkVSLCByQUYsIElTX1JFQUNUX0xFR0FDWSwgbWVyZ2VPYmplY3RzLCByZXZhbGlkYXRlRXZlbnRzIH0gZnJvbSAnc3dyL19pbnRlcm5hbCc7XG5leHBvcnQgeyBtdXRhdGUsIHByZWxvYWQsIHVzZVNXUkNvbmZpZyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuXG5jb25zdCBXSVRIX0RFRFVQRSA9IHtcbiAgICBkZWR1cGU6IHRydWVcbn07XG5jb25zdCB1c2VTV1JIYW5kbGVyID0gKF9rZXksIGZldGNoZXIsIGNvbmZpZyk9PntcbiAgICBjb25zdCB7IGNhY2hlICwgY29tcGFyZSAsIHN1c3BlbnNlICwgZmFsbGJhY2tEYXRhICwgcmV2YWxpZGF0ZU9uTW91bnQgLCByZXZhbGlkYXRlSWZTdGFsZSAsIHJlZnJlc2hJbnRlcnZhbCAsIHJlZnJlc2hXaGVuSGlkZGVuICwgcmVmcmVzaFdoZW5PZmZsaW5lICwga2VlcFByZXZpb3VzRGF0YSAgfSA9IGNvbmZpZztcbiAgICBjb25zdCBbRVZFTlRfUkVWQUxJREFUT1JTLCBNVVRBVElPTiwgRkVUQ0hdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBga2V5YCBpcyB0aGUgaWRlbnRpZmllciBvZiB0aGUgU1dSIGBkYXRhYCBzdGF0ZSwgYGtleUluZm9gIGhvbGRzIGV4dHJhXG4gICAgLy8gc3RhdGVzIHN1Y2ggYXMgYGVycm9yYCBhbmQgYGlzVmFsaWRhdGluZ2AgaW5zaWRlLFxuICAgIC8vIGFsbCBvZiB0aGVtIGFyZSBkZXJpdmVkIGZyb20gYF9rZXlgLlxuICAgIC8vIGBmbkFyZ2AgaXMgdGhlIGFyZ3VtZW50L2FyZ3VtZW50cyBwYXJzZWQgZnJvbSB0aGUga2V5LCB3aGljaCB3aWxsIGJlIHBhc3NlZFxuICAgIC8vIHRvIHRoZSBmZXRjaGVyLlxuICAgIGNvbnN0IFtrZXksIGZuQXJnXSA9IHNlcmlhbGl6ZShfa2V5KTtcbiAgICAvLyBJZiBpdCdzIHRoZSBpbml0aWFsIHJlbmRlciBvZiB0aGlzIGhvb2suXG4gICAgY29uc3QgaW5pdGlhbE1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIElmIHRoZSBob29rIGlzIHVubW91bnRlZCBhbHJlYWR5LiBUaGlzIHdpbGwgYmUgdXNlZCB0byBwcmV2ZW50IHNvbWUgZWZmZWN0c1xuICAgIC8vIHRvIGJlIGNhbGxlZCBhZnRlciB1bm1vdW50aW5nLlxuICAgIGNvbnN0IHVubW91bnRlZFJlZiA9IHVzZVJlZihmYWxzZSk7XG4gICAgLy8gUmVmcyB0byBrZWVwIHRoZSBrZXkgYW5kIGNvbmZpZy5cbiAgICBjb25zdCBrZXlSZWYgPSB1c2VSZWYoa2V5KTtcbiAgICBjb25zdCBmZXRjaGVyUmVmID0gdXNlUmVmKGZldGNoZXIpO1xuICAgIGNvbnN0IGNvbmZpZ1JlZiA9IHVzZVJlZihjb25maWcpO1xuICAgIGNvbnN0IGdldENvbmZpZyA9ICgpPT5jb25maWdSZWYuY3VycmVudDtcbiAgICBjb25zdCBpc0FjdGl2ZSA9ICgpPT5nZXRDb25maWcoKS5pc1Zpc2libGUoKSAmJiBnZXRDb25maWcoKS5pc09ubGluZSgpO1xuICAgIGNvbnN0IFtnZXRDYWNoZSwgc2V0Q2FjaGUsIHN1YnNjcmliZUNhY2hlLCBnZXRJbml0aWFsQ2FjaGVdID0gY3JlYXRlQ2FjaGVIZWxwZXIoY2FjaGUsIGtleSk7XG4gICAgY29uc3Qgc3RhdGVEZXBlbmRlbmNpZXMgPSB1c2VSZWYoe30pLmN1cnJlbnQ7XG4gICAgY29uc3QgZmFsbGJhY2sgPSBpc1VuZGVmaW5lZChmYWxsYmFja0RhdGEpID8gY29uZmlnLmZhbGxiYWNrW2tleV0gOiBmYWxsYmFja0RhdGE7XG4gICAgY29uc3QgaXNFcXVhbCA9IChwcmV2LCBjdXJyZW50KT0+e1xuICAgICAgICBsZXQgZXF1YWwgPSB0cnVlO1xuICAgICAgICBmb3IoY29uc3QgXyBpbiBzdGF0ZURlcGVuZGVuY2llcyl7XG4gICAgICAgICAgICBjb25zdCB0ID0gXztcbiAgICAgICAgICAgIGlmICh0ID09PSAnZGF0YScpIHtcbiAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoY3VycmVudFt0XSwgcHJldlt0XSkpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNvbXBhcmUoY3VycmVudFt0XSwgcmV0dXJuZWREYXRhKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFt0XSAhPT0gcHJldlt0XSkge1xuICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZXF1YWw7XG4gICAgfTtcbiAgICBjb25zdCBnZXRTbmFwc2hvdCA9IHVzZU1lbW8oKCk9PntcbiAgICAgICAgY29uc3Qgc2hvdWxkU3RhcnRSZXF1ZXN0ID0gKCgpPT57XG4gICAgICAgICAgICBpZiAoIWtleSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFmZXRjaGVyKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgICAgICBpZiAoIWlzVW5kZWZpbmVkKHJldmFsaWRhdGVPbk1vdW50KSkgcmV0dXJuIHJldmFsaWRhdGVPbk1vdW50O1xuICAgICAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmIChzdXNwZW5zZSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChyZXZhbGlkYXRlSWZTdGFsZSkpIHJldHVybiByZXZhbGlkYXRlSWZTdGFsZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9KSgpO1xuICAgICAgICAvLyBHZXQgdGhlIGNhY2hlIGFuZCBtZXJnZSBpdCB3aXRoIGV4cGVjdGVkIHN0YXRlcy5cbiAgICAgICAgY29uc3QgZ2V0U2VsZWN0ZWRDYWNoZSA9IChzdGF0ZSk9PntcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc2VsZWN0IHRoZSBuZWVkZWQgZmllbGRzIGZyb20gdGhlIHN0YXRlLlxuICAgICAgICAgICAgY29uc3Qgc25hcHNob3QgPSBtZXJnZU9iamVjdHMoc3RhdGUpO1xuICAgICAgICAgICAgZGVsZXRlIHNuYXBzaG90Ll9rO1xuICAgICAgICAgICAgaWYgKCFzaG91bGRTdGFydFJlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gc25hcHNob3Q7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZSxcbiAgICAgICAgICAgICAgICBpc0xvYWRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgLi4uc25hcHNob3RcbiAgICAgICAgICAgIH07XG4gICAgICAgIH07XG4gICAgICAgIC8vIFRvIG1ha2Ugc3VyZSB0aGF0IHdlIGFyZSByZXR1cm5pbmcgdGhlIHNhbWUgb2JqZWN0IHJlZmVyZW5jZSB0byBhdm9pZFxuICAgICAgICAvLyB1bm5lY2Vzc2FyeSByZS1yZW5kZXJzLCB3ZSBrZWVwIHRoZSBwcmV2aW91cyBzbmFwc2hvdCBhbmQgdXNlIGRlZXBcbiAgICAgICAgLy8gY29tcGFyaXNvbiB0byBjaGVjayBpZiB3ZSBuZWVkIHRvIHJldHVybiBhIG5ldyBvbmUuXG4gICAgICAgIGxldCBtZW1vcml6ZWRTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoZ2V0Q2FjaGUoKSk7XG4gICAgICAgIGNvbnN0IG1lbW9yaXplZEluaXRpYWxTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoZ2V0SW5pdGlhbENhY2hlKCkpO1xuICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdTbmFwc2hvdCA9IGdldFNlbGVjdGVkQ2FjaGUoZ2V0Q2FjaGUoKSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzRXF1YWwobmV3U25hcHNob3QsIG1lbW9yaXplZFNuYXBzaG90KSA/IG1lbW9yaXplZFNuYXBzaG90IDogbWVtb3JpemVkU25hcHNob3QgPSBuZXdTbmFwc2hvdDtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAoKT0+bWVtb3JpemVkSW5pdGlhbFNuYXBzaG90XG4gICAgICAgIF07XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIH0sIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIEdldCB0aGUgY3VycmVudCBzdGF0ZSB0aGF0IFNXUiBzaG91bGQgcmV0dXJuLlxuICAgIGNvbnN0IGNhY2hlZCA9IHVzZVN5bmNFeHRlcm5hbFN0b3JlKHVzZUNhbGxiYWNrKChjYWxsYmFjayk9PnN1YnNjcmliZUNhY2hlKGtleSwgKGN1cnJlbnQsIHByZXYpPT57XG4gICAgICAgICAgICBpZiAoIWlzRXF1YWwocHJldiwgY3VycmVudCkpIGNhbGxiYWNrKCk7XG4gICAgICAgIH0pLCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgW1xuICAgICAgICBjYWNoZSxcbiAgICAgICAga2V5XG4gICAgXSksIGdldFNuYXBzaG90WzBdLCBnZXRTbmFwc2hvdFsxXSk7XG4gICAgY29uc3QgaXNJbml0aWFsTW91bnQgPSAhaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICBjb25zdCBoYXNSZXZhbGlkYXRvciA9IEVWRU5UX1JFVkFMSURBVE9SU1trZXldICYmIEVWRU5UX1JFVkFMSURBVE9SU1trZXldLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgY2FjaGVkRGF0YSA9IGNhY2hlZC5kYXRhO1xuICAgIGNvbnN0IGRhdGEgPSBpc1VuZGVmaW5lZChjYWNoZWREYXRhKSA/IGZhbGxiYWNrIDogY2FjaGVkRGF0YTtcbiAgICBjb25zdCBlcnJvciA9IGNhY2hlZC5lcnJvcjtcbiAgICAvLyBVc2UgYSByZWYgdG8gc3RvcmUgcHJldmlvdXNseSByZXR1cm5lZCBkYXRhLiBVc2UgdGhlIGluaXRpYWwgZGF0YSBhcyBpdHMgaW5pdGlhbCB2YWx1ZS5cbiAgICBjb25zdCBsYWdneURhdGFSZWYgPSB1c2VSZWYoZGF0YSk7XG4gICAgY29uc3QgcmV0dXJuZWREYXRhID0ga2VlcFByZXZpb3VzRGF0YSA/IGlzVW5kZWZpbmVkKGNhY2hlZERhdGEpID8gbGFnZ3lEYXRhUmVmLmN1cnJlbnQgOiBjYWNoZWREYXRhIDogZGF0YTtcbiAgICAvLyAtIFN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlJ3Mgc3RhbGUgZGF0YSBmb3IgdGhlIGluaXRpYWwgcmVuZGVyLlxuICAgIC8vIC0gTm90IHN1c3BlbnNlIG1vZGUgYW5kIHRoZXJlIGlzIG5vIGZhbGxiYWNrIGRhdGEgYW5kIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZC5cbiAgICAvLyAtIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgZW5hYmxlZCBidXQgYGRhdGFgIGlzIG5vdCBkZWZpbmVkLlxuICAgIGNvbnN0IHNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbiA9ICgoKT0+e1xuICAgICAgICAvLyBpZiBhIGtleSBhbHJlYWR5IGhhcyByZXZhbGlkYXRvcnMgYW5kIGFsc28gaGFzIGVycm9yLCB3ZSBzaG91bGQgbm90IHRyaWdnZXIgcmV2YWxpZGF0aW9uXG4gICAgICAgIGlmIChoYXNSZXZhbGlkYXRvciAmJiAhaXNVbmRlZmluZWQoZXJyb3IpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIElmIGByZXZhbGlkYXRlT25Nb3VudGAgaXMgc2V0LCB3ZSB0YWtlIHRoZSB2YWx1ZSBkaXJlY3RseS5cbiAgICAgICAgaWYgKGlzSW5pdGlhbE1vdW50ICYmICFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgLy8gSWYgaXQncyBwYXVzZWQsIHdlIHNraXAgcmV2YWxpZGF0aW9uLlxuICAgICAgICBpZiAoZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBVbmRlciBzdXNwZW5zZSBtb2RlLCBpdCB3aWxsIGFsd2F5cyBmZXRjaCBvbiByZW5kZXIgaWYgdGhlcmUgaXMgbm9cbiAgICAgICAgLy8gc3RhbGUgZGF0YSBzbyBubyBuZWVkIHRvIHJldmFsaWRhdGUgaW1tZWRpYXRlbHkgbW91bnQgaXQgYWdhaW4uXG4gICAgICAgIC8vIElmIGRhdGEgZXhpc3RzLCBvbmx5IHJldmFsaWRhdGUgaWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyB0cnVlLlxuICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBpc1VuZGVmaW5lZChkYXRhKSA/IGZhbHNlIDogcmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIHN0YWxlIGRhdGEsIHdlIG5lZWQgdG8gcmV2YWxpZGF0ZSB3aGVuIG1vdW50O1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIHNldCB0byB0cnVlLCB3ZSB3aWxsIGFsd2F5cyByZXZhbGlkYXRlLlxuICAgICAgICByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgfHwgcmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgfSkoKTtcbiAgICAvLyBSZXNvbHZlIHRoZSBkZWZhdWx0IHZhbGlkYXRpbmcgc3RhdGU6XG4gICAgLy8gSWYgaXQncyBhYmxlIHRvIHZhbGlkYXRlLCBhbmQgaXQgc2hvdWxkIHJldmFsaWRhdGUgd2hlbiBtb3VudCwgdGhpcyB3aWxsIGJlIHRydWUuXG4gICAgY29uc3QgZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA9ICEhKGtleSAmJiBmZXRjaGVyICYmIGlzSW5pdGlhbE1vdW50ICYmIHNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbik7XG4gICAgY29uc3QgaXNWYWxpZGF0aW5nID0gaXNVbmRlZmluZWQoY2FjaGVkLmlzVmFsaWRhdGluZykgPyBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlIDogY2FjaGVkLmlzVmFsaWRhdGluZztcbiAgICBjb25zdCBpc0xvYWRpbmcgPSBpc1VuZGVmaW5lZChjYWNoZWQuaXNMb2FkaW5nKSA/IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgOiBjYWNoZWQuaXNMb2FkaW5nO1xuICAgIC8vIFRoZSByZXZhbGlkYXRpb24gZnVuY3Rpb24gaXMgYSBjYXJlZnVsbHkgY3JhZnRlZCB3cmFwcGVyIG9mIHRoZSBvcmlnaW5hbFxuICAgIC8vIGBmZXRjaGVyYCwgdG8gY29ycmVjdGx5IGhhbmRsZSB0aGUgbWFueSBlZGdlIGNhc2VzLlxuICAgIGNvbnN0IHJldmFsaWRhdGUgPSB1c2VDYWxsYmFjayhhc3luYyAocmV2YWxpZGF0ZU9wdHMpPT57XG4gICAgICAgIGNvbnN0IGN1cnJlbnRGZXRjaGVyID0gZmV0Y2hlclJlZi5jdXJyZW50O1xuICAgICAgICBpZiAoIWtleSB8fCAhY3VycmVudEZldGNoZXIgfHwgdW5tb3VudGVkUmVmLmN1cnJlbnQgfHwgZ2V0Q29uZmlnKCkuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGxldCBuZXdEYXRhO1xuICAgICAgICBsZXQgc3RhcnRBdDtcbiAgICAgICAgbGV0IGxvYWRpbmcgPSB0cnVlO1xuICAgICAgICBjb25zdCBvcHRzID0gcmV2YWxpZGF0ZU9wdHMgfHwge307XG4gICAgICAgIC8vIElmIHRoZXJlIGlzIG5vIG9uZ29pbmcgY29uY3VycmVudCByZXF1ZXN0LCBvciBgZGVkdXBlYCBpcyBub3Qgc2V0LCBhXG4gICAgICAgIC8vIG5ldyByZXF1ZXN0IHNob3VsZCBiZSBpbml0aWF0ZWQuXG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0TmV3UmVxdWVzdCA9ICFGRVRDSFtrZXldIHx8ICFvcHRzLmRlZHVwZTtcbiAgICAgICAgLypcbiAgICAgICAgIEZvciBSZWFjdCAxN1xuICAgICAgICAgRG8gdW5tb3VudCBjaGVjayBmb3IgY2FsbHM6XG4gICAgICAgICBJZiBrZXkgaGFzIGNoYW5nZWQgZHVyaW5nIHRoZSByZXZhbGlkYXRpb24sIG9yIHRoZSBjb21wb25lbnQgaGFzIGJlZW5cbiAgICAgICAgIHVubW91bnRlZCwgb2xkIGRpc3BhdGNoIGFuZCBvbGQgZXZlbnQgY2FsbGJhY2tzIHNob3VsZCBub3QgdGFrZSBhbnlcbiAgICAgICAgIGVmZmVjdFxuXG4gICAgICAgIEZvciBSZWFjdCAxOFxuICAgICAgICBvbmx5IGNoZWNrIGlmIGtleSBoYXMgY2hhbmdlZFxuICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vcmVhY3R3Zy9yZWFjdC0xOC9kaXNjdXNzaW9ucy84MlxuICAgICAgKi8gY29uc3QgY2FsbGJhY2tTYWZlZ3VhcmQgPSAoKT0+e1xuICAgICAgICAgICAgaWYgKElTX1JFQUNUX0xFR0FDWSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhdW5tb3VudGVkUmVmLmN1cnJlbnQgJiYga2V5ID09PSBrZXlSZWYuY3VycmVudCAmJiBpbml0aWFsTW91bnRlZFJlZi5jdXJyZW50O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGtleSA9PT0ga2V5UmVmLmN1cnJlbnQ7XG4gICAgICAgIH07XG4gICAgICAgIC8vIFRoZSBmaW5hbCBzdGF0ZSBvYmplY3Qgd2hlbiB0aGUgcmVxdWVzdCBmaW5pc2hlcy5cbiAgICAgICAgY29uc3QgZmluYWxTdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2UsXG4gICAgICAgICAgICBpc0xvYWRpbmc6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSA9ICgpPT57XG4gICAgICAgICAgICBzZXRDYWNoZShmaW5hbFN0YXRlKTtcbiAgICAgICAgfTtcbiAgICAgICAgY29uc3QgY2xlYW51cFN0YXRlID0gKCk9PntcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3Mgc3RpbGwgdGhlIHNhbWUgcmVxdWVzdCBiZWZvcmUgZGVsZXRpbmcgaXQuXG4gICAgICAgICAgICBjb25zdCByZXF1ZXN0SW5mbyA9IEZFVENIW2tleV07XG4gICAgICAgICAgICBpZiAocmVxdWVzdEluZm8gJiYgcmVxdWVzdEluZm9bMV0gPT09IHN0YXJ0QXQpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgLy8gU3RhcnQgZmV0Y2hpbmcuIENoYW5nZSB0aGUgYGlzVmFsaWRhdGluZ2Agc3RhdGUsIHVwZGF0ZSB0aGUgY2FjaGUuXG4gICAgICAgIGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICAgICAgICAgIGlzVmFsaWRhdGluZzogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgICAvLyBJdCBpcyBpbiB0aGUgYGlzTG9hZGluZ2Agc3RhdGUsIGlmIGFuZCBvbmx5IGlmIHRoZXJlIGlzIG5vIGNhY2hlZCBkYXRhLlxuICAgICAgICAvLyBUaGlzIGJ5cGFzc2VzIGZhbGxiYWNrIGRhdGEgYW5kIGxhZ2d5IGRhdGEuXG4gICAgICAgIGlmIChpc1VuZGVmaW5lZChnZXRDYWNoZSgpLmRhdGEpKSB7XG4gICAgICAgICAgICBpbml0aWFsU3RhdGUuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIHNldENhY2hlKGluaXRpYWxTdGF0ZSk7XG4gICAgICAgICAgICAgICAgLy8gSWYgbm8gY2FjaGUgaXMgYmVpbmcgcmVuZGVyZWQgY3VycmVudGx5IChpdCBzaG93cyBhIGJsYW5rIHBhZ2UpLFxuICAgICAgICAgICAgICAgIC8vIHdlIHRyaWdnZXIgdGhlIGxvYWRpbmcgc2xvdyBldmVudC5cbiAgICAgICAgICAgICAgICBpZiAoY29uZmlnLmxvYWRpbmdUaW1lb3V0ICYmIGlzVW5kZWZpbmVkKGdldENhY2hlKCkuZGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxvYWRpbmcgJiYgY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uTG9hZGluZ1Nsb3coa2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9LCBjb25maWcubG9hZGluZ1RpbWVvdXQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgcmVxdWVzdCBhbmQgc2F2ZSB0aGUgdGltZXN0YW1wLlxuICAgICAgICAgICAgICAgIC8vIEtleSBtdXN0IGJlIHRydXRoeSBpZiBlbnRlcmluZyBoZXJlLlxuICAgICAgICAgICAgICAgIEZFVENIW2tleV0gPSBbXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGZXRjaGVyKGZuQXJnKSxcbiAgICAgICAgICAgICAgICAgICAgZ2V0VGltZXN0YW1wKClcbiAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgW25ld0RhdGEsIHN0YXJ0QXRdID0gRkVUQ0hba2V5XTtcbiAgICAgICAgICAgIG5ld0RhdGEgPSBhd2FpdCBuZXdEYXRhO1xuICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSByZXF1ZXN0IGlzbid0IGludGVycnVwdGVkLCBjbGVhbiBpdCB1cCBhZnRlciB0aGVcbiAgICAgICAgICAgICAgICAvLyBkZWR1cGxpY2F0aW9uIGludGVydmFsLlxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoY2xlYW51cFN0YXRlLCBjb25maWcuZGVkdXBpbmdJbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdyZSBvdGhlciBvbmdvaW5nIHJlcXVlc3QocyksIHN0YXJ0ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lLFxuICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBpZ25vcmUgdGhlIGN1cnJlbnQgb25lIHRvIGF2b2lkIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9uczpcbiAgICAgICAgICAgIC8vICAgcmVxMS0tLS0tLS0tLS0tLS0tLS0tLT5yZXMxICAgICAgICAoY3VycmVudCBvbmUpXG4gICAgICAgICAgICAvLyAgICAgICAgcmVxMi0tLS0tLS0tLS0tLS0tLS0+cmVzMlxuICAgICAgICAgICAgLy8gdGhlIHJlcXVlc3QgdGhhdCBmaXJlZCBsYXRlciB3aWxsIGFsd2F5cyBiZSBrZXB0LlxuICAgICAgICAgICAgLy8gVGhlIHRpbWVzdGFtcCBtYXliZSBiZSBgdW5kZWZpbmVkYCBvciBhIG51bWJlclxuICAgICAgICAgICAgaWYgKCFGRVRDSFtrZXldIHx8IEZFVENIW2tleV1bMV0gIT09IHN0YXJ0QXQpIHtcbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkRpc2NhcmRlZChrZXkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIENsZWFyIGVycm9yLlxuICAgICAgICAgICAgZmluYWxTdGF0ZS5lcnJvciA9IFVOREVGSU5FRDtcbiAgICAgICAgICAgIC8vIElmIHRoZXJlJ3JlIG90aGVyIG11dGF0aW9ucyhzKSwgdGhhdCBvdmVybGFwcGVkIHdpdGggdGhlIGN1cnJlbnQgcmV2YWxpZGF0aW9uOlxuICAgICAgICAgICAgLy8gY2FzZSAxOlxuICAgICAgICAgICAgLy8gICByZXEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgICAgICBtdXRhdGUtLS0tLS0+ZW5kXG4gICAgICAgICAgICAvLyBjYXNlIDI6XG4gICAgICAgICAgICAvLyAgICAgICAgIHJlcS0tLS0tLS0tLS0tLT5yZXNcbiAgICAgICAgICAgIC8vICAgbXV0YXRlLS0tLS0tPmVuZFxuICAgICAgICAgICAgLy8gY2FzZSAzOlxuICAgICAgICAgICAgLy8gICByZXEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgICAgICBtdXRhdGUtLS0tLS0tLi4uLS0tLS0tLS0tLT5cbiAgICAgICAgICAgIC8vIHdlIGhhdmUgdG8gaWdub3JlIHRoZSByZXZhbGlkYXRpb24gcmVzdWx0IChyZXMpIGJlY2F1c2UgaXQncyBubyBsb25nZXIgZnJlc2guXG4gICAgICAgICAgICAvLyBtZWFud2hpbGUsIGEgbmV3IHJldmFsaWRhdGlvbiBzaG91bGQgYmUgdHJpZ2dlcmVkIHdoZW4gdGhlIG11dGF0aW9uIGVuZHMuXG4gICAgICAgICAgICBjb25zdCBtdXRhdGlvbkluZm8gPSBNVVRBVElPTltrZXldO1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChtdXRhdGlvbkluZm8pICYmIC8vIGNhc2UgMVxuICAgICAgICAgICAgKHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzBdIHx8IC8vIGNhc2UgMlxuICAgICAgICAgICAgc3RhcnRBdCA8PSBtdXRhdGlvbkluZm9bMV0gfHwgLy8gY2FzZSAzXG4gICAgICAgICAgICBtdXRhdGlvbkluZm9bMV0gPT09IDApKSB7XG4gICAgICAgICAgICAgICAgZmluaXNoUmVxdWVzdEFuZFVwZGF0ZVN0YXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBEZWVwIGNvbXBhcmUgd2l0aCB0aGUgbGF0ZXN0IHN0YXRlIHRvIGF2b2lkIGV4dHJhIHJlLXJlbmRlcnMuXG4gICAgICAgICAgICAvLyBGb3IgbG9jYWwgc3RhdGUsIGNvbXBhcmUgYW5kIGFzc2lnbi5cbiAgICAgICAgICAgIGNvbnN0IGNhY2hlRGF0YSA9IGdldENhY2hlKCkuZGF0YTtcbiAgICAgICAgICAgIC8vIFNpbmNlIHRoZSBjb21wYXJlIGZuIGNvdWxkIGJlIGN1c3RvbSBmblxuICAgICAgICAgICAgLy8gY2FjaGVEYXRhIG1pZ2h0IGJlIGRpZmZlcmVudCBmcm9tIG5ld0RhdGEgZXZlbiB3aGVuIGNvbXBhcmUgZm4gcmV0dXJucyBUcnVlXG4gICAgICAgICAgICBmaW5hbFN0YXRlLmRhdGEgPSBjb21wYXJlKGNhY2hlRGF0YSwgbmV3RGF0YSkgPyBjYWNoZURhdGEgOiBuZXdEYXRhO1xuICAgICAgICAgICAgLy8gVHJpZ2dlciB0aGUgc3VjY2Vzc2Z1bCBjYWxsYmFjayBpZiBpdCdzIHRoZSBvcmlnaW5hbCByZXF1ZXN0LlxuICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgIGlmIChjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uU3VjY2VzcyhuZXdEYXRhLCBrZXksIGNvbmZpZyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgIGNsZWFudXBTdGF0ZSgpO1xuICAgICAgICAgICAgY29uc3QgY3VycmVudENvbmZpZyA9IGdldENvbmZpZygpO1xuICAgICAgICAgICAgY29uc3QgeyBzaG91bGRSZXRyeU9uRXJyb3IgIH0gPSBjdXJyZW50Q29uZmlnO1xuICAgICAgICAgICAgLy8gTm90IHBhdXNlZCwgd2UgY29udGludWUgaGFuZGxpbmcgdGhlIGVycm9yLiBPdGhlcndpc2UsIGRpc2NhcmQgaXQuXG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRDb25maWcuaXNQYXVzZWQoKSkge1xuICAgICAgICAgICAgICAgIC8vIEdldCBhIG5ldyBlcnJvciwgZG9uJ3QgdXNlIGRlZXAgY29tcGFyaXNvbiBmb3IgZXJyb3JzLlxuICAgICAgICAgICAgICAgIGZpbmFsU3RhdGUuZXJyb3IgPSBlcnI7XG4gICAgICAgICAgICAgICAgLy8gRXJyb3IgZXZlbnQgYW5kIHJldHJ5IGxvZ2ljLiBPbmx5IGZvciB0aGUgYWN0dWFsIHJlcXVlc3QsIG5vdFxuICAgICAgICAgICAgICAgIC8vIGRlZHVwZWQgb25lcy5cbiAgICAgICAgICAgICAgICBpZiAoc2hvdWxkU3RhcnROZXdSZXF1ZXN0ICYmIGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbmZpZy5vbkVycm9yKGVyciwga2V5LCBjdXJyZW50Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNob3VsZFJldHJ5T25FcnJvciA9PT0gdHJ1ZSB8fCBpc0Z1bmN0aW9uKHNob3VsZFJldHJ5T25FcnJvcikgJiYgc2hvdWxkUmV0cnlPbkVycm9yKGVycikpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc0FjdGl2ZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gSWYgaXQncyBpbmFjdGl2ZSwgc3RvcC4gSXQgd2lsbCBhdXRvLXJldmFsaWRhdGUgd2hlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZm9jdXNpbmcgb3IgcmVjb25uZWN0aW5nLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gcmV0cnlpbmcsIGRlZHVwbGljYXRpb24gaXMgYWx3YXlzIGVuYWJsZWQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudENvbmZpZy5vbkVycm9yUmV0cnkoZXJyLCBrZXksIGN1cnJlbnRDb25maWcsIHJldmFsaWRhdGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0cnlDb3VudDogKG9wdHMucmV0cnlDb3VudCB8fCAwKSArIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZHVwZTogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIE1hcmsgbG9hZGluZyBhcyBzdG9wcGVkLlxuICAgICAgICBsb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIC8vIFVwZGF0ZSB0aGUgY3VycmVudCBob29rJ3Mgc3RhdGUuXG4gICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9LCAvLyBgc2V0U3RhdGVgIGlzIGltbXV0YWJsZSwgYW5kIGBldmVudHNDYWxsYmFja2AsIGBmbkFyZ2AsIGFuZFxuICAgIC8vIGBrZXlWYWxpZGF0aW5nYCBhcmUgZGVwZW5kaW5nIG9uIGBrZXlgLCBzbyB3ZSBjYW4gZXhjbHVkZSB0aGVtIGZyb21cbiAgICAvLyB0aGUgZGVwcyBhcnJheS5cbiAgICAvL1xuICAgIC8vIEZJWE1FOlxuICAgIC8vIGBmbmAgYW5kIGBjb25maWdgIG1pZ2h0IGJlIGNoYW5nZWQgZHVyaW5nIHRoZSBsaWZlY3ljbGUsXG4gICAgLy8gYnV0IHRoZXkgbWlnaHQgYmUgY2hhbmdlZCBldmVyeSByZW5kZXIgbGlrZSB0aGlzLlxuICAgIC8vIGB1c2VTV1IoJ2tleScsICgpID0+IGZldGNoKCcvYXBpLycpLCB7IHN1c3BlbnNlOiB0cnVlIH0pYFxuICAgIC8vIFNvIHdlIG9taXQgdGhlIHZhbHVlcyBmcm9tIHRoZSBkZXBzIGFycmF5XG4gICAgLy8gZXZlbiB0aG91Z2ggaXQgbWlnaHQgY2F1c2UgdW5leHBlY3RlZCBiZWhhdmlvcnMuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAga2V5LFxuICAgICAgICBjYWNoZVxuICAgIF0pO1xuICAgIC8vIFNpbWlsYXIgdG8gdGhlIGdsb2JhbCBtdXRhdGUgYnV0IGJvdW5kIHRvIHRoZSBjdXJyZW50IGNhY2hlIGFuZCBrZXkuXG4gICAgLy8gYGNhY2hlYCBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZS5cbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVhY3QtaG9va3MvZXhoYXVzdGl2ZS1kZXBzXG4gICAgY29uc3QgYm91bmRNdXRhdGUgPSB1c2VDYWxsYmFjaygvLyBVc2UgY2FsbGJhY2sgdG8gbWFrZSBzdXJlIGBrZXlSZWYuY3VycmVudGAgcmV0dXJucyBsYXRlc3QgcmVzdWx0IGV2ZXJ5IHRpbWVcbiAgICAoLi4uYXJncyk9PntcbiAgICAgICAgcmV0dXJuIGludGVybmFsTXV0YXRlKGNhY2hlLCBrZXlSZWYuY3VycmVudCwgLi4uYXJncyk7XG4gICAgfSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtdKTtcbiAgICAvLyBUaGUgbG9naWMgZm9yIHVwZGF0aW5nIHJlZnMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgLy8gSGFuZGxlIGxhZ2d5IGRhdGEgdXBkYXRlcy4gSWYgdGhlcmUncyBjYWNoZWQgZGF0YSBvZiB0aGUgY3VycmVudCBrZXksXG4gICAgICAgIC8vIGl0J2xsIGJlIHRoZSBjb3JyZWN0IHJlZmVyZW5jZS5cbiAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChjYWNoZWREYXRhKSkge1xuICAgICAgICAgICAgbGFnZ3lEYXRhUmVmLmN1cnJlbnQgPSBjYWNoZWREYXRhO1xuICAgICAgICB9XG4gICAgfSk7XG4gICAgLy8gQWZ0ZXIgbW91bnRlZCBvciBrZXkgY2hhbmdlZC5cbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGlmICgha2V5KSByZXR1cm47XG4gICAgICAgIGNvbnN0IHNvZnRSZXZhbGlkYXRlID0gcmV2YWxpZGF0ZS5iaW5kKFVOREVGSU5FRCwgV0lUSF9ERURVUEUpO1xuICAgICAgICAvLyBFeHBvc2UgcmV2YWxpZGF0b3JzIHRvIGdsb2JhbCBldmVudCBsaXN0ZW5lcnMuIFNvIHdlIGNhbiB0cmlnZ2VyXG4gICAgICAgIC8vIHJldmFsaWRhdGlvbiBmcm9tIHRoZSBvdXRzaWRlLlxuICAgICAgICBsZXQgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IDA7XG4gICAgICAgIGNvbnN0IG9uUmV2YWxpZGF0ZSA9ICh0eXBlKT0+e1xuICAgICAgICAgICAgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5GT0NVU19FVkVOVCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IG5vdyA9IERhdGUubm93KCk7XG4gICAgICAgICAgICAgICAgaWYgKGdldENvbmZpZygpLnJldmFsaWRhdGVPbkZvY3VzICYmIG5vdyA+IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgJiYgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ID0gbm93ICsgZ2V0Q29uZmlnKCkuZm9jdXNUaHJvdHRsZUludGVydmFsO1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLlJFQ09OTkVDVF9FVkVOVCkge1xuICAgICAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5yZXZhbGlkYXRlT25SZWNvbm5lY3QgJiYgaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICBzb2Z0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZSA9PSByZXZhbGlkYXRlRXZlbnRzLk1VVEFURV9FVkVOVCkge1xuICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHVuc3ViRXZlbnRzID0gc3Vic2NyaWJlQ2FsbGJhY2soa2V5LCBFVkVOVF9SRVZBTElEQVRPUlMsIG9uUmV2YWxpZGF0ZSk7XG4gICAgICAgIC8vIE1hcmsgdGhlIGNvbXBvbmVudCBhcyBtb3VudGVkIGFuZCB1cGRhdGUgY29ycmVzcG9uZGluZyByZWZzLlxuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICBrZXlSZWYuY3VycmVudCA9IGtleTtcbiAgICAgICAgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgIC8vIEtlZXAgdGhlIG9yaWdpbmFsIGtleSBpbiB0aGUgY2FjaGUuXG4gICAgICAgIHNldENhY2hlKHtcbiAgICAgICAgICAgIF9rOiBmbkFyZ1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gVHJpZ2dlciBhIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKHNob3VsZERvSW5pdGlhbFJldmFsaWRhdGlvbikge1xuICAgICAgICAgICAgaWYgKGlzVW5kZWZpbmVkKGRhdGEpIHx8IElTX1NFUlZFUikge1xuICAgICAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgaW1tZWRpYXRlbHkuXG4gICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gRGVsYXkgdGhlIHJldmFsaWRhdGUgaWYgd2UgaGF2ZSBkYXRhIHRvIHJldHVybiBzbyB3ZSB3b24ndCBibG9ja1xuICAgICAgICAgICAgICAgIC8vIHJlbmRlcmluZy5cbiAgICAgICAgICAgICAgICByQUYoc29mdFJldmFsaWRhdGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgLy8gTWFyayBpdCBhcyB1bm1vdW50ZWQuXG4gICAgICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IHRydWU7XG4gICAgICAgICAgICB1bnN1YkV2ZW50cygpO1xuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAga2V5XG4gICAgXSk7XG4gICAgLy8gUG9sbGluZ1xuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgbGV0IHRpbWVyO1xuICAgICAgICBmdW5jdGlvbiBuZXh0KCkge1xuICAgICAgICAgICAgLy8gVXNlIHRoZSBwYXNzZWQgaW50ZXJ2YWxcbiAgICAgICAgICAgIC8vIC4uLm9yIGludm9rZSB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgdXBkYXRlZCBkYXRhIHRvIGdldCB0aGUgaW50ZXJ2YWxcbiAgICAgICAgICAgIGNvbnN0IGludGVydmFsID0gaXNGdW5jdGlvbihyZWZyZXNoSW50ZXJ2YWwpID8gcmVmcmVzaEludGVydmFsKGRhdGEpIDogcmVmcmVzaEludGVydmFsO1xuICAgICAgICAgICAgLy8gV2Ugb25seSBzdGFydCB0aGUgbmV4dCBpbnRlcnZhbCBpZiBgcmVmcmVzaEludGVydmFsYCBpcyBub3QgMCwgYW5kOlxuICAgICAgICAgICAgLy8gLSBgZm9yY2VgIGlzIHRydWUsIHdoaWNoIGlzIHRoZSBzdGFydCBvZiBwb2xsaW5nXG4gICAgICAgICAgICAvLyAtIG9yIGB0aW1lcmAgaXMgbm90IDAsIHdoaWNoIG1lYW5zIHRoZSBlZmZlY3Qgd2Fzbid0IGNhbmNlbGVkXG4gICAgICAgICAgICBpZiAoaW50ZXJ2YWwgJiYgdGltZXIgIT09IC0xKSB7XG4gICAgICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGV4ZWN1dGUsIGludGVydmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBleGVjdXRlKCkge1xuICAgICAgICAgICAgLy8gQ2hlY2sgaWYgaXQncyBPSyB0byBleGVjdXRlOlxuICAgICAgICAgICAgLy8gT25seSByZXZhbGlkYXRlIHdoZW4gdGhlIHBhZ2UgaXMgdmlzaWJsZSwgb25saW5lLCBhbmQgbm90IGVycm9yZWQuXG4gICAgICAgICAgICBpZiAoIWdldENhY2hlKCkuZXJyb3IgJiYgKHJlZnJlc2hXaGVuSGlkZGVuIHx8IGdldENvbmZpZygpLmlzVmlzaWJsZSgpKSAmJiAocmVmcmVzaFdoZW5PZmZsaW5lIHx8IGdldENvbmZpZygpLmlzT25saW5lKCkpKSB7XG4gICAgICAgICAgICAgICAgcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkudGhlbihuZXh0KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gU2NoZWR1bGUgdGhlIG5leHQgaW50ZXJ2YWwgdG8gY2hlY2sgYWdhaW4uXG4gICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIG5leHQoKTtcbiAgICAgICAgcmV0dXJuICgpPT57XG4gICAgICAgICAgICBpZiAodGltZXIpIHtcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGltZXIpO1xuICAgICAgICAgICAgICAgIHRpbWVyID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgfSwgW1xuICAgICAgICByZWZyZXNoSW50ZXJ2YWwsXG4gICAgICAgIHJlZnJlc2hXaGVuSGlkZGVuLFxuICAgICAgICByZWZyZXNoV2hlbk9mZmxpbmUsXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIERpc3BsYXkgZGVidWcgaW5mbyBpbiBSZWFjdCBEZXZUb29scy5cbiAgICB1c2VEZWJ1Z1ZhbHVlKHJldHVybmVkRGF0YSk7XG4gICAgLy8gSW4gU3VzcGVuc2UgbW9kZSwgd2UgY2FuJ3QgcmV0dXJuIHRoZSBlbXB0eSBgZGF0YWAgc3RhdGUuXG4gICAgLy8gSWYgdGhlcmUgaXMgYW4gYGVycm9yYCwgdGhlIGBlcnJvcmAgbmVlZHMgdG8gYmUgdGhyb3duIHRvIHRoZSBlcnJvciBib3VuZGFyeS5cbiAgICAvLyBJZiB0aGVyZSBpcyBubyBgZXJyb3JgLCB0aGUgYHJldmFsaWRhdGlvbmAgcHJvbWlzZSBuZWVkcyB0byBiZSB0aHJvd24gdG9cbiAgICAvLyB0aGUgc3VzcGVuc2UgYm91bmRhcnkuXG4gICAgaWYgKHN1c3BlbnNlICYmIGlzVW5kZWZpbmVkKGRhdGEpICYmIGtleSkge1xuICAgICAgICAvLyBTV1Igc2hvdWxkIHRocm93IHdoZW4gdHJ5aW5nIHRvIHVzZSBTdXNwZW5zZSBvbiB0aGUgc2VydmVyIHdpdGggUmVhY3QgMTgsXG4gICAgICAgIC8vIHdpdGhvdXQgcHJvdmlkaW5nIGFueSBpbml0aWFsIGRhdGEuIFNlZTpcbiAgICAgICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3ZlcmNlbC9zd3IvaXNzdWVzLzE4MzJcbiAgICAgICAgaWYgKCFJU19SRUFDVF9MRUdBQ1kgJiYgSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZhbGxiYWNrIGRhdGEgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyBzdXNwZW5zZSBpbiBTU1IuJyk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gQWx3YXlzIHVwZGF0ZSBmZXRjaGVyIGFuZCBjb25maWcgcmVmcyBldmVuIHdpdGggdGhlIFN1c3BlbnNlIG1vZGUuXG4gICAgICAgIGZldGNoZXJSZWYuY3VycmVudCA9IGZldGNoZXI7XG4gICAgICAgIGNvbmZpZ1JlZi5jdXJyZW50ID0gY29uZmlnO1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICB0aHJvdyBpc1VuZGVmaW5lZChlcnJvcikgPyByZXZhbGlkYXRlKFdJVEhfREVEVVBFKSA6IGVycm9yO1xuICAgIH1cbiAgICByZXR1cm4ge1xuICAgICAgICBtdXRhdGU6IGJvdW5kTXV0YXRlLFxuICAgICAgICBnZXQgZGF0YSAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5kYXRhID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiByZXR1cm5lZERhdGE7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBlcnJvciAoKSB7XG4gICAgICAgICAgICBzdGF0ZURlcGVuZGVuY2llcy5lcnJvciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZXJyb3I7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc1ZhbGlkYXRpbmcgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuaXNWYWxpZGF0aW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBpc1ZhbGlkYXRpbmc7XG4gICAgICAgIH0sXG4gICAgICAgIGdldCBpc0xvYWRpbmcgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBpc0xvYWRpbmc7XG4gICAgICAgIH1cbiAgICB9O1xufTtcbmNvbnN0IFNXUkNvbmZpZyA9IE9CSkVDVC5kZWZpbmVQcm9wZXJ0eShTV1JDb25maWckMSwgJ2RlZmF1bHRWYWx1ZScsIHtcbiAgICB2YWx1ZTogZGVmYXVsdENvbmZpZ1xufSk7XG5jb25zdCB1bnN0YWJsZV9zZXJpYWxpemUgPSAoa2V5KT0+c2VyaWFsaXplKGtleSlbMF07XG4vKipcbiAqIEEgaG9vayB0byBmZXRjaCBkYXRhLlxuICpcbiAqIEBsaW5rIGh0dHBzOi8vc3dyLnZlcmNlbC5hcHBcbiAqIEBleGFtcGxlXG4gKiBgYGBqc3hcbiAqIGltcG9ydCB1c2VTV1IgZnJvbSAnc3dyJ1xuICogZnVuY3Rpb24gUHJvZmlsZSgpIHtcbiAqICAgY29uc3QgeyBkYXRhLCBlcnJvciB9ID0gdXNlU1dSKCcvYXBpL3VzZXInLCBmZXRjaGVyKVxuICogICBpZiAoZXJyb3IpIHJldHVybiA8ZGl2PmZhaWxlZCB0byBsb2FkPC9kaXY+XG4gKiAgIGlmICghZGF0YSkgcmV0dXJuIDxkaXY+bG9hZGluZy4uLjwvZGl2PlxuICogICByZXR1cm4gPGRpdj5oZWxsbyB7ZGF0YS5uYW1lfSE8L2Rpdj5cbiAqIH1cbiAqIGBgYFxuICovIHZhciB1c2VTV1IgPSB3aXRoQXJncyh1c2VTV1JIYW5kbGVyKTtcblxuLy8gdXNlU1dSXG5cbmV4cG9ydCB7IFNXUkNvbmZpZywgdXNlU1dSIGFzIGRlZmF1bHQsIHVuc3RhYmxlX3NlcmlhbGl6ZSB9O1xuIiwiaW1wb3J0IHsgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlU1dSQ29uZmlnIH0gZnJvbSBcInN3clwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gdXNlU1dSSG9va3NDb25maWcoKSB7XG4gICAgdmFyIHN3ckNvbmZpZyA9IHVzZVNXUkNvbmZpZygpO1xuICAgIHZhciB2YWx1ZSA9IHVzZU1lbW8oZnVuY3Rpb24gKCkgeyByZXR1cm4gKHsgbXV0YXRlOiBzd3JDb25maWcubXV0YXRlLCBjYWNoZTogc3dyQ29uZmlnLmNhY2hlIH0pOyB9LCBbc3dyQ29uZmlnLm11dGF0ZSwgc3dyQ29uZmlnLmNhY2hlXSk7XG4gICAgcmV0dXJuIHZhbHVlO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlU1dSSG9va3NDb25maWcuanMubWFwIiwiaW1wb3J0IHsgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVRvZ2dsZShpbml0aWFsVmFsdWUpIHtcbiAgICBpZiAoaW5pdGlhbFZhbHVlID09PSB2b2lkIDApIHsgaW5pdGlhbFZhbHVlID0gZmFsc2U7IH1cbiAgICB2YXIgX2EgPSBfX3JlYWQodXNlU3RhdGUoaW5pdGlhbFZhbHVlKSwgMiksIHZhbHVlID0gX2FbMF0sIHNldFZhbHVlID0gX2FbMV07XG4gICAgdmFyIHRvZ2dsZSA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChuZXdWYWx1ZSkge1xuICAgICAgICBpZiAodHlwZW9mIG5ld1ZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgICAgICAgc2V0VmFsdWUobmV3VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgc2V0VmFsdWUoZnVuY3Rpb24gKHByZXZWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiAhcHJldlZhbHVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9LCBbXSk7XG4gICAgcmV0dXJuIFt2YWx1ZSwgdG9nZ2xlXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVRvZ2dsZS5qcy5tYXAiLCJ2YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXlcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2Mob2JqKSB7XG4gIHZhciBvdXQgPSBcIlwiXG5cbiAgaWYgKHR5cGVvZiBvYmogPT09IFwic3RyaW5nXCIgfHwgdHlwZW9mIG9iaiA9PT0gXCJudW1iZXJcIikgcmV0dXJuIG9iaiB8fCBcIlwiXG5cbiAgaWYgKGlzQXJyYXkob2JqKSlcbiAgICBmb3IgKHZhciBrID0gMCwgdG1wOyBrIDwgb2JqLmxlbmd0aDsgaysrKSB7XG4gICAgICBpZiAoKHRtcCA9IGNjKG9ialtrXSkpICE9PSBcIlwiKSB7XG4gICAgICAgIG91dCArPSAob3V0ICYmIFwiIFwiKSArIHRtcFxuICAgICAgfVxuICAgIH1cbiAgZWxzZVxuICAgIGZvciAodmFyIGsgaW4gb2JqKSB7XG4gICAgICBpZiAob2JqLmhhc093blByb3BlcnR5KGspICYmIG9ialtrXSkgb3V0ICs9IChvdXQgJiYgXCIgXCIpICsga1xuICAgIH1cblxuICByZXR1cm4gb3V0XG59XG4iLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwidW1LQVptTGtBUkx6WDNnbnVLa3BcIixcImxlZnRcIjpcInUxbDVBSkdiVWlQNlJWRklLeE9JXCIsXCJzbWFsbFwiOlwiaHhacEs5Q3BCSzF3UjBXMHY0U0RcIixcImxhcmdlXCI6XCJvOURZbXQ0eGZMYUltaVZ6STlkUVwiLFwieGxhcmdlXCI6XCJxbUVWeFNaUzVrZkwzYVZiZWUxblwiLFwiaW52ZXJ0ZWRcIjpcIkNOT1pITGQ5WGJva3pPVzZMWUJQXCIsXCJyb3VuZGVkXCI6XCJqSkNBencyU3lhSDR0SVdYckFsUlwiLFwicmlnaHRPZmZzZXRcIjpcIktHQ3U3YVBqUXlfYUZOakhXTnV3XCIsXCJsZWZ0T2Zmc2V0XCI6XCJkREhZeUd6WE5pNzczRkFsMTNHWFwiLFwibm9TaGFkb3dcIjpcImxRRjFZY1VxTTBPSHZQU2xTd2xfXCIsXCJub0JvcmRlclwiOlwic0VvMjVFaXY2enMxRF94NXE4VnlcIixcInRyYW5zcGFyZW50XCI6XCJ2bTNjbUFOTnVZbGFRTTVZcXo5R1wiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiUGlrZnpqN3pZZzJJbnRkSnltdUtcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJvU2dWNWN3WDZpbmtTYkNHOTh3OFwiLFwibm9QYWRkaW5nXCI6XCJnU1pyR1IxeHFtOFExaVJVZkdnYVwiLFwiY29udGVudFwiOlwicFlMVWo5bm9BcVQ4V3l0akRPT2JcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJidXR0b25CYWRnZVwiOlwiaU95X3RoVWZ3eElxWk9yV1NJenhcIixcImludmVydGVkXCI6XCJnNzlqamNXVm5teExvUE55QXg0OVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiVW5qNHJwMUR5NzFBQ3J1elhsNzVcIixcImxlZnRcIjpcIkVYV01SdnZlUnZRaWZpeHpUSDAyXCIsXCJzbWFsbFwiOlwiX1Uwem5VazVRVEF6UG5TMmdhTENcIixcIm1lZGl1bVwiOlwiYUg4dTRzMk10WWM1eTR2eXViRHdcIixcImxhcmdlXCI6XCJjMzA2eVY3OGFsX2VHd0JTa21GbVwiLFwieGxhcmdlXCI6XCJ4dkExbWVVbUUyOEFFT3Bqc1djOVwiLFwiaW52ZXJ0ZWRcIjpcIldCNzdZSURPU3dKb1g2OE5qbFVHXCIsXCJyb3VuZGVkXCI6XCJrMm5KQ3NFTk5nQ3oySGxzal9iR1wiLFwicmlnaHRPZmZzZXRcIjpcImpBZTVFVkUzN09yS1l2a1hkYzFzXCIsXCJsZWZ0T2Zmc2V0XCI6XCJEZ2J0QjZHNExvQkRkMDRQX016T1wiLFwibm9TaGFkb3dcIjpcIktwUUk5NV9mOG5Idms3RzJKNmg4XCIsXCJ0cmFuc3BhcmVudFwiOlwiTDhQbnhVUW9nemdGTU1UN1FJNGRcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIkp1bGF4U2Njb0dtcXRnVE5KbWs5XCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwielRZcjlXN2cyU3FiVmpQRkFva0dcIixcIm5vUGFkZGluZ1wiOlwiVUh6VG01MWtWeWxsNTJfUzdzR0JcIixcIm5vQm9yZGVyXCI6XCJoUlAxWFlmdUo0OVRzWVVfY081QVwiLFwiZGlzYWJsZWRcIjpcImx3V0lUUGhNOVRNbzU4NURzYXc4XCIsXCJjb250ZW50XCI6XCJNeVRfUHVmSmRFdnNaRTNoU1c4UFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNoZWNrYm94XCI6XCJzeThsS1ZXUDU2QWxPUjd5c185QVwiLFwic21hbGxcIjpcIlhqZnBjdVB0Z3VGWnZLcnh4dDd5XCIsXCJtZWRpdW1cIjpcInRMUDNkWldlcFhIM0hLZzE3c09IXCIsXCJsYXJnZVwiOlwiV2dwOXFIV0RyUWk5Zm1jeFFJVktcIixcInhsYXJnZVwiOlwibFVBNnRwTGtXY0dGZ25vcUNGdnVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclBpY2tlclwiOlwiS2syZHAxNUh3TVp6SU5iVUZBWjRcIixcImhvcml6b250YWxcIjpcIkpzek9fVWc3cEtMWVEwRGVoTjhfXCIsXCJ2ZXJ0aWNhbFwiOlwiRVZUNjJsZ2hDOTllOWJkallseTVcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb2xvclN3YXRjaFwiOlwiUHZiZUJtNFNNdE1xbFFOVHlRalFcIixcInNtYWxsXCI6XCJTN0UzRVB5X0FXUXVrRWV4dXZUZlwiLFwibGFyZ2VcIjpcImExRnNJdEtQUUVPQmVUcUJDdURsXCIsXCJ4bGFyZ2VcIjpcInNGaGdRRU5fVU9MM1p4T0FSMUllXCIsXCJzZWxlY3RlZFwiOlwiYVV4MnVTQlNzMTRWcXdQcWp2bFFcIixcInNyT25seVwiOlwiSklRbWVaZGQ5VEZsNUlfZ2lmUGlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlpaVkhjWDQ1WENibG1EYWI5ZXdaXCIsXCJtb2RhbEhlYWRlclwiOlwieFRYMVhKZkNTVXNyaF95TGxab2lcIixcIm1vZGFsQ29udGVudFwiOlwiVGU2akhkbHlqc1FYbW5UczliYW5cIixcIm5vUGFkZGluZ1wiOlwiTHpfZ3dTd1AzUUNONXpZekZzRWlcIixcIm1vZGFsQnV0dG9uc0NvbnRhaW5lclwiOlwiR2gxdXZ4TWZFZ1BUZHQ2NlFpczJcIixcIm1vZGFsQnV0dG9uc1wiOlwiSWF3MzRGa01KcWpyR1E1OEJHZnhcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInJCYWZYa29UQ24yQWg2eFlZbXhmXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaW5wdXRcIjpcIktXazdvWjh0dlBmUWljZ1FZbFZhXCIsXCJsYWJlbFwiOlwiZTZ6cng3VU9QX0JTb01NM0dyalFcIixcInNtYWxsXCI6XCJpaFNuRFFnMHlneGNWTEl5U0prTVwiLFwibGFyZ2VcIjpcIkZwd2hiRDdIWHhfdUZUM2wwMXdiXCIsXCJ4bGFyZ2VcIjpcIllWZHM0dV9EZldTRzFyMFNBR25TXCIsXCJpbnZlcnRlZFwiOlwiQ0t5bm9MaGlMZDZLekFZaTVOdEdcIixcInJvdW5kZWRcIjpcInY3Mm16SnVtRlNpRE9PRTFNblhIXCIsXCJub1NoYWRvd1wiOlwiRW9ld0pFRGJHZHRlSl9OUmZTNUZcIixcIm5vQm9yZGVyXCI6XCJjYjdsNHh2Y05uSE5sUVptTGprYlwiLFwibm9QYWRkaW5nXCI6XCJ2Y093RFl1R0YyZXRvUGZ5RkRYNVwiLFwidHJhbnNwYXJlbnRcIjpcImwwOGtoYVhJVU9jcnVCRkh3czdYXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJJMHh2SmJCMExOVDBTMTVqVE1XV1wiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIlg2ZnFVY1ZIMUJsQ1JKQmlpSmlpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJqMW1maVlFR29sVFJtYkJtR0tsUVwiLFwicm93XCI6XCJFR2FLdm1xTTJTYXdpRnJXOEN0dVwiLFwiY29sdW1uXCI6XCJOTWkwTVQxYjdycDFaanllOFVWQVwiLFwiZml4ZWRcIjpcImcwajNra1FyX0FqQ0tGZDk0UzFzXCIsXCJwbGFpblwiOlwiRnIxcTdXbkYxbkZubmJmZ3BhUnpcIixcInRyYW5zcGFyZW50XCI6XCJ1ZFJaZTlIMGJLVUhYak93RzFGblwiLFwidG9wXCI6XCJ1WWlLdzZWdkRFa2hqWkh6dm83ZVwiLFwidG9wRWRnZVwiOlwidFJiRWNZakUzS25jc053VGJ2Vk1cIixcInRvcE9uRWRnZVwiOlwiTEd1bkczN1gxX0hSZXV3M3F6dWFcIixcInJpZ2h0XCI6XCJsdzI3ckdWbG8zNGF4Q3h3M1FIaVwiLFwicmlnaHRFZGdlXCI6XCJQWkl0dmxlRklJajBKeDJNaWtSRVwiLFwicmlnaHRPbkVkZ2VcIjpcIktOdUdhRFBxOXJtWGZnbU8zcGNiXCIsXCJib3R0b21cIjpcImRuMXVoMXRhc0d4REdxbVUxOEhOXCIsXCJib3R0b21FZGdlXCI6XCJlRDBVQ3JCUnBzUlRQUHd3SW9WZ1wiLFwiYm90dG9tT25FZGdlXCI6XCJJcmhINWdmeUdzUTZrZGNQOTRSUVwiLFwibGVmdFwiOlwiRDVmR0huQUdDTVI0THRiOXk0SHJcIixcImxlZnRFZGdlXCI6XCJfQXRBZDJ0cjd0MWtYdXNSYlhTelwiLFwibGVmdE9uRWRnZVwiOlwiXzhDOWRkMFhfSlhZNHVIenc1TmpcIixcImhvcml6b250YWxDZW50ZXJcIjpcIlFEa3M4b3Z0OVJWY0ZXZUVCOHdiXCIsXCJ2ZXJ0aWNhbENlbnRlclwiOlwiQ1Z1UVJFNjUyR0gyVkpuOHpPVHNcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJpY29uXCI6XCJmcF9CTEoyRlc0T3l5YjBiSGlENFwiLFwic21hbGxcIjpcInpzVkROZk5Sa29zMFE1dXY5RlI5XCIsXCJtZWRpdW1cIjpcImVTbGlsM2V2UHRQQnN3V0Y4MEM1XCIsXCJsYXJnZVwiOlwiVDdVTHlxMXlFOUFWWEVNa25WNEdcIixcInhsYXJnZVwiOlwiUVBBY2VWUWRaNlFJUTJRdmlqd2dcIixcImludmVydGVkXCI6XCJtRlRHYmhMYTRObFVPMTZudkpya1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiV2NlbXlyMkdyOFpDR2M2QmpicXdcIixcInNtYWxsXCI6XCJUX3BhOENjcEwxR3Z1RHNkdnNxcVwiLFwibWVkaXVtXCI6XCJuTExFcmpPZ2ZhNWIyc09lWnJRNVwiLFwibGFyZ2VcIjpcIlE3MU5GQkhyU3hRTFFFNEFHRDJoXCIsXCJ4bGFyZ2VcIjpcIkViQml5RjFyZzZ3UmF4U01LOHNvXCIsXCJyb3VuZGVkXCI6XCJ0TGp1d1JTc0lpTEpHVnNyYXJiZFwiLFwidG9wT2Zmc2V0XCI6XCJkNEtMcEk3OUN1U1U2Z2tQUEluQVwiLFwicmlnaHRPZmZzZXRcIjpcIkc3aEpab1l2OHFJck5tRkN5Z01FXCIsXCJib3R0b21PZmZzZXRcIjpcIkRaczNBdkdrVmRPdkpmTGVKOEdoXCIsXCJsZWZ0T2Zmc2V0XCI6XCJ3RUVuV1JjdnV2b21oX09MTzVpcVwiLFwiaW52ZXJ0ZWRcIjpcIks5V0dDRnBVYWRPOVdJWHdGYWpfXCIsXCJub1NoYWRvd1wiOlwiZUFRSjEwa0VrUG1EeE1HdmxZenlcIixcIm5vQm9yZGVyXCI6XCJPbEVOUjludHVXWUxHT0tLS3JHUlwiLFwidHJhbnNwYXJlbnRcIjpcIktPY3NQcml2cjk0cnhuZkhWbGZlXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJnVVNUeTNfTnAxbUdKSFcxTjNneFwiLFwic21hbGxcIjpcIklZdVZ6aDFIQnpnb1RDaTJXUV9wXCIsXCJtZWRpdW1cIjpcIkpOZzNfYkNFZkl2aTRnZUVjc1MzXCIsXCJsYXJnZVwiOlwibjYxc2F4QTIwX0V3TWd0OUd3NHNcIixcInhsYXJnZVwiOlwiZ3FHbnZuSDlYNm1Hdnp3bDRhR3pcIixcInJvdW5kZWRcIjpcIkRrenVxaEVhaU1SM1hNczFNMUlmXCIsXCJ0b3BPZmZzZXRcIjpcInNHbnZldnZzeEJaVWFYcnBaUXBJXCIsXCJyaWdodE9mZnNldFwiOlwiaGdZM1pwa3lENzBwN0U4cm4zYmlcIixcImJvdHRvbU9mZnNldFwiOlwiUk9vUVk2T2FSblF6RE9mWF9RREZcIixcImxlZnRPZmZzZXRcIjpcIktldm01ODJlM2dYUEpFM09Eb3BhXCIsXCJpbnZlcnRlZFwiOlwiT096bkNiQWJqT0xjNF9iQ0VxZnlcIixcIm5vU2hhZG93XCI6XCJ4ckh4ZmNlMDM0ZGdZTkVrbmxWTVwiLFwibm9Cb3JkZXJcIjpcImVIdF9SSXE4SkdvWUhjNGlDb2VnXCIsXCJ0cmFuc3BhcmVudFwiOlwibmZncXRTZ2ZydHJHRkRXZlpvblFcIixcImRpc2FibGVkXCI6XCJJX25oSjl1NnBURF8yU0YzcWxfbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwick81VzZEUWs0TnRvV3J3bUtNV2dcIixcImhhc092ZXJsYXlcIjpcImxsdm5tSThLMTNnOVBUQmlDTnozXCIsXCJvdmVybGF5XCI6XCJHVmsyajh3VjF0M2dZNXVYUTRxSVwiLFwiaW1hZ2VcIjpcImdYallxS2U5dzNOZ1l1cll3VVFwXCIsXCJjb3ZlclwiOlwiX2w3T05PV2F5cjh0eXVHaXlVc2NcIixcImNvbnRhaW5cIjpcIlNZak9iOGxBaG1EYmR5bEZJUVk5XCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJIa3JvelNmbGxURmxra2JxeFhXaFwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInh5SFhoaEhFWVhNWWVhdldad19OXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJSRFp5bENNbEdmZUNVd1NieWVJcVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiaThHdV9XMXc4V0JBWWZsTElZendcIixcImhlYWRlclwiOlwiR3A3Ujh3WXdhTHRGb0tGY1J0Z05cIixcImhlYWRlckxhYmVsXCI6XCJWR2tvdE1UbnFQUmFLY0dWOFJqZ1wiLFwibGlzdFwiOlwidmc5UUx0Q1lUQXM1eDNmRjc5enBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJsaXN0Vmlld0l0ZW1cIjpcIlpGVWQ3b1NwUEx0MEVkMlhxYVdaXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudVwiOlwieFE5QmZrMFgxSG1aZ2loQ3V0WlZcIixcIm9wZW5cIjpcInV0djlGWU9VN1EwSk5uWlcxZWp2XCIsXCJlbnRyYW5jZVwiOlwieVlLamNDdkQyTDk0RnBQZ09pZ1FcIixcImhlYWRlclwiOlwid05MODZzOXpHRmk4WEsxMUtsb1JcIixcImZvb3RlclwiOlwibXU0SmV2MWM0S2NpZmVGOE16cWdcIixcIm5vQm9yZGVyXCI6XCJFYVBTakwxblhzejdUQ3gxMUxyZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwia1loN0RLWXFINmpkTFhkN1BkSndcIixcIm1lbnVDb250YWluZXJcIjpcIlFsZUFPM3ltVGxpVTZaTkJReGZnXCIsXCJ0b3BcIjpcImF4ZmNyalNINGx2dWp6cnNrMlFwXCIsXCJyaWdodFwiOlwiTHRWbHRXM0JQWjVnTlhWeHhrclBcIixcImxlZnRcIjpcIlBSYjVmOFhjTVpPY1k1dWZQTWRxXCIsXCJib3R0b21cIjpcIl9fTVo1T29pSXJWaWRGWGJRZmp1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUl0ZW1cIjpcImdHWmZfR3NXc3drcjBOVERfbmJRXCIsXCJub1BhZGRpbmdcIjpcIkNNMmJIU0N4d3VpdE1lczd1OVdmXCIsXCJhY3RpdmVcIjpcInM0dEpsSzRPRmMzcm5YTDBNeHFrXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibWVudUxpbmtJdGVtXCI6XCJYMUY0U1FraFFoMGZ4ejVZdTN0SFwiLFwibm9QYWRkaW5nXCI6XCJrcERMWFpTRDJLcDE5aDlzdVJMQVwiLFwiYWN0aXZlXCI6XCJJd0lUakduNnZUWnRlRUtqTm9ZY1wiLFwibWVudUl0ZW1cIjpcImxkb1I2cEdPcnRnSE1YU3BtSDdGXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiajBoOWhkX2dsdkk5eGRPbmFhdVlcIixcIm5vT3ZlcmxheVwiOlwiU0w0OFN6WnVmS2dkTWlHWTNZVE5cIixcIm1vZGFsXCI6XCJoVFhjWmV2R3l5STBBY3ZwclhWSlwiLFwidHJhbnNwYXJlbnRcIjpcImlicWxvRzFIeEh4M3N0ZGtWWlNqXCIsXCJub1NoYWRvd1wiOlwiSUVvNXZFZWZ0dkxwbXdpMFZ5akRcIixcIm1vZGFsQnV0dG9uXCI6XCJGb1BmQzNqN2NJZzJCWWZ6cVFHRVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm51bXBhZFwiOlwiR2V2YmJHM0QwUjM0eEdVRnM1WTFcIixcIm51bWJlcnNcIjpcImZMNUkxV0tYQ2FVOXZyQkd5SkI0XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wib3ZlcmxheVwiOlwiRGg2anNRMTVlTXlkc1NNVEN3UndcIixcInRyYW5zcGFyZW50XCI6XCJXVDZPUGxqQzJxZmJBV3NrMHo0clwiLFwiZml4ZWRcIjpcInB1NnM5TWo1VDFZSWdtdjRMT25DXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibGFiZWxcIjpcImI1NWh5WjBvSGwwczRPdDlPaHdNXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJTbUNpNHhPeEVzTHRpNjFHb1lrNFwiLFwic2VsZWN0ZWRcIjpcIl80ckp0Q09acG5mM3huOHBtRnZDUVwiLFwiY2hlY2tib3hDb250YWluZXJcIjpcIk1TWFpGN3hjQzVhb3FIbHFwSTBnXCIsXCJjaGVja2JveFwiOlwiTkpqcTlfZ0FlZERSck9FX1hXRTFcIixcImxhYmVsXCI6XCJ2d21ETGM5NkQ5dFhnV3FzNElLelwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZTN5WEpCcllUVzRzVlpLWTJORm1cIixcInNlbGVjdEFsbENvbnRhaW5lclwiOlwiY3pITGE0TDN0UkNKRENpREI2QXpcIixcImNoZWNrYm94XCI6XCJpS3FqV1VkOTZ6U3A5eG1vY1h6a1wiLFwiY2hlY2tib3hDb250YWluZXJcIjpcImF4aWg5RW51eksxZndocVlEVlJBXCIsXCJsYWJlbFwiOlwicTVXczlocjhaTVg3ZlN2REtfcW5cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIml4M2FaV01lTjVBbDRVSzh5ZWJKXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJFVEdiWFRkWUFwMEc0MFRKUExuS1wiLFwiaGVhZGVyXCI6XCJYQW9KaHhUQXBjUjlsR2VneXA5QVwiLFwiY29udGVudFwiOlwiclJEV3YycXF3U3JCeTNldlo3RHdcIixcInNlYXJjaENvbnRhaW5lclwiOlwieU9FQ0RKZURWVDV6NVlhWHBlSm5cIixcImV4cGFuZGVkXCI6XCJCcnhydEQzYU1YN0lVNTJyQTIyMFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzF2NGxqT29HWHFUSlRuZU1OUHpcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImc1T1IwYU9OT1cxT3MxeHRrTkhpXCIsXCJ0YWJsZVwiOlwic01SMVZiNjJYRXZPT1dScldjNFFcIixcInBsYWNlaG9sZGVyQ29udGFpbmVyXCI6XCJfN3gyejdwX2tiUU9MRG1FWDU0aUFcIixcInNjcm9sbGJhckNvbnRhaW5lclwiOlwiRUFIMTRYUGVKQnVEV0dwNU5WWW9cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImo0UGlnSk9MNURnekQ4T1l4c2t6XCIsXCJpc0hlYWRlclN0aWNreVwiOlwiQVlSXzRIZW9sQWpKQ09zbDNIWkpcIixcImJvcmRlckJvdHRvbVwiOlwiaVpyRDN0SDEyekRJRk9XdkpVRDdcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0YWJsZUhlYWRlckNlbGxcIjpcIkpjQTFWelY0TXdWUTNORWgwdnpFXCIsXCJzb3J0SWNvblZpc2libGVcIjpcIklxN094c1F6TDA2eGo5OE8wTHFKXCIsXCJzb3J0YWJsZVwiOlwiVlNUU2hZN0xUaF9JSWpuclBfX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImRPdmlnU2doeHlRNENiYkNNa0NSXCIsXCJhY3RpdmVcIjpcInRxbllkWTBIdERsbVc2MXRqR2JRXCIsXCJoYXNBcnJvd1wiOlwicXFPNmExak5MNkhUSkc3SFIxMXRcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIkF2UjdXQ0RSeEN3dlJVQV9qODBQXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ6S0YzNGFLdllabmJMdVp6akVlT1wiLFwiY2xvc2VCdXR0b25cIjpcIlpaUFJaTFVxOU1ReWlmRDh4MmpIXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widGV4dElucHV0XCI6XCJOUFpya3NDcG5YVkpTcV9zbkhqUlwiLFwic21hbGxcIjpcImpRR3JpUUpTYTA0enNvRzFhMnU5XCIsXCJtZWRpdW1cIjpcImxWb1k5RHAxN0hPQmluTWowUTdvXCIsXCJsYXJnZVwiOlwiUWxVYVBiWDhFYUlpN3JaNEZiOG9cIixcInhsYXJnZVwiOlwicllQT005Zk50VkxkUEZ5V0trR0VcIixcIm5vQm9yZGVyXCI6XCJLRFRJTnNIZG9sWVJlU2JMY29vSFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRvYXN0XCI6XCJ6Rml1QVRnc1NCNDJWZEVtY0paWVwiLFwiZW50cmFuY2VcIjpcIlI4cnBPVU90bmdZT0V0N0kwcEdNXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RDb250YWluZXJcIjpcIlhsTFFPZTQ3NE90QmlhY19nVTdIXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJ5WTlIVjQwSVRUV2dBVjhxTHcxd1wiLFwiaGFzT3ZlcmxheVwiOlwienViNWJxZFZYbTRORnhwSTRIQmZcIixcInZpZGVvXCI6XCJNVkNEVmpmZ21IRTdRZW1jWXhHbFwiLFwiY292ZXJcIjpcIlY0bkVjbTE3OXZaZTJNTGdSVmFNXCIsXCJjb250YWluXCI6XCJ1Ml9NZmVDak1TbF9hQk5KbjVuTFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwibGpmc1lzOEJRcWxlS3piTGtrYWRcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJISnRScWJBRkxPblhWeUd6OGlGVVwiLFwib3ZlcmxheVwiOlwiQUxIaE9IQWVMbEJEeTFEcFlxaXZcIn07IiwiLyoqISBcbiAqIGhvdGtleXMtanMgdjMuOS40IFxuICogQSBzaW1wbGUgbWljcm8tbGlicmFyeSBmb3IgZGVmaW5pbmcgYW5kIGRpc3BhdGNoaW5nIGtleWJvYXJkIHNob3J0Y3V0cy4gSXQgaGFzIG5vIGRlcGVuZGVuY2llcy4gXG4gKiBcbiAqIENvcHlyaWdodCAoYykgMjAyMiBrZW5ueSB3b25nIDx3b3dvaG9vQHFxLmNvbT4gXG4gKiBodHRwOi8vamF5d2NqbG92ZS5naXRodWIuaW8vaG90a2V5cyBcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBcbiAqL1xuXG52YXIgaXNmZiA9IHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnID8gbmF2aWdhdG9yLnVzZXJBZ2VudC50b0xvd2VyQ2FzZSgpLmluZGV4T2YoJ2ZpcmVmb3gnKSA+IDAgOiBmYWxzZTsgLy8g57uR5a6a5LqL5Lu2XG5cbmZ1bmN0aW9uIGFkZEV2ZW50KG9iamVjdCwgZXZlbnQsIG1ldGhvZCwgdXNlQ2FwdHVyZSkge1xuICBpZiAob2JqZWN0LmFkZEV2ZW50TGlzdGVuZXIpIHtcbiAgICBvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcihldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKTtcbiAgfSBlbHNlIGlmIChvYmplY3QuYXR0YWNoRXZlbnQpIHtcbiAgICBvYmplY3QuYXR0YWNoRXZlbnQoXCJvblwiLmNvbmNhdChldmVudCksIGZ1bmN0aW9uICgpIHtcbiAgICAgIG1ldGhvZCh3aW5kb3cuZXZlbnQpO1xuICAgIH0pO1xuICB9XG59IC8vIOS/rumlsOmUrui9rOaNouaIkOWvueW6lOeahOmUrueggVxuXG5cbmZ1bmN0aW9uIGdldE1vZHMobW9kaWZpZXIsIGtleSkge1xuICB2YXIgbW9kcyA9IGtleS5zbGljZSgwLCBrZXkubGVuZ3RoIC0gMSk7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtb2RzLmxlbmd0aDsgaSsrKSB7XG4gICAgbW9kc1tpXSA9IG1vZGlmaWVyW21vZHNbaV0udG9Mb3dlckNhc2UoKV07XG4gIH1cblxuICByZXR1cm4gbW9kcztcbn0gLy8g5aSE55CG5Lyg55qEa2V55a2X56ym5Liy6L2s5o2i5oiQ5pWw57uEXG5cblxuZnVuY3Rpb24gZ2V0S2V5cyhrZXkpIHtcbiAgaWYgKHR5cGVvZiBrZXkgIT09ICdzdHJpbmcnKSBrZXkgPSAnJztcbiAga2V5ID0ga2V5LnJlcGxhY2UoL1xccy9nLCAnJyk7IC8vIOWMuemFjeS7u+S9leepuueZveWtl+espizljIXmi6znqbrmoLzjgIHliLbooajnrKbjgIHmjaLpobXnrKbnrYnnrYlcblxuICB2YXIga2V5cyA9IGtleS5zcGxpdCgnLCcpOyAvLyDlkIzml7borr7nva7lpJrkuKrlv6vmjbfplK7vvIzku6UnLCfliIblibJcblxuICB2YXIgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTsgLy8g5b+r5o236ZSu5Y+v6IO95YyF5ZCrJywn77yM6ZyA54m55q6K5aSE55CGXG5cbiAgZm9yICg7IGluZGV4ID49IDA7KSB7XG4gICAga2V5c1tpbmRleCAtIDFdICs9ICcsJztcbiAgICBrZXlzLnNwbGljZShpbmRleCwgMSk7XG4gICAgaW5kZXggPSBrZXlzLmxhc3RJbmRleE9mKCcnKTtcbiAgfVxuXG4gIHJldHVybiBrZXlzO1xufSAvLyDmr5TovoPkv67ppbDplK7nmoTmlbDnu4RcblxuXG5mdW5jdGlvbiBjb21wYXJlQXJyYXkoYTEsIGEyKSB7XG4gIHZhciBhcnIxID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGExIDogYTI7XG4gIHZhciBhcnIyID0gYTEubGVuZ3RoID49IGEyLmxlbmd0aCA/IGEyIDogYTE7XG4gIHZhciBpc0luZGV4ID0gdHJ1ZTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycjEubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoYXJyMi5pbmRleE9mKGFycjFbaV0pID09PSAtMSkgaXNJbmRleCA9IGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzSW5kZXg7XG59XG5cbnZhciBfa2V5TWFwID0ge1xuICBiYWNrc3BhY2U6IDgsXG4gIHRhYjogOSxcbiAgY2xlYXI6IDEyLFxuICBlbnRlcjogMTMsXG4gIHJldHVybjogMTMsXG4gIGVzYzogMjcsXG4gIGVzY2FwZTogMjcsXG4gIHNwYWNlOiAzMixcbiAgbGVmdDogMzcsXG4gIHVwOiAzOCxcbiAgcmlnaHQ6IDM5LFxuICBkb3duOiA0MCxcbiAgZGVsOiA0NixcbiAgZGVsZXRlOiA0NixcbiAgaW5zOiA0NSxcbiAgaW5zZXJ0OiA0NSxcbiAgaG9tZTogMzYsXG4gIGVuZDogMzUsXG4gIHBhZ2V1cDogMzMsXG4gIHBhZ2Vkb3duOiAzNCxcbiAgY2Fwc2xvY2s6IDIwLFxuICBudW1fMDogOTYsXG4gIG51bV8xOiA5NyxcbiAgbnVtXzI6IDk4LFxuICBudW1fMzogOTksXG4gIG51bV80OiAxMDAsXG4gIG51bV81OiAxMDEsXG4gIG51bV82OiAxMDIsXG4gIG51bV83OiAxMDMsXG4gIG51bV84OiAxMDQsXG4gIG51bV85OiAxMDUsXG4gIG51bV9tdWx0aXBseTogMTA2LFxuICBudW1fYWRkOiAxMDcsXG4gIG51bV9lbnRlcjogMTA4LFxuICBudW1fc3VidHJhY3Q6IDEwOSxcbiAgbnVtX2RlY2ltYWw6IDExMCxcbiAgbnVtX2RpdmlkZTogMTExLFxuICAn4oeqJzogMjAsXG4gICcsJzogMTg4LFxuICAnLic6IDE5MCxcbiAgJy8nOiAxOTEsXG4gICdgJzogMTkyLFxuICAnLSc6IGlzZmYgPyAxNzMgOiAxODksXG4gICc9JzogaXNmZiA/IDYxIDogMTg3LFxuICAnOyc6IGlzZmYgPyA1OSA6IDE4NixcbiAgJ1xcJyc6IDIyMixcbiAgJ1snOiAyMTksXG4gICddJzogMjIxLFxuICAnXFxcXCc6IDIyMFxufTsgLy8gTW9kaWZpZXIgS2V5c1xuXG52YXIgX21vZGlmaWVyID0ge1xuICAvLyBzaGlmdEtleVxuICAn4oenJzogMTYsXG4gIHNoaWZ0OiAxNixcbiAgLy8gYWx0S2V5XG4gICfijKUnOiAxOCxcbiAgYWx0OiAxOCxcbiAgb3B0aW9uOiAxOCxcbiAgLy8gY3RybEtleVxuICAn4oyDJzogMTcsXG4gIGN0cmw6IDE3LFxuICBjb250cm9sOiAxNyxcbiAgLy8gbWV0YUtleVxuICAn4oyYJzogOTEsXG4gIGNtZDogOTEsXG4gIGNvbW1hbmQ6IDkxXG59O1xudmFyIG1vZGlmaWVyTWFwID0ge1xuICAxNjogJ3NoaWZ0S2V5JyxcbiAgMTg6ICdhbHRLZXknLFxuICAxNzogJ2N0cmxLZXknLFxuICA5MTogJ21ldGFLZXknLFxuICBzaGlmdEtleTogMTYsXG4gIGN0cmxLZXk6IDE3LFxuICBhbHRLZXk6IDE4LFxuICBtZXRhS2V5OiA5MVxufTtcbnZhciBfbW9kcyA9IHtcbiAgMTY6IGZhbHNlLFxuICAxODogZmFsc2UsXG4gIDE3OiBmYWxzZSxcbiAgOTE6IGZhbHNlXG59O1xudmFyIF9oYW5kbGVycyA9IHt9OyAvLyBGMX5GMTIgc3BlY2lhbCBrZXlcblxuZm9yICh2YXIgayA9IDE7IGsgPCAyMDsgaysrKSB7XG4gIF9rZXlNYXBbXCJmXCIuY29uY2F0KGspXSA9IDExMSArIGs7XG59XG5cbnZhciBfZG93bktleXMgPSBbXTsgLy8g6K6w5b2V5pGB5LiL55qE57uR5a6a6ZSuXG5cbnZhciB3aW5MaXN0ZW5kRm9jdXMgPSBmYWxzZTsgLy8gd2luZG935piv5ZCm5bey57uP55uR5ZCs5LqGZm9jdXPkuovku7ZcblxudmFyIF9zY29wZSA9ICdhbGwnOyAvLyDpu5jorqTng63plK7ojIPlm7RcblxudmFyIGVsZW1lbnRIYXNCaW5kRXZlbnQgPSBbXTsgLy8g5bey57uR5a6a5LqL5Lu255qE6IqC54K56K6w5b2VXG4vLyDov5Tlm57plK7noIFcblxudmFyIGNvZGUgPSBmdW5jdGlvbiBjb2RlKHgpIHtcbiAgcmV0dXJuIF9rZXlNYXBbeC50b0xvd2VyQ2FzZSgpXSB8fCBfbW9kaWZpZXJbeC50b0xvd2VyQ2FzZSgpXSB8fCB4LnRvVXBwZXJDYXNlKCkuY2hhckNvZGVBdCgwKTtcbn07IC8vIOiuvue9ruiOt+WPluW9k+WJjeiMg+WbtO+8iOm7mOiupOS4uifmiYDmnIkn77yJXG5cblxuZnVuY3Rpb24gc2V0U2NvcGUoc2NvcGUpIHtcbiAgX3Njb3BlID0gc2NvcGUgfHwgJ2FsbCc7XG59IC8vIOiOt+WPluW9k+WJjeiMg+WbtFxuXG5cbmZ1bmN0aW9uIGdldFNjb3BlKCkge1xuICByZXR1cm4gX3Njb3BlIHx8ICdhbGwnO1xufSAvLyDojrflj5bmkYHkuIvnu5HlrprplK7nmoTplK7lgLxcblxuXG5mdW5jdGlvbiBnZXRQcmVzc2VkS2V5Q29kZXMoKSB7XG4gIHJldHVybiBfZG93bktleXMuc2xpY2UoMCk7XG59IC8vIOihqOWNleaOp+S7tuaOp+S7tuWIpOaWrSDov5Tlm54gQm9vbGVhblxuLy8gaG90a2V5IGlzIGVmZmVjdGl2ZSBvbmx5IHdoZW4gZmlsdGVyIHJldHVybiB0cnVlXG5cblxuZnVuY3Rpb24gZmlsdGVyKGV2ZW50KSB7XG4gIHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQgfHwgZXZlbnQuc3JjRWxlbWVudDtcbiAgdmFyIHRhZ05hbWUgPSB0YXJnZXQudGFnTmFtZTtcbiAgdmFyIGZsYWcgPSB0cnVlOyAvLyBpZ25vcmU6IGlzQ29udGVudEVkaXRhYmxlID09PSAndHJ1ZScsIDxpbnB1dD4gYW5kIDx0ZXh0YXJlYT4gd2hlbiByZWFkT25seSBzdGF0ZSBpcyBmYWxzZSwgPHNlbGVjdD5cblxuICBpZiAodGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlIHx8ICh0YWdOYW1lID09PSAnSU5QVVQnIHx8IHRhZ05hbWUgPT09ICdURVhUQVJFQScgfHwgdGFnTmFtZSA9PT0gJ1NFTEVDVCcpICYmICF0YXJnZXQucmVhZE9ubHkpIHtcbiAgICBmbGFnID0gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gZmxhZztcbn0gLy8g5Yik5pat5pGB5LiL55qE6ZSu5piv5ZCm5Li65p+Q5Liq6ZSu77yM6L+U5ZuedHJ1ZeaIluiAhWZhbHNlXG5cblxuZnVuY3Rpb24gaXNQcmVzc2VkKGtleUNvZGUpIHtcbiAgaWYgKHR5cGVvZiBrZXlDb2RlID09PSAnc3RyaW5nJykge1xuICAgIGtleUNvZGUgPSBjb2RlKGtleUNvZGUpOyAvLyDovazmjaLmiJDplK7noIFcbiAgfVxuXG4gIHJldHVybiBfZG93bktleXMuaW5kZXhPZihrZXlDb2RlKSAhPT0gLTE7XG59IC8vIOW+queOr+WIoOmZpGhhbmRsZXJz5Lit55qE5omA5pyJIHNjb3BlKOiMg+WbtClcblxuXG5mdW5jdGlvbiBkZWxldGVTY29wZShzY29wZSwgbmV3U2NvcGUpIHtcbiAgdmFyIGhhbmRsZXJzO1xuICB2YXIgaTsgLy8g5rKh5pyJ5oyH5a6ac2NvcGXvvIzojrflj5ZzY29wZVxuXG4gIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcblxuICBmb3IgKHZhciBrZXkgaW4gX2hhbmRsZXJzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfaGFuZGxlcnMsIGtleSkpIHtcbiAgICAgIGhhbmRsZXJzID0gX2hhbmRsZXJzW2tleV07XG5cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBoYW5kbGVycy5sZW5ndGg7KSB7XG4gICAgICAgIGlmIChoYW5kbGVyc1tpXS5zY29wZSA9PT0gc2NvcGUpIGhhbmRsZXJzLnNwbGljZShpLCAxKTtlbHNlIGkrKztcbiAgICAgIH1cbiAgICB9XG4gIH0gLy8g5aaC5p6cc2NvcGXooqvliKDpmaTvvIzlsIZzY29wZemHjee9ruS4umFsbFxuXG5cbiAgaWYgKGdldFNjb3BlKCkgPT09IHNjb3BlKSBzZXRTY29wZShuZXdTY29wZSB8fCAnYWxsJyk7XG59IC8vIOa4hemZpOS/rumlsOmUrlxuXG5cbmZ1bmN0aW9uIGNsZWFyTW9kaWZpZXIoZXZlbnQpIHtcbiAgdmFyIGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2ggfHwgZXZlbnQuY2hhckNvZGU7XG5cbiAgdmFyIGkgPSBfZG93bktleXMuaW5kZXhPZihrZXkpOyAvLyDku47liJfooajkuK3muIXpmaTmjInljovov4fnmoTplK5cblxuXG4gIGlmIChpID49IDApIHtcbiAgICBfZG93bktleXMuc3BsaWNlKGksIDEpO1xuICB9IC8vIOeJueauiuWkhOeQhiBjbW1hbmQg6ZSu77yM5ZyoIGNtbWFuZCDnu4TlkIjlv6vmjbfplK4ga2V5dXAg5Y+q5omn6KGM5LiA5qyh55qE6Zeu6aKYXG5cblxuICBpZiAoZXZlbnQua2V5ICYmIGV2ZW50LmtleS50b0xvd2VyQ2FzZSgpID09PSAnbWV0YScpIHtcbiAgICBfZG93bktleXMuc3BsaWNlKDAsIF9kb3duS2V5cy5sZW5ndGgpO1xuICB9IC8vIOS/rumlsOmUriBzaGlmdEtleSBhbHRLZXkgY3RybEtleSAoY29tbWFuZHx8bWV0YUtleSkg5riF6ZmkXG5cblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG5cbiAgaWYgKGtleSBpbiBfbW9kcykge1xuICAgIF9tb2RzW2tleV0gPSBmYWxzZTsgLy8g5bCG5L+u6aWw6ZSu6YeN572u5Li6ZmFsc2VcblxuICAgIGZvciAodmFyIGsgaW4gX21vZGlmaWVyKSB7XG4gICAgICBpZiAoX21vZGlmaWVyW2tdID09PSBrZXkpIGhvdGtleXNba10gPSBmYWxzZTtcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gdW5iaW5kKGtleXNJbmZvKSB7XG4gIC8vIHVuYmluZCgpLCB1bmJpbmQgYWxsIGtleXNcbiAgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBPYmplY3Qua2V5cyhfaGFuZGxlcnMpLmZvckVhY2goZnVuY3Rpb24gKGtleSkge1xuICAgICAgcmV0dXJuIGRlbGV0ZSBfaGFuZGxlcnNba2V5XTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGtleXNJbmZvKSkge1xuICAgIC8vIHN1cHBvcnQgbGlrZSA6IHVuYmluZChbe2tleTogJ2N0cmwrYScsIHNjb3BlOiAnczEnfSwge2tleTogJ2N0cmwtYScsIHNjb3BlOiAnczInLCBzcGxpdEtleTogJy0nfV0pXG4gICAga2V5c0luZm8uZm9yRWFjaChmdW5jdGlvbiAoaW5mbykge1xuICAgICAgaWYgKGluZm8ua2V5KSBlYWNoVW5iaW5kKGluZm8pO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiBrZXlzSW5mbyA9PT0gJ29iamVjdCcpIHtcbiAgICAvLyBzdXBwb3J0IGxpa2UgdW5iaW5kKHtrZXk6ICdjdHJsK2EsIGN0cmwrYicsIHNjb3BlOidhYmMnfSlcbiAgICBpZiAoa2V5c0luZm8ua2V5KSBlYWNoVW5iaW5kKGtleXNJbmZvKTtcbiAgfSBlbHNlIGlmICh0eXBlb2Yga2V5c0luZm8gPT09ICdzdHJpbmcnKSB7XG4gICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5IC0gMV0gPSBhcmd1bWVudHNbX2tleV07XG4gICAgfVxuXG4gICAgLy8gc3VwcG9ydCBvbGQgbWV0aG9kXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICAgIHZhciBzY29wZSA9IGFyZ3NbMF0sXG4gICAgICAgIG1ldGhvZCA9IGFyZ3NbMV07XG5cbiAgICBpZiAodHlwZW9mIHNjb3BlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBtZXRob2QgPSBzY29wZTtcbiAgICAgIHNjb3BlID0gJyc7XG4gICAgfVxuXG4gICAgZWFjaFVuYmluZCh7XG4gICAgICBrZXk6IGtleXNJbmZvLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBzcGxpdEtleTogJysnXG4gICAgfSk7XG4gIH1cbn0gLy8g6Kej6Zmk57uR5a6a5p+Q5Liq6IyD5Zu055qE5b+r5o236ZSuXG5cblxudmFyIGVhY2hVbmJpbmQgPSBmdW5jdGlvbiBlYWNoVW5iaW5kKF9yZWYpIHtcbiAgdmFyIGtleSA9IF9yZWYua2V5LFxuICAgICAgc2NvcGUgPSBfcmVmLnNjb3BlLFxuICAgICAgbWV0aG9kID0gX3JlZi5tZXRob2QsXG4gICAgICBfcmVmJHNwbGl0S2V5ID0gX3JlZi5zcGxpdEtleSxcbiAgICAgIHNwbGl0S2V5ID0gX3JlZiRzcGxpdEtleSA9PT0gdm9pZCAwID8gJysnIDogX3JlZiRzcGxpdEtleTtcbiAgdmFyIG11bHRpcGxlS2V5cyA9IGdldEtleXMoa2V5KTtcbiAgbXVsdGlwbGVLZXlzLmZvckVhY2goZnVuY3Rpb24gKG9yaWdpbktleSkge1xuICAgIHZhciB1bmJpbmRLZXlzID0gb3JpZ2luS2V5LnNwbGl0KHNwbGl0S2V5KTtcbiAgICB2YXIgbGVuID0gdW5iaW5kS2V5cy5sZW5ndGg7XG4gICAgdmFyIGxhc3RLZXkgPSB1bmJpbmRLZXlzW2xlbiAtIDFdO1xuICAgIHZhciBrZXlDb2RlID0gbGFzdEtleSA9PT0gJyonID8gJyonIDogY29kZShsYXN0S2V5KTtcbiAgICBpZiAoIV9oYW5kbGVyc1trZXlDb2RlXSkgcmV0dXJuOyAvLyDliKTmlq3mmK/lkKbkvKDlhaXojIPlm7TvvIzmsqHmnInlsLHojrflj5bojIPlm7RcblxuICAgIGlmICghc2NvcGUpIHNjb3BlID0gZ2V0U2NvcGUoKTtcbiAgICB2YXIgbW9kcyA9IGxlbiA+IDEgPyBnZXRNb2RzKF9tb2RpZmllciwgdW5iaW5kS2V5cykgOiBbXTtcbiAgICBfaGFuZGxlcnNba2V5Q29kZV0gPSBfaGFuZGxlcnNba2V5Q29kZV0uZmlsdGVyKGZ1bmN0aW9uIChyZWNvcmQpIHtcbiAgICAgIC8vIOmAmui/h+WHveaVsOWIpOaWre+8jOaYr+WQpuino+mZpOe7keWumu+8jOWHveaVsOebuOetieebtOaOpei/lOWbnlxuICAgICAgdmFyIGlzTWF0Y2hpbmdNZXRob2QgPSBtZXRob2QgPyByZWNvcmQubWV0aG9kID09PSBtZXRob2QgOiB0cnVlO1xuICAgICAgcmV0dXJuICEoaXNNYXRjaGluZ01ldGhvZCAmJiByZWNvcmQuc2NvcGUgPT09IHNjb3BlICYmIGNvbXBhcmVBcnJheShyZWNvcmQubW9kcywgbW9kcykpO1xuICAgIH0pO1xuICB9KTtcbn07IC8vIOWvueebkeWQrOWvueW6lOW/q+aNt+mUrueahOWbnuiwg+WHveaVsOi/m+ihjOWkhOeQhlxuXG5cbmZ1bmN0aW9uIGV2ZW50SGFuZGxlcihldmVudCwgaGFuZGxlciwgc2NvcGUsIGVsZW1lbnQpIHtcbiAgaWYgKGhhbmRsZXIuZWxlbWVudCAhPT0gZWxlbWVudCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBtb2RpZmllcnNNYXRjaDsgLy8g55yL5a6D5piv5ZCm5Zyo5b2T5YmN6IyD5Zu0XG5cbiAgaWYgKGhhbmRsZXIuc2NvcGUgPT09IHNjb3BlIHx8IGhhbmRsZXIuc2NvcGUgPT09ICdhbGwnKSB7XG4gICAgLy8g5qOA5p+l5piv5ZCm5Yy56YWN5L+u6aWw56ym77yI5aaC5p6c5pyJ6L+U5ZuedHJ1Ze+8iVxuICAgIG1vZGlmaWVyc01hdGNoID0gaGFuZGxlci5tb2RzLmxlbmd0aCA+IDA7XG5cbiAgICBmb3IgKHZhciB5IGluIF9tb2RzKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9tb2RzLCB5KSkge1xuICAgICAgICBpZiAoIV9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA+IC0xIHx8IF9tb2RzW3ldICYmIGhhbmRsZXIubW9kcy5pbmRleE9mKCt5KSA9PT0gLTEpIHtcbiAgICAgICAgICBtb2RpZmllcnNNYXRjaCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSAvLyDosIPnlKjlpITnkIbnqIvluo/vvIzlpoLmnpzmmK/kv67ppbDplK7kuI3lgZrlpITnkIZcblxuXG4gICAgaWYgKGhhbmRsZXIubW9kcy5sZW5ndGggPT09IDAgJiYgIV9tb2RzWzE2XSAmJiAhX21vZHNbMThdICYmICFfbW9kc1sxN10gJiYgIV9tb2RzWzkxXSB8fCBtb2RpZmllcnNNYXRjaCB8fCBoYW5kbGVyLnNob3J0Y3V0ID09PSAnKicpIHtcbiAgICAgIGlmIChoYW5kbGVyLm1ldGhvZChldmVudCwgaGFuZGxlcikgPT09IGZhbHNlKSB7XG4gICAgICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgZXZlbnQucHJldmVudERlZmF1bHQoKTtlbHNlIGV2ZW50LnJldHVyblZhbHVlID0gZmFsc2U7XG4gICAgICAgIGlmIChldmVudC5zdG9wUHJvcGFnYXRpb24pIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICBpZiAoZXZlbnQuY2FuY2VsQnViYmxlKSBldmVudC5jYW5jZWxCdWJibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDlpITnkIZrZXlkb3du5LqL5Lu2XG5cblxuZnVuY3Rpb24gZGlzcGF0Y2goZXZlbnQsIGVsZW1lbnQpIHtcbiAgdmFyIGFzdGVyaXNrID0gX2hhbmRsZXJzWycqJ107XG4gIHZhciBrZXkgPSBldmVudC5rZXlDb2RlIHx8IGV2ZW50LndoaWNoIHx8IGV2ZW50LmNoYXJDb2RlOyAvLyDooajljZXmjqfku7bov4fmu6Qg6buY6K6k6KGo5Y2V5o6n5Lu25LiN6Kem5Y+R5b+r5o236ZSuXG5cbiAgaWYgKCFob3RrZXlzLmZpbHRlci5jYWxsKHRoaXMsIGV2ZW50KSkgcmV0dXJuOyAvLyBHZWNrbyhGaXJlZm94KeeahGNvbW1hbmTplK7lgLwyMjTvvIzlnKhXZWJraXQoQ2hyb21lKeS4reS/neaMgeS4gOiHtFxuICAvLyBXZWJraXTlt6blj7MgY29tbWFuZCDplK7lgLzkuI3kuIDmoLdcblxuICBpZiAoa2V5ID09PSA5MyB8fCBrZXkgPT09IDIyNCkga2V5ID0gOTE7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGJvdW5kIGtleXNcbiAgICogSWYgYW4gSW5wdXQgTWV0aG9kIEVkaXRvciBpcyBwcm9jZXNzaW5nIGtleSBpbnB1dCBhbmQgdGhlIGV2ZW50IGlzIGtleWRvd24sIHJldHVybiAyMjkuXG4gICAqIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzI1MDQzOTM0L2lzLWl0LW9rLXRvLWlnbm9yZS1rZXlkb3duLWV2ZW50cy13aXRoLWtleWNvZGUtMjI5XG4gICAqIGh0dHA6Ly9saXN0cy53My5vcmcvQXJjaGl2ZXMvUHVibGljL3d3dy1kb20vMjAxMEp1bFNlcC9hdHQtMDE4Mi9rZXlDb2RlLXNwZWMuaHRtbFxuICAgKi9cblxuICBpZiAoX2Rvd25LZXlzLmluZGV4T2Yoa2V5KSA9PT0gLTEgJiYga2V5ICE9PSAyMjkpIF9kb3duS2V5cy5wdXNoKGtleSk7XG4gIC8qKlxuICAgKiBKZXN0IHRlc3QgY2FzZXMgYXJlIHJlcXVpcmVkLlxuICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gICAqL1xuXG4gIFsnY3RybEtleScsICdhbHRLZXknLCAnc2hpZnRLZXknLCAnbWV0YUtleSddLmZvckVhY2goZnVuY3Rpb24gKGtleU5hbWUpIHtcbiAgICB2YXIga2V5TnVtID0gbW9kaWZpZXJNYXBba2V5TmFtZV07XG5cbiAgICBpZiAoZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKGtleU51bSk7XG4gICAgfSBlbHNlIGlmICghZXZlbnRba2V5TmFtZV0gJiYgX2Rvd25LZXlzLmluZGV4T2Yoa2V5TnVtKSA+IC0xKSB7XG4gICAgICBfZG93bktleXMuc3BsaWNlKF9kb3duS2V5cy5pbmRleE9mKGtleU51bSksIDEpO1xuICAgIH0gZWxzZSBpZiAoa2V5TmFtZSA9PT0gJ21ldGFLZXknICYmIGV2ZW50W2tleU5hbWVdICYmIF9kb3duS2V5cy5sZW5ndGggPT09IDMpIHtcbiAgICAgIC8qKlxuICAgICAgICogRml4IGlmIENvbW1hbmQgaXMgcHJlc3NlZDpcbiAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiAgICAgICAqL1xuICAgICAgaWYgKCEoZXZlbnQuY3RybEtleSB8fCBldmVudC5zaGlmdEtleSB8fCBldmVudC5hbHRLZXkpKSB7XG4gICAgICAgIF9kb3duS2V5cyA9IF9kb3duS2V5cy5zbGljZShfZG93bktleXMuaW5kZXhPZihrZXlOdW0pKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuICAvKipcbiAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAgKi9cblxuICBpZiAoa2V5IGluIF9tb2RzKSB7XG4gICAgX21vZHNba2V5XSA9IHRydWU7IC8vIOWwhueJueauiuWtl+espueahGtleeazqOWGjOWIsCBob3RrZXlzIOS4ilxuXG4gICAgZm9yICh2YXIgayBpbiBfbW9kaWZpZXIpIHtcbiAgICAgIGlmIChfbW9kaWZpZXJba10gPT09IGtleSkgaG90a2V5c1trXSA9IHRydWU7XG4gICAgfVxuXG4gICAgaWYgKCFhc3RlcmlzaykgcmV0dXJuO1xuICB9IC8vIOWwhiBtb2RpZmllck1hcCDph4zpnaLnmoTkv67ppbDplK7nu5HlrprliLAgZXZlbnQg5LitXG5cblxuICBmb3IgKHZhciBlIGluIF9tb2RzKSB7XG4gICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChfbW9kcywgZSkpIHtcbiAgICAgIF9tb2RzW2VdID0gZXZlbnRbbW9kaWZpZXJNYXBbZV1dO1xuICAgIH1cbiAgfVxuICAvKipcbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2pheXdjamxvdmUvaG90a2V5cy9wdWxsLzEyOVxuICAgKiBUaGlzIHNvbHZlcyB0aGUgaXNzdWUgaW4gRmlyZWZveCBvbiBXaW5kb3dzIHdoZXJlIGhvdGtleXMgY29ycmVzcG9uZGluZyB0byBzcGVjaWFsIGNoYXJhY3RlcnMgd291bGQgbm90IHRyaWdnZXIuXG4gICAqIEFuIGV4YW1wbGUgb2YgdGhpcyBpcyBjdHJsK2FsdCttIG9uIGEgU3dlZGlzaCBrZXlib2FyZCB3aGljaCBpcyB1c2VkIHRvIHR5cGUgzrwuXG4gICAqIEJyb3dzZXIgc3VwcG9ydDogaHR0cHM6Ly9jYW5pdXNlLmNvbS8jZmVhdD1rZXlib2FyZGV2ZW50LWdldG1vZGlmaWVyc3RhdGVcbiAgICovXG5cblxuICBpZiAoZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSAmJiAhKGV2ZW50LmFsdEtleSAmJiAhZXZlbnQuY3RybEtleSkgJiYgZXZlbnQuZ2V0TW9kaWZpZXJTdGF0ZSgnQWx0R3JhcGgnKSkge1xuICAgIGlmIChfZG93bktleXMuaW5kZXhPZigxNykgPT09IC0xKSB7XG4gICAgICBfZG93bktleXMucHVzaCgxNyk7XG4gICAgfVxuXG4gICAgaWYgKF9kb3duS2V5cy5pbmRleE9mKDE4KSA9PT0gLTEpIHtcbiAgICAgIF9kb3duS2V5cy5wdXNoKDE4KTtcbiAgICB9XG5cbiAgICBfbW9kc1sxN10gPSB0cnVlO1xuICAgIF9tb2RzWzE4XSA9IHRydWU7XG4gIH0gLy8g6I635Y+W6IyD5Zu0IOm7mOiupOS4uiBgYWxsYFxuXG5cbiAgdmFyIHNjb3BlID0gZ2V0U2NvcGUoKTsgLy8g5a+55Lu75L2V5b+r5o236ZSu6YO96ZyA6KaB5YGa55qE5aSE55CGXG5cbiAgaWYgKGFzdGVyaXNrKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhc3Rlcmlzay5sZW5ndGg7IGkrKykge1xuICAgICAgaWYgKGFzdGVyaXNrW2ldLnNjb3BlID09PSBzY29wZSAmJiAoZXZlbnQudHlwZSA9PT0gJ2tleWRvd24nICYmIGFzdGVyaXNrW2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBhc3Rlcmlza1tpXS5rZXl1cCkpIHtcbiAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCBhc3Rlcmlza1tpXSwgc2NvcGUsIGVsZW1lbnQpO1xuICAgICAgfVxuICAgIH1cbiAgfSAvLyBrZXkg5LiN5ZyoIF9oYW5kbGVycyDkuK3ov5Tlm55cblxuXG4gIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSByZXR1cm47XG5cbiAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IF9oYW5kbGVyc1trZXldLmxlbmd0aDsgX2krKykge1xuICAgIGlmIChldmVudC50eXBlID09PSAna2V5ZG93bicgJiYgX2hhbmRsZXJzW2tleV1bX2ldLmtleWRvd24gfHwgZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBfaGFuZGxlcnNba2V5XVtfaV0ua2V5dXApIHtcbiAgICAgIGlmIChfaGFuZGxlcnNba2V5XVtfaV0ua2V5KSB7XG4gICAgICAgIHZhciByZWNvcmQgPSBfaGFuZGxlcnNba2V5XVtfaV07XG4gICAgICAgIHZhciBzcGxpdEtleSA9IHJlY29yZC5zcGxpdEtleTtcbiAgICAgICAgdmFyIGtleVNob3J0Y3V0ID0gcmVjb3JkLmtleS5zcGxpdChzcGxpdEtleSk7XG4gICAgICAgIHZhciBfZG93bktleXNDdXJyZW50ID0gW107IC8vIOiusOW9leW9k+WJjeaMiemUrumUruWAvFxuXG4gICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwga2V5U2hvcnRjdXQubGVuZ3RoOyBhKyspIHtcbiAgICAgICAgICBfZG93bktleXNDdXJyZW50LnB1c2goY29kZShrZXlTaG9ydGN1dFthXSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKF9kb3duS2V5c0N1cnJlbnQuc29ydCgpLmpvaW4oJycpID09PSBfZG93bktleXMuc29ydCgpLmpvaW4oJycpKSB7XG4gICAgICAgICAgLy8g5om+5Yiw5aSE55CG5YaF5a65XG4gICAgICAgICAgZXZlbnRIYW5kbGVyKGV2ZW50LCByZWNvcmQsIHNjb3BlLCBlbGVtZW50KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyDliKTmlq0gZWxlbWVudCDmmK/lkKblt7Lnu4/nu5Hlrprkuovku7ZcblxuXG5mdW5jdGlvbiBpc0VsZW1lbnRCaW5kKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnRIYXNCaW5kRXZlbnQuaW5kZXhPZihlbGVtZW50KSA+IC0xO1xufVxuXG5mdW5jdGlvbiBob3RrZXlzKGtleSwgb3B0aW9uLCBtZXRob2QpIHtcbiAgX2Rvd25LZXlzID0gW107XG4gIHZhciBrZXlzID0gZ2V0S2V5cyhrZXkpOyAvLyDpnIDopoHlpITnkIbnmoTlv6vmjbfplK7liJfooahcblxuICB2YXIgbW9kcyA9IFtdO1xuICB2YXIgc2NvcGUgPSAnYWxsJzsgLy8gc2NvcGXpu5jorqTkuLphbGzvvIzmiYDmnInojIPlm7Tpg73mnInmlYhcblxuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50OyAvLyDlv6vmjbfplK7kuovku7bnu5HlrproioLngrlcblxuICB2YXIgaSA9IDA7XG4gIHZhciBrZXl1cCA9IGZhbHNlO1xuICB2YXIga2V5ZG93biA9IHRydWU7XG4gIHZhciBzcGxpdEtleSA9ICcrJztcbiAgdmFyIGNhcHR1cmUgPSBmYWxzZTsgLy8g5a+55Li66K6+5a6a6IyD5Zu055qE5Yik5patXG5cbiAgaWYgKG1ldGhvZCA9PT0gdW5kZWZpbmVkICYmIHR5cGVvZiBvcHRpb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICBtZXRob2QgPSBvcHRpb247XG4gIH1cblxuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9wdGlvbikgPT09ICdbb2JqZWN0IE9iamVjdF0nKSB7XG4gICAgaWYgKG9wdGlvbi5zY29wZSkgc2NvcGUgPSBvcHRpb24uc2NvcGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcblxuICAgIGlmIChvcHRpb24uZWxlbWVudCkgZWxlbWVudCA9IG9wdGlvbi5lbGVtZW50OyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgICBpZiAob3B0aW9uLmtleXVwKSBrZXl1cCA9IG9wdGlvbi5rZXl1cDsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5rZXlkb3duICE9PSB1bmRlZmluZWQpIGtleWRvd24gPSBvcHRpb24ua2V5ZG93bjsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKG9wdGlvbi5jYXB0dXJlICE9PSB1bmRlZmluZWQpIGNhcHR1cmUgPSBvcHRpb24uY2FwdHVyZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuXG4gICAgaWYgKHR5cGVvZiBvcHRpb24uc3BsaXRLZXkgPT09ICdzdHJpbmcnKSBzcGxpdEtleSA9IG9wdGlvbi5zcGxpdEtleTsgLy8gZXNsaW50LWRpc2FibGUtbGluZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBvcHRpb24gPT09ICdzdHJpbmcnKSBzY29wZSA9IG9wdGlvbjsgLy8g5a+55LqO5q+P5Liq5b+r5o236ZSu6L+b6KGM5aSE55CGXG5cbiAgZm9yICg7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXS5zcGxpdChzcGxpdEtleSk7IC8vIOaMiemUruWIl+ihqFxuXG4gICAgbW9kcyA9IFtdOyAvLyDlpoLmnpzmmK/nu4TlkIjlv6vmjbfplK7lj5blvpfnu4TlkIjlv6vmjbfplK5cblxuICAgIGlmIChrZXkubGVuZ3RoID4gMSkgbW9kcyA9IGdldE1vZHMoX21vZGlmaWVyLCBrZXkpOyAvLyDlsIbpnZ7kv67ppbDplK7ovazljJbkuLrplK7noIFcblxuICAgIGtleSA9IGtleVtrZXkubGVuZ3RoIC0gMV07XG4gICAga2V5ID0ga2V5ID09PSAnKicgPyAnKicgOiBjb2RlKGtleSk7IC8vICrooajnpLrljLnphY3miYDmnInlv6vmjbfplK5cbiAgICAvLyDliKTmlq1rZXnmmK/lkKblnKhfaGFuZGxlcnPkuK3vvIzkuI3lnKjlsLHotYvkuIDkuKrnqbrmlbDnu4RcblxuICAgIGlmICghKGtleSBpbiBfaGFuZGxlcnMpKSBfaGFuZGxlcnNba2V5XSA9IFtdO1xuXG4gICAgX2hhbmRsZXJzW2tleV0ucHVzaCh7XG4gICAgICBrZXl1cDoga2V5dXAsXG4gICAgICBrZXlkb3duOiBrZXlkb3duLFxuICAgICAgc2NvcGU6IHNjb3BlLFxuICAgICAgbW9kczogbW9kcyxcbiAgICAgIHNob3J0Y3V0OiBrZXlzW2ldLFxuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICBrZXk6IGtleXNbaV0sXG4gICAgICBzcGxpdEtleTogc3BsaXRLZXksXG4gICAgICBlbGVtZW50OiBlbGVtZW50XG4gICAgfSk7XG4gIH0gLy8g5Zyo5YWo5bGAZG9jdW1lbnTkuIrorr7nva7lv6vmjbfplK5cblxuXG4gIGlmICh0eXBlb2YgZWxlbWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgIWlzRWxlbWVudEJpbmQoZWxlbWVudCkgJiYgd2luZG93KSB7XG4gICAgZWxlbWVudEhhc0JpbmRFdmVudC5wdXNoKGVsZW1lbnQpO1xuICAgIGFkZEV2ZW50KGVsZW1lbnQsICdrZXlkb3duJywgZnVuY3Rpb24gKGUpIHtcbiAgICAgIGRpc3BhdGNoKGUsIGVsZW1lbnQpO1xuICAgIH0sIGNhcHR1cmUpO1xuXG4gICAgaWYgKCF3aW5MaXN0ZW5kRm9jdXMpIHtcbiAgICAgIHdpbkxpc3RlbmRGb2N1cyA9IHRydWU7XG4gICAgICBhZGRFdmVudCh3aW5kb3csICdmb2N1cycsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX2Rvd25LZXlzID0gW107XG4gICAgICB9LCBjYXB0dXJlKTtcbiAgICB9XG5cbiAgICBhZGRFdmVudChlbGVtZW50LCAna2V5dXAnLCBmdW5jdGlvbiAoZSkge1xuICAgICAgZGlzcGF0Y2goZSwgZWxlbWVudCk7XG4gICAgICBjbGVhck1vZGlmaWVyKGUpO1xuICAgIH0sIGNhcHR1cmUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyaWdnZXIoc2hvcnRjdXQpIHtcbiAgdmFyIHNjb3BlID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMV0gOiAnYWxsJztcbiAgT2JqZWN0LmtleXMoX2hhbmRsZXJzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgZGF0YSA9IF9oYW5kbGVyc1trZXldLmZpbmQoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHJldHVybiBpdGVtLnNjb3BlID09PSBzY29wZSAmJiBpdGVtLnNob3J0Y3V0ID09PSBzaG9ydGN1dDtcbiAgICB9KTtcblxuICAgIGlmIChkYXRhICYmIGRhdGEubWV0aG9kKSB7XG4gICAgICBkYXRhLm1ldGhvZCgpO1xuICAgIH1cbiAgfSk7XG59XG5cbnZhciBfYXBpID0ge1xuICBzZXRTY29wZTogc2V0U2NvcGUsXG4gIGdldFNjb3BlOiBnZXRTY29wZSxcbiAgZGVsZXRlU2NvcGU6IGRlbGV0ZVNjb3BlLFxuICBnZXRQcmVzc2VkS2V5Q29kZXM6IGdldFByZXNzZWRLZXlDb2RlcyxcbiAgaXNQcmVzc2VkOiBpc1ByZXNzZWQsXG4gIGZpbHRlcjogZmlsdGVyLFxuICB0cmlnZ2VyOiB0cmlnZ2VyLFxuICB1bmJpbmQ6IHVuYmluZCxcbiAga2V5TWFwOiBfa2V5TWFwLFxuICBtb2RpZmllcjogX21vZGlmaWVyLFxuICBtb2RpZmllck1hcDogbW9kaWZpZXJNYXBcbn07XG5cbmZvciAodmFyIGEgaW4gX2FwaSkge1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKF9hcGksIGEpKSB7XG4gICAgaG90a2V5c1thXSA9IF9hcGlbYV07XG4gIH1cbn1cblxuaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gIHZhciBfaG90a2V5cyA9IHdpbmRvdy5ob3RrZXlzO1xuXG4gIGhvdGtleXMubm9Db25mbGljdCA9IGZ1bmN0aW9uIChkZWVwKSB7XG4gICAgaWYgKGRlZXAgJiYgd2luZG93LmhvdGtleXMgPT09IGhvdGtleXMpIHtcbiAgICAgIHdpbmRvdy5ob3RrZXlzID0gX2hvdGtleXM7XG4gICAgfVxuXG4gICAgcmV0dXJuIGhvdGtleXM7XG4gIH07XG5cbiAgd2luZG93LmhvdGtleXMgPSBob3RrZXlzO1xufVxuXG5leHBvcnQgeyBob3RrZXlzIGFzIGRlZmF1bHQgfTtcbiIsImltcG9ydCBob3RrZXlzIGZyb20gJ2hvdGtleXMtanMnO1xuaW1wb3J0IHsgdXNlUmVmLCB1c2VDYWxsYmFjaywgdXNlRWZmZWN0IH0gZnJvbSAncmVhY3QnO1xuXG4vKipcclxuICogQGRlcHJlY2F0ZWQgVXNlIGlzSG90a2V5UHJlc3NlZCBpbnN0ZWFkLiBXaWxsIGJlIHJlbW92ZWQgdmVyc2lvbiA0LlxyXG4gKi9cblxuZnVuY3Rpb24gdXNlSXNIb3RrZXlQcmVzc2VkKCkge1xuICByZXR1cm4gaG90a2V5cy5pc1ByZXNzZWQ7XG59XG5cbmhvdGtleXMuZmlsdGVyID0gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gdHJ1ZTtcbn07XG5cbnZhciB0YWdGaWx0ZXIgPSBmdW5jdGlvbiB0YWdGaWx0ZXIoX3JlZiwgZW5hYmxlT25UYWdzKSB7XG4gIHZhciB0YXJnZXQgPSBfcmVmLnRhcmdldDtcbiAgdmFyIHRhcmdldFRhZ05hbWUgPSB0YXJnZXQgJiYgdGFyZ2V0LnRhZ05hbWU7XG4gIHJldHVybiBCb29sZWFuKHRhcmdldFRhZ05hbWUgJiYgZW5hYmxlT25UYWdzICYmIGVuYWJsZU9uVGFncy5pbmNsdWRlcyh0YXJnZXRUYWdOYW1lKSk7XG59O1xuXG52YXIgaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCA9IGZ1bmN0aW9uIGlzS2V5Ym9hcmRFdmVudFRyaWdnZXJlZEJ5SW5wdXQoZXYpIHtcbiAgcmV0dXJuIHRhZ0ZpbHRlcihldiwgWydJTlBVVCcsICdURVhUQVJFQScsICdTRUxFQ1QnXSk7XG59O1xuXG5mdW5jdGlvbiB1c2VIb3RrZXlzKGtleXMsIGNhbGxiYWNrLCBvcHRpb25zLCBkZXBzKSB7XG4gIGlmIChvcHRpb25zIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICBkZXBzID0gb3B0aW9ucztcbiAgICBvcHRpb25zID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgdmFyIF9yZWYyID0gb3B0aW9ucyB8fCB7fSxcbiAgICAgIGVuYWJsZU9uVGFncyA9IF9yZWYyLmVuYWJsZU9uVGFncyxcbiAgICAgIGZpbHRlciA9IF9yZWYyLmZpbHRlcixcbiAgICAgIGtleXVwID0gX3JlZjIua2V5dXAsXG4gICAgICBrZXlkb3duID0gX3JlZjIua2V5ZG93bixcbiAgICAgIF9yZWYyJGZpbHRlclByZXZlbnREZSA9IF9yZWYyLmZpbHRlclByZXZlbnREZWZhdWx0LFxuICAgICAgZmlsdGVyUHJldmVudERlZmF1bHQgPSBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmMiRmaWx0ZXJQcmV2ZW50RGUsXG4gICAgICBfcmVmMiRlbmFibGVkID0gX3JlZjIuZW5hYmxlZCxcbiAgICAgIGVuYWJsZWQgPSBfcmVmMiRlbmFibGVkID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjIkZW5hYmxlZCxcbiAgICAgIF9yZWYyJGVuYWJsZU9uQ29udGVudCA9IF9yZWYyLmVuYWJsZU9uQ29udGVudEVkaXRhYmxlLFxuICAgICAgZW5hYmxlT25Db250ZW50RWRpdGFibGUgPSBfcmVmMiRlbmFibGVPbkNvbnRlbnQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkZW5hYmxlT25Db250ZW50O1xuXG4gIHZhciByZWYgPSB1c2VSZWYobnVsbCk7IC8vIFRoZSByZXR1cm4gdmFsdWUgb2YgdGhpcyBjYWxsYmFjayBkZXRlcm1pbmVzIGlmIHRoZSBicm93c2VycyBkZWZhdWx0IGJlaGF2aW9yIGlzIHByZXZlbnRlZC5cblxuICB2YXIgbWVtb2lzZWRDYWxsYmFjayA9IHVzZUNhbGxiYWNrKGZ1bmN0aW9uIChrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpIHtcbiAgICB2YXIgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LCBfcmVmJGN1cnJlbnQ7XG5cbiAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoa2V5Ym9hcmRFdmVudCkpIHtcbiAgICAgIHJldHVybiAhZmlsdGVyUHJldmVudERlZmF1bHQ7XG4gICAgfSAvLyBDaGVjayB3aGV0aGVyIHRoZSBob3RrZXlzIHdhcyB0cmlnZ2VyZWQgaW5zaWRlIGFuIGlucHV0IGFuZCB0aGF0IGlucHV0IGlzIGVuYWJsZWQgb3IgaWYgaXQgd2FzIHRyaWdnZXJlZCBieSBhIGNvbnRlbnQgZWRpdGFibGUgdGFnIGFuZCBpdCBpcyBlbmFibGVkLlxuXG5cbiAgICBpZiAoaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dChrZXlib2FyZEV2ZW50KSAmJiAhdGFnRmlsdGVyKGtleWJvYXJkRXZlbnQsIGVuYWJsZU9uVGFncykgfHwgKF9rZXlib2FyZEV2ZW50JHRhcmdldCA9IGtleWJvYXJkRXZlbnQudGFyZ2V0KSAhPSBudWxsICYmIF9rZXlib2FyZEV2ZW50JHRhcmdldC5pc0NvbnRlbnRFZGl0YWJsZSAmJiAhZW5hYmxlT25Db250ZW50RWRpdGFibGUpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGlmIChyZWYuY3VycmVudCA9PT0gbnVsbCB8fCBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSByZWYuY3VycmVudCB8fCAoX3JlZiRjdXJyZW50ID0gcmVmLmN1cnJlbnQpICE9IG51bGwgJiYgX3JlZiRjdXJyZW50LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpKSB7XG4gICAgICBjYWxsYmFjayhrZXlib2FyZEV2ZW50LCBob3RrZXlzRXZlbnQpO1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LCBkZXBzID8gW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdLmNvbmNhdChkZXBzKSA6IFtyZWYsIGVuYWJsZU9uVGFncywgZmlsdGVyXSk7XG4gIHVzZUVmZmVjdChmdW5jdGlvbiAoKSB7XG4gICAgaWYgKCFlbmFibGVkKSB7XG4gICAgICBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEluIHRoaXMgY2FzZSBrZXlkb3duIGlzIGxpa2VseSB1bmRlZmluZWQsIHNvIHdlIHNldCBpdCB0byBmYWxzZSwgc2luY2UgaG90a2V5cyBuZWVkcyB0aGUgYGtleWRvd25gIGtleSB0byBoYXZlIGEgdmFsdWUuXG5cblxuICAgIGlmIChrZXl1cCAmJiBrZXlkb3duICE9PSB0cnVlKSB7XG4gICAgICBvcHRpb25zLmtleWRvd24gPSBmYWxzZTtcbiAgICB9XG5cbiAgICBob3RrZXlzKGtleXMsIG9wdGlvbnMgfHwge30sIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4gaG90a2V5cy51bmJpbmQoa2V5cywgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgfTtcbiAgfSwgW21lbW9pc2VkQ2FsbGJhY2ssIGtleXMsIGVuYWJsZWRdKTtcbiAgcmV0dXJuIHJlZjtcbn1cblxudmFyIGlzSG90a2V5UHJlc3NlZCA9IGhvdGtleXMuaXNQcmVzc2VkO1xuXG5leHBvcnQgeyBpc0hvdGtleVByZXNzZWQsIHVzZUhvdGtleXMsIHVzZUlzSG90a2V5UHJlc3NlZCB9O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9cmVhY3QtaG90a2V5cy1ob29rLmVzbS5qcy5tYXBcbiIsImltcG9ydCB7IFB1cmVDb21wb25lbnQgfSBmcm9tICdyZWFjdCc7XG5cbmZ1bmN0aW9uIGlzSW50ZWdlcih2YWx1ZSkge1xuICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyAmJiBpc0Zpbml0ZSh2YWx1ZSkgJiYgTWF0aC5mbG9vcih2YWx1ZSkgPT09IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBpc1JhbmdlVmlzaWJsZShfcmVmKSB7XG4gIHZhciBsYXN0UmVuZGVyZWRTdGFydEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gX3JlZi5sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgcmV0dXJuICEoc3RhcnRJbmRleCA+IGxhc3RSZW5kZXJlZFN0b3BJbmRleCB8fCBzdG9wSW5kZXggPCBsYXN0UmVuZGVyZWRTdGFydEluZGV4KTtcbn1cblxuZnVuY3Rpb24gc2NhbkZvclVubG9hZGVkUmFuZ2VzKF9yZWYpIHtcbiAgdmFyIGlzSXRlbUxvYWRlZCA9IF9yZWYuaXNJdGVtTG9hZGVkLFxuICAgICAgaXRlbUNvdW50ID0gX3JlZi5pdGVtQ291bnQsXG4gICAgICBtaW5pbXVtQmF0Y2hTaXplID0gX3JlZi5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgc3RhcnRJbmRleCA9IF9yZWYuc3RhcnRJbmRleCxcbiAgICAgIHN0b3BJbmRleCA9IF9yZWYuc3RvcEluZGV4O1xuXG4gIHZhciB1bmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gIHZhciByYW5nZVN0YXJ0SW5kZXggPSBudWxsO1xuICB2YXIgcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuXG4gIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgdmFyIGxvYWRlZCA9IGlzSXRlbUxvYWRlZChfaW5kZXgpO1xuXG4gICAgaWYgKCFsb2FkZWQpIHtcbiAgICAgIHJhbmdlU3RvcEluZGV4ID0gX2luZGV4O1xuICAgICAgaWYgKHJhbmdlU3RhcnRJbmRleCA9PT0gbnVsbCkge1xuICAgICAgICByYW5nZVN0YXJ0SW5kZXggPSBfaW5kZXg7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChyYW5nZVN0b3BJbmRleCAhPT0gbnVsbCkge1xuICAgICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcblxuICAgICAgcmFuZ2VTdGFydEluZGV4ID0gcmFuZ2VTdG9wSW5kZXggPSBudWxsO1xuICAgIH1cbiAgfVxuXG4gIC8vIElmIDpyYW5nZVN0b3BJbmRleCBpcyBub3QgbnVsbCBpdCBtZWFucyB3ZSBoYXZlbid0IHJhbiBvdXQgb2YgdW5sb2FkZWQgcm93cy5cbiAgLy8gU2NhbiBmb3J3YXJkIHRvIHRyeSBmaWxsaW5nIG91ciA6bWluaW11bUJhdGNoU2l6ZS5cbiAgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgdmFyIHBvdGVudGlhbFN0b3BJbmRleCA9IE1hdGgubWluKE1hdGgubWF4KHJhbmdlU3RvcEluZGV4LCByYW5nZVN0YXJ0SW5kZXggKyBtaW5pbXVtQmF0Y2hTaXplIC0gMSksIGl0ZW1Db3VudCAtIDEpO1xuXG4gICAgZm9yICh2YXIgX2luZGV4MiA9IHJhbmdlU3RvcEluZGV4ICsgMTsgX2luZGV4MiA8PSBwb3RlbnRpYWxTdG9wSW5kZXg7IF9pbmRleDIrKykge1xuICAgICAgaWYgKCFpc0l0ZW1Mb2FkZWQoX2luZGV4MikpIHtcbiAgICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXgyO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdW5sb2FkZWRSYW5nZXMucHVzaChyYW5nZVN0YXJ0SW5kZXgsIHJhbmdlU3RvcEluZGV4KTtcbiAgfVxuXG4gIC8vIENoZWNrIHRvIHNlZSBpZiBvdXIgZmlyc3QgcmFuZ2UgZW5kZWQgcHJlbWF0dXJlbHkuXG4gIC8vIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQgc2NhbiBiYWNrd2FyZHMgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAodW5sb2FkZWRSYW5nZXMubGVuZ3RoKSB7XG4gICAgd2hpbGUgKHVubG9hZGVkUmFuZ2VzWzFdIC0gdW5sb2FkZWRSYW5nZXNbMF0gKyAxIDwgbWluaW11bUJhdGNoU2l6ZSAmJiB1bmxvYWRlZFJhbmdlc1swXSA+IDApIHtcbiAgICAgIHZhciBfaW5kZXgzID0gdW5sb2FkZWRSYW5nZXNbMF0gLSAxO1xuXG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgzKSkge1xuICAgICAgICB1bmxvYWRlZFJhbmdlc1swXSA9IF9pbmRleDM7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gdW5sb2FkZWRSYW5nZXM7XG59XG5cbnZhciBjbGFzc0NhbGxDaGVjayA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgQ29uc3RydWN0b3IpIHtcbiAgaWYgKCEoaW5zdGFuY2UgaW5zdGFuY2VvZiBDb25zdHJ1Y3RvcikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpO1xuICB9XG59O1xuXG52YXIgY3JlYXRlQ2xhc3MgPSBmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBwcm9wcykge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcHJvcHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBkZXNjcmlwdG9yID0gcHJvcHNbaV07XG4gICAgICBkZXNjcmlwdG9yLmVudW1lcmFibGUgPSBkZXNjcmlwdG9yLmVudW1lcmFibGUgfHwgZmFsc2U7XG4gICAgICBkZXNjcmlwdG9yLmNvbmZpZ3VyYWJsZSA9IHRydWU7XG4gICAgICBpZiAoXCJ2YWx1ZVwiIGluIGRlc2NyaXB0b3IpIGRlc2NyaXB0b3Iud3JpdGFibGUgPSB0cnVlO1xuICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgZGVzY3JpcHRvci5rZXksIGRlc2NyaXB0b3IpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIHByb3RvUHJvcHMsIHN0YXRpY1Byb3BzKSB7XG4gICAgaWYgKHByb3RvUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IucHJvdG90eXBlLCBwcm90b1Byb3BzKTtcbiAgICBpZiAoc3RhdGljUHJvcHMpIGRlZmluZVByb3BlcnRpZXMoQ29uc3RydWN0b3IsIHN0YXRpY1Byb3BzKTtcbiAgICByZXR1cm4gQ29uc3RydWN0b3I7XG4gIH07XG59KCk7XG5cbnZhciBpbmhlcml0cyA9IGZ1bmN0aW9uIChzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBpZiAodHlwZW9mIHN1cGVyQ2xhc3MgIT09IFwiZnVuY3Rpb25cIiAmJiBzdXBlckNsYXNzICE9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIgKyB0eXBlb2Ygc3VwZXJDbGFzcyk7XG4gIH1cblxuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MgJiYgc3VwZXJDbGFzcy5wcm90b3R5cGUsIHtcbiAgICBjb25zdHJ1Y3Rvcjoge1xuICAgICAgdmFsdWU6IHN1YkNsYXNzLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH1cbiAgfSk7XG4gIGlmIChzdXBlckNsYXNzKSBPYmplY3Quc2V0UHJvdG90eXBlT2YgPyBPYmplY3Quc2V0UHJvdG90eXBlT2Yoc3ViQ2xhc3MsIHN1cGVyQ2xhc3MpIDogc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn07XG5cbnZhciBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuID0gZnVuY3Rpb24gKHNlbGYsIGNhbGwpIHtcbiAgaWYgKCFzZWxmKSB7XG4gICAgdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO1xuICB9XG5cbiAgcmV0dXJuIGNhbGwgJiYgKHR5cGVvZiBjYWxsID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBjYWxsID09PSBcImZ1bmN0aW9uXCIpID8gY2FsbCA6IHNlbGY7XG59O1xuXG52YXIgSW5maW5pdGVMb2FkZXIgPSBmdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgaW5oZXJpdHMoSW5maW5pdGVMb2FkZXIsIF9QdXJlQ29tcG9uZW50KTtcblxuICBmdW5jdGlvbiBJbmZpbml0ZUxvYWRlcigpIHtcbiAgICB2YXIgX3JlZjtcblxuICAgIHZhciBfdGVtcCwgX3RoaXMsIF9yZXQ7XG5cbiAgICBjbGFzc0NhbGxDaGVjayh0aGlzLCBJbmZpbml0ZUxvYWRlcik7XG5cbiAgICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICB9XG5cbiAgICByZXR1cm4gX3JldCA9IChfdGVtcCA9IChfdGhpcyA9IHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4odGhpcywgKF9yZWYgPSBJbmZpbml0ZUxvYWRlci5fX3Byb3RvX18gfHwgT2JqZWN0LmdldFByb3RvdHlwZU9mKEluZmluaXRlTG9hZGVyKSkuY2FsbC5hcHBseShfcmVmLCBbdGhpc10uY29uY2F0KGFyZ3MpKSksIF90aGlzKSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSAtMSwgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IC0xLCBfdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdLCBfdGhpcy5fb25JdGVtc1JlbmRlcmVkID0gZnVuY3Rpb24gKF9yZWYyKSB7XG4gICAgICB2YXIgdmlzaWJsZVN0YXJ0SW5kZXggPSBfcmVmMi52aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4ID0gX3JlZjIudmlzaWJsZVN0b3BJbmRleDtcblxuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgICAgaWYgKCFpc0ludGVnZXIodmlzaWJsZVN0YXJ0SW5kZXgpIHx8ICFpc0ludGVnZXIodmlzaWJsZVN0b3BJbmRleCkpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgb25JdGVtc1JlbmRlcmVkIHNpZ25hdHVyZTsgcGxlYXNlIHJlZmVyIHRvIEluZmluaXRlTG9hZGVyIGRvY3VtZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIF90aGlzLnByb3BzLmxvYWRNb3JlUm93cyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW5maW5pdGVMb2FkZXIgXCJsb2FkTW9yZVJvd3NcIiBwcm9wIGhhcyBiZWVuIHJlbmFtZWQgdG8gXCJsb2FkTW9yZUl0ZW1zXCIuJyk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSB2aXNpYmxlU3RhcnRJbmRleDtcbiAgICAgIF90aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXggPSB2aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBfdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh2aXNpYmxlU3RhcnRJbmRleCwgdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgfSwgX3RoaXMuX3NldFJlZiA9IGZ1bmN0aW9uIChsaXN0UmVmKSB7XG4gICAgICBfdGhpcy5fbGlzdFJlZiA9IGxpc3RSZWY7XG4gICAgfSwgX3RlbXApLCBwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuKF90aGlzLCBfcmV0KTtcbiAgfVxuXG4gIGNyZWF0ZUNsYXNzKEluZmluaXRlTG9hZGVyLCBbe1xuICAgIGtleTogJ3Jlc2V0bG9hZE1vcmVJdGVtc0NhY2hlJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUoKSB7XG4gICAgICB2YXIgYXV0b1JlbG9hZCA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogZmFsc2U7XG5cbiAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSBbXTtcblxuICAgICAgaWYgKGF1dG9SZWxvYWQpIHtcbiAgICAgICAgdGhpcy5fZW5zdXJlUm93c0xvYWRlZCh0aGlzLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LCB0aGlzLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgpO1xuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ2NvbXBvbmVudERpZE1vdW50JyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gY29tcG9uZW50RGlkTW91bnQoKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAodGhpcy5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbnZhbGlkIGxpc3QgcmVmOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ3JlbmRlcicsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBjaGlsZHJlbiA9IHRoaXMucHJvcHMuY2hpbGRyZW47XG5cblxuICAgICAgcmV0dXJuIGNoaWxkcmVuKHtcbiAgICAgICAgb25JdGVtc1JlbmRlcmVkOiB0aGlzLl9vbkl0ZW1zUmVuZGVyZWQsXG4gICAgICAgIHJlZjogdGhpcy5fc2V0UmVmXG4gICAgICB9KTtcbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfZW5zdXJlUm93c0xvYWRlZCcsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9lbnN1cmVSb3dzTG9hZGVkKHN0YXJ0SW5kZXgsIHN0b3BJbmRleCkge1xuICAgICAgdmFyIF9wcm9wcyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXNJdGVtTG9hZGVkID0gX3Byb3BzLmlzSXRlbUxvYWRlZCxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfcHJvcHMuaXRlbUNvdW50LFxuICAgICAgICAgIF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9IF9wcm9wcy5taW5pbXVtQmF0Y2hTaXplLFxuICAgICAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcHJvcHMkbWluaW11bUJhdGNoU2kgPT09IHVuZGVmaW5lZCA/IDEwIDogX3Byb3BzJG1pbmltdW1CYXRjaFNpLFxuICAgICAgICAgIF9wcm9wcyR0aHJlc2hvbGQgPSBfcHJvcHMudGhyZXNob2xkLFxuICAgICAgICAgIHRocmVzaG9sZCA9IF9wcm9wcyR0aHJlc2hvbGQgPT09IHVuZGVmaW5lZCA/IDE1IDogX3Byb3BzJHRocmVzaG9sZDtcblxuXG4gICAgICB2YXIgdW5sb2FkZWRSYW5nZXMgPSBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoe1xuICAgICAgICBpc0l0ZW1Mb2FkZWQ6IGlzSXRlbUxvYWRlZCxcbiAgICAgICAgaXRlbUNvdW50OiBpdGVtQ291bnQsXG4gICAgICAgIG1pbmltdW1CYXRjaFNpemU6IG1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgIHN0YXJ0SW5kZXg6IE1hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSB0aHJlc2hvbGQpLFxuICAgICAgICBzdG9wSW5kZXg6IE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0b3BJbmRleCArIHRocmVzaG9sZClcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBdm9pZCBjYWxsaW5nIGxvYWQtcm93cyB1bmxlc3MgcmFuZ2UgaGFzIGNoYW5nZWQuXG4gICAgICAvLyBUaGlzIHNob3VsZG4ndCBiZSBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpcyBtYXliZSBuaWNlIHRvIGRvLlxuICAgICAgaWYgKHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMubGVuZ3RoICE9PSB1bmxvYWRlZFJhbmdlcy5sZW5ndGggfHwgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5zb21lKGZ1bmN0aW9uIChzdGFydE9yU3RvcCwgaW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIHVubG9hZGVkUmFuZ2VzW2luZGV4XSAhPT0gc3RhcnRPclN0b3A7XG4gICAgICB9KSkge1xuICAgICAgICB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gdW5sb2FkZWRSYW5nZXM7XG4gICAgICAgIHRoaXMuX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcyk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnX2xvYWRVbmxvYWRlZFJhbmdlcycsXG4gICAgdmFsdWU6IGZ1bmN0aW9uIF9sb2FkVW5sb2FkZWRSYW5nZXModW5sb2FkZWRSYW5nZXMpIHtcbiAgICAgIHZhciBfdGhpczIgPSB0aGlzO1xuXG4gICAgICAvLyBsb2FkTW9yZVJvd3Mgd2FzIHJlbmFtZWQgdG8gbG9hZE1vcmVJdGVtcyBpbiB2MS4wLjM7IHdpbGwgYmUgcmVtb3ZlZCBpbiB2Mi4wXG4gICAgICB2YXIgbG9hZE1vcmVJdGVtcyA9IHRoaXMucHJvcHMubG9hZE1vcmVJdGVtcyB8fCB0aGlzLnByb3BzLmxvYWRNb3JlUm93cztcblxuICAgICAgdmFyIF9sb29wID0gZnVuY3Rpb24gX2xvb3AoaSkge1xuICAgICAgICB2YXIgc3RhcnRJbmRleCA9IHVubG9hZGVkUmFuZ2VzW2ldO1xuICAgICAgICB2YXIgc3RvcEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaSArIDFdO1xuICAgICAgICB2YXIgcHJvbWlzZSA9IGxvYWRNb3JlSXRlbXMoc3RhcnRJbmRleCwgc3RvcEluZGV4KTtcbiAgICAgICAgaWYgKHByb21pc2UgIT0gbnVsbCkge1xuICAgICAgICAgIHByb21pc2UudGhlbihmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAvLyBSZWZyZXNoIHRoZSB2aXNpYmxlIHJvd3MgaWYgYW55IG9mIHRoZW0gaGF2ZSBqdXN0IGJlZW4gbG9hZGVkLlxuICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIHRoZXkgd2lsbCByZW1haW4gaW4gdGhlaXIgdW5sb2FkZWQgdmlzdWFsIHN0YXRlLlxuICAgICAgICAgICAgaWYgKGlzUmFuZ2VWaXNpYmxlKHtcbiAgICAgICAgICAgICAgbGFzdFJlbmRlcmVkU3RhcnRJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdGFydEluZGV4LFxuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXg6IF90aGlzMi5fbGFzdFJlbmRlcmVkU3RvcEluZGV4LFxuICAgICAgICAgICAgICBzdGFydEluZGV4OiBzdGFydEluZGV4LFxuICAgICAgICAgICAgICBzdG9wSW5kZXg6IHN0b3BJbmRleFxuICAgICAgICAgICAgfSkpIHtcbiAgICAgICAgICAgICAgLy8gSGFuZGxlIGFuIHVubW91bnQgd2hpbGUgcHJvbWlzZXMgYXJlIHN0aWxsIGluIGZsaWdodC5cbiAgICAgICAgICAgICAgaWYgKF90aGlzMi5fbGlzdFJlZiA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgLy8gUmVzaXplIGNhY2hlZCByb3cgc2l6ZXMgZm9yIFZhcmlhYmxlU2l6ZUxpc3QsXG4gICAgICAgICAgICAgIC8vIG90aGVyd2lzZSBqdXN0IHJlLXJlbmRlciB0aGUgbGlzdC5cbiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLnJlc2V0QWZ0ZXJJbmRleChzdGFydEluZGV4LCB0cnVlKTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAvLyBIQUNLIHJlc2V0IHRlbXBvcmFyaWx5IGNhY2hlZCBpdGVtIHN0eWxlcyB0byBmb3JjZSBQdXJlQ29tcG9uZW50IHRvIHJlLXJlbmRlci5cbiAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHByZXR0eSBncm9zcywgYnV0IEknbSBva2F5IHdpdGggaXQgZm9yIG5vdy5cbiAgICAgICAgICAgICAgICAvLyBEb24ndCBqdWRnZSBtZS5cbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHVubG9hZGVkUmFuZ2VzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIF9sb29wKGkpO1xuICAgICAgfVxuICAgIH1cbiAgfV0pO1xuICByZXR1cm4gSW5maW5pdGVMb2FkZXI7XG59KFB1cmVDb21wb25lbnQpO1xuXG5leHBvcnQgZGVmYXVsdCBJbmZpbml0ZUxvYWRlcjtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9leHRlbmRzKCkge1xuICBfZXh0ZW5kcyA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gKHRhcmdldCkge1xuICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldO1xuXG4gICAgICBmb3IgKHZhciBrZXkgaW4gc291cmNlKSB7XG4gICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoc291cmNlLCBrZXkpKSB7XG4gICAgICAgICAgdGFyZ2V0W2tleV0gPSBzb3VyY2Vba2V5XTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0YXJnZXQ7XG4gIH07XG5cbiAgcmV0dXJuIF9leHRlbmRzLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2Fzc2VydFRoaXNJbml0aWFsaXplZChzZWxmKSB7XG4gIGlmIChzZWxmID09PSB2b2lkIDApIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gc2VsZjtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfaW5oZXJpdHNMb29zZShzdWJDbGFzcywgc3VwZXJDbGFzcykge1xuICBzdWJDbGFzcy5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKHN1cGVyQ2xhc3MucHJvdG90eXBlKTtcbiAgc3ViQ2xhc3MucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gc3ViQ2xhc3M7XG4gIHN1YkNsYXNzLl9fcHJvdG9fXyA9IHN1cGVyQ2xhc3M7XG59IiwidmFyIHNhZmVJc05hTiA9IE51bWJlci5pc05hTiB8fFxuICAgIGZ1bmN0aW9uIHBvbnlmaWxsKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIHZhbHVlICE9PSB2YWx1ZTtcbiAgICB9O1xuZnVuY3Rpb24gaXNFcXVhbChmaXJzdCwgc2Vjb25kKSB7XG4gICAgaWYgKGZpcnN0ID09PSBzZWNvbmQpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIGlmIChzYWZlSXNOYU4oZmlyc3QpICYmIHNhZmVJc05hTihzZWNvbmQpKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59XG5mdW5jdGlvbiBhcmVJbnB1dHNFcXVhbChuZXdJbnB1dHMsIGxhc3RJbnB1dHMpIHtcbiAgICBpZiAobmV3SW5wdXRzLmxlbmd0aCAhPT0gbGFzdElucHV0cy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5ld0lucHV0cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoIWlzRXF1YWwobmV3SW5wdXRzW2ldLCBsYXN0SW5wdXRzW2ldKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBtZW1vaXplT25lKHJlc3VsdEZuLCBpc0VxdWFsKSB7XG4gICAgaWYgKGlzRXF1YWwgPT09IHZvaWQgMCkgeyBpc0VxdWFsID0gYXJlSW5wdXRzRXF1YWw7IH1cbiAgICB2YXIgbGFzdFRoaXM7XG4gICAgdmFyIGxhc3RBcmdzID0gW107XG4gICAgdmFyIGxhc3RSZXN1bHQ7XG4gICAgdmFyIGNhbGxlZE9uY2UgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBtZW1vaXplZCgpIHtcbiAgICAgICAgdmFyIG5ld0FyZ3MgPSBbXTtcbiAgICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHtcbiAgICAgICAgICAgIG5ld0FyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbGVkT25jZSAmJiBsYXN0VGhpcyA9PT0gdGhpcyAmJiBpc0VxdWFsKG5ld0FyZ3MsIGxhc3RBcmdzKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgICAgIH1cbiAgICAgICAgbGFzdFJlc3VsdCA9IHJlc3VsdEZuLmFwcGx5KHRoaXMsIG5ld0FyZ3MpO1xuICAgICAgICBjYWxsZWRPbmNlID0gdHJ1ZTtcbiAgICAgICAgbGFzdFRoaXMgPSB0aGlzO1xuICAgICAgICBsYXN0QXJncyA9IG5ld0FyZ3M7XG4gICAgICAgIHJldHVybiBsYXN0UmVzdWx0O1xuICAgIH1cbiAgICByZXR1cm4gbWVtb2l6ZWQ7XG59XG5cbmV4cG9ydCBkZWZhdWx0IG1lbW9pemVPbmU7XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShzb3VyY2UsIGV4Y2x1ZGVkKSB7XG4gIGlmIChzb3VyY2UgPT0gbnVsbCkgcmV0dXJuIHt9O1xuICB2YXIgdGFyZ2V0ID0ge307XG4gIHZhciBzb3VyY2VLZXlzID0gT2JqZWN0LmtleXMoc291cmNlKTtcbiAgdmFyIGtleSwgaTtcblxuICBmb3IgKGkgPSAwOyBpIDwgc291cmNlS2V5cy5sZW5ndGg7IGkrKykge1xuICAgIGtleSA9IHNvdXJjZUtleXNbaV07XG4gICAgaWYgKGV4Y2x1ZGVkLmluZGV4T2Yoa2V5KSA+PSAwKSBjb250aW51ZTtcbiAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICB9XG5cbiAgcmV0dXJuIHRhcmdldDtcbn0iLCJpbXBvcnQgX2V4dGVuZHMgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcyc7XG5pbXBvcnQgX2Fzc2VydFRoaXNJbml0aWFsaXplZCBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQnO1xuaW1wb3J0IF9pbmhlcml0c0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2luaGVyaXRzTG9vc2UnO1xuaW1wb3J0IG1lbW9pemVPbmUgZnJvbSAnbWVtb2l6ZS1vbmUnO1xuaW1wb3J0IHsgY3JlYXRlRWxlbWVudCwgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcbmltcG9ydCBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlJztcblxuLy8gQW5pbWF0aW9uIGZyYW1lIGJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHNldFRpbWVvdXQuXG4vLyBJbnNwaXJlZCBieSBKb2UgTGFtYmVydCwgaHR0cHM6Ly9naXN0LmdpdGh1Yi5jb20vam9lbGFtYmVydC8xMDAyMTE2I2ZpbGUtcmVxdWVzdHRpbWVvdXQtanNcbnZhciBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA9IHR5cGVvZiBwZXJmb3JtYW5jZSA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIHBlcmZvcm1hbmNlLm5vdyA9PT0gJ2Z1bmN0aW9uJztcbnZhciBub3cgPSBoYXNOYXRpdmVQZXJmb3JtYW5jZU5vdyA/IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpO1xufSA6IGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIERhdGUubm93KCk7XG59O1xuZnVuY3Rpb24gY2FuY2VsVGltZW91dCh0aW1lb3V0SUQpIHtcbiAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGltZW91dElELmlkKTtcbn1cbmZ1bmN0aW9uIHJlcXVlc3RUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSkge1xuICB2YXIgc3RhcnQgPSBub3coKTtcblxuICBmdW5jdGlvbiB0aWNrKCkge1xuICAgIGlmIChub3coKSAtIHN0YXJ0ID49IGRlbGF5KSB7XG4gICAgICBjYWxsYmFjay5jYWxsKG51bGwpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aW1lb3V0SUQuaWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljayk7XG4gICAgfVxuICB9XG5cbiAgdmFyIHRpbWVvdXRJRCA9IHtcbiAgICBpZDogcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRpY2spXG4gIH07XG4gIHJldHVybiB0aW1lb3V0SUQ7XG59XG5cbnZhciBzaXplID0gLTE7IC8vIFRoaXMgdXRpbGl0eSBjb3BpZWQgZnJvbSBcImRvbS1oZWxwZXJzXCIgcGFja2FnZS5cblxuZnVuY3Rpb24gZ2V0U2Nyb2xsYmFyU2l6ZShyZWNhbGN1bGF0ZSkge1xuICBpZiAocmVjYWxjdWxhdGUgPT09IHZvaWQgMCkge1xuICAgIHJlY2FsY3VsYXRlID0gZmFsc2U7XG4gIH1cblxuICBpZiAoc2l6ZSA9PT0gLTEgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIHN0eWxlID0gZGl2LnN0eWxlO1xuICAgIHN0eWxlLndpZHRoID0gJzUwcHgnO1xuICAgIHN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBzdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZGl2KTtcbiAgICBzaXplID0gZGl2Lm9mZnNldFdpZHRoIC0gZGl2LmNsaWVudFdpZHRoO1xuICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTtcbiAgfVxuXG4gIHJldHVybiBzaXplO1xufVxudmFyIGNhY2hlZFJUTFJlc3VsdCA9IG51bGw7IC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbi8vIENocm9tZSBkb2VzIG5vdCBzZWVtIHRvIGFkaGVyZTsgaXRzIHNjcm9sbExlZnQgdmFsdWVzIGFyZSBwb3NpdGl2ZSAobWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuLy8gU2FmYXJpJ3MgZWxhc3RpYyBib3VuY2UgbWFrZXMgZGV0ZWN0aW5nIHRoaXMgZXZlbiBtb3JlIGNvbXBsaWNhdGVkIHdydCBwb3RlbnRpYWwgZmFsc2UgcG9zaXRpdmVzLlxuLy8gVGhlIHNhZmVzdCB3YXkgdG8gY2hlY2sgdGhpcyBpcyB0byBpbnRlbnRpb25hbGx5IHNldCBhIG5lZ2F0aXZlIG9mZnNldCxcbi8vIGFuZCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBzdWJzZXF1ZW50IFwic2Nyb2xsXCIgZXZlbnQgbWF0Y2hlcyB0aGUgbmVnYXRpdmUgb2Zmc2V0LlxuLy8gSWYgaXQgZG9lcyBub3QgbWF0Y2gsIHRoZW4gd2UgY2FuIGFzc3VtZSBhIG5vbi1zdGFuZGFyZCBSVEwgc2Nyb2xsIGltcGxlbWVudGF0aW9uLlxuXG5mdW5jdGlvbiBnZXRSVExPZmZzZXRUeXBlKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChjYWNoZWRSVExSZXN1bHQgPT09IG51bGwgfHwgcmVjYWxjdWxhdGUpIHtcbiAgICB2YXIgb3V0ZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgb3V0ZXJTdHlsZSA9IG91dGVyRGl2LnN0eWxlO1xuICAgIG91dGVyU3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5oZWlnaHQgPSAnNTBweCc7XG4gICAgb3V0ZXJTdHlsZS5vdmVyZmxvdyA9ICdzY3JvbGwnO1xuICAgIG91dGVyU3R5bGUuZGlyZWN0aW9uID0gJ3J0bCc7XG4gICAgdmFyIGlubmVyRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgdmFyIGlubmVyU3R5bGUgPSBpbm5lckRpdi5zdHlsZTtcbiAgICBpbm5lclN0eWxlLndpZHRoID0gJzEwMHB4JztcbiAgICBpbm5lclN0eWxlLmhlaWdodCA9ICcxMDBweCc7XG4gICAgb3V0ZXJEaXYuYXBwZW5kQ2hpbGQoaW5uZXJEaXYpO1xuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQob3V0ZXJEaXYpO1xuXG4gICAgaWYgKG91dGVyRGl2LnNjcm9sbExlZnQgPiAwKSB7XG4gICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtZGVzY2VuZGluZyc7XG4gICAgfSBlbHNlIHtcbiAgICAgIG91dGVyRGl2LnNjcm9sbExlZnQgPSAxO1xuXG4gICAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA9PT0gMCkge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAnbmVnYXRpdmUnO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVkUlRMUmVzdWx0ID0gJ3Bvc2l0aXZlLWFzY2VuZGluZyc7XG4gICAgICB9XG4gICAgfVxuXG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChvdXRlckRpdik7XG4gICAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbiAgfVxuXG4gIHJldHVybiBjYWNoZWRSVExSZXN1bHQ7XG59XG5cbnZhciBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KF9yZWYpIHtcbiAgdmFyIGNvbHVtbkluZGV4ID0gX3JlZi5jb2x1bW5JbmRleCxcbiAgICAgIGRhdGEgPSBfcmVmLmRhdGEsXG4gICAgICByb3dJbmRleCA9IF9yZWYucm93SW5kZXg7XG4gIHJldHVybiByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG59OyAvLyBJbiBERVYgbW9kZSwgdGhpcyBTZXQgaGVscHMgdXMgb25seSBsb2cgYSB3YXJuaW5nIG9uY2UgcGVyIGNvbXBvbmVudCBpbnN0YW5jZS5cbi8vIFRoaXMgYXZvaWRzIHNwYW1taW5nIHRoZSBjb25zb2xlIGV2ZXJ5IHRpbWUgYSByZW5kZXIgaGFwcGVucy5cblxuXG52YXIgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lID0gbnVsbDtcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiB3aW5kb3cuV2Vha1NldCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzVGFnTmFtZSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUdyaWRDb21wb25lbnQoX3JlZjIpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0Q29sdW1uT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uT2Zmc2V0LFxuICAgICAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYyLmdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4ID0gX3JlZjIuZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGdldENvbHVtbldpZHRoID0gX3JlZjIuZ2V0Q29sdW1uV2lkdGgsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCA9IF9yZWYyLmdldEVzdGltYXRlZFRvdGFsV2lkdGgsXG4gICAgICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQsXG4gICAgICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQgPSBfcmVmMi5nZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRSb3dIZWlnaHQgPSBfcmVmMi5nZXRSb3dIZWlnaHQsXG4gICAgICBnZXRSb3dPZmZzZXQgPSBfcmVmMi5nZXRSb3dPZmZzZXQsXG4gICAgICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgaW5pdEluc3RhbmNlUHJvcHMgPSBfcmVmMi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmMi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYyLnZhbGlkYXRlUHJvcHM7XG4gIHJldHVybiBfY2xhc3MgPSAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKF9QdXJlQ29tcG9uZW50KSB7XG4gICAgX2luaGVyaXRzTG9vc2UoR3JpZCwgX1B1cmVDb21wb25lbnQpO1xuXG4gICAgLy8gQWx3YXlzIHVzZSBleHBsaWNpdCBjb25zdHJ1Y3RvciBmb3IgUmVhY3QgY29tcG9uZW50cy5cbiAgICAvLyBJdCBwcm9kdWNlcyBsZXNzIGNvZGUgYWZ0ZXIgdHJhbnNwaWxhdGlvbi4gKCMyNilcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jb25zdHJ1Y3RvclxuICAgIGZ1bmN0aW9uIEdyaWQocHJvcHMpIHtcbiAgICAgIHZhciBfdGhpcztcblxuICAgICAgX3RoaXMgPSBfUHVyZUNvbXBvbmVudC5jYWxsKHRoaXMsIHByb3BzKSB8fCB0aGlzO1xuICAgICAgX3RoaXMuX2luc3RhbmNlUHJvcHMgPSBpbml0SW5zdGFuY2VQcm9wcyhfdGhpcy5wcm9wcywgX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcykpO1xuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuICAgICAgX3RoaXMuX291dGVyUmVmID0gdm9pZCAwO1xuICAgICAgX3RoaXMuc3RhdGUgPSB7XG4gICAgICAgIGluc3RhbmNlOiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSxcbiAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlLFxuICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbExlZnQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsTGVmdCA6IDAsXG4gICAgICAgIHNjcm9sbFRvcDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2UsXG4gICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCdcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgb3ZlcnNjYW5Sb3dTdGFydEluZGV4LCBvdmVyc2NhblJvd1N0b3BJbmRleCwgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIHZpc2libGVDb2x1bW5TdG9wSW5kZXgsIHZpc2libGVSb3dTdGFydEluZGV4LCB2aXNpYmxlUm93U3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleDogb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4OiBvdmVyc2NhbkNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0YXJ0SW5kZXg6IG92ZXJzY2FuUm93U3RhcnRJbmRleCxcbiAgICAgICAgICBvdmVyc2NhblJvd1N0b3BJbmRleDogb3ZlcnNjYW5Sb3dTdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXg6IHZpc2libGVDb2x1bW5TdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVDb2x1bW5TdG9wSW5kZXg6IHZpc2libGVDb2x1bW5TdG9wSW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0YXJ0SW5kZXg6IHZpc2libGVSb3dTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVSb3dTdG9wSW5kZXg6IHZpc2libGVSb3dTdG9wSW5kZXhcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoc2Nyb2xsTGVmdCwgc2Nyb2xsVG9wLCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uOiB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChyb3dJbmRleCwgY29sdW1uSW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBjb2x1bW5XaWR0aCA9IF90aGlzJHByb3BzLmNvbHVtbldpZHRoLFxuICAgICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICAgICAgcm93SGVpZ2h0ID0gX3RoaXMkcHJvcHMucm93SGVpZ2h0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGNvbHVtbldpZHRoLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbiwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiByb3dIZWlnaHQpO1xuXG4gICAgICAgIHZhciBrZXkgPSByb3dJbmRleCArIFwiOlwiICsgY29sdW1uSW5kZXg7XG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoa2V5KSkge1xuICAgICAgICAgIHN0eWxlID0gaXRlbVN0eWxlQ2FjaGVba2V5XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldENvbHVtbk9mZnNldChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTtcblxuICAgICAgICAgIHZhciBpc1J0bCA9IGRpcmVjdGlvbiA9PT0gJ3J0bCc7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVba2V5XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IF9vZmZzZXQsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBfb2Zmc2V0IDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiBnZXRSb3dPZmZzZXQoX3RoaXMucHJvcHMsIHJvd0luZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyksXG4gICAgICAgICAgICBoZWlnaHQ6IGdldFJvd0hlaWdodChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIHdpZHRoOiBnZXRDb2x1bW5XaWR0aChfdGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGwgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgdmFyIF9ldmVudCRjdXJyZW50VGFyZ2V0ID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIGNsaWVudFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICBzY3JvbGxMZWZ0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsTGVmdCxcbiAgICAgICAgICAgIHNjcm9sbFRvcCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFRvcCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsV2lkdGg7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgIC8vIFNvIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBkZXRlcm1pbmUgd2hpY2ggYnJvd3NlciBiZWhhdmlvciB3ZSdyZSBkZWFsaW5nIHdpdGgsIGFuZCBjb252ZXJ0IGJhc2VkIG9uIGl0LlxuXG4gICAgICAgICAgdmFyIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY2FsY3VsYXRlZFNjcm9sbExlZnQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHNjcm9sbFRvcCwgc2Nyb2xsSGVpZ2h0IC0gY2xpZW50SGVpZ2h0KSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbExlZnQ6IGNhbGN1bGF0ZWRTY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wOiBjYWxjdWxhdGVkU2Nyb2xsVG9wLFxuICAgICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vdXRlclJlZlNldHRlciA9IGZ1bmN0aW9uIChyZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gX3RoaXMucHJvcHMub3V0ZXJSZWY7XG4gICAgICAgIF90aGlzLl9vdXRlclJlZiA9IHJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIG91dGVyUmVmID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgb3V0ZXJSZWYocmVmKTtcbiAgICAgICAgfSBlbHNlIGlmIChvdXRlclJlZiAhPSBudWxsICYmIHR5cGVvZiBvdXRlclJlZiA9PT0gJ29iamVjdCcgJiYgb3V0ZXJSZWYuaGFzT3duUHJvcGVydHkoJ2N1cnJlbnQnKSkge1xuICAgICAgICAgIG91dGVyUmVmLmN1cnJlbnQgPSByZWY7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgICBjYW5jZWxUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gcmVxdWVzdFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcsIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIEdyaWQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gR3JpZC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhfcmVmMykge1xuICAgICAgdmFyIHNjcm9sbExlZnQgPSBfcmVmMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF9yZWYzLnNjcm9sbFRvcDtcblxuICAgICAgaWYgKHNjcm9sbExlZnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzY3JvbGxUb3AgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICBzY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHNjcm9sbExlZnQgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbExlZnQgPSBwcmV2U3RhdGUuc2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzY3JvbGxUb3AgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHNjcm9sbFRvcCA9IHByZXZTdGF0ZS5zY3JvbGxUb3A7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbExlZnQgPT09IHNjcm9sbExlZnQgJiYgcHJldlN0YXRlLnNjcm9sbFRvcCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxMZWZ0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHRydWUsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxUb3AgPCBzY3JvbGxUb3AgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShfcmVmNCkge1xuICAgICAgdmFyIF9yZWY0JGFsaWduID0gX3JlZjQuYWxpZ24sXG4gICAgICAgICAgYWxpZ24gPSBfcmVmNCRhbGlnbiA9PT0gdm9pZCAwID8gJ2F1dG8nIDogX3JlZjQkYWxpZ24sXG4gICAgICAgICAgY29sdW1uSW5kZXggPSBfcmVmNC5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY0LnJvd0luZGV4O1xuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczIuY29sdW1uQ291bnQsXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHMyLmhlaWdodCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzMi5yb3dDb3VudCxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzMi53aWR0aDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSBnZXRTY3JvbGxiYXJTaXplKCk7XG5cbiAgICAgIGlmIChjb2x1bW5JbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbHVtbkluZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uSW5kZXgsIGNvbHVtbkNvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAocm93SW5kZXggIT09IHVuZGVmaW5lZCkge1xuICAgICAgICByb3dJbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0luZGV4LCByb3dDb3VudCAtIDEpKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxXaWR0aCA9IGdldEVzdGltYXRlZFRvdGFsV2lkdGgodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldyxcbiAgICAgIC8vIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuXG4gICAgICB2YXIgaG9yaXpvbnRhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbFdpZHRoID4gd2lkdGggPyBzY3JvbGxiYXJTaXplIDogMDtcbiAgICAgIHZhciB2ZXJ0aWNhbFNjcm9sbGJhclNpemUgPSBlc3RpbWF0ZWRUb3RhbEhlaWdodCA+IGhlaWdodCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdGhpcy5zY3JvbGxUbyh7XG4gICAgICAgIHNjcm9sbExlZnQ6IGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCB2ZXJ0aWNhbFNjcm9sbGJhclNpemUpIDogc2Nyb2xsTGVmdCxcbiAgICAgICAgc2Nyb2xsVG9wOiByb3dJbmRleCAhPT0gdW5kZWZpbmVkID8gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIHJvd0luZGV4LCBhbGlnbiwgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzLCBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxUb3BcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxMZWZ0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxMZWZ0LFxuICAgICAgICAgIGluaXRpYWxTY3JvbGxUb3AgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbFRvcDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsTGVmdCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbExlZnQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxUb3AgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbFRvcDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBkaXJlY3Rpb24gPSB0aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlMi5zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ7XG5cbiAgICAgIGlmIChzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsTGVmdCk7XG4gICAgICAgIH1cblxuICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBNYXRoLm1heCgwLCBzY3JvbGxUb3ApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczQuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM0LmNsYXNzTmFtZSxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNC5jb2x1bW5Db3VudCxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczQuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNC5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczQuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczQuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM0JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5IDogX3RoaXMkcHJvcHM0JGl0ZW1LZXksXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNC5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNC5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczQucm93Q291bnQsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczQuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczQudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczQud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBjb2x1bW5TdGFydEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzBdLFxuICAgICAgICAgIGNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUlsxXTtcblxuICAgICAgdmFyIF90aGlzJF9nZXRWZXJ0aWNhbFJhbiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIHJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMF0sXG4gICAgICAgICAgcm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuWzFdO1xuXG4gICAgICB2YXIgaXRlbXMgPSBbXTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCkge1xuICAgICAgICBmb3IgKHZhciBfcm93SW5kZXggPSByb3dTdGFydEluZGV4OyBfcm93SW5kZXggPD0gcm93U3RvcEluZGV4OyBfcm93SW5kZXgrKykge1xuICAgICAgICAgIGZvciAodmFyIF9jb2x1bW5JbmRleCA9IGNvbHVtblN0YXJ0SW5kZXg7IF9jb2x1bW5JbmRleCA8PSBjb2x1bW5TdG9wSW5kZXg7IF9jb2x1bW5JbmRleCsrKSB7XG4gICAgICAgICAgICBpdGVtcy5wdXNoKGNyZWF0ZUVsZW1lbnQoY2hpbGRyZW4sIHtcbiAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB1c2VJc1Njcm9sbGluZyA/IGlzU2Nyb2xsaW5nIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICBrZXk6IGl0ZW1LZXkoe1xuICAgICAgICAgICAgICAgIGNvbHVtbkluZGV4OiBfY29sdW1uSW5kZXgsXG4gICAgICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleFxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgcm93SW5kZXg6IF9yb3dJbmRleCxcbiAgICAgICAgICAgICAgc3R5bGU6IHRoaXMuX2dldEl0ZW1TdHlsZShfcm93SW5kZXgsIF9jb2x1bW5JbmRleClcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHJldHVybiBjcmVhdGVFbGVtZW50KG91dGVyRWxlbWVudFR5cGUgfHwgb3V0ZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNsYXNzTmFtZTogY2xhc3NOYW1lLFxuICAgICAgICBvblNjcm9sbDogdGhpcy5fb25TY3JvbGwsXG4gICAgICAgIHJlZjogdGhpcy5fb3V0ZXJSZWZTZXR0ZXIsXG4gICAgICAgIHN0eWxlOiBfZXh0ZW5kcyh7XG4gICAgICAgICAgcG9zaXRpb246ICdyZWxhdGl2ZScsXG4gICAgICAgICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgICAgICAgd2lkdGg6IHdpZHRoLFxuICAgICAgICAgIG92ZXJmbG93OiAnYXV0bycsXG4gICAgICAgICAgV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmc6ICd0b3VjaCcsXG4gICAgICAgICAgd2lsbENoYW5nZTogJ3RyYW5zZm9ybScsXG4gICAgICAgICAgZGlyZWN0aW9uOiBkaXJlY3Rpb25cbiAgICAgICAgfSwgc3R5bGUpXG4gICAgICB9LCBjcmVhdGVFbGVtZW50KGlubmVyRWxlbWVudFR5cGUgfHwgaW5uZXJUYWdOYW1lIHx8ICdkaXYnLCB7XG4gICAgICAgIGNoaWxkcmVuOiBpdGVtcyxcbiAgICAgICAgcmVmOiBpbm5lclJlZixcbiAgICAgICAgc3R5bGU6IHtcbiAgICAgICAgICBoZWlnaHQ6IGVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBlc3RpbWF0ZWRUb3RhbFdpZHRoXG4gICAgICAgIH1cbiAgICAgIH0pKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9jYWxsUHJvcHNDYWxsYmFja3MgPSBmdW5jdGlvbiBfY2FsbFByb3BzQ2FsbGJhY2tzKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczUuY29sdW1uQ291bnQsXG4gICAgICAgICAgb25JdGVtc1JlbmRlcmVkID0gX3RoaXMkcHJvcHM1Lm9uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgICBvblNjcm9sbCA9IF90aGlzJHByb3BzNS5vblNjcm9sbCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNS5yb3dDb3VudDtcblxuICAgICAgaWYgKHR5cGVvZiBvbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgaWYgKGNvbHVtbkNvdW50ID4gMCAmJiByb3dDb3VudCA+IDApIHtcbiAgICAgICAgICB2YXIgX3RoaXMkX2dldEhvcml6b250YWxSMiA9IHRoaXMuX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbM107XG5cbiAgICAgICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuMiA9IHRoaXMuX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuUm93U3RvcEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdGFydEluZGV4ID0gX3RoaXMkX2dldFZlcnRpY2FsUmFuMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVSb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4LCBfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgsIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXgsIF9vdmVyc2NhblJvd1N0b3BJbmRleCwgX3Zpc2libGVDb2x1bW5TdGFydEluZGV4LCBfdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgX3Zpc2libGVSb3dTdGFydEluZGV4LCBfdmlzaWJsZVJvd1N0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBvblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLmhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMy5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgX3Njcm9sbFRvcCA9IF90aGlzJHN0YXRlMy5zY3JvbGxUb3AsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUzLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCxcbiAgICAgICAgICAgIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbExlZnQsIF9zY3JvbGxUb3AsIF9ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLCBfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24sIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpO1xuICAgICAgfVxuICAgIH0gLy8gTGF6aWx5IGNyZWF0ZSBhbmQgY2FjaGUgaXRlbSBzdHlsZXMgd2hpbGUgc2Nyb2xsaW5nLFxuICAgIC8vIFNvIHRoYXQgcHVyZSBjb21wb25lbnQgc0NVIHdpbGwgcHJldmVudCByZS1yZW5kZXJzLlxuICAgIC8vIFdlIG1haW50YWluIHRoaXMgY2FjaGUsIGFuZCBwYXNzIGEgc3R5bGUgcHJvcCByYXRoZXIgdGhhbiBpbmRleCxcbiAgICAvLyBTbyB0aGF0IExpc3QgY2FuIGNsZWFyIGNhY2hlZCBzdHlsZXMgYW5kIGZvcmNlIGl0ZW0gcmUtcmVuZGVyIGlmIG5lY2Vzc2FyeS5cbiAgICA7XG5cbiAgICBfcHJvdG8uX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczYuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uc0NvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNi5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTQgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTQuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNC5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGU0LnNjcm9sbExlZnQ7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Db2x1bW5Db3VudCB8fCBvdmVyc2NhbkNvbHVtbnNDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsTGVmdCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gT3ZlcnNjYW4gYnkgb25lIGl0ZW0gaW4gZWFjaCBkaXJlY3Rpb24gc28gdGhhdCB0YWIvZm9jdXMgd29ya3MuXG4gICAgICAvLyBJZiB0aGVyZSBpc24ndCBhdCBsZWFzdCBvbmUgZXh0cmEgaXRlbSwgdGFiIGxvb3BzIGJhY2sgYXJvdW5kLlxuXG4gICAgICB2YXIgb3ZlcnNjYW5CYWNrd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIF9wcm90by5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczcgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM3LmNvbHVtbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd0NvdW50ID0gX3RoaXMkcHJvcHM3Lm92ZXJzY2FuUm93Q291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICAgICAgcm93Q291bnQgPSBfdGhpcyRwcm9wczcucm93Q291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGU1ID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlNS5pc1Njcm9sbGluZyxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNS52ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZTUuc2Nyb2xsVG9wO1xuICAgICAgdmFyIG92ZXJzY2FuQ291bnRSZXNvbHZlZCA9IG92ZXJzY2FuUm93Q291bnQgfHwgb3ZlcnNjYW5Sb3dzQ291bnQgfHwgb3ZlcnNjYW5Db3VudCB8fCAxO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPT09IDAgfHwgcm93Q291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICB2YXIgb3ZlcnNjYW5Gb3J3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0b3BJbmRleCArIG92ZXJzY2FuRm9yd2FyZCkpLCBzdGFydEluZGV4LCBzdG9wSW5kZXhdO1xuICAgIH07XG5cbiAgICByZXR1cm4gR3JpZDtcbiAgfShQdXJlQ29tcG9uZW50KSwgX2NsYXNzLmRlZmF1bHRQcm9wcyA9IHtcbiAgICBkaXJlY3Rpb246ICdsdHInLFxuICAgIGl0ZW1EYXRhOiB1bmRlZmluZWQsXG4gICAgdXNlSXNTY3JvbGxpbmc6IGZhbHNlXG4gIH0sIF9jbGFzcztcbn1cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWY1LCBfcmVmNikge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmNS5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWY1LmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWY1LmhlaWdodCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWY1LmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWY1Lm91dGVyVGFnTmFtZSxcbiAgICAgIG92ZXJzY2FuQ29sdW1uc0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICBvdmVyc2NhbkNvdW50ID0gX3JlZjUub3ZlcnNjYW5Db3VudCxcbiAgICAgIG92ZXJzY2FuUm93c0NvdW50ID0gX3JlZjUub3ZlcnNjYW5Sb3dzQ291bnQsXG4gICAgICB3aWR0aCA9IF9yZWY1LndpZHRoO1xuICB2YXIgaW5zdGFuY2UgPSBfcmVmNi5pbnN0YW5jZTtcblxuICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgIGlmICh0eXBlb2Ygb3ZlcnNjYW5Db3VudCA9PT0gJ251bWJlcicpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudC5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBvdmVyc2NhbkNvdW50IHByb3AgaGFzIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvbHVtbnNDb3VudCA9PT0gJ251bWJlcicgfHwgdHlwZW9mIG92ZXJzY2FuUm93c0NvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ICYmICFkZXZXYXJuaW5nc092ZXJzY2FuUm93c0NvbHVtbnNDb3VudC5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ29sdW1uc0NvdW50IGFuZCBvdmVyc2NhblJvd3NDb3VudCBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBvdmVyc2NhbkNvbHVtbkNvdW50IGFuZCBvdmVyc2NhblJvd0NvdW50IHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lICYmICFkZXZXYXJuaW5nc1RhZ05hbWUuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnR3JpZHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFID0gNTA7XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWYsIF9yZWYyKSB7XG4gIHZhciByb3dDb3VudCA9IF9yZWYucm93Q291bnQ7XG4gIHZhciByb3dNZXRhZGF0YU1hcCA9IF9yZWYyLnJvd01ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0ID0gX3JlZjIuZXN0aW1hdGVkUm93SGVpZ2h0LFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXggPSBfcmVmMi5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkUm93SW5kZXggPj0gcm93Q291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IHJvd0NvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IHJvd01ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZFJvd0luZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSByb3dDb3VudCAtIGxhc3RNZWFzdXJlZFJvd0luZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkUm93SGVpZ2h0O1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmMywgX3JlZjQpIHtcbiAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjMuY29sdW1uQ291bnQ7XG4gIHZhciBjb2x1bW5NZXRhZGF0YU1hcCA9IF9yZWY0LmNvbHVtbk1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkQ29sdW1uV2lkdGggPSBfcmVmNC5lc3RpbWF0ZWRDb2x1bW5XaWR0aCxcbiAgICAgIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gX3JlZjQubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID49IGNvbHVtbkNvdW50KSB7XG4gICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBjb2x1bW5Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBjb2x1bW5NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRDb2x1bW5JbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gIH1cblxuICB2YXIgbnVtVW5tZWFzdXJlZEl0ZW1zID0gY29sdW1uQ291bnQgLSBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZENvbHVtbldpZHRoO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBnZXRJdGVtTWV0YWRhdGEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBpdGVtU2l6ZSwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgaXRlbVNpemUgPSBwcm9wcy5jb2x1bW5XaWR0aDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLnJvd0hlaWdodDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gaW5kZXg7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXggPSBpbmRleDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0gPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0oaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1NZXRhZGF0YU1hcCwgbGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGl0ZW1UeXBlID09PSAnY29sdW1uJykge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4O1xuICB9IGVsc2Uge1xuICAgIGl0ZW1NZXRhZGF0YU1hcCA9IGluc3RhbmNlUHJvcHMucm93TWV0YWRhdGFNYXA7XG4gICAgbGFzdE1lYXN1cmVkSW5kZXggPSBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB9XG5cbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGxhc3RNZWFzdXJlZEluZGV4LCAwLCBvZmZzZXQpO1xuICB9IGVsc2Uge1xuICAgIC8vIElmIHdlIGhhdmVuJ3QgeWV0IG1lYXN1cmVkIHRoaXMgaGlnaCwgZmFsbGJhY2sgdG8gYW4gZXhwb25lbnRpYWwgc2VhcmNoIHdpdGggYW4gaW5uZXIgYmluYXJ5IHNlYXJjaC5cbiAgICAvLyBUaGUgZXhwb25lbnRpYWwgc2VhcmNoIGF2b2lkcyBwcmUtY29tcHV0aW5nIHNpemVzIGZvciB0aGUgZnVsbCBzZXQgb2YgaXRlbXMgYXMgYSBiaW5hcnkgc2VhcmNoIHdvdWxkLlxuICAgIC8vIFRoZSBvdmVyYWxsIGNvbXBsZXhpdHkgZm9yIHRoaXMgYXBwcm9hY2ggaXMgTyhsb2cgbikuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBtaWRkbGUsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcblxuICAgIGlmIChjdXJyZW50T2Zmc2V0ID09PSBvZmZzZXQpIHtcbiAgICAgIHJldHVybiBtaWRkbGU7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgICBsb3cgPSBtaWRkbGUgKyAxO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA+IG9mZnNldCkge1xuICAgICAgaGlnaCA9IG1pZGRsZSAtIDE7XG4gICAgfVxuICB9XG5cbiAgaWYgKGxvdyA+IDApIHtcbiAgICByZXR1cm4gbG93IC0gMTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gMDtcbiAgfVxufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy5jb2x1bW5Db3VudCA6IHByb3BzLnJvd0NvdW50O1xuICB2YXIgaW50ZXJ2YWwgPSAxO1xuXG4gIHdoaWxlIChpbmRleCA8IGl0ZW1Db3VudCAmJiBnZXRJdGVtTWV0YWRhdGEoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgdmFyIHNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBwcm9wcy53aWR0aCA6IHByb3BzLmhlaWdodDtcbiAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gaXRlbVR5cGUgPT09ICdjb2x1bW4nID8gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChwcm9wcywgaW5zdGFuY2VQcm9wcykgOiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodChwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpdGVtTWV0YWRhdGEub2Zmc2V0IC0gc2l6ZSArIHNjcm9sbGJhclNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSk7XG5cbiAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICB9IGVsc2Uge1xuICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICB9XG4gIH1cblxuICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgY2FzZSAnc3RhcnQnOlxuICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgIGNhc2UgJ2VuZCc6XG4gICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgY2FzZSAnY2VudGVyJzpcbiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICBjYXNlICdhdXRvJzpcbiAgICBkZWZhdWx0OlxuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgIH1cblxuICB9XG59O1xuXG52YXIgVmFyaWFibGVTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdjb2x1bW4nLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsTGVmdCk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBwcm9wcy5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbExlZnQgKyB3aWR0aDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IGNvbHVtbkNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgnY29sdW1uJywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHMuY29sdW1uTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0OiBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgcmV0dXJuIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpO1xuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ3JvdycsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldFJvd09mZnNldDogZnVuY3Rpb24gZ2V0Um93T2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuICB9LFxuICBnZXRSb3dIZWlnaHQ6IGZ1bmN0aW9uIGdldFJvd0hlaWdodChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSgncm93JywgcHJvcHMsIGluc3RhbmNlUHJvcHMsIHNjcm9sbFRvcCk7XG4gIH0sXG4gIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgocHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciByb3dDb3VudCA9IHByb3BzLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxUb3AgKyBoZWlnaHQ7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCByb3dDb3VudCAtIDEgJiYgb2Zmc2V0IDwgbWF4T2Zmc2V0KSB7XG4gICAgICBzdG9wSW5kZXgrKztcbiAgICAgIG9mZnNldCArPSBnZXRJdGVtTWV0YWRhdGEoJ3JvdycsIHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNSA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY1LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmNS5lc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBjb2x1bW5NZXRhZGF0YU1hcDoge30sXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aDogZXN0aW1hdGVkQ29sdW1uV2lkdGggfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgZXN0aW1hdGVkUm93SGVpZ2h0OiBlc3RpbWF0ZWRSb3dIZWlnaHQgfHwgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg6IC0xLFxuICAgICAgbGFzdE1lYXN1cmVkUm93SW5kZXg6IC0xLFxuICAgICAgcm93TWV0YWRhdGFNYXA6IHt9XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJDb2x1bW5JbmRleCA9IGZ1bmN0aW9uIChjb2x1bW5JbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICBjb2x1bW5JbmRleDogY29sdW1uSW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJSb3dJbmRleCA9IGZ1bmN0aW9uIChyb3dJbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMoe1xuICAgICAgICByb3dJbmRleDogcm93SW5kZXgsXG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlOiBzaG91bGRGb3JjZVVwZGF0ZVxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRpY2VzID0gZnVuY3Rpb24gKF9yZWY2KSB7XG4gICAgICB2YXIgY29sdW1uSW5kZXggPSBfcmVmNi5jb2x1bW5JbmRleCxcbiAgICAgICAgICByb3dJbmRleCA9IF9yZWY2LnJvd0luZGV4LFxuICAgICAgICAgIF9yZWY2JHNob3VsZEZvcmNlVXBkYSA9IF9yZWY2LnNob3VsZEZvcmNlVXBkYXRlLFxuICAgICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gX3JlZjYkc2hvdWxkRm9yY2VVcGRhID09PSB2b2lkIDAgPyB0cnVlIDogX3JlZjYkc2hvdWxkRm9yY2VVcGRhO1xuXG4gICAgICBpZiAodHlwZW9mIGNvbHVtbkluZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleCwgY29sdW1uSW5kZXggLSAxKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXgsIHJvd0luZGV4IC0gMSk7XG4gICAgICB9IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG5cbiAgICAgIGluc3RhbmNlLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG5cbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgICBpbnN0YW5jZS5mb3JjZVVwZGF0ZSgpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcztcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogZmFsc2UsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjcpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmNy5jb2x1bW5XaWR0aCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjcucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGNvbHVtbldpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNvbHVtbldpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9IGVsc2UgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBmdW5jdGlvbi4gJyArIChcIlxcXCJcIiArIChyb3dIZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2Ygcm93SGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxID0gMTUwO1xuXG52YXIgZGVmYXVsdEl0ZW1LZXkkMSA9IGZ1bmN0aW9uIGRlZmF1bHRJdGVtS2V5KGluZGV4LCBkYXRhKSB7XG4gIHJldHVybiBpbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc0RpcmVjdGlvbiA9IG51bGw7XG52YXIgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzRGlyZWN0aW9uID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lJDEgPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBjcmVhdGVMaXN0Q29tcG9uZW50KF9yZWYpIHtcbiAgdmFyIF9jbGFzcztcblxuICB2YXIgZ2V0SXRlbU9mZnNldCA9IF9yZWYuZ2V0SXRlbU9mZnNldCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsU2l6ZSA9IF9yZWYuZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgZ2V0SXRlbVNpemUgPSBfcmVmLmdldEl0ZW1TaXplLFxuICAgICAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQgPSBfcmVmLmdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50LFxuICAgICAgZ2V0U3RhcnRJbmRleEZvck9mZnNldCA9IF9yZWYuZ2V0U3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmLmdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYuaW5pdEluc3RhbmNlUHJvcHMsXG4gICAgICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlID0gX3JlZi5zaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlLFxuICAgICAgdmFsaWRhdGVQcm9wcyA9IF9yZWYudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShMaXN0LCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gTGlzdChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIHNjcm9sbERpcmVjdGlvbjogJ2ZvcndhcmQnLFxuICAgICAgICBzY3JvbGxPZmZzZXQ6IHR5cGVvZiBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgOiAwLFxuICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICB9O1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKG92ZXJzY2FuU3RhcnRJbmRleCwgb3ZlcnNjYW5TdG9wSW5kZXgsIHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQoe1xuICAgICAgICAgIG92ZXJzY2FuU3RhcnRJbmRleDogb3ZlcnNjYW5TdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuU3RvcEluZGV4OiBvdmVyc2NhblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RhcnRJbmRleDogdmlzaWJsZVN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVN0b3BJbmRleDogdmlzaWJsZVN0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxEaXJlY3Rpb24sIHNjcm9sbE9mZnNldCwgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKSB7XG4gICAgICAgIHJldHVybiBfdGhpcy5wcm9wcy5vblNjcm9sbCh7XG4gICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBzY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWRcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSB2b2lkIDA7XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGUgPSBmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgdmFyIF90aGlzJHByb3BzID0gX3RoaXMucHJvcHMsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICBpdGVtU2l6ZSA9IF90aGlzJHByb3BzLml0ZW1TaXplLFxuICAgICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMubGF5b3V0O1xuXG4gICAgICAgIHZhciBpdGVtU3R5bGVDYWNoZSA9IF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZShzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGl0ZW1TaXplLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGxheW91dCwgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSAmJiBkaXJlY3Rpb24pO1xuXG4gICAgICAgIHZhciBzdHlsZTtcblxuICAgICAgICBpZiAoaXRlbVN0eWxlQ2FjaGUuaGFzT3duUHJvcGVydHkoaW5kZXgpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtpbmRleF07XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFyIF9vZmZzZXQgPSBnZXRJdGVtT2Zmc2V0KF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIHNpemUgPSBnZXRJdGVtU2l6ZShfdGhpcy5wcm9wcywgaW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICB2YXIgb2Zmc2V0SG9yaXpvbnRhbCA9IGlzSG9yaXpvbnRhbCA/IF9vZmZzZXQgOiAwO1xuICAgICAgICAgIGl0ZW1TdHlsZUNhY2hlW2luZGV4XSA9IHN0eWxlID0ge1xuICAgICAgICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICAgICAgICBsZWZ0OiBpc1J0bCA/IHVuZGVmaW5lZCA6IG9mZnNldEhvcml6b250YWwsXG4gICAgICAgICAgICByaWdodDogaXNSdGwgPyBvZmZzZXRIb3Jpem9udGFsIDogdW5kZWZpbmVkLFxuICAgICAgICAgICAgdG9wOiAhaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDAsXG4gICAgICAgICAgICBoZWlnaHQ6ICFpc0hvcml6b250YWwgPyBzaXplIDogJzEwMCUnLFxuICAgICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJSdcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAoXywgX18sIF9fXykge1xuICAgICAgICByZXR1cm4ge307XG4gICAgICB9KTtcblxuICAgICAgX3RoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbExlZnQpIHtcbiAgICAgICAgICAgIC8vIFNjcm9sbCBwb3NpdGlvbiBtYXkgaGF2ZSBiZWVuIHVwZGF0ZWQgYnkgY0RNL2NEVSxcbiAgICAgICAgICAgIC8vIEluIHdoaWNoIGNhc2Ugd2UgZG9uJ3QgbmVlZCB0byB0cmlnZ2VyIGFub3RoZXIgcmVuZGVyLFxuICAgICAgICAgICAgLy8gQW5kIHdlIGRvbid0IHdhbnQgdG8gdXBkYXRlIHN0YXRlLmlzU2Nyb2xsaW5nLlxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIGRpcmVjdGlvbiA9IF90aGlzLnByb3BzLmRpcmVjdGlvbjtcbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsTGVmdDtcblxuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIEl0J3MgYWxzbyBlYXNpZXIgZm9yIHRoaXMgY29tcG9uZW50IGlmIHdlIGNvbnZlcnQgb2Zmc2V0cyB0byB0aGUgc2FtZSBmb3JtYXQgYXMgdGhleSB3b3VsZCBiZSBpbiBmb3IgbHRyLlxuICAgICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gLXNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtZGVzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsT2Zmc2V0LCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoKSk7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGlzU2Nyb2xsaW5nOiB0cnVlLFxuICAgICAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsT2Zmc2V0IDwgc2Nyb2xsTGVmdCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxWZXJ0aWNhbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQyID0gZXZlbnQuY3VycmVudFRhcmdldCxcbiAgICAgICAgICAgIGNsaWVudEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5jbGllbnRIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLnNjcm9sbFRvcDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmcgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZSh7XG4gICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0sIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAvLyBDbGVhciBzdHlsZSBjYWNoZSBhZnRlciBzdGF0ZSB1cGRhdGUgaGFzIGJlZW4gY29tbWl0dGVkLlxuICAgICAgICAgIC8vIFRoaXMgd2F5IHdlIGRvbid0IGJyZWFrIHB1cmUgc0NVIGZvciBpdGVtcyB0aGF0IGRvbid0IHVzZSBpc1Njcm9sbGluZyBwYXJhbS5cbiAgICAgICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEsIG51bGwpO1xuICAgICAgICB9KTtcbiAgICAgIH07XG5cbiAgICAgIHJldHVybiBfdGhpcztcbiAgICB9XG5cbiAgICBMaXN0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyA9IGZ1bmN0aW9uIGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyhuZXh0UHJvcHMsIHByZXZTdGF0ZSkge1xuICAgICAgdmFsaWRhdGVTaGFyZWRQcm9wcyQxKG5leHRQcm9wcywgcHJldlN0YXRlKTtcbiAgICAgIHZhbGlkYXRlUHJvcHMobmV4dFByb3BzKTtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH07XG5cbiAgICB2YXIgX3Byb3RvID0gTGlzdC5wcm90b3R5cGU7XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG8gPSBmdW5jdGlvbiBzY3JvbGxUbyhzY3JvbGxPZmZzZXQpIHtcbiAgICAgIHNjcm9sbE9mZnNldCA9IE1hdGgubWF4KDAsIHNjcm9sbE9mZnNldCk7XG4gICAgICB0aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPT09IHNjcm9sbE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxPZmZzZXQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZVxuICAgICAgICB9O1xuICAgICAgfSwgdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgfTtcblxuICAgIF9wcm90by5zY3JvbGxUb0l0ZW0gPSBmdW5jdGlvbiBzY3JvbGxUb0l0ZW0oaW5kZXgsIGFsaWduKSB7XG4gICAgICBpZiAoYWxpZ24gPT09IHZvaWQgMCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH1cblxuICAgICAgdmFyIF90aGlzJHByb3BzMiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHMyLml0ZW1Db3VudCxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczIubGF5b3V0O1xuICAgICAgdmFyIHNjcm9sbE9mZnNldCA9IHRoaXMuc3RhdGUuc2Nyb2xsT2Zmc2V0O1xuICAgICAgaW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSkpOyAvLyBUaGUgc2Nyb2xsYmFyIHNpemUgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBzY3JvbGxpbmcgYW4gaXRlbSBpbnRvIHZpZXcsIHRvIGVuc3VyZSBpdCdzIGZ1bGx5IHZpc2libGUuXG4gICAgICAvLyBCdXQgd2Ugb25seSBuZWVkIHRvIGFjY291bnQgZm9yIGl0cyBzaXplIHdoZW4gaXQncyBhY3R1YWxseSB2aXNpYmxlLlxuICAgICAgLy8gVGhpcyBpcyBhbiBlZGdlIGNhc2UgZm9yIGxpc3RzOyBub3JtYWxseSB0aGV5IG9ubHkgc2Nyb2xsIGluIHRoZSBkb21pbmFudCBkaXJlY3Rpb24uXG5cbiAgICAgIHZhciBzY3JvbGxiYXJTaXplID0gMDtcblxuICAgICAgaWYgKHRoaXMuX291dGVyUmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChsYXlvdXQgPT09ICd2ZXJ0aWNhbCcpIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGggPiBvdXRlclJlZi5jbGllbnRXaWR0aCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgc2Nyb2xsYmFyU2l6ZSA9IG91dGVyUmVmLnNjcm9sbEhlaWdodCA+IG91dGVyUmVmLmNsaWVudEhlaWdodCA/IGdldFNjcm9sbGJhclNpemUoKSA6IDA7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5zY3JvbGxUbyhnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkTW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczMgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzMy5kaXJlY3Rpb24sXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbE9mZnNldCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMy5sYXlvdXQ7XG5cbiAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbE9mZnNldCA9PT0gJ251bWJlcicgJiYgdGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IGluaXRpYWxTY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsVG9wID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudERpZFVwZGF0ZSA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZFVwZGF0ZSgpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczQgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHM0LmxheW91dDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZSA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCA9IF90aGlzJHN0YXRlLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgICAgICAgICAgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgICAvLyBTbyB3ZSBuZWVkIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIG1pbWljIGl0LlxuICAgICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgICAgY2FzZSAnbmVnYXRpdmUnOlxuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSAtc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWFzY2VuZGluZyc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHZhciBjbGllbnRXaWR0aCA9IG91dGVyUmVmLmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGxXaWR0aCA9IG91dGVyUmVmLnNjcm9sbFdpZHRoO1xuICAgICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgdGhpcy5fY2FsbFByb3BzQ2FsbGJhY2tzKCk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudFdpbGxVbm1vdW50KCkge1xuICAgICAgaWYgKHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgIT09IG51bGwpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgX3Byb3RvLnJlbmRlciA9IGZ1bmN0aW9uIHJlbmRlcigpIHtcbiAgICAgIHZhciBfdGhpcyRwcm9wczUgPSB0aGlzLnByb3BzLFxuICAgICAgICAgIGNoaWxkcmVuID0gX3RoaXMkcHJvcHM1LmNoaWxkcmVuLFxuICAgICAgICAgIGNsYXNzTmFtZSA9IF90aGlzJHByb3BzNS5jbGFzc05hbWUsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM1LmRpcmVjdGlvbixcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczUuaGVpZ2h0LFxuICAgICAgICAgIGlubmVyUmVmID0gX3RoaXMkcHJvcHM1LmlubmVyUmVmLFxuICAgICAgICAgIGlubmVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUuaW5uZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBpbm5lclRhZ05hbWUgPSBfdGhpcyRwcm9wczUuaW5uZXJUYWdOYW1lLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF90aGlzJHByb3BzNS5pdGVtQ291bnQsXG4gICAgICAgICAgaXRlbURhdGEgPSBfdGhpcyRwcm9wczUuaXRlbURhdGEsXG4gICAgICAgICAgX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUuaXRlbUtleSxcbiAgICAgICAgICBpdGVtS2V5ID0gX3RoaXMkcHJvcHM1JGl0ZW1LZXkgPT09IHZvaWQgMCA/IGRlZmF1bHRJdGVtS2V5JDEgOiBfdGhpcyRwcm9wczUkaXRlbUtleSxcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczUubGF5b3V0LFxuICAgICAgICAgIG91dGVyRWxlbWVudFR5cGUgPSBfdGhpcyRwcm9wczUub3V0ZXJFbGVtZW50VHlwZSxcbiAgICAgICAgICBvdXRlclRhZ05hbWUgPSBfdGhpcyRwcm9wczUub3V0ZXJUYWdOYW1lLFxuICAgICAgICAgIHN0eWxlID0gX3RoaXMkcHJvcHM1LnN0eWxlLFxuICAgICAgICAgIHVzZUlzU2Nyb2xsaW5nID0gX3RoaXMkcHJvcHM1LnVzZUlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHM1LndpZHRoO1xuICAgICAgdmFyIGlzU2Nyb2xsaW5nID0gdGhpcy5zdGF0ZS5pc1Njcm9sbGluZzsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgIHZhciBvblNjcm9sbCA9IGlzSG9yaXpvbnRhbCA/IHRoaXMuX29uU2Nyb2xsSG9yaXpvbnRhbCA6IHRoaXMuX29uU2Nyb2xsVmVydGljYWw7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgc3RhcnRJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFswXSxcbiAgICAgICAgICBzdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmRbMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICBmb3IgKHZhciBfaW5kZXggPSBzdGFydEluZGV4OyBfaW5kZXggPD0gc3RvcEluZGV4OyBfaW5kZXgrKykge1xuICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgZGF0YTogaXRlbURhdGEsXG4gICAgICAgICAgICBrZXk6IGl0ZW1LZXkoX2luZGV4LCBpdGVtRGF0YSksXG4gICAgICAgICAgICBpbmRleDogX2luZGV4LFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9pbmRleClcbiAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gUmVhZCB0aGlzIHZhbHVlIEFGVEVSIGl0ZW1zIGhhdmUgYmVlbiBjcmVhdGVkLFxuICAgICAgLy8gU28gdGhlaXIgYWN0dWFsIHNpemVzIChpZiB2YXJpYWJsZSkgYXJlIHRha2VuIGludG8gY29uc2lkZXJhdGlvbi5cblxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxTaXplID0gZ2V0RXN0aW1hdGVkVG90YWxTaXplKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiBvblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogaXNIb3Jpem9udGFsID8gJzEwMCUnIDogZXN0aW1hdGVkVG90YWxTaXplLFxuICAgICAgICAgIHBvaW50ZXJFdmVudHM6IGlzU2Nyb2xsaW5nID8gJ25vbmUnIDogdW5kZWZpbmVkLFxuICAgICAgICAgIHdpZHRoOiBpc0hvcml6b250YWwgPyBlc3RpbWF0ZWRUb3RhbFNpemUgOiAnMTAwJSdcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICBpZiAodHlwZW9mIHRoaXMucHJvcHMub25JdGVtc1JlbmRlcmVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBpdGVtQ291bnQgPSB0aGlzLnByb3BzLml0ZW1Db3VudDtcblxuICAgICAgICBpZiAoaXRlbUNvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyID0gdGhpcy5fZ2V0UmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlswXSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuU3RvcEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsxXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kMlsyXSxcbiAgICAgICAgICAgICAgX3Zpc2libGVTdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzNdO1xuXG4gICAgICAgICAgdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZChfb3ZlcnNjYW5TdGFydEluZGV4LCBfb3ZlcnNjYW5TdG9wSW5kZXgsIF92aXNpYmxlU3RhcnRJbmRleCwgX3Zpc2libGVTdG9wSW5kZXgpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vblNjcm9sbCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YXIgX3RoaXMkc3RhdGUyID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICAgIF9zY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgICAgX3Njcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMi5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgICBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgICB0aGlzLl9jYWxsT25TY3JvbGwoX3Njcm9sbERpcmVjdGlvbiwgX3Njcm9sbE9mZnNldCwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0UmFuZ2VUb1JlbmRlciA9IGZ1bmN0aW9uIF9nZXRSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNiA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM2Lml0ZW1Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ291bnQ7XG4gICAgICB2YXIgX3RoaXMkc3RhdGUzID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBpc1Njcm9sbGluZyA9IF90aGlzJHN0YXRlMy5pc1Njcm9sbGluZyxcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbE9mZnNldCA9IF90aGlzJHN0YXRlMy5zY3JvbGxPZmZzZXQ7XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPT09IDApIHtcbiAgICAgICAgcmV0dXJuIFswLCAwLCAwLCAwXTtcbiAgICAgIH1cblxuICAgICAgdmFyIHN0YXJ0SW5kZXggPSBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KHRoaXMucHJvcHMsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICB2YXIgc3RvcEluZGV4ID0gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCh0aGlzLnByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IHNjcm9sbERpcmVjdGlvbiA9PT0gJ2JhY2t3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnZm9yd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50KSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBMaXN0O1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICBsYXlvdXQ6ICd2ZXJ0aWNhbCcsXG4gICAgb3ZlcnNjYW5Db3VudDogMixcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufSAvLyBOT1RFOiBJIGNvbnNpZGVyZWQgZnVydGhlciB3cmFwcGluZyBpbmRpdmlkdWFsIGl0ZW1zIHdpdGggYSBwdXJlIExpc3RJdGVtIGNvbXBvbmVudC5cbi8vIFRoaXMgd291bGQgYXZvaWQgZXZlciBjYWxsaW5nIHRoZSByZW5kZXIgZnVuY3Rpb24gZm9yIHRoZSBzYW1lIGluZGV4IG1vcmUgdGhhbiBvbmNlLFxuLy8gQnV0IGl0IHdvdWxkIGFsc28gYWRkIHRoZSBvdmVyaGVhZCBvZiBhIGxvdCBvZiBjb21wb25lbnRzL2ZpYmVycy5cbi8vIEkgYXNzdW1lIHBlb3BsZSBhbHJlYWR5IGRvIHRoaXMgKHJlbmRlciBmdW5jdGlvbiByZXR1cm5pbmcgYSBjbGFzcyBjb21wb25lbnQpLFxuLy8gU28gbXkgZG9pbmcgaXQgd291bGQganVzdCB1bm5lY2Vzc2FyaWx5IGRvdWJsZSB0aGUgd3JhcHBlcnMuXG5cbnZhciB2YWxpZGF0ZVNoYXJlZFByb3BzJDEgPSBmdW5jdGlvbiB2YWxpZGF0ZVNoYXJlZFByb3BzKF9yZWYyLCBfcmVmMykge1xuICB2YXIgY2hpbGRyZW4gPSBfcmVmMi5jaGlsZHJlbixcbiAgICAgIGRpcmVjdGlvbiA9IF9yZWYyLmRpcmVjdGlvbixcbiAgICAgIGhlaWdodCA9IF9yZWYyLmhlaWdodCxcbiAgICAgIGxheW91dCA9IF9yZWYyLmxheW91dCxcbiAgICAgIGlubmVyVGFnTmFtZSA9IF9yZWYyLmlubmVyVGFnTmFtZSxcbiAgICAgIG91dGVyVGFnTmFtZSA9IF9yZWYyLm91dGVyVGFnTmFtZSxcbiAgICAgIHdpZHRoID0gX3JlZjIud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWYzLmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKGlubmVyVGFnTmFtZSAhPSBudWxsIHx8IG91dGVyVGFnTmFtZSAhPSBudWxsKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NUYWdOYW1lJDEgJiYgIWRldldhcm5pbmdzVGFnTmFtZSQxLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NUYWdOYW1lJDEuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgaW5uZXJUYWdOYW1lIGFuZCBvdXRlclRhZ05hbWUgcHJvcHMgaGF2ZSBiZWVuIGRlcHJlY2F0ZWQuICcgKyAnUGxlYXNlIHVzZSB0aGUgaW5uZXJFbGVtZW50VHlwZSBhbmQgb3V0ZXJFbGVtZW50VHlwZSBwcm9wcyBpbnN0ZWFkLicpO1xuICAgICAgfVxuICAgIH0gLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcblxuICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgaWYgKGRldldhcm5pbmdzRGlyZWN0aW9uICYmICFkZXZXYXJuaW5nc0RpcmVjdGlvbi5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgZGV2V2FybmluZ3NEaXJlY3Rpb24uYWRkKGluc3RhbmNlKTtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBkaXJlY3Rpb24gcHJvcCBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgKGRlZmF1bHQpIG9yIFwicnRsXCIuICcgKyAnUGxlYXNlIHVzZSB0aGUgbGF5b3V0IHByb3AgdG8gc3BlY2lmeSBcInZlcnRpY2FsXCIgKGRlZmF1bHQpIG9yIFwiaG9yaXpvbnRhbFwiIG9yaWVudGF0aW9uLicpO1xuICAgICAgICB9XG5cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgJ2x0cic6XG4gICAgICBjYXNlICdydGwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiZGlyZWN0aW9uXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImx0clwiIG9yIFwicnRsXCIuICcgKyAoXCJcXFwiXCIgKyBkaXJlY3Rpb24gKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIHN3aXRjaCAobGF5b3V0KSB7XG4gICAgICBjYXNlICdob3Jpem9udGFsJzpcbiAgICAgIGNhc2UgJ3ZlcnRpY2FsJzpcbiAgICAgICAgLy8gVmFsaWQgdmFsdWVzXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImxheW91dFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBlaXRoZXIgXCJob3Jpem9udGFsXCIgb3IgXCJ2ZXJ0aWNhbFwiLiAnICsgKFwiXFxcIlwiICsgbGF5b3V0ICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBpZiAoY2hpbGRyZW4gPT0gbnVsbCkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjaGlsZHJlblwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIFJlYWN0IGNvbXBvbmVudC4gJyArIChcIlxcXCJcIiArIChjaGlsZHJlbiA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjaGlsZHJlbikgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChpc0hvcml6b250YWwgJiYgdHlwZW9mIHdpZHRoICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJ3aWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0hvcml6b250YWwgbGlzdHMgbXVzdCBzcGVjaWZ5IGEgbnVtYmVyIGZvciB3aWR0aC4gJyArIChcIlxcXCJcIiArICh3aWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiB3aWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH0gZWxzZSBpZiAoIWlzSG9yaXpvbnRhbCAmJiB0eXBlb2YgaGVpZ2h0ICE9PSAnbnVtYmVyJykge1xuICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJoZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWZXJ0aWNhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIGhlaWdodC4gJyArIChcIlxcXCJcIiArIChoZWlnaHQgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaGVpZ2h0KSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuICB9XG59O1xuXG52YXIgREVGQVVMVF9FU1RJTUFURURfSVRFTV9TSVpFJDEgPSA1MDtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSQxID0gZnVuY3Rpb24gZ2V0SXRlbU1ldGFkYXRhKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICB2YXIgX3JlZiA9IHByb3BzLFxuICAgICAgaXRlbVNpemUgPSBfcmVmLml0ZW1TaXplO1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG5cbiAgaWYgKGluZGV4ID4gbGFzdE1lYXN1cmVkSW5kZXgpIHtcbiAgICB2YXIgb2Zmc2V0ID0gMDtcblxuICAgIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgICB2YXIgaXRlbU1ldGFkYXRhID0gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XTtcbiAgICAgIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB9XG5cbiAgICBmb3IgKHZhciBpID0gbGFzdE1lYXN1cmVkSW5kZXggKyAxOyBpIDw9IGluZGV4OyBpKyspIHtcbiAgICAgIHZhciBzaXplID0gaXRlbVNpemUoaSk7XG4gICAgICBpdGVtTWV0YWRhdGFNYXBbaV0gPSB7XG4gICAgICAgIG9mZnNldDogb2Zmc2V0LFxuICAgICAgICBzaXplOiBzaXplXG4gICAgICB9O1xuICAgICAgb2Zmc2V0ICs9IHNpemU7XG4gICAgfVxuXG4gICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IGluZGV4O1xuICB9XG5cbiAgcmV0dXJuIGl0ZW1NZXRhZGF0YU1hcFtpbmRleF07XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW0ocHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciBsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID0gbGFzdE1lYXN1cmVkSW5kZXggPiAwID8gaXRlbU1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZEluZGV4XS5vZmZzZXQgOiAwO1xuXG4gIGlmIChsYXN0TWVhc3VyZWRJdGVtT2Zmc2V0ID49IG9mZnNldCkge1xuICAgIC8vIElmIHdlJ3ZlIGFscmVhZHkgbWVhc3VyZWQgaXRlbXMgd2l0aGluIHRoaXMgcmFuZ2UganVzdCB1c2UgYSBiaW5hcnkgc2VhcmNoIGFzIGl0J3MgZmFzdGVyLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5tYXgoMCwgbGFzdE1lYXN1cmVkSW5kZXgpLCBvZmZzZXQpO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEgPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGhpZ2gsIGxvdywgb2Zmc2V0KSB7XG4gIHdoaWxlIChsb3cgPD0gaGlnaCkge1xuICAgIHZhciBtaWRkbGUgPSBsb3cgKyBNYXRoLmZsb29yKChoaWdoIC0gbG93KSAvIDIpO1xuICAgIHZhciBjdXJyZW50T2Zmc2V0ID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoKHByb3BzLCBpbnN0YW5jZVByb3BzLCBpbmRleCwgb2Zmc2V0KSB7XG4gIHZhciBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykub2Zmc2V0IDwgb2Zmc2V0KSB7XG4gICAgaW5kZXggKz0gaW50ZXJ2YWw7XG4gICAgaW50ZXJ2YWwgKj0gMjtcbiAgfVxuXG4gIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMShwcm9wcywgaW5zdGFuY2VQcm9wcywgTWF0aC5taW4oaW5kZXgsIGl0ZW1Db3VudCAtIDEpLCBNYXRoLmZsb29yKGluZGV4IC8gMiksIG9mZnNldCk7XG59O1xuXG52YXIgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYyLCBfcmVmMykge1xuICB2YXIgaXRlbUNvdW50ID0gX3JlZjIuaXRlbUNvdW50O1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwID0gX3JlZjMuaXRlbU1ldGFkYXRhTWFwLFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemUgPSBfcmVmMy5lc3RpbWF0ZWRJdGVtU2l6ZSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gX3JlZjMubGFzdE1lYXN1cmVkSW5kZXg7XG4gIHZhciB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSBpdGVtQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGl0ZW1Db3VudCAtIDE7XG4gIH1cblxuICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBpdGVtQ291bnQgLSBsYXN0TWVhc3VyZWRJbmRleCAtIDE7XG4gIHZhciB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcyA9IG51bVVubWVhc3VyZWRJdGVtcyAqIGVzdGltYXRlZEl0ZW1TaXplO1xuICByZXR1cm4gdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zICsgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXM7XG59O1xuXG52YXIgVmFyaWFibGVTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5pdGVtTWV0YWRhdGFNYXBbaW5kZXhdLnNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZ2V0RXN0aW1hdGVkVG90YWxTaXplLFxuICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQocHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBsYXlvdXQgPSBwcm9wcy5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gcHJvcHMud2lkdGg7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcyk7IC8vIEdldCBlc3RpbWF0ZWQgdG90YWwgc2l6ZSBhZnRlciBJdGVtTWV0YWRhdGEgaXMgY29tcHV0ZWQsXG4gICAgLy8gVG8gZW5zdXJlIGl0IHJlZmxlY3RzIGFjdHVhbCBtZWFzdXJlbWVudHMgaW5zdGVhZCBvZiBqdXN0IGVzdGltYXRlcy5cblxuICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUocHJvcHMsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihlc3RpbWF0ZWRUb3RhbFNpemUgLSBzaXplLCBpdGVtTWV0YWRhdGEub2Zmc2V0KSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgaXRlbU1ldGFkYXRhLnNpemUgKyBzY3JvbGxiYXJTaXplKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgLSBzaXplICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQgKyBzaXplKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIHJldHVybiBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbE9mZnNldCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQocHJvcHMsIG9mZnNldCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0kMShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gcHJvcHMuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBwcm9wcy5pdGVtQ291bnQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0YXJ0SW5kZXgsIGluc3RhbmNlUHJvcHMpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBzY3JvbGxPZmZzZXQgKyBzaXplO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgaXRlbUNvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSQxKHByb3BzLCBzdG9wSW5kZXgsIGluc3RhbmNlUHJvcHMpLnNpemU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0b3BJbmRleDtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzLCBpbnN0YW5jZSkge1xuICAgIHZhciBfcmVmNCA9IHByb3BzLFxuICAgICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWY0LmVzdGltYXRlZEl0ZW1TaXplO1xuICAgIHZhciBpbnN0YW5jZVByb3BzID0ge1xuICAgICAgaXRlbU1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZEl0ZW1TaXplOiBlc3RpbWF0ZWRJdGVtU2l6ZSB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4OiAtMVxuICAgIH07XG5cbiAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kZXggPSBmdW5jdGlvbiAoaW5kZXgsIHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUgPT09IHZvaWQgMCkge1xuICAgICAgICBzaG91bGRGb3JjZVVwZGF0ZSA9IHRydWU7XG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4LCBpbmRleCAtIDEpOyAvLyBXZSBjb3VsZCBwb3RlbnRpYWxseSBvcHRpbWl6ZSBmdXJ0aGVyIGJ5IG9ubHkgZXZpY3Rpbmcgc3R5bGVzIGFmdGVyIHRoaXMgaW5kZXgsXG4gICAgICAvLyBCdXQgc2luY2Ugc3R5bGVzIGFyZSBvbmx5IGNhY2hlZCB3aGlsZSBzY3JvbGxpbmcgaXMgaW4gcHJvZ3Jlc3MtXG4gICAgICAvLyBJdCBzZWVtcyBhbiB1bm5lY2Vzc2FyeSBvcHRpbWl6YXRpb24uXG4gICAgICAvLyBJdCdzIHVubGlrZWx5IHRoYXQgcmVzZXRBZnRlckluZGV4KCkgd2lsbCBiZSBjYWxsZWQgd2hpbGUgYSB1c2VyIGlzIHNjcm9sbGluZy5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNSkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKGl0ZW1TaXplID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGl0ZW1TaXplKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59KTtcblxudmFyIEZpeGVkU2l6ZUdyaWQgPSAvKiNfX1BVUkVfXyovY3JlYXRlR3JpZENvbXBvbmVudCh7XG4gIGdldENvbHVtbk9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gaW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Q29sdW1uV2lkdGg6IGZ1bmN0aW9uIGdldENvbHVtbldpZHRoKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWYyLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aDtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQoX3JlZjMsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYzLnJvd0hlaWdodDtcbiAgICByZXR1cm4gaW5kZXggKiByb3dIZWlnaHQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KF9yZWY0LCBpbmRleCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmNC5yb3dIZWlnaHQ7XG4gICAgcmV0dXJuIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KF9yZWY1KSB7XG4gICAgdmFyIHJvd0NvdW50ID0gX3JlZjUucm93Q291bnQsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWY1LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0ICogcm93Q291bnQ7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsV2lkdGg6IGZ1bmN0aW9uIGdldEVzdGltYXRlZFRvdGFsV2lkdGgoX3JlZjYpIHtcbiAgICB2YXIgY29sdW1uQ291bnQgPSBfcmVmNi5jb2x1bW5Db3VudCxcbiAgICAgICAgY29sdW1uV2lkdGggPSBfcmVmNi5jb2x1bW5XaWR0aDtcbiAgICByZXR1cm4gY29sdW1uV2lkdGggKiBjb2x1bW5Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9yQ29sdW1uQW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQoX3JlZjcsIGNvbHVtbkluZGV4LCBhbGlnbiwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY3LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICB3aWR0aCA9IF9yZWY3LndpZHRoO1xuICAgIHZhciBsYXN0Q29sdW1uT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uQ291bnQgKiBjb2x1bW5XaWR0aCAtIHdpZHRoKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdENvbHVtbk9mZnNldCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCk7XG4gICAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGNvbHVtbkluZGV4ICogY29sdW1uV2lkdGggLSB3aWR0aCArIHNjcm9sbGJhclNpemUgKyBjb2x1bW5XaWR0aCk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAtIHdpZHRoICYmIHNjcm9sbExlZnQgPD0gbWF4T2Zmc2V0ICsgd2lkdGgpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICB2YXIgbWlkZGxlT2Zmc2V0ID0gTWF0aC5yb3VuZChtaW5PZmZzZXQgKyAobWF4T2Zmc2V0IC0gbWluT2Zmc2V0KSAvIDIpO1xuXG4gICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwod2lkdGggLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Q29sdW1uT2Zmc2V0ICsgTWF0aC5mbG9vcih3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RDb2x1bW5PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsTGVmdDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsTGVmdCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudChfcmVmOCwgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjgucm93SGVpZ2h0LFxuICAgICAgICBoZWlnaHQgPSBfcmVmOC5oZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjgucm93Q291bnQ7XG4gICAgdmFyIGxhc3RSb3dPZmZzZXQgPSBNYXRoLm1heCgwLCByb3dDb3VudCAqIHJvd0hlaWdodCAtIGhlaWdodCk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RSb3dPZmZzZXQsIHJvd0luZGV4ICogcm93SGVpZ2h0KTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgcm93SW5kZXggKiByb3dIZWlnaHQgLSBoZWlnaHQgKyBzY3JvbGxiYXJTaXplICsgcm93SGVpZ2h0KTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgLSBoZWlnaHQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCArIGhlaWdodCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbChoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiAwOyAvLyBuZWFyIHRoZSBiZWdpbm5pbmdcbiAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0Um93T2Zmc2V0ICsgTWF0aC5mbG9vcihoZWlnaHQgLyAyKSkge1xuICAgICAgICAgIHJldHVybiBsYXN0Um93T2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ2F1dG8nOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKHNjcm9sbFRvcCA+PSBtaW5PZmZzZXQgJiYgc2Nyb2xsVG9wIDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxUb3A7XG4gICAgICAgIH0gZWxzZSBpZiAobWluT2Zmc2V0ID4gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgLy8gQmVjYXVzZSB3ZSBvbmx5IHRha2UgaW50byBhY2NvdW50IHRoZSBzY3JvbGxiYXIgc2l6ZSB3aGVuIGNhbGN1bGF0aW5nIG1pbk9mZnNldFxuICAgICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbFRvcCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY5LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjkuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjkuY29sdW1uQ291bnQ7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGNvbHVtbkNvdW50IC0gMSwgTWF0aC5mbG9vcihzY3JvbGxMZWZ0IC8gY29sdW1uV2lkdGgpKSk7XG4gIH0sXG4gIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXg6IGZ1bmN0aW9uIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgoX3JlZjEwLCBzdGFydEluZGV4LCBzY3JvbGxMZWZ0KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEwLmNvbHVtbldpZHRoLFxuICAgICAgICBjb2x1bW5Db3VudCA9IF9yZWYxMC5jb2x1bW5Db3VudCxcbiAgICAgICAgd2lkdGggPSBfcmVmMTAud2lkdGg7XG4gICAgdmFyIGxlZnQgPSBzdGFydEluZGV4ICogY29sdW1uV2lkdGg7XG4gICAgdmFyIG51bVZpc2libGVDb2x1bW5zID0gTWF0aC5jZWlsKCh3aWR0aCArIHNjcm9sbExlZnQgLSBsZWZ0KSAvIGNvbHVtbldpZHRoKTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUNvbHVtbnMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Um93U3RhcnRJbmRleEZvck9mZnNldChfcmVmMTEsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTEucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMS5yb3dDb3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93Q291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbFRvcCAvIHJvd0hlaWdodCkpKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTIsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmMTIucm93SGVpZ2h0LFxuICAgICAgICByb3dDb3VudCA9IF9yZWYxMi5yb3dDb3VudCxcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjEyLmhlaWdodDtcbiAgICB2YXIgdG9wID0gc3RhcnRJbmRleCAqIHJvd0hlaWdodDtcbiAgICB2YXIgbnVtVmlzaWJsZVJvd3MgPSBNYXRoLmNlaWwoKGhlaWdodCArIHNjcm9sbFRvcCAtIHRvcCkgLyByb3dIZWlnaHQpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlUm93cyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMpIHsvLyBOb29wXG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IHRydWUsXG4gIHZhbGlkYXRlUHJvcHM6IGZ1bmN0aW9uIHZhbGlkYXRlUHJvcHMoX3JlZjEzKSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjEzLmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmMTMucm93SGVpZ2h0O1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgY29sdW1uV2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY29sdW1uV2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiByb3dIZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwicm93SGVpZ2h0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgbnVtYmVyLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplTGlzdCA9IC8qI19fUFVSRV9fKi9jcmVhdGVMaXN0Q29tcG9uZW50KHtcbiAgZ2V0SXRlbU9mZnNldDogZnVuY3Rpb24gZ2V0SXRlbU9mZnNldChfcmVmLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gICAgcmV0dXJuIGluZGV4ICogaXRlbVNpemU7XG4gIH0sXG4gIGdldEl0ZW1TaXplOiBmdW5jdGlvbiBnZXRJdGVtU2l6ZShfcmVmMiwgaW5kZXgpIHtcbiAgICB2YXIgaXRlbVNpemUgPSBfcmVmMi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemU7XG4gIH0sXG4gIGdldEVzdGltYXRlZFRvdGFsU2l6ZTogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxTaXplKF9yZWYzKSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWYzLml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmMy5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaXRlbVNpemUgKiBpdGVtQ291bnQ7XG4gIH0sXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChfcmVmNCwgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjQuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNC5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY0Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNC5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjQubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY0LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBsYXN0SXRlbU9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1Db3VudCAqIGl0ZW1TaXplIC0gc2l6ZSk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWluKGxhc3RJdGVtT2Zmc2V0LCBpbmRleCAqIGl0ZW1TaXplKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaW5kZXggKiBpdGVtU2l6ZSAtIHNpemUgKyBpdGVtU2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAge1xuICAgICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgICAgLy8gQnV0IG5lYXIgdGhlIGVkZ2VzIG9mIHRoZSBsaXN0LCB0aGlzIGRvZXNuJ3QgaG9sZCB0cnVlLlxuICAgICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICAgIH0gZWxzZSBpZiAobWlkZGxlT2Zmc2V0ID4gbGFzdEl0ZW1PZmZzZXQgKyBNYXRoLmZsb29yKHNpemUgLyAyKSkge1xuICAgICAgICAgICAgcmV0dXJuIGxhc3RJdGVtT2Zmc2V0OyAvLyBuZWFyIHRoZSBlbmRcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChfcmVmNSwgb2Zmc2V0KSB7XG4gICAgdmFyIGl0ZW1Db3VudCA9IF9yZWY1Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNS5pdGVtU2l6ZTtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgTWF0aC5mbG9vcihvZmZzZXQgLyBpdGVtU2l6ZSkpKTtcbiAgfSxcbiAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmNiwgc3RhcnRJbmRleCwgc2Nyb2xsT2Zmc2V0KSB7XG4gICAgdmFyIGRpcmVjdGlvbiA9IF9yZWY2LmRpcmVjdGlvbixcbiAgICAgICAgaGVpZ2h0ID0gX3JlZjYuaGVpZ2h0LFxuICAgICAgICBpdGVtQ291bnQgPSBfcmVmNi5pdGVtQ291bnQsXG4gICAgICAgIGl0ZW1TaXplID0gX3JlZjYuaXRlbVNpemUsXG4gICAgICAgIGxheW91dCA9IF9yZWY2LmxheW91dCxcbiAgICAgICAgd2lkdGggPSBfcmVmNi53aWR0aDtcbiAgICAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIG9mZnNldCA9IHN0YXJ0SW5kZXggKiBpdGVtU2l6ZTtcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlSXRlbXMgPSBNYXRoLmNlaWwoKHNpemUgKyBzY3JvbGxPZmZzZXQgLSBvZmZzZXQpIC8gaXRlbVNpemUpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdGFydEluZGV4ICsgbnVtVmlzaWJsZUl0ZW1zIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWY3Lml0ZW1TaXplO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICAgIGlmICh0eXBlb2YgaXRlbVNpemUgIT09ICdudW1iZXInKSB7XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiaXRlbVNpemVcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG4vLyBQdWxsZWQgZnJvbSByZWFjdC1jb21wYXRcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZXZlbG9waXQvcHJlYWN0LWNvbXBhdC9ibG9iLzdjNWRlMDBlN2M4NWUyZmZkMDExYmYzYWYwMjg5OWI2M2Y2OTlkM2Evc3JjL2luZGV4LmpzI0wzNDlcbmZ1bmN0aW9uIHNoYWxsb3dEaWZmZXJzKHByZXYsIG5leHQpIHtcbiAgZm9yICh2YXIgYXR0cmlidXRlIGluIHByZXYpIHtcbiAgICBpZiAoIShhdHRyaWJ1dGUgaW4gbmV4dCkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIGZvciAodmFyIF9hdHRyaWJ1dGUgaW4gbmV4dCkge1xuICAgIGlmIChwcmV2W19hdHRyaWJ1dGVdICE9PSBuZXh0W19hdHRyaWJ1dGVdKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbnZhciBfZXhjbHVkZWQgPSBbXCJzdHlsZVwiXSxcbiAgICBfZXhjbHVkZWQyID0gW1wic3R5bGVcIl07XG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWFwaS5odG1sI3JlYWN0bWVtb1xuXG5mdW5jdGlvbiBhcmVFcXVhbChwcmV2UHJvcHMsIG5leHRQcm9wcykge1xuICB2YXIgcHJldlN0eWxlID0gcHJldlByb3BzLnN0eWxlLFxuICAgICAgcHJldlJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShwcmV2UHJvcHMsIF9leGNsdWRlZCk7XG5cbiAgdmFyIG5leHRTdHlsZSA9IG5leHRQcm9wcy5zdHlsZSxcbiAgICAgIG5leHRSZXN0ID0gX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UobmV4dFByb3BzLCBfZXhjbHVkZWQyKTtcblxuICByZXR1cm4gIXNoYWxsb3dEaWZmZXJzKHByZXZTdHlsZSwgbmV4dFN0eWxlKSAmJiAhc2hhbGxvd0RpZmZlcnMocHJldlJlc3QsIG5leHRSZXN0KTtcbn1cblxuLy8gSXQga25vd3MgdG8gY29tcGFyZSBpbmRpdmlkdWFsIHN0eWxlIHByb3BzIGFuZCBpZ25vcmUgdGhlIHdyYXBwZXIgb2JqZWN0LlxuLy8gU2VlIGh0dHBzOi8vcmVhY3Rqcy5vcmcvZG9jcy9yZWFjdC1jb21wb25lbnQuaHRtbCNzaG91bGRjb21wb25lbnR1cGRhdGVcblxuZnVuY3Rpb24gc2hvdWxkQ29tcG9uZW50VXBkYXRlKG5leHRQcm9wcywgbmV4dFN0YXRlKSB7XG4gIHJldHVybiAhYXJlRXF1YWwodGhpcy5wcm9wcywgbmV4dFByb3BzKSB8fCBzaGFsbG93RGlmZmVycyh0aGlzLnN0YXRlLCBuZXh0U3RhdGUpO1xufVxuXG5leHBvcnQgeyBGaXhlZFNpemVHcmlkLCBGaXhlZFNpemVMaXN0LCBWYXJpYWJsZVNpemVHcmlkLCBWYXJpYWJsZVNpemVMaXN0LCBhcmVFcXVhbCwgc2hvdWxkQ29tcG9uZW50VXBkYXRlIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5lc20uanMubWFwXG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIEJ1dHRvblByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MQnV0dG9uRWxlbWVudD47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICByb3VuZGVkPzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgYXV0b0ZvY3VzPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MQnV0dG9uRWxlbWVudCwgTW91c2VFdmVudD4pID0+IHZvaWQ7XG4gIG9uUG9pbnRlckRvd24/OiAoZXZlbnQ6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHZvaWQ7XG4gIHNpemU/OiBTaXplO1xuICB0eXBlPzogXCJzdWJtaXRcIiB8IFwicmVzZXRcIiB8IFwiYnV0dG9uXCI7XG4gIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICBvZmZzZXRTaWRlcz86IEFycmF5PFwibGVmdFwiIHwgXCJyaWdodFwiPjtcbn07XG5cbmZ1bmN0aW9uIEJ1dHRvbih7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIG9uQ2xpY2ssXG4gIG9uUG9pbnRlckRvd24sXG4gIGNvbnRhaW5lclJlZixcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBub1NoYWRvdyA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgc3RyZXRjaEhvcml6b250YWxseSA9IGZhbHNlLFxuICBzdHJldGNoVmVydGljYWxseSA9IGZhbHNlLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgdHlwZSxcbn06IEJ1dHRvblByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGJ1dHRvblxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoSG9yaXpvbnRhbGx5XTogc3RyZXRjaEhvcml6b250YWxseSxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hWZXJ0aWNhbGx5XTogc3RyZXRjaFZlcnRpY2FsbHksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIHR5cGU9e3R5cGV9XG4gICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBvblBvaW50ZXJEb3duPXtvblBvaW50ZXJEb3dufVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQnV0dG9uIH0gZnJvbSBcIi4vQnV0dG9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uQmFkZ2UubW9kdWxlLmNzc1wiO1xuXG50eXBlIEJ1dHRvbkJhZGdlUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGludmVydGVkPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQnV0dG9uQmFkZ2UoeyBjaGlsZHJlbiwgaW52ZXJ0ZWQgPSBmYWxzZSwgY2xhc3NOYW1lIH06IEJ1dHRvbkJhZGdlUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5idXR0b25CYWRnZSwge1tzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZH0sIGNsYXNzTmFtZV0pfT57Y2hpbGRyZW59PC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkJhZGdlO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25CYWRnZSB9IGZyb20gXCIuL0J1dHRvbkJhZGdlXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQnV0dG9uTGluay5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgT2Zmc2V0U2lkZSA9IFwibGVmdFwiIHwgXCJyaWdodFwiO1xuXG50eXBlIEJ1dHRvbkxpbmtQcm9wcyA9XG4gIHwge1xuICAgICAgYXM/OiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gICAgICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEVsZW1lbnQ+O1xuICAgICAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICAgICAgcm91bmRlZD86IGJvb2xlYW47XG4gICAgICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gICAgICBub1NoYWRvdz86IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc/OiBib29sZWFuO1xuICAgICAgbm9Cb3JkZXI/OiBib29sZWFuO1xuICAgICAgc3RyZXRjaEhvcml6b250YWxseT86IGJvb2xlYW47XG4gICAgICBzdHJldGNoVmVydGljYWxseT86IGJvb2xlYW47XG4gICAgICBzaXplPzogU2l6ZTtcbiAgICAgIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgICAgIG9mZnNldFNpZGVzPzogQXJyYXk8T2Zmc2V0U2lkZT47XG4gICAgICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBCdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgc2l6ZSxcbiAgY29udGFpbmVyUmVmLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIG9mZnNldFNpZGVzID0gW10sXG4gIGFsaWduID0gXCJjZW50ZXJcIixcbiAgLi4ucHJvcHNcbn06IEJ1dHRvbkxpbmtQcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwiYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAgc3R5bGVzW2FsaWduXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vUGFkZGluZ106IG5vUGFkZGluZyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIHsuLi5wcm9wc31cbiAgICA+XG4gICAgICB7dHlwZW9mIGNoaWxkcmVuICE9PSBcInN0cmluZ1wiICYmXG4gICAgICBBcnJheS5pc0FycmF5KGNoaWxkcmVuKSAmJlxuICAgICAgY2hpbGRyZW4ubGVuZ3RoID8gKFxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PntjaGlsZHJlbn08L2Rpdj5cbiAgICAgICkgOiAoXG4gICAgICAgIGNoaWxkcmVuXG4gICAgICApfVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b25MaW5rIH0gZnJvbSBcIi4vQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ2hlY2tib3gubW9kdWxlLmNzc1wiO1xuXG50eXBlIENoZWNrYm94UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogYm9vbGVhbikgPT4gdm9pZDtcbiAgcGxhY2Vob2xkZXI/OiBzdHJpbmc7XG4gIGNoZWNrZWQ/OiBib29sZWFuO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG5hbWU/OiBzdHJpbmc7XG4gIHNpemU/OiBTaXplO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBpbmRldGVybWluYXRlPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gQ2hlY2tib3goe1xuICBsYWJlbCxcbiAgb25DaGFuZ2UsXG4gIHBsYWNlaG9sZGVyLFxuICBjaGVja2VkLFxuICBkaXNhYmxlZCxcbiAgbmFtZSxcbiAgY2xhc3NOYW1lLFxuICBpbmRldGVybWluYXRlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG59OiBDaGVja2JveFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25DaGFuZ2UgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkuY2hlY2tlZCk7XG4gICAgICB9XG4gICAgfSxcbiAgICBbb25DaGFuZ2VdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8TGFiZWwgdmFsdWU9e2xhYmVsfT5cbiAgICAgIDxpbnB1dFxuICAgICAgICBkYXRhLXRlc3RpZD1cImNoZWNrYm94XCJcbiAgICAgICAgcmVmPXsoaW5wdXRSZWYpID0+IHtcbiAgICAgICAgICBpZiAoaW5wdXRSZWYpIHtcbiAgICAgICAgICAgIGlucHV0UmVmLmluZGV0ZXJtaW5hdGUgPSBpbmRldGVybWluYXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfX1cbiAgICAgICAgY2hlY2tlZD17Y2hlY2tlZH1cbiAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY2hlY2tib3gsIGNsYXNzTmFtZSwgc3R5bGVzW3NpemVdXSl9XG4gICAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgbmFtZT17bmFtZX1cbiAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICAvPlxuICAgIDwvTGFiZWw+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENoZWNrYm94O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDaGVja2JveCB9IGZyb20gXCIuL0NoZWNrYm94XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IENvbG9yU3dhdGNoIH0gZnJvbSBcIi4uL0NvbG9yU3dhdGNoXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yUGlja2VyLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JQaWNrZXJQcm9wcyA9IHtcbiAgY29sb3JzOiBDb2xvcltdO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBkaXJlY3Rpb24/OiBcImhvcml6b250YWxcIiB8IFwidmVydGljYWxcIjtcbiAgb25TZWxlY3Q6IChjb2xvcjogQ29sb3IpID0+IHZvaWQ7XG4gIHNlbGVjdGVkQ29sb3I/OiBDb2xvcjtcbiAgY2FuVG9nZ2xlPzogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIENvbG9yUGlja2VyKHtcbiAgY29sb3JzLFxuICBjb250YWluZXJSZWYsXG4gIG9uU2VsZWN0LFxuICBzZWxlY3RlZENvbG9yLFxuICBkaXJlY3Rpb24gPSBcInZlcnRpY2FsXCIsXG4gIGNhblRvZ2dsZSA9IGZhbHNlLFxufTogQ29sb3JQaWNrZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbG9yUGlja2VyLCBzdHlsZXNbZGlyZWN0aW9uXV0pfVxuICAgID5cbiAgICAgIHtjb2xvcnMubWFwKChjb2xvcjogQ29sb3IpID0+IHtcbiAgICAgICAgY29uc3QgaGFuZGxlU2VsZWN0ID0gKCkgPT4ge1xuICAgICAgICAgIGlmIChjYW5Ub2dnbGUgJiYgY29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXkpIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KG51bGwpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBvblNlbGVjdChjb2xvcik7XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgPENvbG9yU3dhdGNoXG4gICAgICAgICAgICBrZXk9e2NvbG9yLmtleX1cbiAgICAgICAgICAgIGNvbG9yPXtjb2xvcn1cbiAgICAgICAgICAgIGlzU2VsZWN0ZWQ9e2NvbG9yLmtleSA9PT0gc2VsZWN0ZWRDb2xvcj8ua2V5fVxuICAgICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0fVxuICAgICAgICAgIC8+XG4gICAgICAgICk7XG4gICAgICB9KX1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JQaWNrZXI7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yUGlja2VyIH0gZnJvbSBcIi4vQ29sb3JQaWNrZXJcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db2xvclN3YXRjaC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDb2xvciwgU2l6ZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuXG50eXBlIENvbG9yU3dhdGNoUHJvcHMgPSB7XG4gIGNvbG9yOiBDb2xvcjtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgaXNTZWxlY3RlZD86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIENvbG9yU3dhdGNoKHtcbiAgY29sb3IsXG4gIGNvbnRhaW5lclJlZixcbiAgaXNTZWxlY3RlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgb25DbGljayxcbn06IENvbG9yU3dhdGNoUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29sb3JTd2F0Y2gsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuc2VsZWN0ZWRdOiBpc1NlbGVjdGVkLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBkYXRhLXRlc3RpZD1cImNvbG9yLXN3YXRjaFwiXG4gICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgc3R5bGU9e3sgYmFja2dyb3VuZENvbG9yOiBjb2xvci5oZXhDb2RlIH19XG4gICAgPlxuICAgICAge2NvbG9yLmxhYmVsICYmIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLnNyT25seX0+e2BTZWxlY3QgJHtjb2xvci5sYWJlbH0gY29sb3JgfTwvc3Bhbj59XG4gICAgPC9idXR0b24+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IENvbG9yU3dhdGNoO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBDb2xvclN3YXRjaCB9IGZyb20gXCIuL0NvbG9yU3dhdGNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBNb2RhbCB9IGZyb20gXCIuLi9Nb2RhbFwiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ29uZmlybWF0aW9uTW9kYWxQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBidXR0b25zTGVmdD86IFJlYWN0RWxlbWVudFtdO1xuICBidXR0b25zUmlnaHQ/OiBSZWFjdEVsZW1lbnRbXTtcbiAgY2hpbGRyZW4/OiBSZWFjdE5vZGU7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHN0cmluZztcbiAgaXNPcGVuOiBib29sZWFuO1xuICBub1BhZGRpbmc/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gQ29uZmlybWF0aW9uTW9kYWwoe1xuICBjbGFzc05hbWUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGhlYWRlcixcbiAgaXNPcGVuLFxuICBidXR0b25zTGVmdCA9IFtdLFxuICBidXR0b25zUmlnaHQgPSBbXSxcbiAgb25DbG9zZSA9ICgpID0+IHt9LFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIGJhc2VaSW5kZXggPSAxMDE5LFxufTogQ29uZmlybWF0aW9uTW9kYWxQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxNb2RhbFxuICAgICAgY29udGFpbmVyUmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBpc09wZW49e2lzT3Blbn1cbiAgICAgIG9uQ2xvc2U9e29uQ2xvc2V9XG4gICAgICBub092ZXJsYXk9e25vT3ZlcmxheX1cbiAgICAgIG5vU2hhZG93PXtub1NoYWRvd31cbiAgICAgIGJhc2VaSW5kZXg9e2Jhc2VaSW5kZXh9XG4gICAgPlxuICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgIHshIWhlYWRlciAmJiA8aDEgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxIZWFkZXJ9PntoZWFkZXJ9PC9oMT59XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5tb2RhbENvbnRlbnQsXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc0NvbnRhaW5lcn0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbnN9PntidXR0b25zTGVmdH08L2Rpdj5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNSaWdodH08L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICA8L01vZGFsPlxuICApO1xufVxuXG5Db25maXJtYXRpb25Nb2RhbC5kaXNwbGF5TmFtZSA9IFwiQ29uZmlybWF0aW9uTW9kYWxcIjtcblxuZXhwb3J0IGRlZmF1bHQgQ29uZmlybWF0aW9uTW9kYWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbmZpcm1hdGlvbk1vZGFsIH0gZnJvbSBcIi4vQ29uZmlybWF0aW9uTW9kYWxcIjtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgQnV0dG9uIH0gZnJvbSBcIi4uL0J1dHRvblwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgeyBJdGVtLCBSZW5kZXJEaXNwbGF5UHJvcHMgfSBmcm9tIFwiLi9Ecm9wZG93blwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL0NsaWNrYWJsZS5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBpY29uTWVudSBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5cbmV4cG9ydCB0eXBlIENsaWNrYWJsZVByb3BzPFQgZXh0ZW5kcyBJdGVtPiA9IE9taXQ8XG4gIFJlbmRlckRpc3BsYXlQcm9wczxUPixcbiAgXCJzZWxlY3RlZEl0ZW1cIiB8IFwidG9nZ2xlSXNPcGVuXCJcbj4gJiB7XG4gIG9uQ2xpY2s6IFJlbmRlckRpc3BsYXlQcm9wczxUPltcInRvZ2dsZUlzT3BlblwiXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBDbGlja2FibGU8VCBleHRlbmRzIEl0ZW0+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/OiBib29sZWFuO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEljb25CdXR0b25MaW5rKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY29udGFpbmVyUmVmLFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzcmMsXG4gIGFsdCxcbiAgaW52ZXJ0ZWQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9Cb3JkZXIgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgcm91bmRlZCA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IEljb25CdXR0b25MaW5rUHJvcHMpIHtcbiAgaWYgKHR5cGVvZiBDb21wb25lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBDb21wb25lbnQgPSBcImFcIjtcbiAgfVxuXG4gIHJldHVybiAoXG4gICAgPENvbXBvbmVudFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBkYXRhLXRlc3RpZD1cImljb24tYnV0dG9uLWxpbmtcIlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHN0eWxlc1tzaXplXSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMuaW52ZXJ0ZWRdOiBpbnZlcnRlZCxcbiAgICAgICAgICBbc3R5bGVzLnJvdW5kZWRdOiByb3VuZGVkLFxuICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICBbc3R5bGVzLm5vQm9yZGVyXTogbm9Cb3JkZXIsXG4gICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnRvcE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJ0b3BcIiksXG4gICAgICAgICAgW3N0eWxlcy5yaWdodE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJyaWdodFwiKSxcbiAgICAgICAgICBbc3R5bGVzLmJvdHRvbU9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJib3R0b21cIiksXG4gICAgICAgICAgW3N0eWxlcy5sZWZ0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcImxlZnRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIDxJY29uIHNyYz17c3JjfSBhbHQ9e2FsdH0gc2l6ZT17c2l6ZX0gaW52ZXJ0ZWQ9e2ludmVydGVkfSAvPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvQ29tcG9uZW50PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJY29uQnV0dG9uTGluaztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSWNvbkJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9JY29uQnV0dG9uTGlua1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0ltYWdlLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgSW1hZ2VQcm9wcyA9IHtcbiAgYWx0Pzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0LlJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgbGF5b3V0PzogXCJjb3ZlclwiIHwgXCJjb250YWluXCIgfCBcInN0cmV0Y2hIb3Jpem9udGFsbHlcIiB8IFwic3RyZXRjaFZlcnRpY2FsbHlcIjtcbiAgc3JjOiBzdHJpbmc7XG4gIHNyY1dpZHRoPzogbnVtYmVyO1xuICBzcmNIZWlnaHQ/OiBudW1iZXI7XG4gIGRlY29kaW5nPzogXCJhc3luY1wiIHwgXCJzeW5jXCIgfCBcImF1dG9cIjtcbiAgbG9hZGluZz86IFwiZWFnZXJcIiB8IFwibGF6eVwiO1xuICBzdHlsZT86IFJlYWN0LkNTU1Byb3BlcnRpZXM7XG59O1xuXG5mdW5jdGlvbiBJbWFnZUNvbXBvbmVudCh7XG4gIHNyYyxcbiAgYWx0LFxuICBzcmNXaWR0aCxcbiAgc3JjSGVpZ2h0LFxuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbiAgZGVjb2RpbmcgPSBcImF1dG9cIixcbiAgbG9hZGluZyA9IFwiZWFnZXJcIixcbiAgc3R5bGUsXG59OiBJbWFnZVByb3BzKSB7XG4gIGNvbnN0IGltYWdlRWxlbWVudCA9IChcbiAgICA8aW1nXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuaW1hZ2UsIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBkYXRhLXRlc3RpZD1cImltYWdlXCJcbiAgICAgIGFsdD17YWx0fVxuICAgICAgc3JjPXtzcmN9XG4gICAgICB3aWR0aD17c3JjV2lkdGh9XG4gICAgICBoZWlnaHQ9e3NyY0hlaWdodH1cbiAgICAgIGRlY29kaW5nPXtkZWNvZGluZ31cbiAgICAgIGxvYWRpbmc9e2xvYWRpbmd9XG4gICAgICBzdHlsZT17c3R5bGV9XG4gICAgLz5cbiAgKTtcblxuICByZXR1cm4gY2hpbGRyZW4gPyAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBzdHlsZXMuaGFzT3ZlcmxheV0pfVxuICAgID5cbiAgICAgIHtpbWFnZUVsZW1lbnR9XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIGltYWdlRWxlbWVudFxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBJbWFnZUNvbXBvbmVudDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgSW1hZ2UsIEltYWdlUHJvcHMgfSBmcm9tIFwiLi9JbWFnZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCwgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGFiZWwubW9kdWxlLmNzc1wiO1xuXG50eXBlIExhYmVsSW5wdXRQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxMYWJlbEVsZW1lbnQ+O1xuICB2YWx1ZTogUmVhY3ROb2RlO1xufTtcblxuZnVuY3Rpb24gTGFiZWwoeyBjbGFzc05hbWUsIGNoaWxkcmVuLCB2YWx1ZSwgY29udGFpbmVyUmVmIH06IExhYmVsSW5wdXRQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsYWJlbFxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX1cbiAgICA+XG4gICAgICB7dmFsdWV9XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9sYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGFiZWw7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIExhYmVsIH0gZnJvbSBcIi4vTGFiZWxcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0xpc3RWaWV3Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld1Byb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGhlYWRlcj86IHsgdGV4dDogc3RyaW5nOyBpZDogc3RyaW5nIH07XG4gIGhlYWRlckFjdGlvbnM/OiBSZWFjdE5vZGU7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlldyh7XG4gIGNoaWxkcmVuLFxuICBjbGFzc05hbWUsXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBoZWFkZXJBY3Rpb25zLFxufTogTGlzdFZpZXdQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgcmVmPXtjb250YWluZXJSZWZ9IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIHsoaGVhZGVyIHx8IGhlYWRlckFjdGlvbnMpICYmIChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PlxuICAgICAgICAgIHtoZWFkZXIgJiYgKFxuICAgICAgICAgICAgPGgzIGNsYXNzTmFtZT17c3R5bGVzLmhlYWRlckxhYmVsfSBpZD17aGVhZGVyLmlkfT5cbiAgICAgICAgICAgICAge2hlYWRlci50ZXh0fVxuICAgICAgICAgICAgPC9oMz5cbiAgICAgICAgICApfVxuICAgICAgICAgIHtoZWFkZXJBY3Rpb25zfVxuICAgICAgICA8L2Rpdj5cbiAgICAgICl9XG4gICAgICA8dWwgYXJpYS1sYWJlbGxlZGJ5PXtoZWFkZXI/LmlkfSBjbGFzc05hbWU9e3N0eWxlcy5saXN0fT5cbiAgICAgICAge2NoaWxkcmVufVxuICAgICAgPC91bD5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTGlzdFZpZXc7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBMaXN0Vmlld0l0ZW1Qcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgYWN0aXZlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIHNpemU/OiBTaXplO1xuICBhbGlnbj86IFwibGVmdFwiIHwgXCJjZW50ZXJcIjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0l0ZW0oe1xuICBjaGlsZHJlbixcbiAgYWN0aXZlID0gZmFsc2UsXG4gIGRpc2FibGVkID0gZmFsc2UsXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBMaXN0Vmlld0l0ZW1Qcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxsaSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMubGlzdFZpZXdJdGVtXSl9PlxuICAgICAgPEJ1dHRvblxuICAgICAgICBvbkNsaWNrPXtvbkNsaWNrfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgPlxuICAgICAgICB7Y2hpbGRyZW59XG4gICAgICA8L0J1dHRvbj5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0l0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgRWxlbWVudFR5cGUsIFJlYWN0Tm9kZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgeyBCdXR0b25MaW5rIH0gZnJvbSBcIi4uL0J1dHRvbkxpbmtcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vTGlzdFZpZXdJdGVtLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBMaXN0Vmlld0xpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgYWN0aXZlOiBib29sZWFuO1xuICAgICAgdHJhbnNwYXJlbnQ6IGJvb2xlYW47XG4gICAgICBub1BhZGRpbmc6IGJvb2xlYW47XG4gICAgICBhbGlnbjogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgICAgc2l6ZTogU2l6ZTtcbiAgICB9XG4gIHwgYW55O1xuXG5mdW5jdGlvbiBMaXN0Vmlld0xpbmtJdGVtKHtcbiAgY2hpbGRyZW4sXG4gIGFzOiBDb21wb25lbnQsXG4gIGFjdGl2ZSA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgLi4ucHJvcHNcbn06IExpc3RWaWV3TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8bGkgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmxpc3RWaWV3SXRlbV0pfT5cbiAgICAgIDxCdXR0b25MaW5rXG4gICAgICAgIGFzPXtDb21wb25lbnR9XG4gICAgICAgIGludmVydGVkPXthY3RpdmV9XG4gICAgICAgIHRyYW5zcGFyZW50PXt0cmFuc3BhcmVudH1cbiAgICAgICAgbm9QYWRkaW5nPXtub1BhZGRpbmd9XG4gICAgICAgIGFsaWduPXthbGlnbn1cbiAgICAgICAgc2l6ZT17c2l6ZX1cbiAgICAgICAgc3RyZXRjaEhvcml6b250YWxseVxuICAgICAgICBub1NoYWRvd1xuICAgICAgICBub0JvcmRlclxuICAgICAgICB7Li4ucHJvcHN9XG4gICAgICA+XG4gICAgICAgIHtjaGlsZHJlbn1cbiAgICAgIDwvQnV0dG9uTGluaz5cbiAgICA8L2xpPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBMaXN0Vmlld0xpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0VmlldyB9IGZyb20gXCIuL0xpc3RWaWV3XCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIExpc3RWaWV3SXRlbSB9IGZyb20gXCIuL0xpc3RWaWV3SXRlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBMaXN0Vmlld0xpbmtJdGVtIH0gZnJvbSBcIi4vTGlzdFZpZXdMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7XG4gIFJlYWN0Tm9kZSxcbiAgUmVmT2JqZWN0LFxuICB1c2VDb250ZXh0LFxuICB1c2VMYXlvdXRFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IFBsYWNlbWVudENvbnRleHQgfSBmcm9tIFwiLi9NZW51Q29udGFpbmVyXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnUubW9kdWxlLmNzc1wiO1xuXG50eXBlIE1lbnVQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBpc09wZW4/OiBib29sZWFuO1xuICBoZWFkZXI/OiBzdHJpbmc7XG4gIGZvb3Rlcj86IFJlYWN0Tm9kZTtcbiAgc21hcnRMYXlvdXQ/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gTWVudSh7XG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGNsYXNzTmFtZSxcbiAgaXNPcGVuID0gdHJ1ZSxcbiAgaGVhZGVyLFxuICBmb290ZXIsXG4gIHNtYXJ0TGF5b3V0ID0gdHJ1ZSxcbn06IE1lbnVQcm9wcykge1xuICBjb25zdCBtZW51UGxhY2VtZW50ID0gdXNlQ29udGV4dChQbGFjZW1lbnRDb250ZXh0KTtcbiAgY29uc3QgaW5uZXJSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQgfCBudWxsPihudWxsKTtcbiAgY29uc3QgcmVmID0gY29udGFpbmVyUmVmIHx8IGlubmVyUmVmO1xuXG4gIGlmICghbWVudVBsYWNlbWVudClcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBcIk1lbnUgY29tcG9uZW50IG11c3QgYmUgd3JhcHBlZCBieSBhIE1lbnVDb250YWluZXIgY29tcG9uZW50LlwiXG4gICAgKTtcblxuICB1c2VMYXlvdXRFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChzbWFydExheW91dCAmJiByZWYuY3VycmVudCkge1xuICAgICAgY29uc3QgeyB0b3AsIGJvdHRvbSB9ID0gcmVmLmN1cnJlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICBjb25zdCBkaXN0YW5jZVRvRWRnZSA9XG4gICAgICAgIG1lbnVQbGFjZW1lbnQudmVydGljYWwgPT09IFwidG9wXCIgPyB0b3AgOiB3aW5kb3cuaW5uZXJIZWlnaHQgLSBib3R0b207XG5cbiAgICAgIGlmIChkaXN0YW5jZVRvRWRnZSA8IDApIHtcbiAgICAgICAgY29uc3QgdWxFbCA9IHJlZi5jdXJyZW50LnF1ZXJ5U2VsZWN0b3IoXCJ1bFwiKTtcbiAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50cyA9IHVsRWwucXVlcnlTZWxlY3RvckFsbChcImxpLGFcIik7XG4gICAgICAgIGNvbnN0IG5ld0hlaWdodCA9IHVsRWwuY2xpZW50SGVpZ2h0ICsgZGlzdGFuY2VUb0VkZ2U7XG4gICAgICAgIGNvbnN0IG9mZnNldCA9IGNoaWxkRWxlbWVudHMubGVuZ3RoXG4gICAgICAgICAgPyBnZXRDb21wdXRlZFN0eWxlKGNoaWxkRWxlbWVudHNbMF0pLm1pbkhlaWdodFxuICAgICAgICAgIDogMDtcbiAgICAgICAgdWxFbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke25ld0hlaWdodH1weCAtICR7b2Zmc2V0fSlgO1xuICAgICAgfVxuICAgIH1cbiAgfSwgW2lzT3BlbiwgbWVudVBsYWNlbWVudCwgc21hcnRMYXlvdXRdKTtcblxuICBpZiAoIWlzT3Blbikge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8PlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLm1lbnUsXG4gICAgICAgICAgeyBbc3R5bGVzLm9wZW5dOiBpc09wZW4gfSxcbiAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIF0pfVxuICAgICAgPlxuICAgICAgICA8ZGl2PlxuICAgICAgICAgIHtoZWFkZXIgJiYgaXNPcGVuICYmIDxoMyBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9PntoZWFkZXJ9PC9oMz59XG4gICAgICAgICAgPHVsPntjaGlsZHJlbn08L3VsPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAge2Zvb3RlciAmJiBpc09wZW4gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuZm9vdGVyLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMubm9Cb3JkZXJdOiAhY2hpbGRyZW4gfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtmb290ZXJ9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICA8Lz5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudTtcbiIsImltcG9ydCBSZWFjdCwge1xuICBSZWFjdE5vZGUsXG4gIFJlYWN0RWxlbWVudCxcbiAgZm9yd2FyZFJlZixcbiAgRm9yd2FyZGVkUmVmLFxuICB1c2VNZW1vLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3NcIjtcblxuZXhwb3J0IHR5cGUgTWVudVBsYWNlbWVudCA9IHtcbiAgaG9yaXpvbnRhbDogXCJyaWdodFwiIHwgXCJsZWZ0XCI7XG4gIHZlcnRpY2FsOiBcInRvcFwiIHwgXCJib3R0b21cIjtcbn07XG5cbnR5cGUgTWVudUNvbnRhaW5lclByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBidXR0b24/OiBSZWFjdEVsZW1lbnQ7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgcGxhY2VtZW50PzogTWVudVBsYWNlbWVudDtcbn07XG5cbmV4cG9ydCBjb25zdCBQbGFjZW1lbnRDb250ZXh0ID0gUmVhY3QuY3JlYXRlQ29udGV4dDxcbiAgTWVudUNvbnRhaW5lclByb3BzW1wicGxhY2VtZW50XCJdIHwgdW5kZWZpbmVkXG4+KHVuZGVmaW5lZCk7XG5cbmZ1bmN0aW9uIE1lbnVDb250YWluZXIoXG4gIHtcbiAgICBjaGlsZHJlbixcbiAgICBidXR0b24sXG4gICAgY2xhc3NOYW1lLFxuICAgIHBsYWNlbWVudCA9IHsgaG9yaXpvbnRhbDogXCJsZWZ0XCIsIHZlcnRpY2FsOiBcImJvdHRvbVwiIH0sXG4gIH06IE1lbnVDb250YWluZXJQcm9wcyxcbiAgcmVmOiBGb3J3YXJkZWRSZWY8SFRNTERpdkVsZW1lbnQ+XG4pIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2IHJlZj17cmVmfSBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICB7YnV0dG9ufVxuICAgICAgPFBsYWNlbWVudENvbnRleHQuUHJvdmlkZXIgdmFsdWU9e3VzZU1lbW8oKCkgPT4gcGxhY2VtZW50LCBbcGxhY2VtZW50XSl9PlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubWVudUNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlc1twbGFjZW1lbnQuaG9yaXpvbnRhbF0sXG4gICAgICAgICAgICBzdHlsZXNbcGxhY2VtZW50LnZlcnRpY2FsXSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L1BsYWNlbWVudENvbnRleHQuUHJvdmlkZXI+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IGZvcndhcmRSZWYoTWVudUNvbnRhaW5lcik7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBTeW50aGV0aWNFdmVudCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVJdGVtLm1vZHVsZS5jc3NcIjtcblxudHlwZSBNZW51SXRlbVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGlzQWN0aXZlPzogYm9vbGVhbjtcbiAgbm9QYWRkaW5nPzogYm9vbGVhbjtcbiAgb25DbGljaz86IChldmVudD86IFN5bnRoZXRpY0V2ZW50PEhUTUxMSUVsZW1lbnQ+KSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gTWVudUl0ZW0oe1xuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBvbkNsaWNrLFxuICBub1BhZGRpbmcgPSBmYWxzZSxcbiAgaXNBY3RpdmUgPSBmYWxzZSxcbn06IE1lbnVJdGVtUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8bGlcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubWVudUl0ZW0sXG4gICAgICAgIHsgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSB9LFxuICAgICAgICB7IFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9saT5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudUl0ZW07XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBFbGVtZW50VHlwZSB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL01lbnVMaW5rSXRlbS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTWVudUxpbmtJdGVtUHJvcHMgPVxuICB8IHtcbiAgICAgIGFzOiBFbGVtZW50VHlwZTtcbiAgICAgIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gICAgICBjbGFzc05hbWU6IHN0cmluZztcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgfVxuICB8IGFueTtcblxuZnVuY3Rpb24gTWVudUxpbmtJdGVtKHtcbiAgYXM6IENvbXBvbmVudCxcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIC4uLnByb3BzXG59OiBNZW51TGlua0l0ZW1Qcm9wcykge1xuICBpZiAodHlwZW9mIENvbXBvbmVudCA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIENvbXBvbmVudCA9IFwiYVwiO1xuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Q29tcG9uZW50XG4gICAgICBkYXRhLXRlc3RpZD1cIm1lbnUtbGluay1pdGVtXCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMubWVudUxpbmtJdGVtLFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L0NvbXBvbmVudD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgTWVudUxpbmtJdGVtO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51IH0gZnJvbSBcIi4vTWVudVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51Q29udGFpbmVyLCBNZW51UGxhY2VtZW50IH0gZnJvbSBcIi4vTWVudUNvbnRhaW5lclwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBNZW51SXRlbSB9IGZyb20gXCIuL01lbnVJdGVtXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIE1lbnVMaW5rSXRlbSB9IGZyb20gXCIuL01lbnVMaW5rSXRlbVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IHsgdXNlSG90a2V5cyB9IGZyb20gXCJyZWFjdC1ob3RrZXlzLWhvb2tcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Nb2RhbC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgTW9kYWxQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBvbkNsb3NlPzogKCkgPT4gdm9pZDtcbiAgYnV0dG9uPzogUmVhY3ROb2RlO1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgbm9PdmVybGF5PzogYm9vbGVhbjtcbiAgYmFzZVpJbmRleD86IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIE1vZGFsKHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaXNPcGVuLFxuICBidXR0b24sXG4gIHRyYW5zcGFyZW50ID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vT3ZlcmxheSA9IGZhbHNlLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIGJhc2VaSW5kZXggPSAxMDA5LFxufTogTW9kYWxQcm9wcykge1xuICB1c2VIb3RrZXlzKFwiRXNjYXBlXCIsIG9uQ2xvc2UpO1xuXG4gIGNvbnN0IGhhbmRsZU92ZXJsYXlDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBvbkNsb3NlKCk7XG4gIH0sIFtvbkNsb3NlXSk7XG5cbiAgcmV0dXJuIChcbiAgICBpc09wZW4gJiYgKFxuICAgICAgPGRpdiByZWY9e2NvbnRhaW5lclJlZn0+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggfX1cbiAgICAgICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgICAgIHN0eWxlcy5vdmVybGF5LFxuICAgICAgICAgICAgeyBbc3R5bGVzLm5vT3ZlcmxheV06IG5vT3ZlcmxheSB9LFxuICAgICAgICAgIF0pfVxuICAgICAgICAgIGRhdGEtdGVzdGlkPVwibW9kYWwtb3ZlcmxheVwiXG4gICAgICAgICAgb25DbGljaz17aGFuZGxlT3ZlcmxheUNsaWNrfVxuICAgICAgICAvPlxuICAgICAgICA8ZGl2XG4gICAgICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4ICsgMSB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsLFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgICAgIFtzdHlsZXMubm9TaGFkb3ddOiBub1NoYWRvdyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbFwiXG4gICAgICAgID5cbiAgICAgICAgICB7Y2hpbGRyZW59XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7YnV0dG9uICYmIChcbiAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAyIH19XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEJ1dHRvbn1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7YnV0dG9ufVxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgKVxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBNb2RhbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgTW9kYWwgfSBmcm9tIFwiLi9Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcblxuaW1wb3J0IGNzcyBmcm9tIFwiLi9OdW1wYWQubW9kdWxlLmNzc1wiO1xuXG5pbXBvcnQgYmFja3NwYWNlSWNvbiBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2JhY2tzcGFjZS5zdmdcIjtcblxudHlwZSBEaWdpdCA9IDAgfCAxIHwgMiB8IDMgfCA0IHwgNSB8IDYgfCA3IHwgOCB8IDk7XG5cbmNvbnN0IGFwcGVuZERpZ2l0ID0gKG51bWJlcjogbnVtYmVyLCBkaWdpdDogRGlnaXQpID0+IHtcbiAgcmV0dXJuIG51bWJlciAqIDEwICsgZGlnaXQ7XG59O1xuXG5jb25zdCBwb3BEaWdpdCA9IChudW1iZXI6IG51bWJlcikgPT4ge1xuICByZXR1cm4gTWF0aC5mbG9vcihudW1iZXIgLyAxMCk7XG59O1xuXG5jb25zdCBldmVudERpZ2l0S2V5cyA9IFtcIjBcIiwgXCIxXCIsIFwiMlwiLCBcIjNcIiwgXCI0XCIsIFwiNVwiLCBcIjZcIiwgXCI3XCIsIFwiOFwiLCBcIjlcIl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTnVtcGFkUHJvcHMge1xuICBudW1iZXI6IG51bWJlcjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBvbkNoYW5nZTogKG5ld051bWJlcjogbnVtYmVyKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgY29uc3QgTnVtcGFkID0gUmVhY3QuZm9yd2FyZFJlZjxIVE1MRGl2RWxlbWVudCwgTnVtcGFkUHJvcHM+KFxuICAoeyBudW1iZXIsIG9uQ2hhbmdlLCBkaXNhYmxlZCA9IGZhbHNlIH0sIHJlZikgPT4geyAgICBcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTERpdkVsZW1lbnQ+KSA9PiB7XG4gICAgICBpZiAoZS5rZXkgPT09IFwiQmFja3NwYWNlXCIpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShwb3BEaWdpdChudW1iZXIpKTtcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnREaWdpdEtleXMuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cbiAgICAgICAgY29uc3QgZGlnaXQgPSBwYXJzZUludChlLmtleSwgMTApIGFzIERpZ2l0O1xuICAgICAgICBvbkNoYW5nZShhcHBlbmREaWdpdChudW1iZXIsIGRpZ2l0KSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNyZWF0ZUVtaXROdW1iZXJIYW5kbGVyID0gKG5ld051bWJlcjogbnVtYmVyKSA9PlxuICAgICAgKGU6IFJlYWN0LlBvaW50ZXJFdmVudDxIVE1MQnV0dG9uRWxlbWVudD4pID0+IHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBvbkNoYW5nZShuZXdOdW1iZXIpO1xuICAgICAgfTtcblxuICAgIGNvbnN0IE51bXBhZEtleXMgPSBBcnJheSgxMClcbiAgICAgIC5maWxsKDApXG4gICAgICAubWFwKChfLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCBudW1wYWRWYWx1ZSA9ICgoaW5kZXggKyAxKSAlIDEwKSBhcyBEaWdpdDtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBrZXk9e2luZGV4fVxuICAgICAgICAgICAgZGlzYWJsZWQ9e2Rpc2FibGVkfVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIG5vU2hhZG93XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihhcHBlbmREaWdpdChudW1iZXIsIG51bXBhZFZhbHVlKSl9XG4gICAgICAgICAgPlxuICAgICAgICAgICAge251bXBhZFZhbHVlfVxuICAgICAgICAgIDwvQnV0dG9uPlxuICAgICAgICApO1xuICAgICAgfSk7XG5cbiAgICByZXR1cm4gKFxuICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1wYWR9IHJlZj17cmVmfSB0YWJJbmRleD17LTF9IG9uS2V5RG93bj17aGFuZGxlS2V5RG93bn0gZGF0YS10ZXN0aWQ9XCJudW1wYWRcIj5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2Nzcy5udW1iZXJzfT5cbiAgICAgICAgICB7TnVtcGFkS2V5c31cbiAgICAgICAgICA8QnV0dG9uXG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgICBvblBvaW50ZXJEb3duPXtjcmVhdGVFbWl0TnVtYmVySGFuZGxlcihwb3BEaWdpdChudW1iZXIpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICA8SWNvbiBhbHQ9XCJCYWNrc3BhY2VcIiBzcmM9e2JhY2tzcGFjZUljb259IC8+XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9kaXY+XG4gICAgKTtcbiAgfVxuKTtcbiIsImV4cG9ydCB7IE51bXBhZCB9IGZyb20gXCIuL051bXBhZFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL092ZXJsYXkubW9kdWxlLmNzc1wiO1xuXG50eXBlIE92ZXJsYXlQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBpc0ZpeGVkPzogYm9vbGVhbjtcbiAgb25DbGljaz86ICgpID0+IHZvaWQ7XG59O1xuXG5mdW5jdGlvbiBPdmVybGF5KHtcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgaXNGaXhlZCA9IGZhbHNlLFxuICBvbkNsaWNrID0gKCkgPT4ge30sXG59OiBPdmVybGF5UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGRhdGEtdGVzdGlkPVwib3ZlcmxheVwiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLnRyYW5zcGFyZW50XTogdHJhbnNwYXJlbnQsXG4gICAgICAgICAgW3N0eWxlcy5maXhlZF06IGlzRml4ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPdmVybGF5O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBPdmVybGF5IH0gZnJvbSBcIi4vT3ZlcmxheVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vR3JvdXBPcHRpb24ubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyBPcHRpb24gfSBmcm9tIFwiLi4vT3B0aW9uXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG59O1xuXG5mdW5jdGlvbiBHcm91cE9wdGlvbih7IGNsYXNzTmFtZSwgbGFiZWwsIG9wdGlvbnMgfTogUHJvcHMpIHtcbiAgY29uc3QgW2V4cGFuZGVkLCB0b2dnbGVFeHBhbmRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICBjb25zdCBoYW5kbGVHcm91cENsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZUV4cGFuZCgpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubGFiZWx9IG9uQ2xpY2s9e2hhbmRsZUdyb3VwQ2xpY2t9PlxuICAgICAgICB7bGFiZWx9XG4gICAgICA8L2Rpdj5cbiAgICAgIHshZXhwYW5kZWQgJiZcbiAgICAgICAgb3B0aW9ucy5tYXAoKG9wdGlvbikgPT4gPE9wdGlvbiBrZXk9e29wdGlvbi52YWx1ZX0gZGF0YT17b3B0aW9ufT57b3B0aW9uLmxhYmVsfTwvT3B0aW9uPil9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyb3VwT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBHcm91cE9wdGlvbiB9IGZyb20gXCIuL0dyb3VwT3B0aW9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL09wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi8uLi9DaGVja2JveFwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YTogT3B0aW9uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbih7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGRhdGEgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgc2VsZWN0ZWRPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGlzQ2hlY2tlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkuaW5jbHVkZXMoZGF0YS52YWx1ZSksXG4gICAgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihkYXRhKTtcbiAgfSwgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5zZWxlY3RlZF06IGlzQ2hlY2tlZCAmJiAhbXVsdGlwbGUgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICB7bXVsdGlwbGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57Y2hpbGRyZW59PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbiB9IGZyb20gXCIuL09wdGlvblwiO1xuIiwiaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCIuLi9Hcm91cE9wdGlvblwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uTGlzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxuLy8gc2VlIGRvY3MgdG8gdW5kZXJzdGFuZCBuZWVkIG9mIHRoZSBmdW5jdGlvbiBiZWxvdyBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlc1xuZXhwb3J0IGNvbnN0IGlzT3B0aW9uID0gKFxuICBvcHRpb246IE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGVcbik6IG9wdGlvbiBpcyBPcHRpb25UeXBlID0+IHtcbiAgcmV0dXJuIChvcHRpb24gYXMgT3B0aW9uVHlwZSkudmFsdWUgIT09IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbkxpc3QoeyBvcHRpb25zLCBvbkZpbHRlciwgb25DaGFuZ2UgfTogUHJvcHMpIHtcbiAgY29uc3QgW3NlbGVjdEFsbENoZWNrZWQsIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIG11bHRpcGxlLFxuICAgIHNlYXJjaEtleXdvcmQsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhc0dyb3VwT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFpc09wdGlvbihvcHRpb24pKTtcblxuICBjb25zdCBmaWx0ZXJPcHRpb25zID0gKG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+KSA9PiB7XG4gICAgY29uc3Qga2V5d29yZCA9IHNlYXJjaEtleXdvcmQudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4ga2V5d29yZC5sZW5ndGhcbiAgICAgID8gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBvbkZpbHRlclxuICAgICAgICAgICAgPyBvbkZpbHRlcihvcHRpb24sIGtleXdvcmQpXG4gICAgICAgICAgICA6IG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgIClcbiAgICAgIDogb3B0aW9ucztcbiAgfTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGFzR3JvdXBPcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgKGZpbHRlcmVkOiBBcnJheTxHcm91cE9wdGlvblR5cGU+LCBncm91cE9wdGlvbjogR3JvdXBPcHRpb25UeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9wdGlvbnMgPSBmaWx0ZXJPcHRpb25zKGdyb3VwT3B0aW9uLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlcmVkR3JvdXBPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4uZmlsdGVyZWQsXG4gICAgICAgICAgICAgIHsgLi4uZ3JvdXBPcHRpb24sIG9wdGlvbnM6IGZpbHRlcmVkR3JvdXBPcHRpb25zIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb25zKG9wdGlvbnMgYXMgQXJyYXk8T3B0aW9uVHlwZT4pO1xuICAgIH1cbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBvcHRpb25zLCBzZWFyY2hLZXl3b3JkXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoZmlsdGVyZWRPcHRpb25zIGFzIE9wdGlvblR5cGVbXSk7XG4gICAgICBvbkNoYW5nZSAmJlxuICAgICAgICBvbkNoYW5nZSgoZmlsdGVyZWRPcHRpb25zIGFzIE9wdGlvblR5cGVbXSkubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShbXSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCgpO1xuICB9LCBbXG4gICAgZmlsdGVyZWRPcHRpb25zLFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkT3B0aW9ucywgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3NlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RBbGxDb250YWluZXJ9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0QWxsQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdEFsbENoZWNrZWR9XG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+U2VsZWN0IEFsbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge2ZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgaXNPcHRpb24ob3B0aW9uKSA/IChcbiAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8R3JvdXBPcHRpb25cbiAgICAgICAgICAgIGtleT17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgbGFiZWw9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbi5vcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbkxpc3Q7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbkxpc3QsIGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VhcmNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSBcIi4uLy4uL1RleHRJbnB1dFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9JY29uXCI7XG5pbXBvcnQgaWNvblNlYXJjaCBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL3NlYXJjaC5zdmdcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gU2VhcmNoKHsgY2xhc3NOYW1lIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2VhcmNoS2V5d29yZCwgc2V0U2VhcmNoS2V5d29yZCB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldFNlYXJjaEtleXdvcmQodmFsdWUpO1xuICAgIH0sXG4gICAgW3NlYXJjaEtleXdvcmRdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgdmFsdWU9e3NlYXJjaEtleXdvcmR9XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2guLi5cIlxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZX1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgIC8+XG4gICAgICA8SWNvbiBzcmM9e2ljb25TZWFyY2h9IC8+XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlYXJjaDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUsIFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IHVzZU91dHNpZGVDbGljaywgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgeyBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfSBmcm9tIFwiLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBTZWxlY3RvciB9IGZyb20gXCIuL1NlbGVjdG9yXCI7XG5pbXBvcnQgeyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IHsgaXNPcHRpb24sIE9wdGlvbkxpc3QgfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5cbnR5cGUgU2VsZWN0UHJvcHMgPSB7XG4gIGRlZmF1bHRWYWx1ZT86IHN0cmluZyB8IHN0cmluZ1tdO1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBzaXplPzogU2l6ZTtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgc2hvd1NlbGVjdGVkQXNUYWdzPzogYm9vbGVhbjtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIHdpZHRoOiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbiAgb25GaWx0ZXI/OiAob3B0aW9uOiBPcHRpb25UeXBlLCBzZWFyY2hLZXl3b3JkOiBzdHJpbmcpID0+IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBTZWxlY3Qoe1xuICBjbGFzc05hbWUsXG4gIGRlZmF1bHRWYWx1ZSxcbiAgZGlzYWJsZWQsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIG9wdGlvbnMsXG4gIHBsYWNlaG9sZGVyLFxuICBzZWxlY3RBbGwsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBzaG93U2VsZWN0ZWRBc1RhZ3MgPSBmYWxzZSxcbiAgd2lkdGgsXG4gIG9uQ2hhbmdlLFxuICBvbkZpbHRlcixcbn06IFNlbGVjdFByb3BzKSB7XG4gIGNvbnN0IFtvcGVuZWQsIHRvZ2dsZU9wZW5lZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIGNvbnN0IHJlZiA9IHVzZU91dHNpZGVDbGljaygoKSA9PiB0b2dnbGVPcGVuZWQoZmFsc2UpKTtcblxuICBjb25zdCBoYW5kbGVPcGVuU2VsZWN0ID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIHRvZ2dsZU9wZW5lZCgpO1xuICB9LCBbXSk7XG5cbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4ge1xuICAgIGlmICghbXVsdGlwbGUpIHRvZ2dsZU9wZW5lZChmYWxzZSk7XG5cbiAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZSh2YWx1ZXMpO1xuICB9LCBbXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dFByb3ZpZGVyXG4gICAgICBkZWZhdWx0VmFsdWU9e2RlZmF1bHRWYWx1ZX1cbiAgICAgIG11bHRpcGxlPXttdWx0aXBsZX1cbiAgICAgIG9wdGlvbnM9e29wdGlvbnN9XG4gICAgICBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfVxuICAgICAgc2VsZWN0QWxsPXtzZWxlY3RBbGx9XG4gICAgPlxuICAgICAgPGRpdlxuICAgICAgICByZWY9e3JlZn1cbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgW3N0eWxlcy5kaXNhYmxlZF06IGRpc2FibGVkLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICBdKX1cbiAgICAgICAgc3R5bGU9e3sgd2lkdGggfX1cbiAgICAgID5cbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IG9uQ2xpY2s9e2hhbmRsZU9wZW5TZWxlY3R9PlxuICAgICAgICAgIDxTZWxlY3RvclxuICAgICAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICAgICAgc2hvd1NlbGVjdGVkQXNUYWdzPXtzaG93U2VsZWN0ZWRBc1RhZ3N9XG4gICAgICAgICAgLz5cbiAgICAgICAgICA8SWNvbkJ1dHRvblxuICAgICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICAgIHN0eWxlcy5pY29uQnV0dG9uLFxuICAgICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiBvcGVuZWQgfSxcbiAgICAgICAgICAgIF0pfVxuICAgICAgICAgICAgc3JjPXtpY29uQ2FyZXREb3dufVxuICAgICAgICAgICAgYWx0PXtvcGVuZWQgPyBcIkNvbGxhcHNlXCIgOiBcIkV4cGFuZFwifVxuICAgICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICAgIHRyYW5zcGFyZW50XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtvcGVuZWQgJiYgKFxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLnNlYXJjaENvbnRhaW5lcn0+XG4gICAgICAgICAgICAgIDxTZWFyY2ggLz5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgPE9wdGlvbkxpc3Qgb3B0aW9ucz17b3B0aW9uc30gb25GaWx0ZXI9e29uRmlsdGVyfSBvbkNoYW5nZT17aGFuZGxlQ2hhbmdlfSAvPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICApfVxuICAgICAgPC9kaXY+XG4gICAgPC9TZWxlY3RDb250ZXh0UHJvdmlkZXI+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdDtcbiIsImltcG9ydCBSZWFjdCwge1xuICBjcmVhdGVDb250ZXh0LFxuICB1c2VDYWxsYmFjayxcbiAgdXNlTWVtbyxcbiAgdXNlU3RhdGUsXG4gIHVzZUVmZmVjdCxcbiAgdXNlUmVmLFxufSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IEdyb3VwT3B0aW9uVHlwZSwgT3B0aW9uVHlwZSB9IGZyb20gXCIuLi8uLi90eXBlc1wiO1xuaW1wb3J0IHsgaXNPcHRpb24gfSBmcm9tIFwiLi9PcHRpb25MaXN0XCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdC5SZWFjdE5vZGU7XG4gIGRlZmF1bHRWYWx1ZTogc3RyaW5nIHwgc3RyaW5nW107XG4gIG11bHRpcGxlPzogYm9vbGVhbjtcbiAgc2VsZWN0QWxsPzogYm9vbGVhbjtcbiAgb3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZSB8IEdyb3VwT3B0aW9uVHlwZT47XG4gIG9uQ2hhbmdlPzogKHZhbHVlczogQXJyYXk8c3RyaW5nPikgPT4gdm9pZDtcbn07XG5cbnR5cGUgU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNlbGVjdGVkT3B0aW9uczogQXJyYXk8T3B0aW9uVHlwZT47XG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAob3B0aW9uOiBPcHRpb25UeXBlKSA9PiB2b2lkO1xuICBzZWFyY2hLZXl3b3JkOiBzdHJpbmc7XG4gIHNldFNlYXJjaEtleXdvcmQ6ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4gdm9pZDtcbn07XG5cbmNvbnN0IGluaXRpYWxTdGF0ZTogU2VsZWN0Q29udGV4dFN0YXRlID0ge1xuICBtdWx0aXBsZTogZmFsc2UsXG4gIHNlbGVjdEFsbDogZmFsc2UsXG4gIHNlbGVjdGVkT3B0aW9uczogW10sXG4gIHVwZGF0ZVNlbGVjdGVkT3B0aW9uOiAodmFsdWU6IE9wdGlvblR5cGUpID0+IHt9LFxuICBzZWFyY2hLZXl3b3JkOiBcIlwiLFxuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4ge30sXG4gIHNldFNlbGVjdGVkT3B0aW9uczogKHZhbHVlczogT3B0aW9uVHlwZVtdKSA9PiB7fSxcbn07XG5cbmNvbnN0IFNlbGVjdENvbnRleHQgPSBjcmVhdGVDb250ZXh0PFNlbGVjdENvbnRleHRTdGF0ZT4oaW5pdGlhbFN0YXRlKTtcblxuY29uc3QgU2VsZWN0Q29udGV4dFByb3ZpZGVyID0gKHtcbiAgY2hpbGRyZW4sXG4gIGRlZmF1bHRWYWx1ZSxcbiAgbXVsdGlwbGUgPSBmYWxzZSxcbiAgc2VsZWN0QWxsID0gZmFsc2UsXG4gIG9wdGlvbnMsXG4gIG9uQ2hhbmdlLFxufTogUHJvcHMpID0+IHtcbiAgY29uc3QgW3NlbGVjdGVkT3B0aW9ucywgc2V0U2VsZWN0ZWRPcHRpb25zXSA9IHVzZVN0YXRlPE9wdGlvblR5cGVbXT4oXG4gICAgaW5pdGlhbFN0YXRlLnNlbGVjdGVkT3B0aW9uc1xuICApO1xuICBjb25zdCBbc2VhcmNoS2V5d29yZCwgc2V0U2VhcmNoS2V5d29yZF0gPSB1c2VTdGF0ZShcbiAgICBpbml0aWFsU3RhdGUuc2VhcmNoS2V5d29yZFxuICApO1xuXG4gIGNvbnN0IHVwZGF0ZVNlbGVjdGVkT3B0aW9uID0gdXNlQ2FsbGJhY2soXG4gICAgKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4ge1xuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnM7XG4gICAgICBpZiAobXVsdGlwbGUpIHtcbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IHNlbGVjdGVkT3B0aW9ucy5zb21lKFxuICAgICAgICAgICh7IHZhbHVlIH0pID0+IHZhbHVlID09PSBvcHRpb24udmFsdWVcbiAgICAgICAgKVxuICAgICAgICAgID8gc2VsZWN0ZWRPcHRpb25zLmZpbHRlcigoeyB2YWx1ZSB9KSA9PiB2YWx1ZSAhPT0gb3B0aW9uLnZhbHVlKVxuICAgICAgICAgIDogWy4uLnNlbGVjdGVkT3B0aW9ucywgb3B0aW9uXTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbb3B0aW9uXTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcblxuICAgICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UodXBkYXRlZFNlbGVjdGVkT3B0aW9ucy5tYXAoKHsgdmFsdWUgfSkgPT4gdmFsdWUpKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICB1c2VFZmZlY3QoKCkgPT4ge1xuICAgIGlmIChkZWZhdWx0VmFsdWUpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZXMgPSBBcnJheS5pc0FycmF5KGRlZmF1bHRWYWx1ZSlcbiAgICAgICAgPyBkZWZhdWx0VmFsdWVcbiAgICAgICAgOiBbZGVmYXVsdFZhbHVlXTtcblxuICAgICAgbGV0IHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBbXTtcbiAgICAgIGlmIChkZWZhdWx0VmFsdWVzLmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhbGxPcHRpb25zID0gb3B0aW9ucy5yZWR1Y2UoKGFsbCwgaXRlbSkgPT4ge1xuICAgICAgICAgIGlmIChpc09wdGlvbihpdGVtKSkge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIGl0ZW1dO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gWy4uLmFsbCwgLi4uaXRlbS5vcHRpb25zXTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sIFtdKTtcblxuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gYWxsT3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBkZWZhdWx0VmFsdWVzLmluY2x1ZGVzKG9wdGlvbi52YWx1ZSlcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyh1cGRhdGVkU2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG4gIH0sIFtkZWZhdWx0VmFsdWVdKTtcblxuICBjb25zdCBjb250ZXh0VmFsdWU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHVzZU1lbW8oXG4gICAgKCkgPT4gKHtcbiAgICAgIG11bHRpcGxlLFxuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyxcbiAgICB9KSxcbiAgICBbXG4gICAgICBzZWxlY3RBbGwsXG4gICAgICBzZWxlY3RlZE9wdGlvbnMsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbixcbiAgICAgIHNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWFyY2hLZXl3b3JkLFxuICAgIF1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxTZWxlY3RDb250ZXh0LlByb3ZpZGVyIHZhbHVlPXtjb250ZXh0VmFsdWV9PlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvU2VsZWN0Q29udGV4dC5Qcm92aWRlcj5cbiAgKTtcbn07XG5cbmV4cG9ydCB7IFNlbGVjdENvbnRleHQsIFNlbGVjdENvbnRleHRQcm92aWRlciB9O1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0LCB1c2VNZW1vIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VsZWN0b3IubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBUYWcgfSBmcm9tIFwiLi4vLi4vVGFnXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gIHNob3dTZWxlY3RlZEFzVGFnczogYm9vbGVhbjtcbn07XG5cbmZ1bmN0aW9uIFNlbGVjdG9yKHsgcGxhY2Vob2xkZXIsIHNob3dTZWxlY3RlZEFzVGFncyB9OiBQcm9wcykge1xuICBjb25zdCB7IHNlbGVjdGVkT3B0aW9ucywgbXVsdGlwbGUsIHVwZGF0ZVNlbGVjdGVkT3B0aW9uIH0gPVxuICAgIHVzZUNvbnRleHQoU2VsZWN0Q29udGV4dCk7XG5cbiAgY29uc3QgaGFuZGxlVGFnQ2xpY2sgPSB1c2VDYWxsYmFjaygoZXZlbnQ6IFJlYWN0Lk1vdXNlRXZlbnQpID0+IHtcbiAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0Nsb3NlID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHNlbGVjdGVkT3B0aW9ucy5maW5kKChvcHRpb24pID0+IG9wdGlvbi52YWx1ZSA9PT0gdmFsdWUpO1xuXG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihvcHRpb24pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9LFxuICAgIFtzZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgY29uc3Qgc2hvd0FzVGFncyA9IHVzZU1lbW8oXG4gICAgKCkgPT5cbiAgICAgICFzZWxlY3RlZE9wdGlvbnMubGVuZ3RoXG4gICAgICAgID8gcGxhY2Vob2xkZXJcbiAgICAgICAgOiBzZWxlY3RlZE9wdGlvbnMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiAoXG4gICAgICAgICAgICA8c3BhbiBvbkNsaWNrPXtoYW5kbGVUYWdDbGlja30+XG4gICAgICAgICAgICAgIDxUYWcga2V5PXt2YWx1ZX0gdmFsdWU9e3ZhbHVlfSBjbG9zYWJsZSBvbkNsb3NlPXtoYW5kbGVUYWdDbG9zZX0+XG4gICAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgICA8L1RhZz5cbiAgICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICApKSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RleHQgPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoXG4gICAgPyBgJHtwbGFjZWhvbGRlcn0gKCR7c2VsZWN0ZWRPcHRpb25zLmxlbmd0aH0pYFxuICAgIDogcGxhY2Vob2xkZXI7XG5cbiAgbGV0IGNvbnRlbnQ7XG4gIGlmIChtdWx0aXBsZSkge1xuICAgIGNvbnRlbnQgPSBzaG93U2VsZWN0ZWRBc1RhZ3MgPyBzaG93QXNUYWdzIDogc2hvd0FzVGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyBwbGFjZWhvbGRlciA6IHNlbGVjdGVkT3B0aW9uc1swXS5sYWJlbDtcbiAgfVxuXG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+e2NvbnRlbnR9PC9kaXY+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3QgfSBmcm9tIFwiLi9TZWxlY3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIExpc3RPblNjcm9sbFByb3BzIH0gZnJvbSBcInJlYWN0LXdpbmRvd1wiO1xuaW1wb3J0IEluZmluaXRlTG9hZGVyIGZyb20gXCJyZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyXCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tIFwiLi9UYWJsZUhlYWRlclwiO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gXCIuL1RhYmxlUm93XCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlLm1vZHVsZS5jc3NcIjtcblxuXG5cblxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBKU1guRWxlbWVudCB8IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhSW5kZXg6IHN0cmluZztcbiAgcmVuZGVyPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcpID0+IEpTWC5FbGVtZW50O1xuICB3aWR0aD86IHN0cmluZztcbiAgZGVmYXVsdFNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgc29ydGVkPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBvblNvcnQ/OiAoc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIGRhdGFTb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFibGVIZWlnaHQ6IG51bWJlcjtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmU/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlPzogbnVtYmVyO1xuICBzZXRQYWdlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICByb3dIZWlnaHQ/OiBudW1iZXI7XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbiAgZGlzYWJsZUxhenlMb2FkZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXRlbXNDb3VudD86IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoYXNWaXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVGFibGUoe1xuICBjb2x1bW5zLFxuICBkYXRhU291cmNlLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgb25Mb2FkTW9yZSxcbiAgcGFnZSxcbiAgc2V0UGFnZSxcbiAgcGFnZVNpemUgPSBUYWJsZUNvbmZpZy5QQUdFX1NJWkUsXG4gIHRhYmxlSGVpZ2h0LFxuICBwbGFjZWhvbGRlcixcbiAgcm93SGVpZ2h0ID0gVGFibGVDb25maWcuUk9XX0hFSUdIVCxcbiAgaGVhZGVySGVpZ2h0ID0gVGFibGVDb25maWcuSEVBREVSX0hFSUdIVCxcbiAgZGlzYWJsZUxhenlMb2FkZXIsXG4gIGFjdGl2ZVJvd3MsXG4gIGl0ZW1zQ291bnQsXG4gIGlzSGVhZGVyU3RpY2t5ID0gZmFsc2UsXG4gIGhhc1ZpcnR1YWxTY3JvbGwgPSB0cnVlLFxuICBjbGFzc05hbWUsXG59OiBQcm9wcykge1xuICBjb25zdCBbc2Nyb2xsVG9wLCBzZXRTY3JvbGxUb3BdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgcmVuZGVyUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZGF0YSwgaW5kZXgsIHN0eWxlIH06IHsgZGF0YTogYW55OyBpbmRleDogbnVtYmVyOyBzdHlsZTogYW55IH0pID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaW5kZXhdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdHlsZSwgdG9wOiBzdHlsZS50b3AgfX0+XG4gICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdy5pZF19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0sXG4gICAgW2NvbHVtbnMsIGFjdGl2ZVJvd3MsIGhhc0Fycm93LCByb3dIZWlnaHQsIG9uUm93Q2xpY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTGlzdFNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHNjcm9sbE9mZnNldCB9OiBMaXN0T25TY3JvbGxQcm9wcykgPT4ge1xuICAgICAgc2V0U2Nyb2xsVG9wKHNjcm9sbE9mZnNldCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbXNDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA8IHBhZ2VTaXplICogcGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXRQYWdlICYmIG9uTG9hZE1vcmUpIHtcbiAgICAgIHNldFBhZ2UocGFnZSArIDEpO1xuICAgICAgb25Mb2FkTW9yZShwYWdlICsgMSk7XG4gICAgfVxuICB9LCBbXG4gICAgZGlzYWJsZUxhenlMb2FkZXIsXG4gICAgZGF0YVNvdXJjZS5sZW5ndGgsXG4gICAgaXRlbXNDb3VudCxcbiAgICBwYWdlU2l6ZSxcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgb25Mb2FkTW9yZSxcbiAgXSk7XG5cbiAgY29uc3QgaXNJdGVtTG9hZGVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleCA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gVGFibGVDb25maWcuSVRFTVNfTE9BREVEO1xuICAgIH0sXG4gICAgW2RhdGFTb3VyY2UubGVuZ3RoLCBkaXNhYmxlTGF6eUxvYWRlcl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzVmlydHVhbFNjcm9sbCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWJsZX0+XG4gICAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshIXBsYWNlaG9sZGVyICYmICFkYXRhU291cmNlLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnBsYWNlaG9sZGVyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICAgICAgICBpc0l0ZW1Mb2FkZWQ9e2lzSXRlbUxvYWRlZH1cbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgIGxvYWRNb3JlSXRlbXM9e2xvYWRNb3JlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7IG9uSXRlbXNSZW5kZXJlZCwgcmVmIH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxGaXhlZFNpemVMaXN0XG4gICAgICAgICAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3RhYmxlSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZT17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YT17ZGF0YVNvdXJjZX1cbiAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e2hhbmRsZUxpc3RTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZD17b25JdGVtc1JlbmRlcmVkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxiYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSb3d9XG4gICAgICAgICAgICAgICAgICA8L0ZpeGVkU2l6ZUxpc3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9JbmZpbml0ZUxvYWRlcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlcy5zY3JvbGxiYXJDb250YWluZXIsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICBpc0hlYWRlclN0aWNreT17aXNIZWFkZXJTdGlja3l9XG4gICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkYXRhU291cmNlLm1hcCgocm93LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdz8uaWRdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyQ2VsbCBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBzY3JvbGxUb3A6IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlcih7XG4gIGNvbHVtbnMsXG4gIHNjcm9sbFRvcCxcbiAgaXNIZWFkZXJTdGlja3ksXG4gIGhlYWRlckhlaWdodCxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5ib3JkZXJCb3R0b21dOiAhIXNjcm9sbFRvcCB9LFxuICAgICAgICB7IFtzdHlsZXMuaXNIZWFkZXJTdGlja3ldOiBpc0hlYWRlclN0aWNreSB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IGhlYWRlckhlaWdodCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVIZWFkZXJDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtaGVhZC1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgaWNvbkNhcmV0VXAgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC11cC5zdmdcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXJDZWxsKHsgY29sdW1uIH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBvblNvcnQsXG4gICAgc29ydGFibGUsXG4gICAgc29ydGVkLFxuICAgIGRlZmF1bHRTb3J0T3JkZXIsXG4gICAgdGl0bGUsXG4gICAgd2lkdGgsXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gY29sdW1uO1xuXG4gIGNvbnN0IFtzb3J0T3JkZXIsIHNldFNvcnRPcmRlcl0gPSB1c2VTdGF0ZShcbiAgICAoKSA9PiBkZWZhdWx0U29ydE9yZGVyIHx8IFNvcnRPcmRlci5ERVNDXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU29ydENvbHVtbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNvcnRlZCkge1xuICAgICAgcmV0dXJuIG9uU29ydChzb3J0T3JkZXIpO1xuICAgIH1cbiAgICBjb25zdCBuZXdTb3J0T3JkZXIgPVxuICAgICAgc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQyA/IFNvcnRPcmRlci5BU0MgOiBTb3J0T3JkZXIuREVTQztcbiAgICBzZXRTb3J0T3JkZXIobmV3U29ydE9yZGVyKTtcbiAgICBvblNvcnQobmV3U29ydE9yZGVyKTtcbiAgfSwgW29uU29ydCwgc29ydE9yZGVyLCBzb3J0ZWRdKTtcblxuICBjb25zdCBjZWxsUHJvcHMgPVxuICAgIG9uU29ydCAmJiBzb3J0YWJsZVxuICAgICAgPyB7XG4gICAgICAgICAgb25DbGljazogaGFuZGxlU29ydENvbHVtbixcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICBjb25zdCBkaXNwbGF5QXJyb3cgPSAoKTogc3RyaW5nID0+IHtcbiAgICBpZiAoc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQykge1xuICAgICAgcmV0dXJuIGljb25DYXJldERvd247XG4gICAgfVxuICAgIHJldHVybiBpY29uQ2FyZXRVcDtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5jZWxsUHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRhYmxlSGVhZGVyQ2VsbCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zb3J0SWNvblZpc2libGVdOiBzb3J0YWJsZSAmJiBzb3J0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5zb3J0YWJsZV06IHNvcnRhYmxlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgID5cbiAgICAgIHt0aXRsZX1cbiAgICAgIHtzb3J0YWJsZSA/IChcbiAgICAgICAgPEljb24gYWx0PXtcIlNvcnQgYnV0dG9uXCJ9IHNpemU9XCJzbWFsbFwiIHNyYz17ZGlzcGxheUFycm93KCl9IC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDZWxsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZVJvd0NlbGwgZnJvbSBcIi4vVGFibGVSb3dDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvdy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIHJvd0hlaWdodDogbnVtYmVyO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvdyh7XG4gIGRhdGEsXG4gIGNvbHVtbnMsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICByb3dIZWlnaHQsXG4gIGlzQWN0aXZlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlUm93Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uUm93Q2xpY2sgJiYgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9uUm93Q2xpY2soZGF0YSk7XG4gICAgfVxuICB9LCBbZGF0YSwgb25Sb3dDbGlja10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmhhc0Fycm93XTogaGFzQXJyb3csXG4gICAgICAgICAgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZVJvd0NlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1yb3ctY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3dDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93Q2VsbCh7IGl0ZW0sIGNvbHVtbiwgcm93SGVpZ2h0IH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBkYXRhID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbVtjb2x1bW4uZGF0YUluZGV4XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogcm93SGVpZ2h0LCB3aWR0aDogY29sdW1uPy53aWR0aCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW4ucmVuZGVyID8gY29sdW1uLnJlbmRlcihkYXRhKSA6IGRhdGF9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93Q2VsbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjbG9zYWJsZT86IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nO1xuICBvbkNsb3NlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRhZyh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGNsb3NhYmxlLCB2YWx1ZSwgb25DbG9zZSB9OiBQcm9wcykge1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25DbG9zZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNsb3NlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPHNwYW4+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICAgIHtjbG9zYWJsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlQnV0dG9ufSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgPEljb24gc3JjPXtpY29uQ3Jvc3NlZH0gYWx0PVwiQ2xvc2VcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZyB9IGZyb20gXCIuL1RhZ1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xufTtcblxuZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBvbkJsdXIsXG4gIG9uS2V5RG93bixcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICBpbnB1dE1vZGU9e2lucHV0TW9kZX1cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRvYXN0KHsgY2hpbGRyZW4sIGNvbnRhaW5lclJlZiwgb25DbGljayA9ICgpID0+IHt9IH06IFRvYXN0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3RcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xuIiwiZXhwb3J0IGVudW0gVGFibGVDb25maWcge1xuICBST1dfSEVJR0hUID0gNDgsXG4gIEhFQURFUl9IRUlHSFQ9MzIsXG4gIFBBR0VfU0laRSA9IDEwMCxcbiAgSVRFTVNfTE9BREVEID0gNSxcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuLi9jb25zdGFudHMvVGFibGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9TZWxlY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhYmxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS41IDEuNUwxMy41IDEzLjVNMS41IDEzLjVMMTMuNSAxLjUnIHN0cm9rZT0nYmxhY2snLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTUuNDY4NSAxNS40NjY1TDExLjIwMTggMTEuMTk5OU02LjkzNTE2IDEzLjMzMzJDMy40MDA1MyAxMy4zMzMyIDAuNTM1MTU2IDEwLjQ2NzggMC41MzUxNTYgNi45MzMyQzAuNTM1MTU2IDMuMzk4NTggMy40MDA1MyAwLjUzMzIwMyA2LjkzNTE2IDAuNTMzMjAzQzEwLjQ2OTggMC41MzMyMDMgMTMuMzM1MiAzLjM5ODU4IDEzLjMzNTIgNi45MzMyQzEzLjMzNTIgMTAuNDY3OCAxMC40Njk4IDEzLjMzMzIgNi45MzUxNiAxMy4zMzMyWicgc3Ryb2tlPSclMjM4OTg4OTEnLyUzZSAlM2Mvc3ZnJTNlXCIiLCIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiB1c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzXG4gKlxuICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cbid1c2Ugc3RyaWN0Jzt2YXIgZT1yZXF1aXJlKFwicmVhY3RcIik7ZnVuY3Rpb24gaChhLGIpe3JldHVybiBhPT09YiYmKDAhPT1hfHwxL2E9PT0xL2IpfHxhIT09YSYmYiE9PWJ9dmFyIGs9XCJmdW5jdGlvblwiPT09dHlwZW9mIE9iamVjdC5pcz9PYmplY3QuaXM6aCxsPWUudXNlU3RhdGUsbT1lLnVzZUVmZmVjdCxuPWUudXNlTGF5b3V0RWZmZWN0LHA9ZS51c2VEZWJ1Z1ZhbHVlO2Z1bmN0aW9uIHEoYSxiKXt2YXIgZD1iKCksZj1sKHtpbnN0Ont2YWx1ZTpkLGdldFNuYXBzaG90OmJ9fSksYz1mWzBdLmluc3QsZz1mWzFdO24oZnVuY3Rpb24oKXtjLnZhbHVlPWQ7Yy5nZXRTbmFwc2hvdD1iO3IoYykmJmcoe2luc3Q6Y30pfSxbYSxkLGJdKTttKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSk7cmV0dXJuIGEoZnVuY3Rpb24oKXtyKGMpJiZnKHtpbnN0OmN9KX0pfSxbYV0pO3AoZCk7cmV0dXJuIGR9XG5mdW5jdGlvbiByKGEpe3ZhciBiPWEuZ2V0U25hcHNob3Q7YT1hLnZhbHVlO3RyeXt2YXIgZD1iKCk7cmV0dXJuIWsoYSxkKX1jYXRjaChmKXtyZXR1cm4hMH19ZnVuY3Rpb24gdChhLGIpe3JldHVybiBiKCl9dmFyIHU9XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3d8fFwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93LmRvY3VtZW50fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50P3Q6cTtleHBvcnRzLnVzZVN5bmNFeHRlcm5hbFN0b3JlPXZvaWQgMCE9PWUudXNlU3luY0V4dGVybmFsU3RvcmU/ZS51c2VTeW5jRXh0ZXJuYWxTdG9yZTp1O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdwcm9kdWN0aW9uJykge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzJyk7XG59IGVsc2Uge1xuICBtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLmRldmVsb3BtZW50LmpzJyk7XG59XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoXCJyZWFjdFwiKTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdC8vIG5vIG1vZHVsZS5pZCBuZWVkZWRcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSAob2JqLCBwcm9wKSA9PiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwgcHJvcCkpIiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gKGV4cG9ydHMpID0+IHtcblx0aWYodHlwZW9mIFN5bWJvbCAhPT0gJ3VuZGVmaW5lZCcgJiYgU3ltYm9sLnRvU3RyaW5nVGFnKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIFN5bWJvbC50b1N0cmluZ1RhZywgeyB2YWx1ZTogJ01vZHVsZScgfSk7XG5cdH1cblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICdfX2VzTW9kdWxlJywgeyB2YWx1ZTogdHJ1ZSB9KTtcbn07IiwiLy8gc3RhcnR1cFxuLy8gTG9hZCBlbnRyeSBtb2R1bGUgYW5kIHJldHVybiBleHBvcnRzXG4vLyBUaGlzIGVudHJ5IG1vZHVsZSBpcyByZWZlcmVuY2VkIGJ5IG90aGVyIG1vZHVsZXMgc28gaXQgY2FuJ3QgYmUgaW5saW5lZFxudmFyIF9fd2VicGFja19leHBvcnRzX18gPSBfX3dlYnBhY2tfcmVxdWlyZV9fKDM2MDcpO1xuIl0sIm5hbWVzIjpbIm9wdGlvbnMiLCJjYXB0dXJlIiwidXNlT3V0c2lkZUNsaWNrIiwiY2FsbGJhY2siLCJyZWYiLCJ1c2VSZWYiLCJ1c2VFZmZlY3QiLCJoYW5kbGVDbGljayIsImV2ZW50IiwiY3VycmVudCIsImNvbnRhaW5zIiwidGFyZ2V0IiwiZG9jdW1lbnQiLCJhZGRFdmVudExpc3RlbmVyIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsIl9fcmVhZCIsIm8iLCJuIiwibSIsIlN5bWJvbCIsIml0ZXJhdG9yIiwiciIsImUiLCJpIiwiY2FsbCIsImFyIiwibmV4dCIsImRvbmUiLCJwdXNoIiwidmFsdWUiLCJlcnJvciIsInVzZVByb21pc2UiLCJfdGhpcyIsInRoaXMiLCJfYSIsInVzZVN0YXRlIiwiZGF0YSIsInVuZGVmaW5lZCIsImlzUGVuZGluZyIsImlzUmVzb2x2ZWQiLCJpc1JlamVjdGVkIiwiaXNTZXR0bGVkIiwicmVzdWx0Iiwic2V0UmVzdWx0IiwiaGFzVW5tb3VudGVkIiwiZGlzcGF0Y2giLCJ1c2VDYWxsYmFjayIsInByb21pc2UiLCJ0aGlzQXJnIiwiX2FyZ3VtZW50cyIsImdlbmVyYXRvciIsImVycm9yXzEiLCJib2R5IiwiZiIsInkiLCJ0IiwiZyIsIl8iLCJsYWJlbCIsInNlbnQiLCJ0cnlzIiwib3BzIiwidmVyYiIsInYiLCJvcCIsIlR5cGVFcnJvciIsInBvcCIsImxlbmd0aCIsInN0ZXAiLCJfX2dlbmVyYXRvciIsIlAiLCJQcm9taXNlIiwicmVzb2x2ZSIsInJlamVjdCIsImZ1bGZpbGxlZCIsInJlamVjdGVkIiwidGhlbiIsImFwcGx5IiwiT2JqZWN0IiwiY3JlYXRlIiwiU1dSR2xvYmFsU3RhdGUiLCJXZWFrTWFwIiwiRU1QVFlfQ0FDSEUiLCJJTklUSUFMX0NBQ0hFIiwibm9vcCIsIlVOREVGSU5FRCIsIk9CSkVDVCIsImlzVW5kZWZpbmVkIiwiaXNGdW5jdGlvbiIsIm1lcmdlT2JqZWN0cyIsImEiLCJiIiwiU1RSX1VOREVGSU5FRCIsImlzV2luZG93RGVmaW5lZCIsIndpbmRvdyIsImlzRG9jdW1lbnREZWZpbmVkIiwiY3JlYXRlQ2FjaGVIZWxwZXIiLCJjYWNoZSIsImtleSIsInN0YXRlIiwiZ2V0IiwiaW5mbyIsInByZXYiLCJ0YWJsZSIsImNvdW50ZXIiLCJzdGFibGVIYXNoIiwiYXJnIiwidHlwZSIsImNvbnN0cnVjdG9yIiwiaXNEYXRlIiwiRGF0ZSIsImluZGV4IiwiUmVnRXhwIiwidG9KU09OIiwidG9TdHJpbmciLCJKU09OIiwic3RyaW5naWZ5Iiwic2V0IiwiQXJyYXkiLCJrZXlzIiwic29ydCIsIm9ubGluZSIsIm9uV2luZG93RXZlbnQiLCJvZmZXaW5kb3dFdmVudCIsImJpbmQiLCJwcmVzZXQiLCJpc09ubGluZSIsImlzVmlzaWJsZSIsInZpc2liaWxpdHlTdGF0ZSIsImRlZmF1bHRDb25maWdPcHRpb25zIiwiaW5pdEZvY3VzIiwiaW5pdFJlY29ubmVjdCIsIm9uT25saW5lIiwib25PZmZsaW5lIiwiSVNfUkVBQ1RfTEVHQUNZIiwiSVNfU0VSVkVSIiwidXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCIsInVzZUxheW91dEVmZmVjdCIsIm5hdmlnYXRvckNvbm5lY3Rpb24iLCJuYXZpZ2F0b3IiLCJjb25uZWN0aW9uIiwic2xvd0Nvbm5lY3Rpb24iLCJpbmNsdWRlcyIsImVmZmVjdGl2ZVR5cGUiLCJzYXZlRGF0YSIsImVyciIsImFyZ3MiLCJpc0FycmF5IiwiX190aW1lc3RhbXAiLCJnZXRUaW1lc3RhbXAiLCJNVVRBVEVfRVZFTlQiLCJjb25zdGFudHMiLCJhc3luYyIsImludGVybmFsTXV0YXRlIiwiX2tleSIsIl9kYXRhIiwiX29wdHMiLCJwb3B1bGF0ZUNhY2hlIiwidGhyb3dPbkVycm9yIiwicmV2YWxpZGF0ZSIsInJvbGxiYWNrT25FcnJvck9wdGlvbiIsInJvbGxiYWNrT25FcnJvciIsIm9wdGltaXN0aWNEYXRhIiwia2V5RmlsdGVyIiwibWF0Y2hlZEtleXMiLCJpdCIsImtleUl0Iiwic3RhcnRzV2l0aCIsIl9rIiwiYWxsIiwibWFwIiwibXV0YXRlQnlLZXkiLCJFVkVOVF9SRVZBTElEQVRPUlMiLCJNVVRBVElPTiIsIkZFVENIIiwicmV2YWxpZGF0b3JzIiwic3RhcnRSZXZhbGlkYXRlIiwiYmVmb3JlTXV0YXRpb25UcyIsImhhc09wdGltaXN0aWNEYXRhIiwiZGlzcGxheWVkRGF0YSIsImN1cnJlbnREYXRhIiwiX2MiLCJjb21taXR0ZWREYXRhIiwiY2F0Y2giLCJyZXMiLCJyZXZhbGlkYXRlQWxsS2V5cyIsImluaXRDYWNoZSIsInByb3ZpZGVyIiwiaGFzIiwib3B0cyIsIm11dGF0ZSIsInVubW91bnQiLCJzdWJzY3JpcHRpb25zIiwic3Vic2NyaWJlIiwic3VicyIsInNwbGljZSIsImluZGV4T2YiLCJzZXR0ZXIiLCJpbml0UHJvdmlkZXIiLCJyZWxlYXNlRm9jdXMiLCJzZXRUaW1lb3V0IiwicmVsZWFzZVJlY29ubmVjdCIsImRlbGV0ZSIsIk1hcCIsImRlZmF1bHRDb25maWciLCJvbkxvYWRpbmdTbG93Iiwib25TdWNjZXNzIiwib25FcnJvciIsIm9uRXJyb3JSZXRyeSIsIl9fIiwiY29uZmlnIiwibWF4UmV0cnlDb3VudCIsImVycm9yUmV0cnlDb3VudCIsImN1cnJlbnRSZXRyeUNvdW50IiwicmV0cnlDb3VudCIsInRpbWVvdXQiLCJNYXRoIiwicmFuZG9tIiwiZXJyb3JSZXRyeUludGVydmFsIiwib25EaXNjYXJkZWQiLCJyZXZhbGlkYXRlT25Gb2N1cyIsInJldmFsaWRhdGVPblJlY29ubmVjdCIsInJldmFsaWRhdGVJZlN0YWxlIiwic2hvdWxkUmV0cnlPbkVycm9yIiwiZm9jdXNUaHJvdHRsZUludGVydmFsIiwiZGVkdXBpbmdJbnRlcnZhbCIsImxvYWRpbmdUaW1lb3V0IiwiY29tcGFyZSIsIm5ld0RhdGEiLCJpc1BhdXNlZCIsImZhbGxiYWNrIiwiU1dSQ29uZmlnQ29udGV4dCIsImNyZWF0ZUNvbnRleHQiLCJlbmFibGVEZXZ0b29scyIsIl9fU1dSX0RFVlRPT0xTX1VTRV9fIiwidXNlIiwidXNlU1dSQ29uZmlnIiwidXNlQ29udGV4dCIsImNvbmNhdCIsInVzZVNXUk5leHQiLCJrZXlfIiwiZmV0Y2hlcl8iLCJQUkVMT0FEIiwicmVxIiwiX19TV1JfREVWVE9PTFNfUkVBQ1RfXyIsIldJVEhfREVEVVBFIiwiZGVkdXBlIiwidXNlU1dSSG9va3NDb25maWciLCJzd3JDb25maWciLCJ1c2VNZW1vIiwidXNlVG9nZ2xlIiwiaW5pdGlhbFZhbHVlIiwic2V0VmFsdWUiLCJuZXdWYWx1ZSIsInByZXZWYWx1ZSIsImRlZmluZVByb3BlcnR5IiwicHJvcHMiLCJwYXJlbnRDb25maWciLCJpc0Z1bmN0aW9uYWxDb25maWciLCJleHRlbmRlZENvbmZpZyIsInUxIiwiZjEiLCJ1MiIsImYyIiwibWVyZ2VDb25maWdzIiwiY2FjaGVDb250ZXh0IiwiY3JlYXRlRWxlbWVudCIsIlByb3ZpZGVyIiwiY2MiLCJvYmoiLCJvdXQiLCJ0bXAiLCJrIiwiaGFzT3duUHJvcGVydHkiLCJpc2ZmIiwidXNlckFnZW50IiwidG9Mb3dlckNhc2UiLCJhZGRFdmVudCIsIm9iamVjdCIsIm1ldGhvZCIsInVzZUNhcHR1cmUiLCJhdHRhY2hFdmVudCIsImdldE1vZHMiLCJtb2RpZmllciIsIm1vZHMiLCJzbGljZSIsImdldEtleXMiLCJyZXBsYWNlIiwic3BsaXQiLCJsYXN0SW5kZXhPZiIsIl9rZXlNYXAiLCJiYWNrc3BhY2UiLCJ0YWIiLCJjbGVhciIsImVudGVyIiwicmV0dXJuIiwiZXNjIiwiZXNjYXBlIiwic3BhY2UiLCJsZWZ0IiwidXAiLCJyaWdodCIsImRvd24iLCJkZWwiLCJpbnMiLCJpbnNlcnQiLCJob21lIiwiZW5kIiwicGFnZXVwIiwicGFnZWRvd24iLCJjYXBzbG9jayIsIm51bV8wIiwibnVtXzEiLCJudW1fMiIsIm51bV8zIiwibnVtXzQiLCJudW1fNSIsIm51bV82IiwibnVtXzciLCJudW1fOCIsIm51bV85IiwibnVtX211bHRpcGx5IiwibnVtX2FkZCIsIm51bV9lbnRlciIsIm51bV9zdWJ0cmFjdCIsIm51bV9kZWNpbWFsIiwibnVtX2RpdmlkZSIsIl9tb2RpZmllciIsInNoaWZ0IiwiYWx0Iiwib3B0aW9uIiwiY3RybCIsImNvbnRyb2wiLCJjbWQiLCJjb21tYW5kIiwibW9kaWZpZXJNYXAiLCJzaGlmdEtleSIsImN0cmxLZXkiLCJhbHRLZXkiLCJtZXRhS2V5IiwiX21vZHMiLCJfaGFuZGxlcnMiLCJfZG93bktleXMiLCJ3aW5MaXN0ZW5kRm9jdXMiLCJfc2NvcGUiLCJlbGVtZW50SGFzQmluZEV2ZW50IiwiY29kZSIsIngiLCJ0b1VwcGVyQ2FzZSIsImNoYXJDb2RlQXQiLCJzZXRTY29wZSIsInNjb3BlIiwiZ2V0U2NvcGUiLCJlYWNoVW5iaW5kIiwiX3JlZiIsIl9yZWYkc3BsaXRLZXkiLCJzcGxpdEtleSIsImZvckVhY2giLCJvcmlnaW5LZXkiLCJ1bmJpbmRLZXlzIiwibGVuIiwibGFzdEtleSIsImtleUNvZGUiLCJmaWx0ZXIiLCJyZWNvcmQiLCJhMSIsImEyIiwiYXJyMSIsImFycjIiLCJpc0luZGV4IiwiY29tcGFyZUFycmF5IiwiZXZlbnRIYW5kbGVyIiwiaGFuZGxlciIsImVsZW1lbnQiLCJtb2RpZmllcnNNYXRjaCIsInByb3RvdHlwZSIsInNob3J0Y3V0IiwicHJldmVudERlZmF1bHQiLCJyZXR1cm5WYWx1ZSIsInN0b3BQcm9wYWdhdGlvbiIsImNhbmNlbEJ1YmJsZSIsImFzdGVyaXNrIiwid2hpY2giLCJjaGFyQ29kZSIsImhvdGtleXMiLCJrZXlOYW1lIiwia2V5TnVtIiwiZ2V0TW9kaWZpZXJTdGF0ZSIsImtleWRvd24iLCJrZXl1cCIsIl9pIiwia2V5U2hvcnRjdXQiLCJfZG93bktleXNDdXJyZW50Iiwiam9pbiIsImlzRWxlbWVudEJpbmQiLCJjbGVhck1vZGlmaWVyIiwiX2FwaSIsImRlbGV0ZVNjb3BlIiwibmV3U2NvcGUiLCJoYW5kbGVycyIsImdldFByZXNzZWRLZXlDb2RlcyIsImlzUHJlc3NlZCIsInNyY0VsZW1lbnQiLCJ0YWdOYW1lIiwiZmxhZyIsImlzQ29udGVudEVkaXRhYmxlIiwicmVhZE9ubHkiLCJ0cmlnZ2VyIiwiYXJndW1lbnRzIiwiZmluZCIsIml0ZW0iLCJ1bmJpbmQiLCJrZXlzSW5mbyIsIl9sZW4iLCJrZXlNYXAiLCJfaG90a2V5cyIsIm5vQ29uZmxpY3QiLCJkZWVwIiwidXNlSXNIb3RrZXlQcmVzc2VkIiwidGFnRmlsdGVyIiwiZW5hYmxlT25UYWdzIiwidGFyZ2V0VGFnTmFtZSIsIkJvb2xlYW4iLCJpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0IiwiZXYiLCJ1c2VIb3RrZXlzIiwiZGVwcyIsIl9yZWYyIiwiX3JlZjIkZmlsdGVyUHJldmVudERlIiwiZmlsdGVyUHJldmVudERlZmF1bHQiLCJfcmVmMiRlbmFibGVkIiwiZW5hYmxlZCIsIl9yZWYyJGVuYWJsZU9uQ29udGVudCIsImVuYWJsZU9uQ29udGVudEVkaXRhYmxlIiwibWVtb2lzZWRDYWxsYmFjayIsImtleWJvYXJkRXZlbnQiLCJob3RrZXlzRXZlbnQiLCJfa2V5Ym9hcmRFdmVudCR0YXJnZXQiLCJfcmVmJGN1cnJlbnQiLCJhY3RpdmVFbGVtZW50IiwiaXNIb3RrZXlQcmVzc2VkIiwiY2xhc3NDYWxsQ2hlY2siLCJpbnN0YW5jZSIsIkNvbnN0cnVjdG9yIiwiY3JlYXRlQ2xhc3MiLCJkZWZpbmVQcm9wZXJ0aWVzIiwiZGVzY3JpcHRvciIsImVudW1lcmFibGUiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsInByb3RvUHJvcHMiLCJzdGF0aWNQcm9wcyIsInBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4iLCJzZWxmIiwiUmVmZXJlbmNlRXJyb3IiLCJJbmZpbml0ZUxvYWRlciIsIl9QdXJlQ29tcG9uZW50IiwiX3RlbXAiLCJfX3Byb3RvX18iLCJnZXRQcm90b3R5cGVPZiIsIl9sYXN0UmVuZGVyZWRTdGFydEluZGV4IiwiX2xhc3RSZW5kZXJlZFN0b3BJbmRleCIsIl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzIiwiX29uSXRlbXNSZW5kZXJlZCIsInZpc2libGVTdGFydEluZGV4IiwidmlzaWJsZVN0b3BJbmRleCIsIl9lbnN1cmVSb3dzTG9hZGVkIiwiX3NldFJlZiIsImxpc3RSZWYiLCJfbGlzdFJlZiIsInN1YkNsYXNzIiwic3VwZXJDbGFzcyIsInNldFByb3RvdHlwZU9mIiwiaW5oZXJpdHMiLCJhdXRvUmVsb2FkIiwiY2hpbGRyZW4iLCJvbkl0ZW1zUmVuZGVyZWQiLCJzdGFydEluZGV4Iiwic3RvcEluZGV4IiwiX3Byb3BzIiwiaXNJdGVtTG9hZGVkIiwiaXRlbUNvdW50IiwiX3Byb3BzJG1pbmltdW1CYXRjaFNpIiwibWluaW11bUJhdGNoU2l6ZSIsIl9wcm9wcyR0aHJlc2hvbGQiLCJ0aHJlc2hvbGQiLCJ1bmxvYWRlZFJhbmdlcyIsInJhbmdlU3RhcnRJbmRleCIsInJhbmdlU3RvcEluZGV4IiwiX2luZGV4IiwicG90ZW50aWFsU3RvcEluZGV4IiwibWluIiwibWF4IiwiX2luZGV4MiIsIl9pbmRleDMiLCJzY2FuRm9yVW5sb2FkZWRSYW5nZXMiLCJzb21lIiwic3RhcnRPclN0b3AiLCJfbG9hZFVubG9hZGVkUmFuZ2VzIiwiX3RoaXMyIiwibG9hZE1vcmVJdGVtcyIsImxvYWRNb3JlUm93cyIsIl9sb29wIiwibGFzdFJlbmRlcmVkU3RhcnRJbmRleCIsImxhc3RSZW5kZXJlZFN0b3BJbmRleCIsInJlc2V0QWZ0ZXJJbmRleCIsIl9nZXRJdGVtU3R5bGVDYWNoZSIsImZvcmNlVXBkYXRlIiwiUHVyZUNvbXBvbmVudCIsIl9leHRlbmRzIiwiYXNzaWduIiwic291cmNlIiwiX2Fzc2VydFRoaXNJbml0aWFsaXplZCIsIl9pbmhlcml0c0xvb3NlIiwic2FmZUlzTmFOIiwiTnVtYmVyIiwiaXNOYU4iLCJhcmVJbnB1dHNFcXVhbCIsIm5ld0lucHV0cyIsImxhc3RJbnB1dHMiLCJmaXJzdCIsInNlY29uZCIsInJlc3VsdEZuIiwiaXNFcXVhbCIsImxhc3RUaGlzIiwibGFzdFJlc3VsdCIsImxhc3RBcmdzIiwiY2FsbGVkT25jZSIsIm5ld0FyZ3MiLCJfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZSIsImV4Y2x1ZGVkIiwic291cmNlS2V5cyIsIm5vdyIsInBlcmZvcm1hbmNlIiwiY2FuY2VsVGltZW91dCIsInRpbWVvdXRJRCIsImNhbmNlbEFuaW1hdGlvbkZyYW1lIiwiaWQiLCJyZXF1ZXN0VGltZW91dCIsImRlbGF5Iiwic3RhcnQiLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJ0aWNrIiwic2l6ZSIsImdldFNjcm9sbGJhclNpemUiLCJyZWNhbGN1bGF0ZSIsImRpdiIsInN0eWxlIiwid2lkdGgiLCJoZWlnaHQiLCJvdmVyZmxvdyIsImFwcGVuZENoaWxkIiwib2Zmc2V0V2lkdGgiLCJjbGllbnRXaWR0aCIsInJlbW92ZUNoaWxkIiwiY2FjaGVkUlRMUmVzdWx0IiwiZ2V0UlRMT2Zmc2V0VHlwZSIsIm91dGVyRGl2Iiwib3V0ZXJTdHlsZSIsImRpcmVjdGlvbiIsImlubmVyRGl2IiwiaW5uZXJTdHlsZSIsInNjcm9sbExlZnQiLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwiLCJkZWZhdWx0SXRlbUtleSIsImNvbHVtbkluZGV4Iiwicm93SW5kZXgiLCJjcmVhdGVHcmlkQ29tcG9uZW50IiwiX2NsYXNzIiwiZ2V0Q29sdW1uT2Zmc2V0IiwiZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCIsImdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJnZXRDb2x1bW5XaWR0aCIsImdldEVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCIsImdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCIsImdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCIsImdldFJvd0hlaWdodCIsImdldFJvd09mZnNldCIsImdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiaW5pdEluc3RhbmNlUHJvcHMiLCJzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlIiwidmFsaWRhdGVQcm9wcyIsIkdyaWQiLCJfaW5zdGFuY2VQcm9wcyIsIl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkIiwiX291dGVyUmVmIiwiaXNTY3JvbGxpbmciLCJob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbExlZnQiLCJzY3JvbGxUb3AiLCJpbml0aWFsU2Nyb2xsVG9wIiwic2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwidmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfY2FsbE9uSXRlbXNSZW5kZXJlZCIsIm92ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCIsIm92ZXJzY2FuQ29sdW1uU3RvcEluZGV4Iiwib3ZlcnNjYW5Sb3dTdGFydEluZGV4Iiwib3ZlcnNjYW5Sb3dTdG9wSW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCIsInZpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJ2aXNpYmxlUm93U3RhcnRJbmRleCIsInZpc2libGVSb3dTdG9wSW5kZXgiLCJfY2FsbE9uU2Nyb2xsIiwib25TY3JvbGwiLCJfZ2V0SXRlbVN0eWxlIiwiX3RoaXMkcHJvcHMiLCJjb2x1bW5XaWR0aCIsInJvd0hlaWdodCIsIml0ZW1TdHlsZUNhY2hlIiwiX29mZnNldCIsImlzUnRsIiwicG9zaXRpb24iLCJ0b3AiLCJfX18iLCJfb25TY3JvbGwiLCJfZXZlbnQkY3VycmVudFRhcmdldCIsImN1cnJlbnRUYXJnZXQiLCJjbGllbnRIZWlnaHQiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCIsInNldFN0YXRlIiwicHJldlN0YXRlIiwiY2FsY3VsYXRlZFNjcm9sbExlZnQiLCJjYWxjdWxhdGVkU2Nyb2xsVG9wIiwiX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQiLCJfb3V0ZXJSZWZTZXR0ZXIiLCJvdXRlclJlZiIsIl9yZXNldElzU2Nyb2xsaW5nIiwiZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzIiwibmV4dFByb3BzIiwidmFsaWRhdGVTaGFyZWRQcm9wcyIsIl9wcm90byIsInNjcm9sbFRvIiwiX3JlZjMiLCJzY3JvbGxUb0l0ZW0iLCJfcmVmNCIsIl9yZWY0JGFsaWduIiwiYWxpZ24iLCJfdGhpcyRwcm9wczIiLCJjb2x1bW5Db3VudCIsInJvd0NvdW50IiwiX3RoaXMkc3RhdGUiLCJzY3JvbGxiYXJTaXplIiwiZXN0aW1hdGVkVG90YWxIZWlnaHQiLCJob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSIsInZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSIsImNvbXBvbmVudERpZE1vdW50IiwiX3RoaXMkcHJvcHMzIiwiX2NhbGxQcm9wc0NhbGxiYWNrcyIsImNvbXBvbmVudERpZFVwZGF0ZSIsIl90aGlzJHN0YXRlMiIsImNvbXBvbmVudFdpbGxVbm1vdW50IiwicmVuZGVyIiwiX3RoaXMkcHJvcHM0IiwiY2xhc3NOYW1lIiwiaW5uZXJSZWYiLCJpbm5lckVsZW1lbnRUeXBlIiwiaW5uZXJUYWdOYW1lIiwiaXRlbURhdGEiLCJfdGhpcyRwcm9wczQkaXRlbUtleSIsIml0ZW1LZXkiLCJvdXRlckVsZW1lbnRUeXBlIiwib3V0ZXJUYWdOYW1lIiwidXNlSXNTY3JvbGxpbmciLCJfdGhpcyRfZ2V0SG9yaXpvbnRhbFIiLCJfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIiLCJjb2x1bW5TdGFydEluZGV4IiwiY29sdW1uU3RvcEluZGV4IiwiX3RoaXMkX2dldFZlcnRpY2FsUmFuIiwiX2dldFZlcnRpY2FsUmFuZ2VUb1JlbmRlciIsInJvd1N0YXJ0SW5kZXgiLCJyb3dTdG9wSW5kZXgiLCJpdGVtcyIsIl9yb3dJbmRleCIsIl9jb2x1bW5JbmRleCIsImVzdGltYXRlZFRvdGFsV2lkdGgiLCJXZWJraXRPdmVyZmxvd1Njcm9sbGluZyIsIndpbGxDaGFuZ2UiLCJwb2ludGVyRXZlbnRzIiwiX3RoaXMkcHJvcHM1IiwiX3RoaXMkX2dldEhvcml6b250YWxSMiIsIl9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgiLCJfb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXgiLCJfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgiLCJfdmlzaWJsZUNvbHVtblN0b3BJbmRleCIsIl90aGlzJF9nZXRWZXJ0aWNhbFJhbjIiLCJfb3ZlcnNjYW5Sb3dTdGFydEluZGV4IiwiX292ZXJzY2FuUm93U3RvcEluZGV4IiwiX3Zpc2libGVSb3dTdGFydEluZGV4IiwiX3Zpc2libGVSb3dTdG9wSW5kZXgiLCJfdGhpcyRzdGF0ZTMiLCJfaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiIsIl9zY3JvbGxMZWZ0IiwiX3Njcm9sbFRvcCIsIl9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQiLCJfdmVydGljYWxTY3JvbGxEaXJlY3Rpb24iLCJfdGhpcyRwcm9wczYiLCJvdmVyc2NhbkNvbHVtbkNvdW50Iiwib3ZlcnNjYW5Db2x1bW5zQ291bnQiLCJvdmVyc2NhbkNvdW50IiwiX3RoaXMkc3RhdGU0Iiwib3ZlcnNjYW5Db3VudFJlc29sdmVkIiwib3ZlcnNjYW5CYWNrd2FyZCIsIm92ZXJzY2FuRm9yd2FyZCIsIl90aGlzJHByb3BzNyIsIm92ZXJzY2FuUm93Q291bnQiLCJvdmVyc2NhblJvd3NDb3VudCIsIl90aGlzJHN0YXRlNSIsImRlZmF1bHRQcm9wcyIsIl9yZWY1IiwiX3JlZjYiLCJyb3dNZXRhZGF0YU1hcCIsImVzdGltYXRlZFJvd0hlaWdodCIsImxhc3RNZWFzdXJlZFJvd0luZGV4IiwidG90YWxTaXplT2ZNZWFzdXJlZFJvd3MiLCJpdGVtTWV0YWRhdGEiLCJvZmZzZXQiLCJjb2x1bW5NZXRhZGF0YU1hcCIsImVzdGltYXRlZENvbHVtbldpZHRoIiwibGFzdE1lYXN1cmVkQ29sdW1uSW5kZXgiLCJnZXRJdGVtTWV0YWRhdGEiLCJpdGVtVHlwZSIsImluc3RhbmNlUHJvcHMiLCJpdGVtTWV0YWRhdGFNYXAiLCJpdGVtU2l6ZSIsImxhc3RNZWFzdXJlZEluZGV4IiwiZmluZE5lYXJlc3RJdGVtIiwiZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoIiwiZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2giLCJoaWdoIiwibG93IiwibWlkZGxlIiwiZmxvb3IiLCJjdXJyZW50T2Zmc2V0IiwiaW50ZXJ2YWwiLCJnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCIsInNjcm9sbE9mZnNldCIsImVzdGltYXRlZFRvdGFsU2l6ZSIsIm1heE9mZnNldCIsIm1pbk9mZnNldCIsInJvdW5kIiwiVmFyaWFibGVTaXplR3JpZCIsInJlc2V0QWZ0ZXJDb2x1bW5JbmRleCIsInNob3VsZEZvcmNlVXBkYXRlIiwicmVzZXRBZnRlckluZGljZXMiLCJyZXNldEFmdGVyUm93SW5kZXgiLCJfcmVmNiRzaG91bGRGb3JjZVVwZGEiLCJfcmVmNyIsIklTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCQxIiwiZGVmYXVsdEl0ZW1LZXkkMSIsImNyZWF0ZUxpc3RDb21wb25lbnQiLCJnZXRJdGVtT2Zmc2V0IiwiZ2V0RXN0aW1hdGVkVG90YWxTaXplIiwiZ2V0SXRlbVNpemUiLCJnZXRTdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsIkxpc3QiLCJzY3JvbGxEaXJlY3Rpb24iLCJpbml0aWFsU2Nyb2xsT2Zmc2V0Iiwib3ZlcnNjYW5TdGFydEluZGV4Iiwib3ZlcnNjYW5TdG9wSW5kZXgiLCJsYXlvdXQiLCJpc0hvcml6b250YWwiLCJvZmZzZXRIb3Jpem9udGFsIiwiX29uU2Nyb2xsSG9yaXpvbnRhbCIsIl9vblNjcm9sbFZlcnRpY2FsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQyIiwidmFsaWRhdGVTaGFyZWRQcm9wcyQxIiwiX3RoaXMkcHJvcHM1JGl0ZW1LZXkiLCJfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQiLCJfZ2V0UmFuZ2VUb1JlbmRlciIsIl90aGlzJF9nZXRSYW5nZVRvUmVuZDIiLCJfb3ZlcnNjYW5TdGFydEluZGV4IiwiX292ZXJzY2FuU3RvcEluZGV4IiwiX3Zpc2libGVTdGFydEluZGV4IiwiX3Zpc2libGVTdG9wSW5kZXgiLCJfc2Nyb2xsRGlyZWN0aW9uIiwiX3Njcm9sbE9mZnNldCIsImdldEl0ZW1NZXRhZGF0YSQxIiwiZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoJDEiLCJlc3RpbWF0ZWRJdGVtU2l6ZSIsInRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyIsIlZhcmlhYmxlU2l6ZUxpc3QiLCJmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxIiwiZmluZE5lYXJlc3RJdGVtJDEiLCJGaXhlZFNpemVHcmlkIiwibGFzdENvbHVtbk9mZnNldCIsIm1pZGRsZU9mZnNldCIsImNlaWwiLCJfcmVmOCIsImxhc3RSb3dPZmZzZXQiLCJfcmVmOSIsIl9yZWYxMCIsIm51bVZpc2libGVDb2x1bW5zIiwiX3JlZjExIiwiX3JlZjEyIiwibnVtVmlzaWJsZVJvd3MiLCJfcmVmMTMiLCJGaXhlZFNpemVMaXN0IiwibGFzdEl0ZW1PZmZzZXQiLCJudW1WaXNpYmxlSXRlbXMiLCJzaGFsbG93RGlmZmVycyIsImF0dHJpYnV0ZSIsIl9hdHRyaWJ1dGUiLCJfZXhjbHVkZWQiLCJfZXhjbHVkZWQyIiwiYXJlRXF1YWwiLCJwcmV2UHJvcHMiLCJwcmV2U3R5bGUiLCJwcmV2UmVzdCIsIm5leHRTdHlsZSIsIm5leHRSZXN0Iiwic2hvdWxkQ29tcG9uZW50VXBkYXRlIiwibmV4dFN0YXRlIiwib25DbGljayIsIm9uUG9pbnRlckRvd24iLCJjb250YWluZXJSZWYiLCJkaXNhYmxlZCIsImludmVydGVkIiwicm91bmRlZCIsIm5vU2hhZG93Iiwibm9QYWRkaW5nIiwibm9Cb3JkZXIiLCJ0cmFuc3BhcmVudCIsInN0cmV0Y2hIb3Jpem9udGFsbHkiLCJzdHJldGNoVmVydGljYWxseSIsImF1dG9Gb2N1cyIsIm9mZnNldFNpZGVzIiwiY29udGFpbmVyIiwibGVmdE9mZnNldCIsInJpZ2h0T2Zmc2V0Iiwicm9sZSIsImNvbnRlbnQiLCJkZWZhdWx0IiwiYnV0dG9uQmFkZ2UiLCJDb21wb25lbnQiLCJvbkNoYW5nZSIsInBsYWNlaG9sZGVyIiwiY2hlY2tlZCIsIm5hbWUiLCJpbmRldGVybWluYXRlIiwiaGFuZGxlQ2hhbmdlIiwiTGFiZWwiLCJpbnB1dFJlZiIsImNoZWNrYm94IiwiY29sb3JzIiwib25TZWxlY3QiLCJzZWxlY3RlZENvbG9yIiwiY2FuVG9nZ2xlIiwiY29sb3JQaWNrZXIiLCJjb2xvciIsIkNvbG9yU3dhdGNoIiwiaXNTZWxlY3RlZCIsImNvbG9yU3dhdGNoIiwic2VsZWN0ZWQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZXhDb2RlIiwic3JPbmx5IiwiQ29uZmlybWF0aW9uTW9kYWwiLCJoZWFkZXIiLCJpc09wZW4iLCJidXR0b25zTGVmdCIsImJ1dHRvbnNSaWdodCIsIm9uQ2xvc2UiLCJub092ZXJsYXkiLCJiYXNlWkluZGV4IiwiTW9kYWwiLCJtb2RhbEhlYWRlciIsIm1vZGFsQ29udGVudCIsIm1vZGFsQnV0dG9uc0NvbnRhaW5lciIsIm1vZGFsQnV0dG9ucyIsImRpc3BsYXlOYW1lIiwiZGlzcGxheSIsImlzRGlzYWJsZWQiLCJCdXR0b24iLCJJY29uIiwic3JjIiwiaXRlbUJvZHlSZW5kZXJlciIsImhhbmRsZVNlbGVjdCIsInJlbmRlckNsaWNrYWJsZSIsInNlbGVjdGVkSXRlbSIsInBsYWNlbWVudCIsInZlcnRpY2FsIiwiaG9yaXpvbnRhbCIsInNldElzT3BlbiIsInRvZ2dsZUlzT3BlbiIsIk1lbnVDb250YWluZXIiLCJidXR0b24iLCJDbGlja2FibGUiLCJNZW51IiwiTWVudUl0ZW0iLCJpc0FjdGl2ZSIsIkRyb3Bkb3duIiwiYWNjZXB0IiwibXVsdGlwbGUiLCJpbnB1dCIsInBhcmVudCIsImhvcml6b250YWxQbGFjZW1lbnQiLCJ2ZXJ0aWNhbFBsYWNlbWVudCIsImZpeGVkIiwiaWNvbiIsImNyb3NzT3JpZ2luIiwidG9wT2Zmc2V0IiwiYm90dG9tT2Zmc2V0Iiwic3JjV2lkdGgiLCJzcmNIZWlnaHQiLCJkZWNvZGluZyIsImxvYWRpbmciLCJpbWFnZUVsZW1lbnQiLCJpbWFnZSIsImhhc092ZXJsYXkiLCJvdmVybGF5IiwiaGVhZGVyQWN0aW9ucyIsImhlYWRlckxhYmVsIiwidGV4dCIsImxpc3QiLCJhY3RpdmUiLCJsaXN0Vmlld0l0ZW0iLCJCdXR0b25MaW5rIiwiYXMiLCJmb290ZXIiLCJzbWFydExheW91dCIsIm1lbnVQbGFjZW1lbnQiLCJQbGFjZW1lbnRDb250ZXh0IiwiRXJyb3IiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJib3R0b20iLCJkaXN0YW5jZVRvRWRnZSIsImlubmVySGVpZ2h0IiwidWxFbCIsInF1ZXJ5U2VsZWN0b3IiLCJjaGlsZEVsZW1lbnRzIiwicXVlcnlTZWxlY3RvckFsbCIsIm5ld0hlaWdodCIsImdldENvbXB1dGVkU3R5bGUiLCJtaW5IZWlnaHQiLCJtYXhIZWlnaHQiLCJtZW51Iiwib3BlbiIsImZvcndhcmRSZWYiLCJtZW51Q29udGFpbmVyIiwibWVudUl0ZW0iLCJtZW51TGlua0l0ZW0iLCJoYW5kbGVPdmVybGF5Q2xpY2siLCJ6SW5kZXgiLCJtb2RhbCIsIm1vZGFsQnV0dG9uIiwiYXBwZW5kRGlnaXQiLCJudW1iZXIiLCJkaWdpdCIsInBvcERpZ2l0IiwiZXZlbnREaWdpdEtleXMiLCJOdW1wYWQiLCJjcmVhdGVFbWl0TnVtYmVySGFuZGxlciIsIm5ld051bWJlciIsIk51bXBhZEtleXMiLCJmaWxsIiwibnVtcGFkVmFsdWUiLCJudW1wYWQiLCJ0YWJJbmRleCIsIm9uS2V5RG93biIsInBhcnNlSW50IiwibnVtYmVycyIsImlzRml4ZWQiLCJleHBhbmRlZCIsInRvZ2dsZUV4cGFuZCIsImhhbmRsZUdyb3VwQ2xpY2siLCJPcHRpb24iLCJTZWxlY3RDb250ZXh0Iiwic2VsZWN0ZWRPcHRpb25zIiwidXBkYXRlU2VsZWN0ZWRPcHRpb24iLCJpc0NoZWNrZWQiLCJjaGVja2JveENvbnRhaW5lciIsIkNoZWNrYm94IiwiaXNPcHRpb24iLCJvbkZpbHRlciIsInNlbGVjdEFsbENoZWNrZWQiLCJ0b2dnbGVTZWxlY3RBbGxDaGVja2VkIiwic2VhcmNoS2V5d29yZCIsInNlbGVjdEFsbCIsInNldFNlbGVjdGVkT3B0aW9ucyIsImhhc0dyb3VwT3B0aW9uIiwiZmlsdGVyT3B0aW9ucyIsImtleXdvcmQiLCJ0cmltIiwiZmlsdGVyZWRPcHRpb25zIiwicmVkdWNlIiwiZmlsdGVyZWQiLCJncm91cE9wdGlvbiIsImZpbHRlcmVkR3JvdXBPcHRpb25zIiwiaGFuZGxlU2VsZWN0QWxsQ2xpY2siLCJzZWxlY3RBbGxDb250YWluZXIiLCJHcm91cE9wdGlvbiIsInNldFNlYXJjaEtleXdvcmQiLCJoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlIiwiVGV4dElucHV0IiwiZGVmYXVsdFZhbHVlIiwic2hvd1NlbGVjdGVkQXNUYWdzIiwib3BlbmVkIiwidG9nZ2xlT3BlbmVkIiwiaGFuZGxlT3BlblNlbGVjdCIsInZhbHVlcyIsIlNlbGVjdENvbnRleHRQcm92aWRlciIsIlNlbGVjdG9yIiwiSWNvbkJ1dHRvbiIsImljb25CdXR0b24iLCJzZWFyY2hDb250YWluZXIiLCJTZWFyY2giLCJPcHRpb25MaXN0IiwiaW5pdGlhbFN0YXRlIiwidXBkYXRlZFNlbGVjdGVkT3B0aW9ucyIsImNvbnRleHRWYWx1ZSIsImhhbmRsZVRhZ0NsaWNrIiwiaGFuZGxlVGFnQ2xvc2UiLCJzaG93QXNUYWdzIiwiVGFnIiwiY2xvc2FibGUiLCJzaG93QXNUZXh0IiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJvblJvd0NsaWNrIiwiaGFzQXJyb3ciLCJvbkxvYWRNb3JlIiwicGFnZSIsInNldFBhZ2UiLCJwYWdlU2l6ZSIsIlRhYmxlQ29uZmlnIiwiUEFHRV9TSVpFIiwidGFibGVIZWlnaHQiLCJST1dfSEVJR0hUIiwiaGVhZGVySGVpZ2h0IiwiSEVBREVSX0hFSUdIVCIsImRpc2FibGVMYXp5TG9hZGVyIiwiYWN0aXZlUm93cyIsIml0ZW1zQ291bnQiLCJpc0hlYWRlclN0aWNreSIsImhhc1ZpcnR1YWxTY3JvbGwiLCJzZXRTY3JvbGxUb3AiLCJyZW5kZXJSb3ciLCJyb3ciLCJoYW5kbGVMaXN0U2Nyb2xsIiwibG9hZE1vcmUiLCJJVEVNU19MT0FERUQiLCJwbGFjZWhvbGRlckNvbnRhaW5lciIsInNjcm9sbGJhckNvbnRhaW5lciIsImJvcmRlckJvdHRvbSIsImNvbHVtbiIsIm9uU29ydCIsInNvcnRhYmxlIiwic29ydGVkIiwiZGVmYXVsdFNvcnRPcmRlciIsInRpdGxlIiwiU29ydE9yZGVyIiwiREVTQyIsInNvcnRPcmRlciIsInNldFNvcnRPcmRlciIsImhhbmRsZVNvcnRDb2x1bW4iLCJuZXdTb3J0T3JkZXIiLCJBU0MiLCJjZWxsUHJvcHMiLCJ0YWJsZUhlYWRlckNlbGwiLCJzb3J0SWNvblZpc2libGUiLCJoYW5kbGVSb3dDbGljayIsImRhdGFJbmRleCIsImNsb3NlQnV0dG9uIiwib25CbHVyIiwicGF0dGVybiIsImlucHV0TW9kZSIsImlucHV0RWxlbWVudCIsInRleHRJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJpcyIsImwiLCJwIiwidXNlRGVidWdWYWx1ZSIsImdldFNuYXBzaG90IiwiZCIsInUiLCJpbnN0IiwiYyIsImV4cG9ydHMiLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIm1vZHVsZSIsInJlcXVpcmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJwcm9wIiwidG9TdHJpbmdUYWciLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ==
2
+ (()=>{"use strict";var e={5348:(e,t,n)=>{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 c=new WeakMap,d={},s={},f=()=>{},v=f(),p=Object,h=e=>e===v,m=e=>"function"==typeof e,_=(e,t)=>({...e,...t}),g="undefined",b=typeof window!=g,y=typeof document!=g,O=(e,t)=>{const n=c.get(e);return[()=>e.get(t)||d,r=>{if(!h(t)){const o=e.get(t);t in s||(s[t]=o),n[5](t,_(o,r),o||d)}},n[6],()=>!h(t)&&t in s?s[t]:e.get(t)||d]},w=new WeakMap;let M=0;const S=e=>{const t=typeof e,n=e&&e.constructor,r=n==Date;let o,a;if(p(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=++M+"~",w.set(e,o),n==Array){for(o="@",a=0;a<e.length;a++)o+=S(e[a])+",";w.set(e,o)}if(n==p){o="#";const t=p.keys(e).sort();for(;!h(a=t.pop());)h(e[a])||(o+=a+":"+S(e[a])+",");w.set(e,o)}}return o};let P=!0;const[C,x]=b&&window.addEventListener?[window.addEventListener.bind(window),window.removeEventListener.bind(window)]:[f,f],j={isOnline:()=>P,isVisible:()=>{const e=y&&document.visibilityState;return h(e)||"hidden"!==e}},I={initFocus:e=>(y&&document.addEventListener("visibilitychange",e),C("focus",e),()=>{y&&document.removeEventListener("visibilitychange",e),x("focus",e)}),initReconnect:e=>{const t=()=>{P=!0,e()},n=()=>{P=!1};return C("online",t),C("offline",n),()=>{x("online",t),x("offline",n)}}},E=!r.useId,k=!b||"Deno"in window,R=k?r.useEffect:r.useLayoutEffect,D="undefined"!=typeof navigator&&navigator.connection,z=!k&&D&&(["slow-2g","2g"].includes(D.effectiveType)||D.saveData),L=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)?S(e):"",t]};let T=0;const N=()=>++T,H=2;var A=H;async function B(...e){const[t,n,r,o]=e,a=_({populateCache:!0,throwOnError:!0},"boolean"==typeof o?{revalidate:o}:o||{});let i=a.populateCache;const l=a.rollbackOnError;let u=a.optimisticData;const d=!1!==a.revalidate,s=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;!o.startsWith("$inf$")&&e(t.get(o)._k)&&r.push(o)}return Promise.all(r.map(p))}return p(n);async function p(n){const[o]=L(n);if(!o)return;const[a,l]=O(t,o),[p,_,g]=c.get(t),b=p[o],y=()=>d&&(delete g[o],b&&b[0])?b[0](H).then((()=>a().data)):a().data;if(e.length<3)return y();let w,M=r;const S=N();_[o]=[S,0];const P=!h(u),C=a(),x=C.data,j=C._c,I=h(j)?x:j;if(P&&(u=m(u)?u(I):u,l({data:u,_c:I})),m(M))try{M=M(I)}catch(e){w=e}if(M&&m(M.then)){if(M=await M.catch((e=>{w=e})),S!==_[o][0]){if(w)throw w;return M}w&&P&&s(w)&&(i=!0,M=I,l({data:M,_c:v}))}i&&(w||(m(i)&&(M=i(M,I)),l({data:M,_c:v}))),_[o][1]=N();const E=await y();if(l({_c:v}),!w)return i?E:M;if(f)throw w}}const W=(e,t)=>{for(const n in e)e[n][0]&&e[n][0](t)},F=(e,t)=>{if(!c.has(e)){const n=_(I,t),r={},o=B.bind(v,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(let e=o.length;e--;)o[e](n,r)},d=()=>{if(!c.has(e)&&(c.set(e,[r,{},{},{},o,u,l]),!k)){const t=n.initFocus(setTimeout.bind(v,W.bind(v,r,0))),o=n.initReconnect(setTimeout.bind(v,W.bind(v,r,1)));a=()=>{t&&t(),o&&o(),c.delete(e)}}};return d(),[e,o,d,a]}return[e,c.get(e)[4]]},[V,G]=F(new Map),K=_({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:z?1e4:5e3,focusThrottleInterval:5e3,dedupingInterval:2e3,loadingTimeout:z?5e3:3e3,compare:(e,t)=>S(e)==S(t),isPaused:()=>!1,cache:V,mutate:G,fallback:{}},j),q=(0,r.createContext)({}),Z=b&&window.__SWR_DEVTOOLS_USE__,Q=Z?window.__SWR_DEVTOOLS_USE__:[],U=()=>_(K,(0,r.useContext)(q));Q.concat((e=>(t,n,r)=>e(t,n&&((...e)=>{const r=L(t)[0],[,,,o]=c.get(V),a=o[r];return a?(delete o[r],a):n(...e)}),r)));Z&&(window.__SWR_DEVTOOLS_REACT__=r);const Y={dedupe:!0};function X(){var e=U();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})}),[])]}p.defineProperty((e=>{const{value:t}=e,n=(0,r.useContext)(q),o=m(t),a=(0,r.useMemo)((()=>o?t(n):t),[o,n,t]),i=(0,r.useMemo)((()=>o?a:((e,t)=>{const n=_(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=_(o,i))}return n})(n,a)),[o,n,a]),l=a&&a.provider,[u]=(0,r.useState)((()=>l?F(l(i.cache||V),a):v));return u&&(i.cache=u[0],i.mutate=u[1]),R((()=>{if(u)return u[2]&&u[2](),u[3]}),[]),(0,r.createElement)(q.Provider,_(e,{value:i}))}),"defaultValue",{value:K})},7659:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={buttonBadge:"iOy_thUfwxIqZOrWSIzx",inverted:"g79jjcWVnmxLoPNyAx49"}},2457:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={colorPicker:"Kk2dp15HwMZzINbUFAZ4",horizontal:"JszO_Ug7pKLYQ0DehN8_",vertical:"EVT62lghC99e9bdjYly5"}},5057:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ZZVHcX45XCblmDab9ewZ",modalHeader:"xTX1XJfCSUsrh_yLlZoi",modalContent:"Te6jHdlyjsQXmnTs9ban",noPadding:"Lz_gwSwP3QCN5zYzFsEi",modalButtonsContainer:"Gh1uvxMfEgPTdt66Qis2",modalButtons:"Iaw34FkMJqjrGQ58BGfx"}},6114:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"rBafXkoTCn2Ah6xYYmxf"}},8117:(e,t,n)=>{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)=>{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)=>{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)=>{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)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"RDZylCMlGfeCUwSbyeIq"}},8639:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"i8Gu_W1w8WBAYflLIYzw",header:"Gp7R8wYwaLtFoKFcRtgN",headerLabel:"VGkotMTnqPRaKcGV8Rjg",list:"vg9QLtCYTAs5x3fF79zp"}},1725:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={listViewItem:"ZFUd7oSpPLt0Ed2XqaWZ"}},1349:(e,t,n)=>{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)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={menuItem:"gGZf_GsWswkr0NTD_nbQ",noPadding:"CM2bHSCxwuitMes7u9Wf",active:"s4tJlK4OFc3rnXL0Mxqk"}},3079:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={menuLinkItem:"X1F4SQkhQh0fxz5Yu3tH",noPadding:"kpDLXZSD2Kp19h9suRLA",active:"IwITjGn6vTZteEKjNoYc",menuItem:"ldoR6pGOrtgHMXSpmH7F"}},9118:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={numpad:"GevbbG3D0R34xGUFs5Y1",numbers:"fL5I1WKXCaU9vrBGyJB4"}},186:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={overlay:"Dh6jsQ15eMydsSMTCwRw",transparent:"WT6OPljC2qfbAWsk0z4r",fixed:"pu6s9Mj5T1YIgmv4LOnC"}},4685:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={header:"WSYYBAz53dhquIOZPWBP",label:"b55hyZ0oHl0s4Ot9OhwM",expanded:"N3AzO5kZlh4HAPknnYzq"}},8054:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"SmCi4xOxEsLti61GoYk4",selected:"_4rJtCOZpnf3xn8pmFvCQ",checkboxContainer:"MSXZF7xcC5aoqHlqpI0g",checkbox:"NJjq9_gAedDRrOE_XWE1",label:"vwmDLc96D9tXgWqs4IKz"}},4822:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"e3yXJBrYTW4sVZKY2NFm",selectAllContainer:"czHLa4L3tRCJDCiDB6Az",checkbox:"iKqjWUd96zSp9xmocXzk",checkboxContainer:"axih9EnuzK1fwhqYDVRA",label:"q5Ws9hr8ZMX7fSvDK_qn"}},2396:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ix3aZWMeN5Al4UK8yebJ",iconSearchContainer:"Z5LPx47ybEKeX29XBYBC",resetButton:"hjT9ZXvmvc5QUruwz8El"}},7917:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"ETGbXTdYAp0G40TJPLnK",header:"XAoJhxTApcR9lGegyp9A",content:"rRDWv2qqwSrBy3evZ7Dw",searchContainer:"yOECDJeDVT5z5YaXpeJn",expanded:"BrxrtD3aMX7IU52rA220"}},6884:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"_1v4ljOoGXqTJTneMNPz",placeholder:"ddlRidnIzYhQC9DGpgIt"}},6684:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"g5OR0aONOW1Os1xtkNHi",table:"sMR1Vb62XEvOOWRrWc4Q",placeholderContainer:"_7x2z7p_kbQOLDmEX54iA",scrollbarContainer:"EAH14XPeJBuDWGp5NVYo"}},4867:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"j4PigJOL5DgzD8OYxskz",isHeaderSticky:"AYR_4HeolAjJCOsl3HZJ",borderBottom:"iZrD3tH12zDIFOWvJUD7"}},1435:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={tableHeaderCell:"JcA1VzV4MwVQ3NEh0vzE",sortIconVisible:"Iq7OxsQzL06xj98O0LqJ",sortable:"VSTShY7LTh_IIjnrP__l"}},6453:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"dOvigSghxyQ4CbbCMkCR",active:"tqnYdY0HtDlmW61tjGbQ",hasArrow:"qqO6a1jNL6HTJG7HR11t"}},4009:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"AvR7WCDRxCwvRUA_j80P"}},5374:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={container:"zKF34aKvYZnbLuZzjEeO",closeButton:"ZZPRZLUq9MQyifD8x2jH"}},7792:(e,t,n)=>{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)=>{n.r(t),n.d(t,{default:()=>r});const r={toast:"zFiuATgsSB42VdEmcJZY",entrance:"R8rpOUOtngYOEt7I0pGM"}},4106:(e,t,n)=>{n.r(t),n.d(t,{default:()=>r});const r={toastContainer:"XlLQOe474OtBiac_gU7H"}},6504:(e,t,n)=>{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"}},5172:(e,t,n)=>{n.r(t),n.d(t,{isHotkeyPressed:()=>R,useHotkeys:()=>k,useIsHotkeyPressed:()=>j});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},c={16:"shiftKey",18:"altKey",17:"ctrlKey",91:"metaKey",shiftKey:16,ctrlKey:17,altKey:18,metaKey:91},d={16:!1,18:!1,17:!1,91:!1},s={},f=1;f<20;f++)l["f".concat(f)]=111+f;var v=[],p=!1,h="all",m=[],_=function(e){return l[e.toLowerCase()]||u[e.toLowerCase()]||e.toUpperCase().charCodeAt(0)};function g(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],c="*"===i?"*":_(i);if(s[c]){n||(n=b());var d=o>1?a(u,t):[];s[c]=s[c].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,d))}))}}))};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,d)Object.prototype.hasOwnProperty.call(d,a)&&(!d[a]&&t.mods.indexOf(+a)>-1||d[a]&&-1===t.mods.indexOf(+a))&&(o=!1);(0!==t.mods.length||d[16]||d[18]||d[17]||d[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=s["*"],r=e.keyCode||e.which||e.charCode;if(M.filter.call(this,e)){if(93!==r&&224!==r||(r=91),-1===v.indexOf(r)&&229!==r&&v.push(r),["ctrlKey","altKey","shiftKey","metaKey"].forEach((function(t){var n=c[t];e[t]&&-1===v.indexOf(n)?v.push(n):!e[t]&&v.indexOf(n)>-1?v.splice(v.indexOf(n),1):"metaKey"===t&&e[t]&&3===v.length&&(e.ctrlKey||e.shiftKey||e.altKey||(v=v.slice(v.indexOf(n))))})),r in d){for(var o in d[r]=!0,u)u[o]===r&&(M[o]=!0);if(!n)return}for(var a in d)Object.prototype.hasOwnProperty.call(d,a)&&(d[a]=e[c[a]]);e.getModifierState&&(!e.altKey||e.ctrlKey)&&e.getModifierState("AltGraph")&&(-1===v.indexOf(17)&&v.push(17),-1===v.indexOf(18)&&v.push(18),d[17]=!0,d[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 s)for(var f=0;f<s[r].length;f++)if(("keydown"===e.type&&s[r][f].keydown||"keyup"===e.type&&s[r][f].keyup)&&s[r][f].key){for(var p=s[r][f],h=p.splitKey,m=p.key.split(h),g=[],y=0;y<m.length;y++)g.push(_(m[y]));g.sort().join("")===v.sort().join("")&&O(e,p,i,t)}}}function M(e,t,n){v=[];var r=i(e),l=[],c="all",f=document,h=0,g=!1,b=!0,y="+",O=!1;for(void 0===n&&"function"==typeof t&&(n=t),"[object Object]"===Object.prototype.toString.call(t)&&(t.scope&&(c=t.scope),t.element&&(f=t.element),t.keyup&&(g=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&&(c=t);h<r.length;h++)l=[],(e=r[h].split(y)).length>1&&(l=a(u,e)),(e="*"===(e=e[e.length-1])?"*":_(e))in s||(s[e]=[]),s[e].push({keyup:g,keydown:b,scope:c,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),p||(p=!0,o(window,"focus",(function(){v=[]}),O)),o(f,"keyup",(function(e){w(e,f),function(e){var t=e.keyCode||e.which||e.charCode,n=v.indexOf(t);if(n>=0&&v.splice(n,1),e.key&&"meta"===e.key.toLowerCase()&&v.splice(0,v.length),93!==t&&224!==t||(t=91),t in d)for(var r in d[t]=!1,u)u[r]===t&&(M[r]=!1)}(e)}),O))}var S={setScope:g,getScope:b,deleteScope:function(e,t){var n,r;for(var o in e||(e=b()),s)if(Object.prototype.hasOwnProperty.call(s,o))for(n=s[o],r=0;r<n.length;)n[r].scope===e?n.splice(r,1):r++;b()===e&&g(t||"all")},getPressedKeyCodes:function(){return v.slice(0)},isPressed:function(e){return"string"==typeof e&&(e=_(e)),-1!==v.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(s).forEach((function(n){var r=s[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(s).forEach((function(e){return delete s[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:c};for(var P in S)Object.prototype.hasOwnProperty.call(S,P)&&(M[P]=S[P]);if("undefined"!=typeof window){var C=window.hotkeys;M.noConflict=function(e){return e&&window.hotkeys===M&&(window.hotkeys=C),M},window.hotkeys=M}var x=n(6689);function j(){return M.isPressed}M.filter=function(){return!0};var I=function(e,t){var n=e.target,r=n&&n.tagName;return Boolean(r&&t&&t.includes(r))},E=function(e){return I(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,c=o.filterPreventDefault,d=void 0===c||c,s=o.enabled,f=void 0===s||s,v=o.enableOnContentEditable,p=void 0!==v&&v,h=(0,x.useRef)(null),m=(0,x.useCallback)((function(e,n){var r,o;return i&&!i(e)?!d:!!(E(e)&&!I(e,a)||null!=(r=e.target)&&r.isContentEditable&&!p)||!!(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,x.useEffect)((function(){if(f)return l&&!0!==u&&(n.keydown=!1),M(e,n||{},m),function(){return M.unbind(e,m)};M.unbind(e,m)}),[m,e,f]),h}var R=M.isPressed},5691:(e,t,n)=>{n.r(t),n.d(t,{default:()=>u});var r=n(6689),o=function(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")},a=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}}(),i=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},l=function(e){function t(){var e,n,r;o(this,t);for(var a=arguments.length,l=Array(a),u=0;u<a;u++)l[u]=arguments[u];return n=r=i(this,(e=t.__proto__||Object.getPrototypeOf(t)).call.apply(e,[this].concat(l))),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},i(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),a(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,c=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 c=Math.min(Math.max(l,i+r-1),n-1),d=l+1;d<=c&&!t(d);d++)l=d;a.push(i,l)}if(a.length)for(;a[1]-a[0]+1<r&&a[0]>0;){var s=a[0]-1;if(t(s))break;a[0]=s}return a}({isItemLoaded:r,itemCount:o,minimumBatchSize:i,startIndex:Math.max(0,e-u),stopIndex:Math.min(o-1,t+u)});(this._memoizedUnloadedRanges.length!==c.length||this._memoizedUnloadedRanges.some((function(e,t){return c[t]!==e})))&&(this._memoizedUnloadedRanges=c,this._loadUnloadedRanges(c))}},{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 u=l},5022:(e,t,n)=>{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)}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}n.r(t),n.d(t,{FixedSizeGrid:()=>H,FixedSizeList:()=>A,VariableSizeGrid:()=>I,VariableSizeList:()=>N,areEqual:()=>V,shouldComponentUpdate:()=>G});var 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 c=n(6689);function d(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}var s="object"==typeof performance&&"function"==typeof performance.now?function(){return performance.now()}:function(){return Date.now()};function f(e){cancelAnimationFrame(e.id)}function v(e,t){var n=s(),r={id:requestAnimationFrame((function o(){s()-n>=t?e.call(null):r.id=requestAnimationFrame(o)}))};return r}var p=-1;function h(e){if(void 0===e&&(e=!1),-1===p||e){var t=document.createElement("div"),n=t.style;n.width="50px",n.height="50px",n.overflow="scroll",document.body.appendChild(t),p=t.offsetWidth-t.clientWidth,document.body.removeChild(t)}return p}var m=null;function _(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 g=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,d=e.getColumnWidth,s=e.getEstimatedTotalHeight,p=e.getEstimatedTotalWidth,m=e.getOffsetForColumnAndAlignment,y=e.getOffsetForRowAndAlignment,w=e.getRowHeight,M=e.getRowOffset,S=e.getRowStartIndexForOffset,P=e.getRowStopIndexForStartIndex,C=e.initInstanceProps,x=e.shouldResetStyleCacheOnItemSizeChange,j=e.validateProps;return(t=function(e){function t(t){var r;return(r=e.call(this,t)||this)._instanceProps=C(r.props,o(r)),r._resetIsScrollingTimeoutId=null,r._outerRef=void 0,r.state={instance:o(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,c=r._getItemStyleCache(x&&i,x&&l,x&&u),s=e+":"+t;if(c.hasOwnProperty(s))o=c[s];else{var f=n(r.props,t,r._instanceProps),v="rtl"===l;c[s]=o={position:"absolute",left:v?void 0:f,right:v?f:void 0,top:M(r.props,e,r._instanceProps),height:w(r.props,e,r._instanceProps),width:d(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,c=a;if("rtl"===t)switch(_()){case"negative":c=-a;break;case"positive-descending":c=u-o-a}c=Math.max(0,Math.min(c,u-o));var d=Math.max(0,Math.min(i,l-n));return{isScrolling:!0,horizontalScrollDirection:e.scrollLeft<a?"forward":"backward",scrollLeft:c,scrollTop:d,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=v(r._resetIsScrolling,g)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return O(e,t),j(e),null};var I=t.prototype;return I.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)},I.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,c=a.width,d=this.state,f=d.scrollLeft,v=d.scrollTop,_=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 g=s(this.props,this._instanceProps),b=p(this.props,this._instanceProps)>c?_:0,O=g>l?_: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,v,this._instanceProps,b):v})},I.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()},I.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(_()){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()},I.componentWillUnmount=function(){null!==this._resetIsScrollingTimeoutId&&f(this._resetIsScrollingTimeoutId)},I.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,d=e.innerTagName,f=e.itemData,v=e.itemKey,h=void 0===v?b:v,m=e.outerElementType,_=e.outerTagName,g=e.rowCount,y=e.style,O=e.useIsScrolling,w=e.width,M=this.state.isScrolling,S=this._getHorizontalRangeToRender(),P=S[0],C=S[1],x=this._getVerticalRangeToRender(),j=x[0],I=x[1],E=[];if(o>0&&g)for(var k=j;k<=I;k++)for(var R=P;R<=C;R++)E.push((0,c.createElement)(t,{columnIndex:R,data:f,isScrolling:O?M:void 0,key:h({columnIndex:R,data:f,rowIndex:k}),rowIndex:k,style:this._getItemStyle(k,R)}));var D=s(this.props,this._instanceProps),z=p(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:this._onScroll,ref:this._outerRefSetter,style:r({position:"relative",height:i,width:w,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:a},y)},(0,c.createElement)(u||d||"div",{children:E,ref:l,style:{height:D,pointerEvents:M?"none":void 0,width:z}}))},I._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],c=a[3],d=this._getVerticalRangeToRender(),s=d[0],f=d[1],v=d[2],p=d[3];this._callOnItemsRendered(i,l,s,f,u,c,v,p)}if("function"==typeof r){var h=this.state,m=h.horizontalScrollDirection,_=h.scrollLeft,g=h.scrollTop,b=h.scrollUpdateWasRequested,y=h.verticalScrollDirection;this._callOnScroll(_,g,m,y,b)}},I._getHorizontalRangeToRender=function(){var e=this.props,t=e.columnCount,n=e.overscanColumnCount,r=e.overscanColumnsCount,o=e.overscanCount,a=e.rowCount,u=this.state,c=u.horizontalScrollDirection,d=u.isScrolling,s=u.scrollLeft,f=n||r||o||1;if(0===t||0===a)return[0,0,0,0];var v=i(this.props,s,this._instanceProps),p=l(this.props,v,s,this._instanceProps),h=d&&"backward"!==c?1:Math.max(1,f),m=d&&"forward"!==c?1:Math.max(1,f);return[Math.max(0,v-h),Math.max(0,Math.min(t-1,p+m)),v,p]},I._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,c=i.scrollTop,d=r||o||n||1;if(0===t||0===a)return[0,0,0,0];var s=S(this.props,c,this._instanceProps),f=P(this.props,s,c,this._instanceProps),v=l&&"backward"!==u?1:Math.max(1,d),p=l&&"forward"!==u?1:Math.max(1,d);return[Math.max(0,s-v),Math.max(0,Math.min(a-1,f+p)),s,f]},t}(c.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},M=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},S=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 c=i+1;c<=n;c++){var d=a(c);o[c]={offset:l,size:d},l+=d}"column"===e?r.lastMeasuredColumnIndex=n:r.lastMeasuredRowIndex=n}return o[n]},P=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?C(e,t,n,a,0,r):x(e,t,n,Math.max(0,a),r)},C=function(e,t,n,r,o,a){for(;o<=r;){var i=o+Math.floor((r-o)/2),l=S(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},x=function(e,t,n,r,o){for(var a="column"===e?t.columnCount:t.rowCount,i=1;r<a&&S(e,t,r,n).offset<o;)r+=i,i*=2;return C(e,t,n,Math.min(r,a-1),Math.floor(r/2),o)},j=function(e,t,n,r,o,a,i){var l="column"===e?t.width:t.height,u=S(e,t,n,a),c="column"===e?M(t,a):w(t,a),d=Math.max(0,Math.min(c-l,u.offset)),s=Math.max(0,u.offset-l+i+u.size);switch("smart"===r&&(r=o>=s-l&&o<=d+l?"auto":"center"),r){case"start":return d;case"end":return s;case"center":return Math.round(s+(d-s)/2);default:return o>=s&&o<=d?o:s>d||o<s?s:d}},I=y({getColumnOffset:function(e,t,n){return S("column",e,t,n).offset},getColumnStartIndexForOffset:function(e,t,n){return P("column",e,n,t)},getColumnStopIndexForStartIndex:function(e,t,n,r){for(var o=e.columnCount,a=e.width,i=S("column",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("column",e,c,r).size;return c},getColumnWidth:function(e,t,n){return n.columnMetadataMap[t].size},getEstimatedTotalHeight:w,getEstimatedTotalWidth:M,getOffsetForColumnAndAlignment:function(e,t,n,r,o,a){return j("column",e,t,n,r,o,a)},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){return j("row",e,t,n,r,o,a)},getRowOffset:function(e,t,n){return S("row",e,t,n).offset},getRowHeight:function(e,t,n){return n.rowMetadataMap[t].size},getRowStartIndexForOffset:function(e,t,n){return P("row",e,n,t)},getRowStopIndexForStartIndex:function(e,t,n,r){for(var o=e.rowCount,a=e.height,i=S("row",e,t,r),l=n+a,u=i.offset+i.size,c=t;c<o-1&&u<l;)c++,u+=S("row",e,c,r).size;return c},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}}),E=150,k=function(e,t){return e};function R(e){var t,n=e.getItemOffset,i=e.getEstimatedTotalSize,l=e.getItemSize,d=e.getOffsetForIndexAndAlignment,s=e.getStartIndexForOffset,p=e.getStopIndexForStartIndex,m=e.initInstanceProps,g=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,o(r)),r._outerRef=void 0,r._resetIsScrollingTimeoutId=null,r.state={instance:o(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,c=r._getItemStyleCache(g&&i,g&&u,g&&a);if(c.hasOwnProperty(e))t=c[e];else{var d=n(r.props,e,r._instanceProps),s=l(r.props,e,r._instanceProps),f="horizontal"===a||"horizontal"===u,v="rtl"===a,p=f?d:0;c[e]=t={position:"absolute",left:v?void 0:p,right:v?p:void 0,top:f?0:d,height:f?"100%":s,width:f?s:"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(_()){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=v(r._resetIsScrolling,E)},r._resetIsScrolling=function(){r._resetIsScrollingTimeoutId=null,r.setState({isScrolling:!1},(function(){r._getItemStyleCache(-1,null)}))},r}a(t,e),t.getDerivedStateFromProps=function(e,t){return D(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(d(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(_()){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,d=e.innerTagName,s=e.itemCount,f=e.itemData,v=e.itemKey,p=void 0===v?k:v,h=e.layout,m=e.outerElementType,_=e.outerTagName,g=e.style,b=e.useIsScrolling,y=e.width,O=this.state.isScrolling,w="horizontal"===o||"horizontal"===h,M=w?this._onScrollHorizontal:this._onScrollVertical,S=this._getRangeToRender(),P=S[0],C=S[1],x=[];if(s>0)for(var j=P;j<=C;j++)x.push((0,c.createElement)(t,{data:f,key:p(j,f),index:j,isScrolling:b?O:void 0,style:this._getItemStyle(j)}));var I=i(this.props,this._instanceProps);return(0,c.createElement)(m||_||"div",{className:n,onScroll:M,ref:this._outerRefSetter,style:r({position:"relative",height:a,width:y,overflow:"auto",WebkitOverflowScrolling:"touch",willChange:"transform",direction:o},g)},(0,c.createElement)(u||d||"div",{children:x,ref:l,style:{height:w?"100%":I,pointerEvents:O?"none":void 0,width:w?I:"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=s(this.props,i,this._instanceProps),u=p(this.props,l,i,this._instanceProps),c=o&&"backward"!==a?1:Math.max(1,n),d=o&&"forward"!==a?1:Math.max(1,n);return[Math.max(0,l-c),Math.max(0,Math.min(t-1,u+d)),l,u]},t}(c.PureComponent),t.defaultProps={direction:"ltr",itemData:void 0,layout:"vertical",overscanCount:2,useIsScrolling:!1},t}var D=function(e,t){e.children,e.direction,e.height,e.layout,e.innerTagName,e.outerTagName,e.width,t.instance},z=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 c=r(u);o[u]={offset:i,size:c},i+=c}n.lastMeasuredIndex=t}return o[t]},L=function(e,t,n,r,o){for(;r<=n;){var a=r+Math.floor((n-r)/2),i=z(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},T=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},N=R({getItemOffset:function(e,t,n){return z(e,t,n).offset},getItemSize:function(e,t,n){return n.itemMetadataMap[t].size},getEstimatedTotalSize:T,getOffsetForIndexAndAlignment:function(e,t,n,r,o,a){var i=e.direction,l=e.height,u=e.layout,c=e.width,d="horizontal"===i||"horizontal"===u?c:l,s=z(e,t,o),f=T(e,o),v=Math.max(0,Math.min(f-d,s.offset)),p=Math.max(0,s.offset-d+s.size+a);switch("smart"===n&&(n=r>=p-d&&r<=v+d?"auto":"center"),n){case"start":return v;case"end":return p;case"center":return Math.round(p+(v-p)/2);default:return r>=p&&r<=v?r:r<p?p:v}},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?L(e,t,o,0,n):function(e,t,n,r){for(var o=e.itemCount,a=1;n<o&&z(e,n,t).offset<r;)n+=a,a*=2;return L(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,c="horizontal"===o||"horizontal"===l?u:a,d=z(e,t,r),s=n+c,f=d.offset+d.size,v=t;v<i-1&&f<s;)v++,f+=z(e,v,r).size;return v},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}}),H=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,c=Math.max(0,i*l-u),d=Math.min(c,t*l),s=Math.max(0,t*l-u+a+l);switch("smart"===n&&(n=r>=s-u&&r<=d+u?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(u/2)?0:f>c+Math.floor(u/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},getOffsetForRowAndAlignment:function(e,t,n,r,o,a){var i=e.rowHeight,l=e.height,u=e.rowCount,c=Math.max(0,u*i-l),d=Math.min(c,t*i),s=Math.max(0,t*i-l+a+i);switch("smart"===n&&(n=r>=s-l&&r<=d+l?"auto":"center"),n){case"start":return d;case"end":return s;case"center":var f=Math.round(s+(d-s)/2);return f<Math.ceil(l/2)?0:f>c+Math.floor(l/2)?c:f;default:return r>=s&&r<=d?r:s>d||r<s?s:d}},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}}),A=R({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,c=e.itemSize,d=e.layout,s=e.width,f="horizontal"===i||"horizontal"===d?s:l,v=Math.max(0,u*c-f),p=Math.min(v,t*c),h=Math.max(0,t*c-f+c+a);switch("smart"===n&&(n=r>=h-f&&r<=p+f?"auto":"center"),n){case"start":return p;case"end":return h;case"center":var m=Math.round(h+(p-h)/2);return m<Math.ceil(f/2)?0:m>v+Math.floor(f/2)?v:m;default:return r>=h&&r<=p?r:r<h?h:p}},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,c=t*i,d="horizontal"===r||"horizontal"===l?u:o,s=Math.ceil((d+n-c)/i);return Math.max(0,Math.min(a-1,t+s-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 W=["style"],F=["style"];function V(e,t){var n=e.style,r=d(e,W),o=t.style,a=d(t,F);return!B(n,o)&&!B(r,a)}function G(e,t){return!V(this.props,e)||B(this.state,t)}},7237:function(e,t,n){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,c=e.containerRef,d=e.disabled,s=void 0!==d&&d,f=e.inverted,v=void 0!==f&&f,p=e.rounded,h=void 0!==p&&p,m=e.noShadow,_=void 0!==m&&m,g=e.noPadding,b=void 0!==g&&g,y=e.noBorder,O=void 0!==y&&y,w=e.transparent,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.autoFocus,I=void 0!==j&&j,E=e.offsetSides,k=void 0===E?[]:E,R=e.align,D=void 0===R?"center":R,z=e.size,L=void 0===z?"medium":z,T=e.type;return o.default.createElement("button",{ref:c,className:(0,a.default)([i.default.container,i.default[L],i.default[D],(t={},t[i.default.inverted]=v,t[i.default.rounded]=h,t[i.default.noShadow]=_,t[i.default.noPadding]=b,t[i.default.noBorder]=O,t[i.default.transparent]=M,t[i.default.stretchHorizontally]=P,t[i.default.stretchVertically]=x,t[i.default.leftOffset]=h&&k.includes("left"),t[i.default.rightOffset]=h&&k.includes("right"),t),r]),disabled:s,autoFocus:I,type:T,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){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){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){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){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,c=e.className,d=e.size,s=e.containerRef,f=e.inverted,v=void 0!==f&&f,p=e.rounded,h=void 0!==p&&p,m=e.transparent,_=void 0!==m&&m,g=e.noShadow,b=void 0!==g&&g,y=e.noPadding,O=void 0!==y&&y,w=e.noBorder,M=void 0!==w&&w,S=e.stretchHorizontally,P=void 0!==S&&S,C=e.stretchVertically,x=void 0!==C&&C,j=e.disabled,I=void 0!==j&&j,E=e.offsetSides,k=void 0===E?[]:E,R=e.align,D=void 0===R?"center":R,z=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:s,"data-testid":"button-link",className:(0,l.default)([u.default.container,u.default[d],u.default[D],(t={},t[u.default.inverted]=v,t[u.default.rounded]=h,t[u.default.noShadow]=b,t[u.default.noPadding]=O,t[u.default.noBorder]=M,t[u.default.disabled]=I,t[u.default.transparent]=_,t[u.default.stretchHorizontally]=P,t[u.default.stretchVertically]=x,t[u.default.leftOffset]=h&&k.includes("left"),t[u.default.rightOffset]=h&&k.includes("right"),t),c])},z),"string"!=typeof a&&Array.isArray(a)&&a.length?i.default.createElement("div",{className:u.default.content},a):a)}},75:function(e,t,n){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){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)),c=n(4115),d=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,s=e.className,f=e.indeterminate,v=e.size,p=void 0===v?"medium":v,h=e.autoFocus,m=void 0!==h&&h,_=(0,l.useCallback)((function(e){"function"==typeof n&&n(e.target.checked)}),[n]);return l.default.createElement(c.Label,{value:t},l.default.createElement("input",{"data-testid":"checkbox",ref:function(e){e&&(e.indeterminate=f)},checked:o,disabled:a,className:(0,u.default)([d.default.checkbox,s,d.default[p]]),onChange:_,placeholder:r,name:i,type:"checkbox",autoFocus:m}))}},4616:function(e,t,n){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){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,c=e.direction,d=void 0===c?"vertical":c,s=e.canToggle,f=void 0!==s&&s;return o.default.createElement("div",{ref:n,className:(0,a.default)([l.default.colorPicker,l.default[d]])},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){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){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,c=e.size,d=void 0===c?"medium":c,s=e.onClick;return o.default.createElement("button",{ref:r,className:(0,a.default)([i.default.colorSwatch,i.default[d],(t={},t[i.default.selected]=u,t)]),"data-testid":"color-swatch",onClick:s,style:{backgroundColor:n.hexCode}},n.label&&o.default.createElement("span",{className:i.default.srOnly},"Select ".concat(n.label," color")))}},2554:function(e,t,n){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){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,c=e.header,d=e.isOpen,s=e.buttonsLeft,f=void 0===s?[]:s,v=e.buttonsRight,p=void 0===v?[]:v,h=e.onClose,m=void 0===h?function(){}:h,_=e.noPadding,g=void 0!==_&&_,b=e.noOverlay,y=void 0!==b&&b,O=e.noShadow,w=void 0!==O&&O,M=e.baseZIndex,S=void 0===M?1019:M;return o.default.createElement(i.Modal,{containerRef:u,isOpen:d,onClose:m,noOverlay:y,noShadow:w,baseZIndex:S},o.default.createElement("div",{className:(0,a.default)([l.default.container,n])},!!c&&o.default.createElement("h1",{className:l.default.modalHeader},c),o.default.createElement("div",{className:(0,a.default)([l.default.modalContent,(t={},t[l.default.noPadding]=g,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},p))))}u.displayName="ConfirmationModal",t.default=u},6873:function(e,t,n){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}})},943:function(e,t,n){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){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),c=n(3814);t.Dropdown=function(e){var t=e.itemBodyRenderer,n=e.items,r=e.onSelect,o=e.display,a=e.renderClickable,d=e.selectedItem,s=e.placement,f=void 0===s?{vertical:"bottom",horizontal:"left"}:s,v=(0,i.useState)(!1),p=v[0],h=v[1],m=(0,l.useOutsideClick)((function(){return h(!1)})),_=!n||0===n.length,g=function(){return h(!p)};return i.default.createElement(c.MenuContainer,{button:"function"==typeof a?a({display:o,isDisabled:_,selectedItem:d,toggleIsOpen:g}):i.default.createElement(u.Clickable,{display:o,isDisabled:_,onClick:g}),placement:f,ref:m},i.default.createElement(c.Menu,{isOpen:p},n&&n.map((function(e){return i.default.createElement(c.MenuItem,{isActive:e.id===(null==d?void 0:d.id),key:e.id,onClick:function(){return function(e){r(e),h(!1)}(e)}},t?t({item:e,isSelected:e.id===(null==d?void 0:d.id)}):e.name)}))))}},1889:(e,t,n)=>{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){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,c=e.multiple,d=void 0!==c&&c,s=e.disabled,f=void 0!==s&&s,v=e.inverted,p=void 0!==v&&v,h=e.noShadow,m=void 0!==h&&h,_=e.noBorder,g=void 0!==_&&_,b=e.noPadding,y=void 0!==b&&b,O=e.transparent,w=void 0!==O&&O,M=e.stretchHorizontally,S=void 0!==M&&M,P=e.stretchVertically,C=void 0!==P&&P,x=e.rounded,j=void 0!==x&&x,I=e.size,E=void 0===I?"medium":I;return o.default.createElement("label",{className:(0,a.default)([i.default.label,i.default[E],(t={},t[i.default.inverted]=p,t[i.default.rounded]=j,t[i.default.noShadow]=m,t[i.default.noBorder]=g,t[i.default.noPadding]=y,t[i.default.transparent]=w,t[i.default.stretchHorizontally]=S,t[i.default.stretchVertically]=C,t)])},o.default.createElement("input",{className:i.default.input,type:"file",id:"file",accept:r,multiple:d,ref:u,disabled:f,onChange:l}),n)}},6086:function(e,t,n){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){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,c=void 0===u?"column":u,d=e.placement,s=void 0===d?{horizontal:"center",vertical:"bottom",parent:"viewport"}:d,f="center"===s.horizontal?"horizontalCenter":s.horizontal,v="center"===s.vertical?"verticalCenter":s.vertical;return o.default.createElement("div",{ref:l,"data-testid":"floating-panel",className:(0,a.default)([i.default.container,i.default[f],i.default[v],i.default[c],(t={},t[i.default.fixed]="container"!==s.parent,t),n])},r)}},6384:function(e,t,n){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){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,c=void 0===u?"medium":u,d=e.inverted,s=void 0!==d&&d;return o.default.createElement("img",{ref:l,className:(0,a.default)([i.default.icon,i.default[c],(t={},t[i.default.inverted]=s,t)]),crossOrigin:"anonymous","data-testid":"icon",alt:r,src:n})}},4958:function(e,t,n){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){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,c=e.src,d=e.alt,s=e.offsetSides,f=void 0===s?[]:s,v=e.onClick,p=void 0===v?function(){}:v,h=e.disabled,m=void 0!==h&&h,_=e.inverted,g=void 0!==_&&_,b=e.noShadow,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.transparent,S=void 0!==M&&M,P=e.rounded,C=void 0!==P&&P,x=e.size,j=void 0===x?"medium":x,I=e.type,E=void 0===I?"button":I;return o.default.createElement("button",{ref:r,className:(0,a.default)([l.default.container,l.default[j],(t={},t[l.default.inverted]=g,t[l.default.rounded]=C,t[l.default.noShadow]=y,t[l.default.noBorder]=w,t[l.default.transparent]=S,t[l.default.topOffset]=C&&f.includes("top"),t[l.default.rightOffset]=C&&f.includes("right"),t[l.default.bottomOffset]=C&&f.includes("bottom"),t[l.default.leftOffset]=C&&f.includes("left"),t),n]),disabled:m,onClick:p,type:E,role:"button"},o.default.createElement(i.Icon,{src:c,alt:d,size:j,inverted:g}),u)}},2847:function(e,t,n){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){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),c=a(n(6299));t.default=function(e){var t,n=e.as,a=e.containerRef,d=e.children,s=e.className,f=e.src,v=e.alt,p=e.inverted,h=void 0!==p&&p,m=e.noShadow,_=void 0!==m&&m,g=e.noBorder,b=void 0!==g&&g,y=e.transparent,O=void 0!==y&&y,w=e.rounded,M=void 0!==w&&w,S=e.offsetSides,P=void 0===S?[]:S,C=e.disabled,x=void 0!==C&&C,j=e.size,I=void 0===j?"medium":j,E=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)([c.default.container,c.default[I],(t={},t[c.default.inverted]=h,t[c.default.rounded]=M,t[c.default.noShadow]=_,t[c.default.noBorder]=b,t[c.default.disabled]=x,t[c.default.transparent]=O,t[c.default.topOffset]=M&&P.includes("top"),t[c.default.rightOffset]=M&&P.includes("right"),t[c.default.bottomOffset]=M&&P.includes("bottom"),t[c.default.leftOffset]=M&&P.includes("left"),t),s])},E),i.default.createElement(u.Icon,{src:f,alt:v,size:I,inverted:h}),d)}},5860:function(e,t,n){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){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(1513));t.default=function(e){var t=e.src,n=e.alt,r=e.srcWidth,l=e.srcHeight,u=e.children,c=e.containerRef,d=e.layout,s=void 0===d?"contain":d,f=e.decoding,v=void 0===f?"auto":f,p=e.loading,h=void 0===p?"eager":p,m=e.style,_=o.default.createElement("img",{className:(0,a.default)([i.default.image,i.default[s]]),crossOrigin:"anonymous","data-testid":"image",alt:n,src:t,width:r,height:l,decoding:v,loading:h,style:m});return u?o.default.createElement("div",{ref:c,className:(0,a.default)([i.default.container,i.default.hasOverlay])},_,u&&o.default.createElement("div",{className:i.default.overlay},u)):_}},3928:function(e,t,n){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){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){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){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){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,c=void 0!==u&&u,d=e.transparent,s=void 0!==d&&d,f=e.noPadding,v=void 0!==f&&f,p=e.size,h=void 0===p?"medium":p,m=e.align,_=void 0===m?"center":m,g=e.onClick,b=void 0===g?function(){}:g;return o.default.createElement("li",{className:(0,a.default)([l.default.listViewItem])},o.default.createElement(i.Button,{onClick:b,disabled:c,inverted:r,transparent:s,noPadding:v,align:_,size:h,stretchHorizontally:!0,noShadow:!0,noBorder:!0},t))}},8569:function(e,t,n){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),c=a(n(1725));t.default=function(e){var t=e.children,n=e.as,a=e.active,d=void 0!==a&&a,s=e.transparent,f=void 0!==s&&s,v=e.noPadding,p=void 0!==v&&v,h=e.align,m=void 0===h?"center":h,_=e.size,g=void 0===_?"medium":_,b=o(e,["children","as","active","transparent","noPadding","align","size"]);return void 0===n&&(n="a"),i.default.createElement("li",{className:(0,l.default)([c.default.listViewItem])},i.default.createElement(u.ButtonLink,r({as:n,inverted:d,transparent:f,noPadding:p,align:m,size:g,stretchHorizontally:!0,noShadow:!0,noBorder:!0},b),t))}},2572:function(e,t,n){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){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)),c=n(9633),d=i(n(1349));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.className,i=e.isOpen,s=void 0===i||i,f=e.header,v=e.footer,p=e.smartLayout,h=void 0===p||p,m=(0,l.useContext)(c.PlacementContext),_=(0,l.useRef)(null),g=o||_;if(!m)throw new Error("Menu component must be wrapped by a MenuContainer component.");return(0,l.useLayoutEffect)((function(){if(h&&g.current){var e=g.current.getBoundingClientRect(),t=e.top,n=e.bottom,r="top"===m.vertical?t:window.innerHeight-n;if(r<0){var o=g.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,")")}}}),[s,m,h]),s?l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{ref:g,className:(0,u.default)([d.default.menu,(t={},t[d.default.open]=s,t),a])},l.default.createElement("div",null,f&&s&&l.default.createElement("h3",{className:d.default.header},f),l.default.createElement("ul",null,r)),v&&s&&l.default.createElement("div",{className:(0,u.default)([d.default.footer,(n={},n[d.default.noBorder]=!r,n)])},v))):null}},9633:function(e,t,n){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)),c=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,d=void 0===i?{horizontal:"left",vertical:"bottom"}:i;return l.default.createElement("div",{ref:n,className:(0,u.default)([c.default.container,a])},o,l.default.createElement(t.PlacementContext.Provider,{value:(0,l.useMemo)((function(){return d}),[d])},l.default.createElement("div",{className:(0,u.default)([c.default.menuContainer,c.default[d.horizontal],c.default[d.vertical]])},r)))}))},9385:function(e,t,n){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,c=e.noPadding,d=void 0!==c&&c,s=e.isActive,f=void 0!==s&&s;return o.default.createElement("li",{className:(0,a.default)([i.default.menuItem,(t={},t[i.default.active]=f,t),(n={},n[i.default.noPadding]=d,n),l]),onClick:u},r)}},9762:function(e,t,n){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,c=e.className,d=e.noPadding,s=void 0!==d&&d,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,c,(t={},t[u.default.noPadding]=s,t)])},f),a)}},3814:function(e,t,n){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){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),c=i(n(7659)),d=i(n(9118));t.default=function(e){var t,n,r=e.children,o=e.containerRef,a=e.isOpen,i=e.button,s=e.transparent,f=void 0!==s&&s,v=e.noShadow,p=void 0!==v&&v,h=e.noOverlay,m=void 0!==h&&h,_=e.onClose,g=void 0===_?function(){}:_,b=e.baseZIndex,y=void 0===b?1009:b;(0,u.useHotkeys)("Escape",g);var O=(0,l.useCallback)((function(){g()}),[g]);return a&&l.default.createElement("div",{ref:o},l.default.createElement("div",{style:{zIndex:y},className:(0,c.default)([d.default.overlay,(t={},t[d.default.noOverlay]=m,t)]),"data-testid":"modal-overlay",onClick:O}),l.default.createElement("div",{style:{zIndex:y+1},className:(0,c.default)([d.default.modal,(n={},n[d.default.transparent]=f,n[d.default.noShadow]=p,n)]),"data-testid":"modal"},r),i&&l.default.createElement("div",{style:{zIndex:y+2},className:d.default.modalButton},i))}},1391:function(e,t,n){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){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)),c=function(e,t){return 10*e+t},d=function(e){return Math.floor(e/10)},s=["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,v=void 0!==f&&f,p=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:v,noBorder:!0,noShadow:!0,onPointerDown:p(c(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(d(n));else if(s.includes(e.key)){e.stopPropagation();var t=parseInt(e.key,10);r(c(n,t))}},"data-testid":"numpad"},o.default.createElement("div",{className:l.default.numbers},h,o.default.createElement(a.Button,{disabled:v,noBorder:!0,noShadow:!0,transparent:!0,onPointerDown:p(d(n))},o.default.createElement(i.Icon,{alt:"Backspace",src:u.default}))))}))},7387:(e,t,n)=>{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){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,c=e.isFixed,d=void 0!==c&&c,s=e.onClick,f=void 0===s?function(){}:s;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]=d,t)]),onClick:f},n)}},6650:function(e,t,n){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){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)),c=i(n(4685)),d=n(5348),s=n(3781),f=n(2847),v=i(n(3790));t.default=function(e){var t,n=e.className,r=e.label,o=e.options,a=(0,d.useToggle)(!1),i=a[0],p=a[1],h=(0,l.useCallback)((function(){p()}),[]);return l.default.createElement("div",{className:n},l.default.createElement("div",{className:c.default.header,onClick:h},l.default.createElement("div",{className:c.default.label},r),l.default.createElement(f.IconButton,{className:(0,u.default)([(t={},t[c.default.expanded]=!i,t)]),src:v.default,alt:i?"Collapse":"Expand",noBorder:!0,transparent:!0})),!i&&o.map((function(e){return l.default.createElement(s.Option,{key:e.value,data:e},e.label)})))}},9087:function(e,t,n){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){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)),c=i(n(8054)),d=n(4616),s=n(2568);t.default=function(e){var t,n=e.children,r=e.className,o=e.data,a=(0,l.useContext)(s.SelectContext),i=a.multiple,f=a.selectedOptions,v=a.updateSelectedOption,p=(0,l.useMemo)((function(){return f.map((function(e){return e.value})).includes(o.value)}),[o,f]),h=(0,l.useCallback)((function(){v(o)}),[o,f]);return l.default.createElement("div",{className:(0,u.default)([c.default.container,(t={},t[c.default.selected]=p&&!i,t),r]),onClick:h},i&&l.default.createElement("span",{className:c.default.checkboxContainer},l.default.createElement(d.Checkbox,{className:c.default.checkbox,checked:p,size:"small"})),l.default.createElement("span",{className:c.default.label},n))}},3781:function(e,t,n){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){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 c=n(5348),d=i(n(6689)),s=n(4616),f=n(9087),v=n(3781),p=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,c.useToggle)(!1),u=i[0],m=i[1],_=(0,d.useContext)(p.SelectContext),g=_.multiple,b=_.searchKeyword,y=_.selectAll,O=_.selectedOptions,w=_.setSelectedOptions,M=n.some((function(e){return!(0,t.isOption)(e)})),S=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},P=(0,d.useMemo)((function(){return M?n.reduce((function(e,t){var n=S(t.options);return n.length?l(l([],e,!0),[r(r({},t),{options:n})],!1):e}),[]):S(n)}),[M,n,b]),C=(0,d.useCallback)((function(){u?(w([]),a&&a([])):(w(P),a&&a(P.map((function(e){return e.value})))),m()}),[P,u,w,m]);return(0,d.useEffect)((function(){0===O.length&&m(!1)}),[O,m]),d.default.createElement("div",{className:h.default.container},y&&g&&d.default.createElement("div",{className:h.default.selectAllContainer,onClick:C},d.default.createElement("span",{className:h.default.checkboxContainer},d.default.createElement(s.Checkbox,{className:h.default.checkbox,checked:u,size:"small"})),d.default.createElement("span",{className:h.default.label},"Select All")),P.map((function(e){return(0,t.isOption)(e)?d.default.createElement(v.Option,{key:e.value,data:e},e.label):d.default.createElement(f.GroupOption,{key:e.label,label:e.label,options:e.options})})))}},4292:function(e,t,n){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){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)),c=i(n(2396)),d=n(2568),s=n(1143),f=n(4958),v=i(n(5585)),p=i(n(7451)),h=n(2847);t.default=function(e){var t=e.className,n=(0,l.useContext)(d.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)([c.default.container,t])},l.default.createElement("div",{className:c.default.iconSearchContainer},l.default.createElement(f.Icon,{src:v.default})),l.default.createElement(s.TextInput,{value:r,placeholder:"Type to search...",onChange:a,noBorder:!0}),l.default.createElement(h.IconButton,{className:c.default.resetButton,src:p.default,alt:"Clear",onClick:i,disabled:!r,noBorder:!0,noShadow:!0,transparent:!0}))}},8947:function(e,t,n){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){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)),c=i(n(3790)),d=i(n(7917)),s=n(5348),f=n(2568),v=n(4745),p=n(8947),h=n(2847),m=n(4292);t.default=function(e){var t,n,r=e.className,o=e.defaultValue,a=e.disabled,i=e.multiple,_=void 0!==i&&i,g=e.options,b=e.placeholder,y=e.selectAll,O=e.size,w=void 0===O?"medium":O,M=e.showSelectedAsTags,S=void 0!==M&&M,P=e.width,C=e.onChange,x=e.onFilter,j=(0,s.useToggle)(!1),I=j[0],E=j[1],k=(0,s.useOutsideClick)((function(){return E(!1)})),R=(0,l.useCallback)((function(){E()}),[]),D=(0,l.useCallback)((function(e){_||E(!1),C&&C(e)}),[]);return l.default.createElement(f.SelectContextProvider,{defaultValue:o,multiple:_,options:g,onChange:D,selectAll:y},l.default.createElement("div",{ref:k,className:(0,u.default)([d.default.container,d.default[w],(t={},t[d.default.disabled]=a,t),r]),style:{width:P}},l.default.createElement("div",{className:d.default.header,onClick:R},l.default.createElement(v.Selector,{placeholder:b,showSelectedAsTags:S}),l.default.createElement(h.IconButton,{className:(0,u.default)([d.default.iconButton,(n={},n[d.default.expanded]=I,n)]),src:c.default,alt:I?"Collapse":"Expand",noBorder:!0,transparent:!0})),I&&l.default.createElement("div",{className:d.default.content},l.default.createElement("div",{className:d.default.searchContainer},l.default.createElement(p.Search,null)),l.default.createElement(m.OptionList,{options:g,onFilter:x,onChange:D}))))}},2568:function(e,t,n){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),c={multiple:!1,selectAll:!1,selectedOptions:[],updateSelectedOption:function(e){},searchKeyword:"",setSearchKeyword:function(e){},setSelectedOptions:function(e){}},d=(0,l.createContext)(c);t.SelectContext=d,t.SelectContextProvider=function(e){var t=e.children,n=e.defaultValue,r=e.multiple,o=void 0!==r&&r,a=e.selectAll,s=void 0!==a&&a,f=e.options,v=e.onChange,p=(0,l.useState)(c.selectedOptions),h=p[0],m=p[1],_=(0,l.useState)(c.searchKeyword),g=_[0],b=_[1],y=(0,l.useCallback)((function(e){var t;t=o?h.some((function(t){return t.value===e.value}))?h.filter((function(t){return t.value!==e.value})):i(i([],h,!0),[e],!1):[e],m(t),v&&v(t.map((function(e){return e.value})))}),[h,m]);(0,l.useEffect)((function(){if(n){var e=Array.isArray(n)?n:[n],t=[];e.length&&(t=f.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)}))),m(t)}}),[n]);var O=(0,l.useMemo)((function(){return{multiple:o,selectAll:s,selectedOptions:h,updateSelectedOption:y,searchKeyword:g,setSearchKeyword:b,setSelectedOptions:m}}),[s,h,m,y,g,b]);return l.default.createElement(d.Provider,{value:O},t)}},237:function(e,t,n){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)),c=n(2568),d=n(2149);t.default=function(e){var t,n=e.placeholder,r=e.showSelectedAsTags,o=(0,l.useContext)(c.SelectContext),a=o.selectedOptions,i=o.multiple,s=o.updateSelectedOption,f=(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&&s(n)}e.stopPropagation()}),[a]),p=(0,l.useMemo)((function(){return a.length?a.map((function(e){var t=e.label,n=e.value;return l.default.createElement("span",{key:n,onClick:f},l.default.createElement(d.Tag,{key:n,value:n,closable:!0,onClose:v},t))})):l.default.createElement("span",{className:u.default.placeholder},n)}),[a]),h=a.length?"".concat(n," (").concat(a.length,")"):l.default.createElement("span",{className:u.default.placeholder},n);return t=i?r?p:h:a.length?a[0].label:n,l.default.createElement("div",{className:u.default.container},t)}},4745:function(e,t,n){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){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){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)),c=l(n(7659)),d=n(5022),s=l(n(5691)),f=l(n(5038)),v=l(n(8784)),p=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,_=e.pageSize,g=void 0===_?p.TableConfig.PAGE_SIZE:_,b=e.tableHeight,y=e.placeholder,O=e.rowHeight,w=void 0===O?p.TableConfig.ROW_HEIGHT:O,M=e.headerHeight,S=void 0===M?p.TableConfig.HEADER_HEIGHT:M,P=e.disableLazyLoader,C=e.activeRows,x=e.itemsCount,j=e.isHeaderSticky,I=void 0!==j&&j,E=e.hasVirtualScroll,k=void 0===E||E,R=e.className,D=(0,u.useState)(0),z=D[0],L=D[1],T=(0,u.useCallback)((function(e){var n=e.data,i=e.index,l=e.style,c=n[i];return u.default.createElement("div",{style:r(r({},l),{top:l.top})},u.default.createElement(v.default,{data:c,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[c.id])}))}),[t,C,a,w,o]),N=(0,u.useCallback)((function(e){var t=e.scrollOffset;L(t)}),[]),H=(0,u.useCallback)((function(){P||n.length!==x&&(n.length<g*l||m&&i&&(m(l+1),i(l+1)))}),[P,n.length,x,g,l,m,i]),A=(0,u.useCallback)((function(e){return!P&&e<n.length-p.TableConfig.ITEMS_LOADED}),[n.length,P]);return u.default.createElement(u.default.Fragment,null,k?u.default.createElement("div",{className:(0,c.default)([h.default.container,R])},u.default.createElement("div",{className:h.default.table},u.default.createElement(f.default,{columns:t,scrollTop:z,headerHeight:S}),y&&!n.length?u.default.createElement("div",{className:h.default.placeholderContainer,style:{height:b}},y):u.default.createElement(s.default,{isItemLoaded:A,itemCount:n.length,loadMoreItems:H},(function(e){var t=e.onItemsRendered,r=e.ref;return u.default.createElement(d.FixedSizeList,{ref:r,height:b,width:"100%",itemSize:w,itemCount:n.length,itemData:n,onScroll:N,onItemsRendered:t,className:h.default.scrollbarContainer},T)})))):u.default.createElement("div",{className:(0,c.default)([h.default.container,h.default.scrollbarContainer,R]),style:{height:b}},u.default.createElement(f.default,{columns:t,scrollTop:z,isHeaderSticky:I,headerHeight:S}),n.map((function(e,n){return u.default.createElement(v.default,{key:n,data:e,columns:t,onRowClick:o,hasArrow:a,rowHeight:w,isActive:!!(null==C?void 0:C[null==e?void 0:e.id])})}))))}},5038:function(e,t,n){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,c=e.isHeaderSticky,d=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]=c,n)]),style:{height:d}},r.map((function(e,t){return o.default.createElement(i.default,{key:"table-head-cell-".concat(t),column:e})})))}},2212:function(e,t,n){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)),c=i(n(6689)),d=n(4958),s=l(n(3210)),f=l(n(2223)),v=n(2802),p=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,_=n.className,g=(0,c.useState)((function(){return l||v.SortOrder.DESC})),b=g[0],y=g[1],O=(0,c.useCallback)((function(){if(!i)return o(b);var e=b===v.SortOrder.DESC?v.SortOrder.ASC:v.SortOrder.DESC;y(e),o(e)}),[o,b,i]),w=o&&a?{onClick:O}:{};return c.default.createElement("div",r({},w,{className:(0,u.default)([p.default.tableHeaderCell,_,(t={},t[p.default.sortIconVisible]=a&&i,t[p.default.sortable]=a,t)]),style:{width:m}}),h,a?c.default.createElement(d.Icon,{alt:"Sort button",size:"small",src:b===v.SortOrder.DESC?s.default:f.default}):null)}},8784:function(e,t,n){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)),c=i(n(8605)),d=i(n(6453));t.default=function(e){var t,n=e.data,r=e.columns,o=e.onRowClick,a=e.hasArrow,i=e.rowHeight,s=e.isActive,f=(0,l.useCallback)((function(){o&&"string"!=typeof n&&o(n)}),[n,o]);return l.default.createElement("div",{className:(0,u.default)([d.default.container,(t={},t[d.default.hasArrow]=a,t[d.default.active]=s,t)]),onClick:f},r.map((function(e,t){return l.default.createElement(c.default,{key:"table-row-cell-".concat(t),item:n,column:e,rowHeight:i})})))}},8605:function(e,t,n){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){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){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(7451)),c=n(4958),d=i(n(5374));t.default=function(e){var t=e.children,n=(e.className,e.closable),r=e.value,o=e.onClose,a=(0,l.useCallback)((function(e){"function"==typeof o&&o(e,r)}),[o]);return l.default.createElement("div",{className:d.default.container},l.default.createElement("span",null,t),n&&l.default.createElement("span",{className:d.default.closeButton,onClick:a},l.default.createElement(c.Icon,{src:u.default,alt:"Close",size:"small"})))}},2149:function(e,t,n){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}})},2506:function(e,t,n){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)),c=n(4115),d=i(n(7792));t.default=function(e){var t,n=e.label,r=e.onChange,o=e.onBlur,a=e.onKeyDown,i=e.placeholder,s=e.value,f=e.name,v=e.pattern,p=e.inputRef,h=e.size,m=void 0===h?"medium":h,_=e.type,g=void 0===_?"text":_,b=e.autoFocus,y=void 0!==b&&b,O=e.noBorder,w=void 0!==O&&O,M=e.inputMode,S=(0,l.useCallback)((function(e){r&&r(e.target.value)}),[r]),P=l.default.createElement("input",{"data-testid":"input",ref:p,className:(0,u.default)([d.default.textInput,d.default[m],(t={},t[d.default.noBorder]=w,t)]),onChange:S,onBlur:o,onKeyDown:a,pattern:v,placeholder:i,name:f,type:g,value:s,autoFocus:y,inputMode:M});return n?l.default.createElement(c.Label,{value:n},P):l.default.createElement(l.default.Fragment,null,P)}},1143:function(e,t,n){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){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){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){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}})},1918:function(e,t,n){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(6504));t.default=function(e){var t=e.src,n=e.type,r=e.children,l=e.containerRef,u=e.poster,c=e.muted,d=void 0===c||c,s=e.loop,f=void 0===s||s,v=e.autoPlay,p=void 0===v||v,h=e.layout,m=void 0===h?"contain":h;return r?o.default.createElement("div",{ref:l,className:(0,a.default)([i.default.container,i.default.hasOverlay])},o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:p,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n})),r&&o.default.createElement("div",{className:i.default.overlay},r)):o.default.createElement("video",{"data-testid":"video",crossOrigin:"anonymous",className:(0,a.default)([i.default.video,i.default[m]]),muted:d,loop:f,autoPlay:p,poster:u,playsInline:!0},o.default.createElement("source",{"data-testid":"source",src:t,type:n}))}},6975:function(e,t,n){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)=>{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){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){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(6650),t),o(n(9929),t),o(n(2149),t),o(n(2285),t),o(n(1143),t),o(n(393),t),o(n(6975),t),o(n(7387),t)},2802:(e,t)=>{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)=>{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)=>{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)=>{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"},7451:(e,t,n)=>{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)=>{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)=>{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"},3250:(e,t,n)=>{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 c(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(e){return!0}}var d="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,d=r[1];return l((function(){o.value=n,o.getSnapshot=t,c(o)&&d({inst:o})}),[e,n,t]),i((function(){return c(o)&&d({inst:o}),e((function(){c(o)&&d({inst:o})}))}),[e]),u(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:d},1688:(e,t,n)=>{e.exports=n(3250)},6689:e=>{e.exports=require("react")}},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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SSxDQUFDNlAsRUFBS20wQixJQUFVbGdDLE9BQU95UyxVQUFVdEcsZUFBZXpQLEtBQUtxUCxFQUFLbTBCLEdDQ2xGUCxFQUFvQnBqQyxFQUFLK2lDLElBQ0gsb0JBQVhqakMsUUFBMEJBLE9BQU84akMsYUFDMUNuZ0MsT0FBT2lMLGVBQWVxMEIsRUFBU2pqQyxPQUFPOGpDLFlBQWEsQ0FBRXBqQyxNQUFPLFdBRTdEaUQsT0FBT2lMLGVBQWVxMEIsRUFBUyxhQUFjLENBQUV2aUMsT0FBTyxHQUFPLEVDRjlELElBQUlxakMsRUFBc0JULEVBQW9CIiwic291cmNlcyI6WyJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VPdXRzaWRlQ2xpY2svdXNlT3V0c2lkZUNsaWNrLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3RzbGliL3RzbGliLmVzNi5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AdG91Y2h0ZWNoL3dlYi1ob29rcy9kaXN0L2hvb2tzL3VzZVByb21pc2UvdXNlUHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9zd3IvX2ludGVybmFsL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3N3ci9jb3JlL2Rpc3QvaW5kZXgubWpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL0B0b3VjaHRlY2gvd2ViLWhvb2tzL2Rpc3QvaG9va3MvdXNlU1dSSG9va3NDb25maWcvdXNlU1dSSG9va3NDb25maWcuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQHRvdWNodGVjaC93ZWItaG9va3MvZGlzdC9ob29rcy91c2VUb2dnbGUvdXNlVG9nZ2xlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2NsYXNzY2F0L3NyYy9pbmRleC5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24ubW9kdWxlLmNzcz9mZjFiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UubW9kdWxlLmNzcz80MzI4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9CdXR0b25MaW5rLm1vZHVsZS5jc3M/YzBiNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94Lm1vZHVsZS5jc3M/ZmYyZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yUGlja2VyL0NvbG9yUGlja2VyLm1vZHVsZS5jc3M/ODcxOSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbG9yU3dhdGNoL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3M/ZmNlMiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3M/YThhZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0NsaWNrYWJsZS5tb2R1bGUuY3NzPzdhMGQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvRmlsZUlucHV0Lm1vZHVsZS5jc3M/ZDU1NyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWwvRmxvYXRpbmdQYW5lbC5tb2R1bGUuY3NzPzA5OWQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL0ljb24ubW9kdWxlLmNzcz8xY2FjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLm1vZHVsZS5jc3M/NTk2ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rL0ljb25CdXR0b25MaW5rLm1vZHVsZS5jc3M/MmM0NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLm1vZHVsZS5jc3M/ZjEwZSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xhYmVsL0xhYmVsLm1vZHVsZS5jc3M/NDY5ZiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3Lm1vZHVsZS5jc3M/M2NkNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0xpc3RWaWV3L0xpc3RWaWV3SXRlbS5tb2R1bGUuY3NzP2RmZmEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnUubW9kdWxlLmNzcz8xOTBhIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51Q29udGFpbmVyLm1vZHVsZS5jc3M/Y2QzNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudUl0ZW0ubW9kdWxlLmNzcz9hYWNlIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51TGlua0l0ZW0ubW9kdWxlLmNzcz9iNWRiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwubW9kdWxlLmNzcz84YTg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTnVtcGFkL051bXBhZC5tb2R1bGUuY3NzPzY1YmQiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L092ZXJsYXkubW9kdWxlLmNzcz8zNzE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLm1vZHVsZS5jc3M/NGRiNCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLm1vZHVsZS5jc3M/YjY3NCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L09wdGlvbkxpc3QubW9kdWxlLmNzcz80OWFjIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gubW9kdWxlLmNzcz9lZDQzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdC5tb2R1bGUuY3NzPzFlNzkiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvU2VsZWN0b3IvU2VsZWN0b3IubW9kdWxlLmNzcz85YWJkIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGUubW9kdWxlLmNzcz85M2E5Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXIubW9kdWxlLmNzcz83MGRmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3M/MWQwYyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Lm1vZHVsZS5jc3M/Yjk1NSIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlUm93Q2VsbC5tb2R1bGUuY3NzP2RhNWEiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLm1vZHVsZS5jc3M/OGYzNiIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQubW9kdWxlLmNzcz8zZjFmIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QubW9kdWxlLmNzcz81ODg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIubW9kdWxlLmNzcz9lYzg2Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVmlkZW8vVmlkZW8ubW9kdWxlLmNzcz9lZGE3Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL2hvdGtleXMtanMvZGlzdC9ob3RrZXlzLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9yZWFjdC1ob3RrZXlzLWhvb2svZGlzdC9yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy1pbmZpbml0ZS1sb2FkZXIvZGlzdC9pbmRleC5lc20uanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vZXh0ZW5kcy5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQuanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9ub2RlX21vZHVsZXMvQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9tZW1vaXplLW9uZS9kaXN0L21lbW9pemUtb25lLmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL25vZGVfbW9kdWxlcy9AYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3JlYWN0LXdpbmRvdy9kaXN0L2luZGV4LmVzbS5qcyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0J1dHRvbi9CdXR0b24udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvQnV0dG9uQmFkZ2UudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uQmFkZ2UvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9CdXR0b25MaW5rL0J1dHRvbkxpbmsudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L0NoZWNrYm94LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NoZWNrYm94L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvQ29sb3JQaWNrZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvQ29sb3JQaWNrZXIvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9Db2xvclN3YXRjaC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9Db2xvclN3YXRjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL0NvbmZpcm1hdGlvbk1vZGFsLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0NvbmZpcm1hdGlvbk1vZGFsL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRHJvcGRvd24vQ2xpY2thYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL0Ryb3Bkb3duLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0Ryb3Bkb3duL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmlsZUlucHV0L0ZpbGVJbnB1dC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GaWxlSW5wdXQvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9GbG9hdGluZ1BhbmVsL0Zsb2F0aW5nUGFuZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvRmxvYXRpbmdQYW5lbC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb24vSWNvbi50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvSWNvbkJ1dHRvbi9JY29uQnV0dG9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ljb25CdXR0b24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9JY29uQnV0dG9uTGluay50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9JY29uQnV0dG9uTGluay9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL0ltYWdlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL0ltYWdlL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvTGFiZWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGFiZWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlldy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9MaXN0Vmlld0l0ZW0udHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTGlzdFZpZXcvTGlzdFZpZXdMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9MaXN0Vmlldy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL01lbnUvTWVudS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTWVudS9NZW51SXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L01lbnVMaW5rSXRlbS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9NZW51L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvTW9kYWwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvTW9kYWwvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9OdW1wYWQvTnVtcGFkLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL051bXBhZC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL092ZXJsYXkvT3ZlcmxheS50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9PdmVybGF5L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L0dyb3VwT3B0aW9uL0dyb3VwT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9Hcm91cE9wdGlvbi9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vT3B0aW9uLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb24vaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9TZWxlY3QvT3B0aW9uTGlzdC9PcHRpb25MaXN0LnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9PcHRpb25MaXN0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9TZWFyY2gudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlYXJjaC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdENvbnRleHQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvU2VsZWN0L1NlbGVjdG9yL1NlbGVjdG9yLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9TZWxlY3Rvci9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1NlbGVjdC9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlSGVhZGVyQ2VsbC50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvdy50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWJsZS9UYWJsZVJvd0NlbGwudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGFibGUvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9UYWcvVGFnLnRzeCIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RhZy9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb21wb25lbnRzL1RleHRJbnB1dC9UZXh0SW5wdXQudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVGV4dElucHV0L2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3QudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvVG9hc3RDb250YWluZXIudHN4Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2NvbXBvbmVudHMvVG9hc3QvaW5kZXgudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9WaWRlby50c3giLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29tcG9uZW50cy9WaWRlby9pbmRleC50cyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS8uL3NyYy9jb25zdGFudHMvVGFibGUudHMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9zcmMvY29uc3RhbnRzL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL2luZGV4LnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vc3JjL3R5cGVzL3RhYmxlLnRzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2JhY2tzcGFjZS5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2FyZXQtZG93bi5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvY2FyZXQtdXAuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL2Nyb3NzZWQuc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vYXNzZXRzL3NlYXJjaC5zdmciLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvLi9hc3NldHMvc2VsZWN0LWNhcmV0LWRvd24uc3ZnIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL2Nqcy91c2Utc3luYy1leHRlcm5hbC1zdG9yZS1zaGltLnByb2R1Y3Rpb24ubWluLmpzIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpLy4vbm9kZV9tb2R1bGVzL3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvZXh0ZXJuYWwgY29tbW9uanMgXCJyZWFjdFwiIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9jb21wYXQgZ2V0IGRlZmF1bHQgZXhwb3J0Iiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9kZWZpbmUgcHJvcGVydHkgZ2V0dGVycyIsIndlYnBhY2s6Ly9AdG91Y2h0ZWNoL2Jhc2VsYXllci11aS93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0B0b3VjaHRlY2gvYmFzZWxheWVyLXVpL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHRvdWNodGVjaC9iYXNlbGF5ZXItdWkvd2VicGFjay9zdGFydHVwIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG52YXIgb3B0aW9ucyA9IHtcbiAgICBjYXB0dXJlOiB0cnVlLFxufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZU91dHNpZGVDbGljayhjYWxsYmFjaykge1xuICAgIHZhciByZWYgPSB1c2VSZWYoKTtcbiAgICB1c2VFZmZlY3QoZnVuY3Rpb24gKCkge1xuICAgICAgICB2YXIgaGFuZGxlQ2xpY2sgPSBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICAgICAgICAgIGlmICghcmVmLmN1cnJlbnQgfHwgcmVmLmN1cnJlbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgfTtcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwidG91Y2hlbmRcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcIm1vdXNldXBcIiwgaGFuZGxlQ2xpY2ssIG9wdGlvbnMpO1xuICAgICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInRvdWNoZW5kXCIsIGhhbmRsZUNsaWNrLCBvcHRpb25zKTtcbiAgICAgICAgfTtcbiAgICB9LCBbY2FsbGJhY2tdKTtcbiAgICByZXR1cm4gcmVmO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dXNlT3V0c2lkZUNsaWNrLmpzLm1hcCIsIi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcclxuQ29weXJpZ2h0IChjKSBNaWNyb3NvZnQgQ29ycG9yYXRpb24uXHJcblxyXG5QZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnlcclxucHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLlxyXG5cclxuVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSFxyXG5SRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFlcclxuQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULFxyXG5JTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST01cclxuTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1JcclxuT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUlxyXG5QRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLlxyXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqL1xyXG4vKiBnbG9iYWwgUmVmbGVjdCwgUHJvbWlzZSAqL1xyXG5cclxudmFyIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkLCBiKSB7XHJcbiAgICBleHRlbmRTdGF0aWNzID0gT2JqZWN0LnNldFByb3RvdHlwZU9mIHx8XHJcbiAgICAgICAgKHsgX19wcm90b19fOiBbXSB9IGluc3RhbmNlb2YgQXJyYXkgJiYgZnVuY3Rpb24gKGQsIGIpIHsgZC5fX3Byb3RvX18gPSBiOyB9KSB8fFxyXG4gICAgICAgIGZ1bmN0aW9uIChkLCBiKSB7IGZvciAodmFyIHAgaW4gYikgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChiLCBwKSkgZFtwXSA9IGJbcF07IH07XHJcbiAgICByZXR1cm4gZXh0ZW5kU3RhdGljcyhkLCBiKTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2V4dGVuZHMoZCwgYikge1xyXG4gICAgaWYgKHR5cGVvZiBiICE9PSBcImZ1bmN0aW9uXCIgJiYgYiAhPT0gbnVsbClcclxuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2xhc3MgZXh0ZW5kcyB2YWx1ZSBcIiArIFN0cmluZyhiKSArIFwiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGxcIik7XHJcbiAgICBleHRlbmRTdGF0aWNzKGQsIGIpO1xyXG4gICAgZnVuY3Rpb24gX18oKSB7IHRoaXMuY29uc3RydWN0b3IgPSBkOyB9XHJcbiAgICBkLnByb3RvdHlwZSA9IGIgPT09IG51bGwgPyBPYmplY3QuY3JlYXRlKGIpIDogKF9fLnByb3RvdHlwZSA9IGIucHJvdG90eXBlLCBuZXcgX18oKSk7XHJcbn1cclxuXHJcbmV4cG9ydCB2YXIgX19hc3NpZ24gPSBmdW5jdGlvbigpIHtcclxuICAgIF9fYXNzaWduID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiBfX2Fzc2lnbih0KSB7XHJcbiAgICAgICAgZm9yICh2YXIgcywgaSA9IDEsIG4gPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbjsgaSsrKSB7XHJcbiAgICAgICAgICAgIHMgPSBhcmd1bWVudHNbaV07XHJcbiAgICAgICAgICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSkgdFtwXSA9IHNbcF07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0O1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3Jlc3QocywgZSkge1xyXG4gICAgdmFyIHQgPSB7fTtcclxuICAgIGZvciAodmFyIHAgaW4gcykgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzLCBwKSAmJiBlLmluZGV4T2YocCkgPCAwKVxyXG4gICAgICAgIHRbcF0gPSBzW3BdO1xyXG4gICAgaWYgKHMgIT0gbnVsbCAmJiB0eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyA9PT0gXCJmdW5jdGlvblwiKVxyXG4gICAgICAgIGZvciAodmFyIGkgPSAwLCBwID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhzKTsgaSA8IHAubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKGUuaW5kZXhPZihwW2ldKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHMsIHBbaV0pKVxyXG4gICAgICAgICAgICAgICAgdFtwW2ldXSA9IHNbcFtpXV07XHJcbiAgICAgICAgfVxyXG4gICAgcmV0dXJuIHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKSB7XHJcbiAgICB2YXIgYyA9IGFyZ3VtZW50cy5sZW5ndGgsIHIgPSBjIDwgMyA/IHRhcmdldCA6IGRlc2MgPT09IG51bGwgPyBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSkgOiBkZXNjLCBkO1xyXG4gICAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSBcImZ1bmN0aW9uXCIpIHIgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5LCBkZXNjKTtcclxuICAgIGVsc2UgZm9yICh2YXIgaSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIGlmIChkID0gZGVjb3JhdG9yc1tpXSkgciA9IChjIDwgMyA/IGQocikgOiBjID4gMyA/IGQodGFyZ2V0LCBrZXksIHIpIDogZCh0YXJnZXQsIGtleSkpIHx8IHI7XHJcbiAgICByZXR1cm4gYyA+IDMgJiYgciAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHIpLCByO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHsgZGVjb3JhdG9yKHRhcmdldCwga2V5LCBwYXJhbUluZGV4KTsgfVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19lc0RlY29yYXRlKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7XHJcbiAgICBmdW5jdGlvbiBhY2NlcHQoZikgeyBpZiAoZiAhPT0gdm9pZCAwICYmIHR5cGVvZiBmICE9PSBcImZ1bmN0aW9uXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJGdW5jdGlvbiBleHBlY3RlZFwiKTsgcmV0dXJuIGY7IH1cclxuICAgIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleSA9IGtpbmQgPT09IFwiZ2V0dGVyXCIgPyBcImdldFwiIDoga2luZCA9PT0gXCJzZXR0ZXJcIiA/IFwic2V0XCIgOiBcInZhbHVlXCI7XHJcbiAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluW1wic3RhdGljXCJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDtcclxuICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pO1xyXG4gICAgdmFyIF8sIGRvbmUgPSBmYWxzZTtcclxuICAgIGZvciAodmFyIGkgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgdmFyIGNvbnRleHQgPSB7fTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbikgY29udGV4dFtwXSA9IHAgPT09IFwiYWNjZXNzXCIgPyB7fSA6IGNvbnRleHRJbltwXTtcclxuICAgICAgICBmb3IgKHZhciBwIGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQuYWNjZXNzW3BdID0gY29udGV4dEluLmFjY2Vzc1twXTtcclxuICAgICAgICBjb250ZXh0LmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24gKGYpIHsgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWRcIik7IGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGYgfHwgbnVsbCkpOyB9O1xyXG4gICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpXSkoa2luZCA9PT0gXCJhY2Nlc3NvclwiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleV0sIGNvbnRleHQpO1xyXG4gICAgICAgIGlmIChraW5kID09PSBcImFjY2Vzc29yXCIpIHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSBcIm9iamVjdFwiKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiT2JqZWN0IGV4cGVjdGVkXCIpO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfO1xyXG4gICAgICAgICAgICBpZiAoXyA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy5wdXNoKF8pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChfID0gYWNjZXB0KHJlc3VsdCkpIHtcclxuICAgICAgICAgICAgaWYgKGtpbmQgPT09IFwiZmllbGRcIikgaW5pdGlhbGl6ZXJzLnB1c2goXyk7XHJcbiAgICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXldID0gXztcclxuICAgICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7XHJcbiAgICBkb25lID0gdHJ1ZTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3J1bkluaXRpYWxpemVycyh0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlKSB7XHJcbiAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgdmFsdWUgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcsIHZhbHVlKSA6IGluaXRpYWxpemVyc1tpXS5jYWxsKHRoaXNBcmcpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUgOiB2b2lkIDA7XHJcbn07XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19wcm9wS2V5KHgpIHtcclxuICAgIHJldHVybiB0eXBlb2YgeCA9PT0gXCJzeW1ib2xcIiA/IHggOiBcIlwiLmNvbmNhdCh4KTtcclxufTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3NldEZ1bmN0aW9uTmFtZShmLCBuYW1lLCBwcmVmaXgpIHtcclxuICAgIGlmICh0eXBlb2YgbmFtZSA9PT0gXCJzeW1ib2xcIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyBcIltcIi5jb25jYXQobmFtZS5kZXNjcmlwdGlvbiwgXCJdXCIpIDogXCJcIjtcclxuICAgIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZiwgXCJuYW1lXCIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4ID8gXCJcIi5jb25jYXQocHJlZml4LCBcIiBcIiwgbmFtZSkgOiBuYW1lIH0pO1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fbWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpIHtcclxuICAgIGlmICh0eXBlb2YgUmVmbGVjdCA9PT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gXCJmdW5jdGlvblwiKSByZXR1cm4gUmVmbGVjdC5tZXRhZGF0YShtZXRhZGF0YUtleSwgbWV0YWRhdGFWYWx1ZSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0ZXIodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XHJcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cclxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xyXG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cclxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxyXG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19nZW5lcmF0b3IodGhpc0FyZywgYm9keSkge1xyXG4gICAgdmFyIF8gPSB7IGxhYmVsOiAwLCBzZW50OiBmdW5jdGlvbigpIHsgaWYgKHRbMF0gJiAxKSB0aHJvdyB0WzFdOyByZXR1cm4gdFsxXTsgfSwgdHJ5czogW10sIG9wczogW10gfSwgZiwgeSwgdCwgZztcclxuICAgIHJldHVybiBnID0geyBuZXh0OiB2ZXJiKDApLCBcInRocm93XCI6IHZlcmIoMSksIFwicmV0dXJuXCI6IHZlcmIoMikgfSwgdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICYmIChnW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHsgcmV0dXJuIHRoaXM7IH0pLCBnO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IHJldHVybiBmdW5jdGlvbiAodikgeyByZXR1cm4gc3RlcChbbiwgdl0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKG9wKSB7XHJcbiAgICAgICAgaWYgKGYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBleGVjdXRpbmcuXCIpO1xyXG4gICAgICAgIHdoaWxlIChnICYmIChnID0gMCwgb3BbMF0gJiYgKF8gPSAwKSksIF8pIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChmID0gMSwgeSAmJiAodCA9IG9wWzBdICYgMiA/IHlbXCJyZXR1cm5cIl0gOiBvcFswXSA/IHlbXCJ0aHJvd1wiXSB8fCAoKHQgPSB5W1wicmV0dXJuXCJdKSAmJiB0LmNhbGwoeSksIDApIDogeS5uZXh0KSAmJiAhKHQgPSB0LmNhbGwoeSwgb3BbMV0pKS5kb25lKSByZXR1cm4gdDtcclxuICAgICAgICAgICAgaWYgKHkgPSAwLCB0KSBvcCA9IFtvcFswXSAmIDIsIHQudmFsdWVdO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG9wWzBdKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDA6IGNhc2UgMTogdCA9IG9wOyBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgNDogXy5sYWJlbCsrOyByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07XHJcbiAgICAgICAgICAgICAgICBjYXNlIDU6IF8ubGFiZWwrKzsgeSA9IG9wWzFdOyBvcCA9IFswXTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBjYXNlIDc6IG9wID0gXy5vcHMucG9wKCk7IF8udHJ5cy5wb3AoKTsgY29udGludWU7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIGlmICghKHQgPSBfLnRyeXMsIHQgPSB0Lmxlbmd0aCA+IDAgJiYgdFt0Lmxlbmd0aCAtIDFdKSAmJiAob3BbMF0gPT09IDYgfHwgb3BbMF0gPT09IDIpKSB7IF8gPSAwOyBjb250aW51ZTsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChvcFswXSA9PT0gMyAmJiAoIXQgfHwgKG9wWzFdID4gdFswXSAmJiBvcFsxXSA8IHRbM10pKSkgeyBfLmxhYmVsID0gb3BbMV07IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG9wWzBdID09PSA2ICYmIF8ubGFiZWwgPCB0WzFdKSB7IF8ubGFiZWwgPSB0WzFdOyB0ID0gb3A7IGJyZWFrOyB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQgJiYgXy5sYWJlbCA8IHRbMl0pIHsgXy5sYWJlbCA9IHRbMl07IF8ub3BzLnB1c2gob3ApOyBicmVhazsgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0WzJdKSBfLm9wcy5wb3AoKTtcclxuICAgICAgICAgICAgICAgICAgICBfLnRyeXMucG9wKCk7IGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIG9wID0gYm9keS5jYWxsKHRoaXNBcmcsIF8pO1xyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHsgb3AgPSBbNiwgZV07IHkgPSAwOyB9IGZpbmFsbHkgeyBmID0gdCA9IDA7IH1cclxuICAgICAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsgcmV0dXJuIHsgdmFsdWU6IG9wWzBdID8gb3BbMV0gOiB2b2lkIDAsIGRvbmU6IHRydWUgfTtcclxuICAgIH1cclxufVxyXG5cclxuZXhwb3J0IHZhciBfX2NyZWF0ZUJpbmRpbmcgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8sIG0sIGssIGsyKSB7XHJcbiAgICBpZiAoazIgPT09IHVuZGVmaW5lZCkgazIgPSBrO1xyXG4gICAgdmFyIGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG0sIGspO1xyXG4gICAgaWYgKCFkZXNjIHx8IChcImdldFwiIGluIGRlc2MgPyAhbS5fX2VzTW9kdWxlIDogZGVzYy53cml0YWJsZSB8fCBkZXNjLmNvbmZpZ3VyYWJsZSkpIHtcclxuICAgICAgICBkZXNjID0geyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGZ1bmN0aW9uKCkgeyByZXR1cm4gbVtrXTsgfSB9O1xyXG4gICAgfVxyXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sIGsyLCBkZXNjKTtcclxufSkgOiAoZnVuY3Rpb24obywgbSwgaywgazIpIHtcclxuICAgIGlmIChrMiA9PT0gdW5kZWZpbmVkKSBrMiA9IGs7XHJcbiAgICBvW2syXSA9IG1ba107XHJcbn0pO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtLCBvKSB7XHJcbiAgICBmb3IgKHZhciBwIGluIG0pIGlmIChwICE9PSBcImRlZmF1bHRcIiAmJiAhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG8sIHApKSBfX2NyZWF0ZUJpbmRpbmcobywgbSwgcCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX3ZhbHVlcyhvKSB7XHJcbiAgICB2YXIgcyA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG0gPSBzICYmIG9bc10sIGkgPSAwO1xyXG4gICAgaWYgKG0pIHJldHVybiBtLmNhbGwobyk7XHJcbiAgICBpZiAobyAmJiB0eXBlb2Ygby5sZW5ndGggPT09IFwibnVtYmVyXCIpIHJldHVybiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAobyAmJiBpID49IG8ubGVuZ3RoKSBvID0gdm9pZCAwO1xyXG4gICAgICAgICAgICByZXR1cm4geyB2YWx1ZTogbyAmJiBvW2krK10sIGRvbmU6ICFvIH07XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuICAgIHRocm93IG5ldyBUeXBlRXJyb3IocyA/IFwiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS5cIiA6IFwiU3ltYm9sLml0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fcmVhZChvLCBuKSB7XHJcbiAgICB2YXIgbSA9IHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiAmJiBvW1N5bWJvbC5pdGVyYXRvcl07XHJcbiAgICBpZiAoIW0pIHJldHVybiBvO1xyXG4gICAgdmFyIGkgPSBtLmNhbGwobyksIHIsIGFyID0gW10sIGU7XHJcbiAgICB0cnkge1xyXG4gICAgICAgIHdoaWxlICgobiA9PT0gdm9pZCAwIHx8IG4tLSA+IDApICYmICEociA9IGkubmV4dCgpKS5kb25lKSBhci5wdXNoKHIudmFsdWUpO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7IGUgPSB7IGVycm9yOiBlcnJvciB9OyB9XHJcbiAgICBmaW5hbGx5IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpZiAociAmJiAhci5kb25lICYmIChtID0gaVtcInJldHVyblwiXSkpIG0uY2FsbChpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZmluYWxseSB7IGlmIChlKSB0aHJvdyBlLmVycm9yOyB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWQoKSB7XHJcbiAgICBmb3IgKHZhciBhciA9IFtdLCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKylcclxuICAgICAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2ldKSk7XHJcbiAgICByZXR1cm4gYXI7XHJcbn1cclxuXHJcbi8qKiBAZGVwcmVjYXRlZCAqL1xyXG5leHBvcnQgZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7XHJcbiAgICBmb3IgKHZhciBzID0gMCwgaSA9IDAsIGlsID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGlsOyBpKyspIHMgKz0gYXJndW1lbnRzW2ldLmxlbmd0aDtcclxuICAgIGZvciAodmFyIHIgPSBBcnJheShzKSwgayA9IDAsIGkgPSAwOyBpIDwgaWw7IGkrKylcclxuICAgICAgICBmb3IgKHZhciBhID0gYXJndW1lbnRzW2ldLCBqID0gMCwgamwgPSBhLmxlbmd0aDsgaiA8IGpsOyBqKyssIGsrKylcclxuICAgICAgICAgICAgcltrXSA9IGFbal07XHJcbiAgICByZXR1cm4gcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fc3ByZWFkQXJyYXkodG8sIGZyb20sIHBhY2spIHtcclxuICAgIGlmIChwYWNrIHx8IGFyZ3VtZW50cy5sZW5ndGggPT09IDIpIGZvciAodmFyIGkgPSAwLCBsID0gZnJvbS5sZW5ndGgsIGFyOyBpIDwgbDsgaSsrKSB7XHJcbiAgICAgICAgaWYgKGFyIHx8ICEoaSBpbiBmcm9tKSkge1xyXG4gICAgICAgICAgICBpZiAoIWFyKSBhciA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20sIDAsIGkpO1xyXG4gICAgICAgICAgICBhcltpXSA9IGZyb21baV07XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHRvLmNvbmNhdChhciB8fCBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tKSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2F3YWl0KHYpIHtcclxuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2LCB0aGlzKSA6IG5ldyBfX2F3YWl0KHYpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHtcclxuICAgIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC5cIik7XHJcbiAgICB2YXIgZyA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSwgaSwgcSA9IFtdO1xyXG4gICAgcmV0dXJuIGkgPSB7fSwgdmVyYihcIm5leHRcIiksIHZlcmIoXCJ0aHJvd1wiKSwgdmVyYihcInJldHVyblwiKSwgaVtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuKSB7IGlmIChnW25dKSBpW25dID0gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChhLCBiKSB7IHEucHVzaChbbiwgdiwgYSwgYl0pID4gMSB8fCByZXN1bWUobiwgdik7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiByZXN1bWUobiwgdikgeyB0cnkgeyBzdGVwKGdbbl0odikpOyB9IGNhdGNoIChlKSB7IHNldHRsZShxWzBdWzNdLCBlKTsgfSB9XHJcbiAgICBmdW5jdGlvbiBzdGVwKHIpIHsgci52YWx1ZSBpbnN0YW5jZW9mIF9fYXdhaXQgPyBQcm9taXNlLnJlc29sdmUoci52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocVswXVsyXSwgcik7IH1cclxuICAgIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUpIHsgcmVzdW1lKFwibmV4dFwiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHJlamVjdCh2YWx1ZSkgeyByZXN1bWUoXCJ0aHJvd1wiLCB2YWx1ZSk7IH1cclxuICAgIGZ1bmN0aW9uIHNldHRsZShmLCB2KSB7IGlmIChmKHYpLCBxLnNoaWZ0KCksIHEubGVuZ3RoKSByZXN1bWUocVswXVswXSwgcVswXVsxXSk7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNEZWxlZ2F0b3Iobykge1xyXG4gICAgdmFyIGksIHA7XHJcbiAgICByZXR1cm4gaSA9IHt9LCB2ZXJiKFwibmV4dFwiKSwgdmVyYihcInRocm93XCIsIGZ1bmN0aW9uIChlKSB7IHRocm93IGU7IH0pLCB2ZXJiKFwicmV0dXJuXCIpLCBpW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9LCBpO1xyXG4gICAgZnVuY3Rpb24gdmVyYihuLCBmKSB7IGlbbl0gPSBvW25dID8gZnVuY3Rpb24gKHYpIHsgcmV0dXJuIChwID0gIXApID8geyB2YWx1ZTogX19hd2FpdChvW25dKHYpKSwgZG9uZTogZmFsc2UgfSA6IGYgPyBmKHYpIDogdjsgfSA6IGY7IH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9fYXN5bmNWYWx1ZXMobykge1xyXG4gICAgaWYgKCFTeW1ib2wuYXN5bmNJdGVyYXRvcikgdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLlwiKTtcclxuICAgIHZhciBtID0gb1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGk7XHJcbiAgICByZXR1cm4gbSA/IG0uY2FsbChvKSA6IChvID0gdHlwZW9mIF9fdmFsdWVzID09PSBcImZ1bmN0aW9uXCIgPyBfX3ZhbHVlcyhvKSA6IG9bU3ltYm9sLml0ZXJhdG9yXSgpLCBpID0ge30sIHZlcmIoXCJuZXh0XCIpLCB2ZXJiKFwidGhyb3dcIiksIHZlcmIoXCJyZXR1cm5cIiksIGlbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfSwgaSk7XHJcbiAgICBmdW5jdGlvbiB2ZXJiKG4pIHsgaVtuXSA9IG9bbl0gJiYgZnVuY3Rpb24gKHYpIHsgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHsgdiA9IG9bbl0odiksIHNldHRsZShyZXNvbHZlLCByZWplY3QsIHYuZG9uZSwgdi52YWx1ZSk7IH0pOyB9OyB9XHJcbiAgICBmdW5jdGlvbiBzZXR0bGUocmVzb2x2ZSwgcmVqZWN0LCBkLCB2KSB7IFByb21pc2UucmVzb2x2ZSh2KS50aGVuKGZ1bmN0aW9uKHYpIHsgcmVzb2x2ZSh7IHZhbHVlOiB2LCBkb25lOiBkIH0pOyB9LCByZWplY3QpOyB9XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX21ha2VUZW1wbGF0ZU9iamVjdChjb29rZWQsIHJhdykge1xyXG4gICAgaWYgKE9iamVjdC5kZWZpbmVQcm9wZXJ0eSkgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkoY29va2VkLCBcInJhd1wiLCB7IHZhbHVlOiByYXcgfSk7IH0gZWxzZSB7IGNvb2tlZC5yYXcgPSByYXc7IH1cclxuICAgIHJldHVybiBjb29rZWQ7XHJcbn07XHJcblxyXG52YXIgX19zZXRNb2R1bGVEZWZhdWx0ID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvLCB2KSB7XHJcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobywgXCJkZWZhdWx0XCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHYgfSk7XHJcbn0pIDogZnVuY3Rpb24obywgdikge1xyXG4gICAgb1tcImRlZmF1bHRcIl0gPSB2O1xyXG59O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0U3Rhcihtb2QpIHtcclxuICAgIGlmIChtb2QgJiYgbW9kLl9fZXNNb2R1bGUpIHJldHVybiBtb2Q7XHJcbiAgICB2YXIgcmVzdWx0ID0ge307XHJcbiAgICBpZiAobW9kICE9IG51bGwpIGZvciAodmFyIGsgaW4gbW9kKSBpZiAoayAhPT0gXCJkZWZhdWx0XCIgJiYgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgaykpIF9fY3JlYXRlQmluZGluZyhyZXN1bHQsIG1vZCwgayk7XHJcbiAgICBfX3NldE1vZHVsZURlZmF1bHQocmVzdWx0LCBtb2QpO1xyXG4gICAgcmV0dXJuIHJlc3VsdDtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHtcclxuICAgIHJldHVybiAobW9kICYmIG1vZC5fX2VzTW9kdWxlKSA/IG1vZCA6IHsgZGVmYXVsdDogbW9kIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZSwga2luZCwgZikge1xyXG4gICAgaWYgKGtpbmQgPT09IFwiYVwiICYmICFmKSB0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHJpdmF0ZSBhY2Nlc3NvciB3YXMgZGVmaW5lZCB3aXRob3V0IGEgZ2V0dGVyXCIpO1xyXG4gICAgaWYgKHR5cGVvZiBzdGF0ZSA9PT0gXCJmdW5jdGlvblwiID8gcmVjZWl2ZXIgIT09IHN0YXRlIHx8ICFmIDogIXN0YXRlLmhhcyhyZWNlaXZlcikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXRcIik7XHJcbiAgICByZXR1cm4ga2luZCA9PT0gXCJtXCIgPyBmIDoga2luZCA9PT0gXCJhXCIgPyBmLmNhbGwocmVjZWl2ZXIpIDogZiA/IGYudmFsdWUgOiBzdGF0ZS5nZXQocmVjZWl2ZXIpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUsIHZhbHVlLCBraW5kLCBmKSB7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJtXCIpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIG1ldGhvZCBpcyBub3Qgd3JpdGFibGVcIik7XHJcbiAgICBpZiAoa2luZCA9PT0gXCJhXCIgJiYgIWYpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXJcIik7XHJcbiAgICBpZiAodHlwZW9mIHN0YXRlID09PSBcImZ1bmN0aW9uXCIgPyByZWNlaXZlciAhPT0gc3RhdGUgfHwgIWYgOiAhc3RhdGUuaGFzKHJlY2VpdmVyKSkgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCB3cml0ZSBwcml2YXRlIG1lbWJlciB0byBhbiBvYmplY3Qgd2hvc2UgY2xhc3MgZGlkIG5vdCBkZWNsYXJlIGl0XCIpO1xyXG4gICAgcmV0dXJuIChraW5kID09PSBcImFcIiA/IGYuY2FsbChyZWNlaXZlciwgdmFsdWUpIDogZiA/IGYudmFsdWUgPSB2YWx1ZSA6IHN0YXRlLnNldChyZWNlaXZlciwgdmFsdWUpKSwgdmFsdWU7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkSW4oc3RhdGUsIHJlY2VpdmVyKSB7XHJcbiAgICBpZiAocmVjZWl2ZXIgPT09IG51bGwgfHwgKHR5cGVvZiByZWNlaXZlciAhPT0gXCJvYmplY3RcIiAmJiB0eXBlb2YgcmVjZWl2ZXIgIT09IFwiZnVuY3Rpb25cIikpIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdFwiKTtcclxuICAgIHJldHVybiB0eXBlb2Ygc3RhdGUgPT09IFwiZnVuY3Rpb25cIiA/IHJlY2VpdmVyID09PSBzdGF0ZSA6IHN0YXRlLmhhcyhyZWNlaXZlcik7XHJcbn1cclxuIiwiaW1wb3J0IHsgX19hd2FpdGVyLCBfX2dlbmVyYXRvciwgX19yZWFkIH0gZnJvbSBcInRzbGliXCI7XG5pbXBvcnQgeyB1c2VTdGF0ZSwgdXNlQ2FsbGJhY2ssIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VQcm9taXNlKCkge1xuICAgIHZhciBfdGhpcyA9IHRoaXM7XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKHtcbiAgICAgICAgZGF0YTogdW5kZWZpbmVkLFxuICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICBpc1Jlc29sdmVkOiBmYWxzZSxcbiAgICAgICAgaXNSZWplY3RlZDogZmFsc2UsXG4gICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgfSksIDIpLCByZXN1bHQgPSBfYVswXSwgc2V0UmVzdWx0ID0gX2FbMV07XG4gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRyYWNrIGlmIHRoZSBjb21wb25lbnQgaGFzIGJlZW4gdW5tb3VudGVkXG4gICAgLy8gd2hpbGUgdGhlIHByb21pc2Ugd2FzIHN0aWxsIHBlbmRpbmcgdG8gYXZvaWQgc2V0dGluZyBzdGF0ZVxuICAgIC8vIG9uIGFuIHVubW91bnRlZCBjb21wb25lbnQuXG4gICAgdmFyIGhhc1VubW91bnRlZCA9IHVzZVJlZihmYWxzZSk7XG4gICAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaGFzVW5tb3VudGVkLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIGhhc1VubW91bnRlZC5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9LCBbXSk7XG4gICAgdmFyIGRpc3BhdGNoID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKHByb21pc2UpIHsgcmV0dXJuIF9fYXdhaXRlcihfdGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIGRhdGEsIGVycm9yXzE7XG4gICAgICAgIHJldHVybiBfX2dlbmVyYXRvcih0aGlzLCBmdW5jdGlvbiAoX2EpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoX2EubGFiZWwpIHtcbiAgICAgICAgICAgICAgICBjYXNlIDA6XG4gICAgICAgICAgICAgICAgICAgIF9hLnRyeXMucHVzaChbMCwgMiwgLCAzXSk7XG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNQZW5kaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2V0dGxlZDogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzQgLyp5aWVsZCovLCBwcm9taXNlXTtcbiAgICAgICAgICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBfYS5zZW50KCk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChoYXNVbm1vdW50ZWQuY3VycmVudCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogdW5kZWZpbmVkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUGVuZGluZzogZmFsc2UsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZXNvbHZlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlamVjdGVkOiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1NldHRsZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gWzIgLypyZXR1cm4qLywgZGF0YV07XG4gICAgICAgICAgICAgICAgY2FzZSAyOlxuICAgICAgICAgICAgICAgICAgICBlcnJvcl8xID0gX2Euc2VudCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaGFzVW5tb3VudGVkLmN1cnJlbnQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBlcnJvcl8xLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1BlbmRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVzb2x2ZWQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzUmVqZWN0ZWQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXR0bGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFszIC8qYnJlYWsqLywgM107XG4gICAgICAgICAgICAgICAgY2FzZSAzOiByZXR1cm4gWzIgLypyZXR1cm4qL107XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH0pOyB9LCBbaGFzVW5tb3VudGVkXSk7XG4gICAgcmV0dXJuIFtyZXN1bHQsIGRpc3BhdGNoXTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVByb21pc2UuanMubWFwIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUVmZmVjdCwgdXNlTGF5b3V0RWZmZWN0LCBjcmVhdGVDb250ZXh0LCB1c2VDb250ZXh0LCB1c2VNZW1vLCB1c2VTdGF0ZSwgY3JlYXRlRWxlbWVudCwgdXNlUmVmLCB1c2VDYWxsYmFjayB9IGZyb20gJ3JlYWN0JztcblxuLy8gR2xvYmFsIHN0YXRlIHVzZWQgdG8gZGVkdXBsaWNhdGUgcmVxdWVzdHMgYW5kIHN0b3JlIGxpc3RlbmVyc1xuY29uc3QgU1dSR2xvYmFsU3RhdGUgPSBuZXcgV2Vha01hcCgpO1xuXG5jb25zdCBFTVBUWV9DQUNIRSA9IHt9O1xuY29uc3QgSU5JVElBTF9DQUNIRSA9IHt9O1xuY29uc3Qgbm9vcCA9ICgpPT57fTtcbi8vIFVzaW5nIG5vb3AoKSBhcyB0aGUgdW5kZWZpbmVkIHZhbHVlIGFzIHVuZGVmaW5lZCBjYW4gYmUgcmVwbGFjZWRcbi8vIGJ5IHNvbWV0aGluZyBlbHNlLiBQcmV0dGllciBpZ25vcmUgYW5kIGV4dHJhIHBhcmVudGhlc2VzIGFyZSBuZWNlc3NhcnkgaGVyZVxuLy8gdG8gZW5zdXJlIHRoYXQgdHNjIGRvZXNuJ3QgcmVtb3ZlIHRoZSBfX05PSU5MSU5FX18gY29tbWVudC5cbi8vIHByZXR0aWVyLWlnbm9yZVxuY29uc3QgVU5ERUZJTkVEID0gLyojX19OT0lOTElORV9fKi8gbm9vcCgpO1xuY29uc3QgT0JKRUNUID0gT2JqZWN0O1xuY29uc3QgaXNVbmRlZmluZWQgPSAodik9PnYgPT09IFVOREVGSU5FRDtcbmNvbnN0IGlzRnVuY3Rpb24gPSAodik9PnR5cGVvZiB2ID09ICdmdW5jdGlvbic7XG5jb25zdCBtZXJnZU9iamVjdHMgPSAoYSwgYik9Pih7XG4gICAgICAgIC4uLmEsXG4gICAgICAgIC4uLmJcbiAgICB9KTtcbmNvbnN0IFNUUl9VTkRFRklORUQgPSAndW5kZWZpbmVkJztcbi8vIE5PVEU6IFVzZSB0aGUgZnVuY3Rpb24gdG8gZ3VhcmFudGVlIGl0J3MgcmUtZXZhbHVhdGVkIGJldHdlZW4ganNkb20gYW5kIG5vZGUgcnVudGltZSBmb3IgdGVzdHMuXG5jb25zdCBpc1dpbmRvd0RlZmluZWQgPSB0eXBlb2Ygd2luZG93ICE9IFNUUl9VTkRFRklORUQ7XG5jb25zdCBpc0RvY3VtZW50RGVmaW5lZCA9IHR5cGVvZiBkb2N1bWVudCAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgaGFzUmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gKCk9PmlzV2luZG93RGVmaW5lZCAmJiB0eXBlb2Ygd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXSAhPSBTVFJfVU5ERUZJTkVEO1xuY29uc3QgY3JlYXRlQ2FjaGVIZWxwZXIgPSAoY2FjaGUsIGtleSk9PntcbiAgICBjb25zdCBzdGF0ZSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgcmV0dXJuIFtcbiAgICAgICAgLy8gR2V0dGVyXG4gICAgICAgICgpPT5jYWNoZS5nZXQoa2V5KSB8fCBFTVBUWV9DQUNIRSxcbiAgICAgICAgLy8gU2V0dGVyXG4gICAgICAgIChpbmZvKT0+e1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcHJldiA9IGNhY2hlLmdldChrZXkpO1xuICAgICAgICAgICAgICAgIC8vIEJlZm9yZSB3cml0aW5nIHRvIHRoZSBzdG9yZSwgd2Uga2VlcCB0aGUgdmFsdWUgaW4gdGhlIGluaXRpYWwgY2FjaGVcbiAgICAgICAgICAgICAgICAvLyBpZiBpdCdzIG5vdCB0aGVyZSB5ZXQuXG4gICAgICAgICAgICAgICAgaWYgKCEoa2V5IGluIElOSVRJQUxfQ0FDSEUpKSB7XG4gICAgICAgICAgICAgICAgICAgIElOSVRJQUxfQ0FDSEVba2V5XSA9IHByZXY7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHN0YXRlWzVdKGtleSwgbWVyZ2VPYmplY3RzKHByZXYsIGluZm8pLCBwcmV2IHx8IEVNUFRZX0NBQ0hFKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgLy8gU3Vic2NyaWJlclxuICAgICAgICBzdGF0ZVs2XSxcbiAgICAgICAgLy8gR2V0IHNlcnZlciBjYWNoZSBzbmFwc2hvdFxuICAgICAgICAoKT0+e1xuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChrZXkpKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgdGhlIGNhY2hlIHdhcyB1cGRhdGVkIG9uIHRoZSBjbGllbnQsIHdlIHJldHVybiB0aGUgc3RvcmVkIGluaXRpYWwgdmFsdWUuXG4gICAgICAgICAgICAgICAgaWYgKGtleSBpbiBJTklUSUFMX0NBQ0hFKSByZXR1cm4gSU5JVElBTF9DQUNIRVtrZXldO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZW4ndCBkb25lIGFueSBjbGllbnQtc2lkZSB1cGRhdGVzLCB3ZSByZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUuXG4gICAgICAgICAgICByZXR1cm4gY2FjaGUuZ2V0KGtleSkgfHwgRU1QVFlfQ0FDSEU7XG4gICAgICAgIH1cbiAgICBdO1xufTtcblxuLy8gdXNlIFdlYWtNYXAgdG8gc3RvcmUgdGhlIG9iamVjdC0+a2V5IG1hcHBpbmdcbi8vIHNvIHRoZSBvYmplY3RzIGNhbiBiZSBnYXJiYWdlIGNvbGxlY3RlZC5cbi8vIFdlYWtNYXAgdXNlcyBhIGhhc2h0YWJsZSB1bmRlciB0aGUgaG9vZCwgc28gdGhlIGxvb2t1cFxuLy8gY29tcGxleGl0eSBpcyBhbG1vc3QgTygxKS5cbmNvbnN0IHRhYmxlID0gbmV3IFdlYWtNYXAoKTtcbi8vIGNvdW50ZXIgb2YgdGhlIGtleVxubGV0IGNvdW50ZXIgPSAwO1xuLy8gQSBzdGFibGUgaGFzaCBpbXBsZW1lbnRhdGlvbiB0aGF0IHN1cHBvcnRzOlxuLy8gLSBGYXN0IGFuZCBlbnN1cmVzIHVuaXF1ZSBoYXNoIHByb3BlcnRpZXNcbi8vIC0gSGFuZGxlcyB1bnNlcmlhbGl6YWJsZSB2YWx1ZXNcbi8vIC0gSGFuZGxlcyBvYmplY3Qga2V5IG9yZGVyaW5nXG4vLyAtIEdlbmVyYXRlcyBzaG9ydCByZXN1bHRzXG4vL1xuLy8gVGhpcyBpcyBub3QgYSBzZXJpYWxpemF0aW9uIGZ1bmN0aW9uLCBhbmQgdGhlIHJlc3VsdCBpcyBub3QgZ3VhcmFudGVlZCB0byBiZVxuLy8gcGFyc2FibGUuXG5jb25zdCBzdGFibGVIYXNoID0gKGFyZyk9PntcbiAgICBjb25zdCB0eXBlID0gdHlwZW9mIGFyZztcbiAgICBjb25zdCBjb25zdHJ1Y3RvciA9IGFyZyAmJiBhcmcuY29uc3RydWN0b3I7XG4gICAgY29uc3QgaXNEYXRlID0gY29uc3RydWN0b3IgPT0gRGF0ZTtcbiAgICBsZXQgcmVzdWx0O1xuICAgIGxldCBpbmRleDtcbiAgICBpZiAoT0JKRUNUKGFyZykgPT09IGFyZyAmJiAhaXNEYXRlICYmIGNvbnN0cnVjdG9yICE9IFJlZ0V4cCkge1xuICAgICAgICAvLyBPYmplY3QvZnVuY3Rpb24sIG5vdCBudWxsL2RhdGUvcmVnZXhwLiBVc2UgV2Vha01hcCB0byBzdG9yZSB0aGUgaWQgZmlyc3QuXG4gICAgICAgIC8vIElmIGl0J3MgYWxyZWFkeSBoYXNoZWQsIGRpcmVjdGx5IHJldHVybiB0aGUgcmVzdWx0LlxuICAgICAgICByZXN1bHQgPSB0YWJsZS5nZXQoYXJnKTtcbiAgICAgICAgaWYgKHJlc3VsdCkgcmV0dXJuIHJlc3VsdDtcbiAgICAgICAgLy8gU3RvcmUgdGhlIGhhc2ggZmlyc3QgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3Rpb24gYmVmb3JlIGVudGVyaW5nIHRoZVxuICAgICAgICAvLyByZWN1cnNpdmUgYHN0YWJsZUhhc2hgIGNhbGxzLlxuICAgICAgICAvLyBGb3Igb3RoZXIgb2JqZWN0cyBsaWtlIHNldCBhbmQgbWFwLCB3ZSB1c2UgdGhpcyBpZCBkaXJlY3RseSBhcyB0aGUgaGFzaC5cbiAgICAgICAgcmVzdWx0ID0gKytjb3VudGVyICsgJ34nO1xuICAgICAgICB0YWJsZS5zZXQoYXJnLCByZXN1bHQpO1xuICAgICAgICBpZiAoY29uc3RydWN0b3IgPT0gQXJyYXkpIHtcbiAgICAgICAgICAgIC8vIEFycmF5LlxuICAgICAgICAgICAgcmVzdWx0ID0gJ0AnO1xuICAgICAgICAgICAgZm9yKGluZGV4ID0gMDsgaW5kZXggPCBhcmcubGVuZ3RoOyBpbmRleCsrKXtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RhYmxlSGFzaChhcmdbaW5kZXhdKSArICcsJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbnN0cnVjdG9yID09IE9CSkVDVCkge1xuICAgICAgICAgICAgLy8gT2JqZWN0LCBzb3J0IGtleXMuXG4gICAgICAgICAgICByZXN1bHQgPSAnIyc7XG4gICAgICAgICAgICBjb25zdCBrZXlzID0gT0JKRUNULmtleXMoYXJnKS5zb3J0KCk7XG4gICAgICAgICAgICB3aGlsZSghaXNVbmRlZmluZWQoaW5kZXggPSBrZXlzLnBvcCgpKSl7XG4gICAgICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChhcmdbaW5kZXhdKSkge1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gaW5kZXggKyAnOicgKyBzdGFibGVIYXNoKGFyZ1tpbmRleF0pICsgJywnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRhYmxlLnNldChhcmcsIHJlc3VsdCk7XG4gICAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgICByZXN1bHQgPSBpc0RhdGUgPyBhcmcudG9KU09OKCkgOiB0eXBlID09ICdzeW1ib2wnID8gYXJnLnRvU3RyaW5nKCkgOiB0eXBlID09ICdzdHJpbmcnID8gSlNPTi5zdHJpbmdpZnkoYXJnKSA6ICcnICsgYXJnO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xufTtcblxuLyoqXG4gKiBEdWUgdG8gdGhlIGJ1ZyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD02NzgwNzUsXG4gKiBpdCdzIG5vdCByZWxpYWJsZSB0byBkZXRlY3QgaWYgdGhlIGJyb3dzZXIgaXMgY3VycmVudGx5IG9ubGluZSBvciBvZmZsaW5lXG4gKiBiYXNlZCBvbiBgbmF2aWdhdG9yLm9uTGluZWAuXG4gKiBBcyBhIHdvcmthcm91bmQsIHdlIGFsd2F5cyBhc3N1bWUgaXQncyBvbmxpbmUgb24gdGhlIGZpcnN0IGxvYWQsIGFuZCBjaGFuZ2VcbiAqIHRoZSBzdGF0dXMgdXBvbiBgb25saW5lYCBvciBgb2ZmbGluZWAgZXZlbnRzLlxuICovIGxldCBvbmxpbmUgPSB0cnVlO1xuY29uc3QgaXNPbmxpbmUgPSAoKT0+b25saW5lO1xuLy8gRm9yIG5vZGUgYW5kIFJlYWN0IE5hdGl2ZSwgYGFkZC9yZW1vdmVFdmVudExpc3RlbmVyYCBkb2Vzbid0IGV4aXN0IG9uIHdpbmRvdy5cbmNvbnN0IFtvbldpbmRvd0V2ZW50LCBvZmZXaW5kb3dFdmVudF0gPSBpc1dpbmRvd0RlZmluZWQgJiYgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgPyBbXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIuYmluZCh3aW5kb3cpLFxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQod2luZG93KVxuXSA6IFtcbiAgICBub29wLFxuICAgIG5vb3Bcbl07XG5jb25zdCBpc1Zpc2libGUgPSAoKT0+e1xuICAgIGNvbnN0IHZpc2liaWxpdHlTdGF0ZSA9IGlzRG9jdW1lbnREZWZpbmVkICYmIGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZTtcbiAgICByZXR1cm4gaXNVbmRlZmluZWQodmlzaWJpbGl0eVN0YXRlKSB8fCB2aXNpYmlsaXR5U3RhdGUgIT09ICdoaWRkZW4nO1xufTtcbmNvbnN0IGluaXRGb2N1cyA9IChjYWxsYmFjayk9PntcbiAgICAvLyBmb2N1cyByZXZhbGlkYXRlXG4gICAgaWYgKGlzRG9jdW1lbnREZWZpbmVkKSB7XG4gICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgfVxuICAgIG9uV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIHJldHVybiAoKT0+e1xuICAgICAgICBpZiAoaXNEb2N1bWVudERlZmluZWQpIHtcbiAgICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHljaGFuZ2UnLCBjYWxsYmFjayk7XG4gICAgICAgIH1cbiAgICAgICAgb2ZmV2luZG93RXZlbnQoJ2ZvY3VzJywgY2FsbGJhY2spO1xuICAgIH07XG59O1xuY29uc3QgaW5pdFJlY29ubmVjdCA9IChjYWxsYmFjayk9PntcbiAgICAvLyByZXZhbGlkYXRlIG9uIHJlY29ubmVjdGVkXG4gICAgY29uc3Qgb25PbmxpbmUgPSAoKT0+e1xuICAgICAgICBvbmxpbmUgPSB0cnVlO1xuICAgICAgICBjYWxsYmFjaygpO1xuICAgIH07XG4gICAgLy8gbm90aGluZyB0byByZXZhbGlkYXRlLCBqdXN0IHVwZGF0ZSB0aGUgc3RhdHVzXG4gICAgY29uc3Qgb25PZmZsaW5lID0gKCk9PntcbiAgICAgICAgb25saW5lID0gZmFsc2U7XG4gICAgfTtcbiAgICBvbldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgb25XaW5kb3dFdmVudCgnb2ZmbGluZScsIG9uT2ZmbGluZSk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvbmxpbmUnLCBvbk9ubGluZSk7XG4gICAgICAgIG9mZldpbmRvd0V2ZW50KCdvZmZsaW5lJywgb25PZmZsaW5lKTtcbiAgICB9O1xufTtcbmNvbnN0IHByZXNldCA9IHtcbiAgICBpc09ubGluZSxcbiAgICBpc1Zpc2libGVcbn07XG5jb25zdCBkZWZhdWx0Q29uZmlnT3B0aW9ucyA9IHtcbiAgICBpbml0Rm9jdXMsXG4gICAgaW5pdFJlY29ubmVjdFxufTtcblxuY29uc3QgSVNfUkVBQ1RfTEVHQUNZID0gIVJlYWN0LnVzZUlkO1xuY29uc3QgSVNfU0VSVkVSID0gIWlzV2luZG93RGVmaW5lZCB8fCAnRGVubycgaW4gd2luZG93O1xuLy8gUG9seWZpbGwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lXG5jb25zdCByQUYgPSAoZik9Pmhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSgpID8gd2luZG93WydyZXF1ZXN0QW5pbWF0aW9uRnJhbWUnXShmKSA6IHNldFRpbWVvdXQoZiwgMSk7XG4vLyBSZWFjdCBjdXJyZW50bHkgdGhyb3dzIGEgd2FybmluZyB3aGVuIHVzaW5nIHVzZUxheW91dEVmZmVjdCBvbiB0aGUgc2VydmVyLlxuLy8gVG8gZ2V0IGFyb3VuZCBpdCwgd2UgY2FuIGNvbmRpdGlvbmFsbHkgdXNlRWZmZWN0IG9uIHRoZSBzZXJ2ZXIgKG5vLW9wKSBhbmRcbi8vIHVzZUxheW91dEVmZmVjdCBpbiB0aGUgYnJvd3Nlci5cbmNvbnN0IHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QgPSBJU19TRVJWRVIgPyB1c2VFZmZlY3QgOiB1c2VMYXlvdXRFZmZlY3Q7XG4vLyBUaGlzIGFzc2lnbm1lbnQgaXMgdG8gZXh0ZW5kIHRoZSBOYXZpZ2F0b3IgdHlwZSB0byB1c2UgZWZmZWN0aXZlVHlwZS5cbmNvbnN0IG5hdmlnYXRvckNvbm5lY3Rpb24gPSB0eXBlb2YgbmF2aWdhdG9yICE9PSAndW5kZWZpbmVkJyAmJiBuYXZpZ2F0b3IuY29ubmVjdGlvbjtcbi8vIEFkanVzdCB0aGUgY29uZmlnIGJhc2VkIG9uIHNsb3cgY29ubmVjdGlvbiBzdGF0dXMgKDw9IDcwS2JwcykuXG5jb25zdCBzbG93Q29ubmVjdGlvbiA9ICFJU19TRVJWRVIgJiYgbmF2aWdhdG9yQ29ubmVjdGlvbiAmJiAoW1xuICAgICdzbG93LTJnJyxcbiAgICAnMmcnXG5dLmluY2x1ZGVzKG5hdmlnYXRvckNvbm5lY3Rpb24uZWZmZWN0aXZlVHlwZSkgfHwgbmF2aWdhdG9yQ29ubmVjdGlvbi5zYXZlRGF0YSk7XG5cbmNvbnN0IHNlcmlhbGl6ZSA9IChrZXkpPT57XG4gICAgaWYgKGlzRnVuY3Rpb24oa2V5KSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAga2V5ID0ga2V5KCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgLy8gZGVwZW5kZW5jaWVzIG5vdCByZWFkeVxuICAgICAgICAgICAga2V5ID0gJyc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gVXNlIHRoZSBvcmlnaW5hbCBrZXkgYXMgdGhlIGFyZ3VtZW50IG9mIGZldGNoZXIuIFRoaXMgY2FuIGJlIGEgc3RyaW5nIG9yIGFuXG4gICAgLy8gYXJyYXkgb2YgdmFsdWVzLlxuICAgIGNvbnN0IGFyZ3MgPSBrZXk7XG4gICAgLy8gSWYga2V5IGlzIG5vdCBmYWxzeSwgb3Igbm90IGFuIGVtcHR5IGFycmF5LCBoYXNoIGl0LlxuICAgIGtleSA9IHR5cGVvZiBrZXkgPT0gJ3N0cmluZycgPyBrZXkgOiAoQXJyYXkuaXNBcnJheShrZXkpID8ga2V5Lmxlbmd0aCA6IGtleSkgPyBzdGFibGVIYXNoKGtleSkgOiAnJztcbiAgICByZXR1cm4gW1xuICAgICAgICBrZXksXG4gICAgICAgIGFyZ3NcbiAgICBdO1xufTtcblxuLy8gR2xvYmFsIHRpbWVzdGFtcC5cbmxldCBfX3RpbWVzdGFtcCA9IDA7XG5jb25zdCBnZXRUaW1lc3RhbXAgPSAoKT0+KytfX3RpbWVzdGFtcDtcblxuY29uc3QgRk9DVVNfRVZFTlQgPSAwO1xuY29uc3QgUkVDT05ORUNUX0VWRU5UID0gMTtcbmNvbnN0IE1VVEFURV9FVkVOVCA9IDI7XG5cbnZhciBjb25zdGFudHMgPSB7XG4gIF9fcHJvdG9fXzogbnVsbCxcbiAgRk9DVVNfRVZFTlQ6IEZPQ1VTX0VWRU5ULFxuICBSRUNPTk5FQ1RfRVZFTlQ6IFJFQ09OTkVDVF9FVkVOVCxcbiAgTVVUQVRFX0VWRU5UOiBNVVRBVEVfRVZFTlRcbn07XG5cbmFzeW5jIGZ1bmN0aW9uIGludGVybmFsTXV0YXRlKC4uLmFyZ3MpIHtcbiAgICBjb25zdCBbY2FjaGUsIF9rZXksIF9kYXRhLCBfb3B0c10gPSBhcmdzO1xuICAgIC8vIFdoZW4gcGFzc2luZyBhcyBhIGJvb2xlYW4sIGl0J3MgZXhwbGljaXRseSB1c2VkIHRvIGRpc2FibGUvZW5hYmxlXG4gICAgLy8gcmV2YWxpZGF0aW9uLlxuICAgIGNvbnN0IG9wdGlvbnMgPSBtZXJnZU9iamVjdHMoe1xuICAgICAgICBwb3B1bGF0ZUNhY2hlOiB0cnVlLFxuICAgICAgICB0aHJvd09uRXJyb3I6IHRydWVcbiAgICB9LCB0eXBlb2YgX29wdHMgPT09ICdib29sZWFuJyA/IHtcbiAgICAgICAgcmV2YWxpZGF0ZTogX29wdHNcbiAgICB9IDogX29wdHMgfHwge30pO1xuICAgIGxldCBwb3B1bGF0ZUNhY2hlID0gb3B0aW9ucy5wb3B1bGF0ZUNhY2hlO1xuICAgIGNvbnN0IHJvbGxiYWNrT25FcnJvck9wdGlvbiA9IG9wdGlvbnMucm9sbGJhY2tPbkVycm9yO1xuICAgIGxldCBvcHRpbWlzdGljRGF0YSA9IG9wdGlvbnMub3B0aW1pc3RpY0RhdGE7XG4gICAgY29uc3QgcmV2YWxpZGF0ZSA9IG9wdGlvbnMucmV2YWxpZGF0ZSAhPT0gZmFsc2U7XG4gICAgY29uc3Qgcm9sbGJhY2tPbkVycm9yID0gKGVycm9yKT0+e1xuICAgICAgICByZXR1cm4gdHlwZW9mIHJvbGxiYWNrT25FcnJvck9wdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHJvbGxiYWNrT25FcnJvck9wdGlvbihlcnJvcikgOiByb2xsYmFja09uRXJyb3JPcHRpb24gIT09IGZhbHNlO1xuICAgIH07XG4gICAgY29uc3QgdGhyb3dPbkVycm9yID0gb3B0aW9ucy50aHJvd09uRXJyb3I7XG4gICAgLy8gSWYgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBhIGtleSBmaWx0ZXIsIHJldHVybiB0aGUgbXV0YXRpb24gcmVzdWx0cyBmb3IgYWxsXG4gICAgLy8gZmlsdGVyZWQga2V5cy5cbiAgICBpZiAoaXNGdW5jdGlvbihfa2V5KSkge1xuICAgICAgICBjb25zdCBrZXlGaWx0ZXIgPSBfa2V5O1xuICAgICAgICBjb25zdCBtYXRjaGVkS2V5cyA9IFtdO1xuICAgICAgICBjb25zdCBpdCA9IGNhY2hlLmtleXMoKTtcbiAgICAgICAgZm9yKGxldCBrZXlJdCA9IGl0Lm5leHQoKTsgIWtleUl0LmRvbmU7IGtleUl0ID0gaXQubmV4dCgpKXtcbiAgICAgICAgICAgIGNvbnN0IGtleSA9IGtleUl0LnZhbHVlO1xuICAgICAgICAgICAgaWYgKC8vIFNraXAgdGhlIHNwZWNpYWwgdXNlU1dSSW5maW5pdGUga2V5cy5cbiAgICAgICAgICAgICFrZXkuc3RhcnRzV2l0aCgnJGluZiQnKSAmJiBrZXlGaWx0ZXIoY2FjaGUuZ2V0KGtleSkuX2spKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2hlZEtleXMucHVzaChrZXkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBQcm9taXNlLmFsbChtYXRjaGVkS2V5cy5tYXAobXV0YXRlQnlLZXkpKTtcbiAgICB9XG4gICAgcmV0dXJuIG11dGF0ZUJ5S2V5KF9rZXkpO1xuICAgIGFzeW5jIGZ1bmN0aW9uIG11dGF0ZUJ5S2V5KF9rKSB7XG4gICAgICAgIC8vIFNlcmlhbGl6ZSBrZXlcbiAgICAgICAgY29uc3QgW2tleV0gPSBzZXJpYWxpemUoX2spO1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBbZ2V0LCBzZXRdID0gY3JlYXRlQ2FjaGVIZWxwZXIoY2FjaGUsIGtleSk7XG4gICAgICAgIGNvbnN0IFtFVkVOVF9SRVZBTElEQVRPUlMsIE1VVEFUSU9OLCBGRVRDSF0gPSBTV1JHbG9iYWxTdGF0ZS5nZXQoY2FjaGUpO1xuICAgICAgICBjb25zdCByZXZhbGlkYXRvcnMgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XTtcbiAgICAgICAgY29uc3Qgc3RhcnRSZXZhbGlkYXRlID0gKCk9PntcbiAgICAgICAgICAgIGlmIChyZXZhbGlkYXRlKSB7XG4gICAgICAgICAgICAgICAgLy8gSW52YWxpZGF0ZSB0aGUga2V5IGJ5IGRlbGV0aW5nIHRoZSBjb25jdXJyZW50IHJlcXVlc3QgbWFya2VycyBzbyBuZXdcbiAgICAgICAgICAgICAgICAvLyByZXF1ZXN0cyB3aWxsIG5vdCBiZSBkZWR1cGVkLlxuICAgICAgICAgICAgICAgIGRlbGV0ZSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgICAgIGlmIChyZXZhbGlkYXRvcnMgJiYgcmV2YWxpZGF0b3JzWzBdKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZhbGlkYXRvcnNbMF0oTVVUQVRFX0VWRU5UKS50aGVuKCgpPT5nZXQoKS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZ2V0KCkuZGF0YTtcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gbmV3IGRhdGEgcHJvdmlkZWQsIHJldmFsaWRhdGUgdGhlIGtleSB3aXRoIGN1cnJlbnQgc3RhdGUuXG4gICAgICAgIGlmIChhcmdzLmxlbmd0aCA8IDMpIHtcbiAgICAgICAgICAgIC8vIFJldmFsaWRhdGUgYW5kIGJyb2FkY2FzdCBzdGF0ZS5cbiAgICAgICAgICAgIHJldHVybiBzdGFydFJldmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZGF0YSA9IF9kYXRhO1xuICAgICAgICBsZXQgZXJyb3I7XG4gICAgICAgIC8vIFVwZGF0ZSBnbG9iYWwgdGltZXN0YW1wcy5cbiAgICAgICAgY29uc3QgYmVmb3JlTXV0YXRpb25UcyA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICBNVVRBVElPTltrZXldID0gW1xuICAgICAgICAgICAgYmVmb3JlTXV0YXRpb25UcyxcbiAgICAgICAgICAgIDBcbiAgICAgICAgXTtcbiAgICAgICAgY29uc3QgaGFzT3B0aW1pc3RpY0RhdGEgPSAhaXNVbmRlZmluZWQob3B0aW1pc3RpY0RhdGEpO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGdldCgpO1xuICAgICAgICAvLyBgZGlzcGxheWVkRGF0YWAgaXMgdGhlIGN1cnJlbnQgdmFsdWUgb24gc2NyZWVuLiBJdCBjb3VsZCBiZSB0aGUgb3B0aW1pc3RpYyB2YWx1ZVxuICAgICAgICAvLyB0aGF0IGlzIGdvaW5nIHRvIGJlIG92ZXJyaWRkZW4gYnkgYSBgY29tbWl0dGVkRGF0YWAsIG9yIGdldCByZXZlcnRlZCBiYWNrLlxuICAgICAgICAvLyBgY29tbWl0dGVkRGF0YWAgaXMgdGhlIHZhbGlkYXRlZCB2YWx1ZSB0aGF0IGNvbWVzIGZyb20gYSBmZXRjaCBvciBtdXRhdGlvbi5cbiAgICAgICAgY29uc3QgZGlzcGxheWVkRGF0YSA9IHN0YXRlLmRhdGE7XG4gICAgICAgIGNvbnN0IGN1cnJlbnREYXRhID0gc3RhdGUuX2M7XG4gICAgICAgIGNvbnN0IGNvbW1pdHRlZERhdGEgPSBpc1VuZGVmaW5lZChjdXJyZW50RGF0YSkgPyBkaXNwbGF5ZWREYXRhIDogY3VycmVudERhdGE7XG4gICAgICAgIC8vIERvIG9wdGltaXN0aWMgZGF0YSB1cGRhdGUuXG4gICAgICAgIGlmIChoYXNPcHRpbWlzdGljRGF0YSkge1xuICAgICAgICAgICAgb3B0aW1pc3RpY0RhdGEgPSBpc0Z1bmN0aW9uKG9wdGltaXN0aWNEYXRhKSA/IG9wdGltaXN0aWNEYXRhKGNvbW1pdHRlZERhdGEpIDogb3B0aW1pc3RpY0RhdGE7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIHNldCBvcHRpbWlzdGljIGRhdGEsIGJhY2t1cCB0aGUgY3VycmVudCBjb21taXR0ZWREYXRhIGRhdGEgaW4gYF9jYC5cbiAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgZGF0YTogb3B0aW1pc3RpY0RhdGEsXG4gICAgICAgICAgICAgICAgX2M6IGNvbW1pdHRlZERhdGFcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0Z1bmN0aW9uKGRhdGEpKSB7XG4gICAgICAgICAgICAvLyBgZGF0YWAgaXMgYSBmdW5jdGlvbiwgY2FsbCBpdCBwYXNzaW5nIGN1cnJlbnQgY2FjaGUgdmFsdWUuXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGRhdGEgPSBkYXRhKGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICAgICAgLy8gSWYgaXQgdGhyb3dzIGFuIGVycm9yIHN5bmNocm9ub3VzbHksIHdlIHNob3VsZG4ndCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGBkYXRhYCBpcyBhIHByb21pc2UvdGhlbmFibGUsIHJlc29sdmUgdGhlIGZpbmFsIGRhdGEgZmlyc3QuXG4gICAgICAgIGlmIChkYXRhICYmIGlzRnVuY3Rpb24oZGF0YS50aGVuKSkge1xuICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZSBtdXRhdGlvbiBpcyBhc3luYywgd2UgbmVlZCB0byBjaGVjayB0aW1lc3RhbXBzIHRvXG4gICAgICAgICAgICAvLyBhdm9pZCByYWNlIGNvbmRpdGlvbnMuXG4gICAgICAgICAgICBkYXRhID0gYXdhaXQgZGF0YS5jYXRjaCgoZXJyKT0+e1xuICAgICAgICAgICAgICAgIGVycm9yID0gZXJyO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBvdGhlciBtdXRhdGlvbnMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB3ZSd2ZSBzdGFydGVkIHRoaXMgbXV0YXRpb24uXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGEgcmFjZSB3ZSBkb24ndCB1cGRhdGUgY2FjaGUgb3IgYnJvYWRjYXN0IHRoZSBjaGFuZ2UsXG4gICAgICAgICAgICAvLyBqdXN0IHJldHVybiB0aGUgZGF0YS5cbiAgICAgICAgICAgIGlmIChiZWZvcmVNdXRhdGlvblRzICE9PSBNVVRBVElPTltrZXldWzBdKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZXJyb3IgJiYgaGFzT3B0aW1pc3RpY0RhdGEgJiYgcm9sbGJhY2tPbkVycm9yKGVycm9yKSkge1xuICAgICAgICAgICAgICAgIC8vIFJvbGxiYWNrLiBBbHdheXMgcG9wdWxhdGUgdGhlIGNhY2hlIGluIHRoaXMgY2FzZSBidXQgd2l0aG91dFxuICAgICAgICAgICAgICAgIC8vIHRyYW5zZm9ybWluZyB0aGUgZGF0YS5cbiAgICAgICAgICAgICAgICBwb3B1bGF0ZUNhY2hlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICBkYXRhID0gY29tbWl0dGVkRGF0YTtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBkYXRhIHRvIGJlIHRoZSBsYXRlc3QgY29tbWl0dGVkIGRhdGEsIGFuZCBjbGVhciB0aGUgYF9jYCB2YWx1ZS5cbiAgICAgICAgICAgICAgICBzZXQoe1xuICAgICAgICAgICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgICAgICAgICBfYzogVU5ERUZJTkVEXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgLy8gSWYgd2Ugc2hvdWxkIHdyaXRlIGJhY2sgdGhlIGNhY2hlIGFmdGVyIHJlcXVlc3QuXG4gICAgICAgIGlmIChwb3B1bGF0ZUNhY2hlKSB7XG4gICAgICAgICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgICAgICAgICAgLy8gVHJhbnNmb3JtIHRoZSByZXN1bHQgaW50byBkYXRhLlxuICAgICAgICAgICAgICAgIGlmIChpc0Z1bmN0aW9uKHBvcHVsYXRlQ2FjaGUpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEgPSBwb3B1bGF0ZUNhY2hlKGRhdGEsIGNvbW1pdHRlZERhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAvLyBPbmx5IHVwZGF0ZSBjYWNoZWQgZGF0YSBpZiB0aGVyZSdzIG5vIGVycm9yLiBEYXRhIGNhbiBiZSBgdW5kZWZpbmVkYCBoZXJlLlxuICAgICAgICAgICAgICAgIHNldCh7XG4gICAgICAgICAgICAgICAgICAgIGRhdGEsXG4gICAgICAgICAgICAgICAgICAgIF9jOiBVTkRFRklORURcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBSZXNldCB0aGUgdGltZXN0YW1wIHRvIG1hcmsgdGhlIG11dGF0aW9uIGhhcyBlbmRlZC5cbiAgICAgICAgTVVUQVRJT05ba2V5XVsxXSA9IGdldFRpbWVzdGFtcCgpO1xuICAgICAgICAvLyBVcGRhdGUgZXhpc3RpbmcgU1dSIEhvb2tzJyBpbnRlcm5hbCBzdGF0ZXM6XG4gICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHN0YXJ0UmV2YWxpZGF0ZSgpO1xuICAgICAgICAvLyBUaGUgbXV0YXRpb24gYW5kIHJldmFsaWRhdGlvbiBhcmUgZW5kZWQsIHdlIGNhbiBjbGVhciBpdCBzaW5jZSB0aGUgZGF0YSBpc1xuICAgICAgICAvLyBub3QgYW4gb3B0aW1pc3RpYyB2YWx1ZSBhbnltb3JlLlxuICAgICAgICBzZXQoe1xuICAgICAgICAgICAgX2M6IFVOREVGSU5FRFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gVGhyb3cgZXJyb3Igb3IgcmV0dXJuIGRhdGFcbiAgICAgICAgaWYgKGVycm9yKSB7XG4gICAgICAgICAgICBpZiAodGhyb3dPbkVycm9yKSB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcG9wdWxhdGVDYWNoZSA/IHJlcyA6IGRhdGE7XG4gICAgfVxufVxuXG5jb25zdCByZXZhbGlkYXRlQWxsS2V5cyA9IChyZXZhbGlkYXRvcnMsIHR5cGUpPT57XG4gICAgZm9yKGNvbnN0IGtleSBpbiByZXZhbGlkYXRvcnMpe1xuICAgICAgICBpZiAocmV2YWxpZGF0b3JzW2tleV1bMF0pIHJldmFsaWRhdG9yc1trZXldWzBdKHR5cGUpO1xuICAgIH1cbn07XG5jb25zdCBpbml0Q2FjaGUgPSAocHJvdmlkZXIsIG9wdGlvbnMpPT57XG4gICAgLy8gVGhlIGdsb2JhbCBzdGF0ZSBmb3IgYSBzcGVjaWZpYyBwcm92aWRlciB3aWxsIGJlIHVzZWQgdG8gZGVkdXBsaWNhdGVcbiAgICAvLyByZXF1ZXN0cyBhbmQgc3RvcmUgbGlzdGVuZXJzLiBBcyB3ZWxsIGFzIGEgbXV0YXRlIGZ1bmN0aW9uIHRoYXQgaXMgYm91bmQgdG9cbiAgICAvLyB0aGUgY2FjaGUuXG4gICAgLy8gVGhlIHByb3ZpZGVyJ3MgZ2xvYmFsIHN0YXRlIG1pZ2h0IGJlIGFscmVhZHkgaW5pdGlhbGl6ZWQuIExldCdzIHRyeSB0byBnZXQgdGhlXG4gICAgLy8gZ2xvYmFsIHN0YXRlIGFzc29jaWF0ZWQgd2l0aCB0aGUgcHJvdmlkZXIgZmlyc3QuXG4gICAgaWYgKCFTV1JHbG9iYWxTdGF0ZS5oYXMocHJvdmlkZXIpKSB7XG4gICAgICAgIGNvbnN0IG9wdHMgPSBtZXJnZU9iamVjdHMoZGVmYXVsdENvbmZpZ09wdGlvbnMsIG9wdGlvbnMpO1xuICAgICAgICAvLyBJZiB0aGVyZSdzIG5vIGdsb2JhbCBzdGF0ZSBib3VuZCB0byB0aGUgcHJvdmlkZXIsIGNyZWF0ZSBhIG5ldyBvbmUgd2l0aCB0aGVcbiAgICAgICAgLy8gbmV3IG11dGF0ZSBmdW5jdGlvbi5cbiAgICAgICAgY29uc3QgRVZFTlRfUkVWQUxJREFUT1JTID0ge307XG4gICAgICAgIGNvbnN0IG11dGF0ZSA9IGludGVybmFsTXV0YXRlLmJpbmQoVU5ERUZJTkVELCBwcm92aWRlcik7XG4gICAgICAgIGxldCB1bm1vdW50ID0gbm9vcDtcbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IHt9O1xuICAgICAgICBjb25zdCBzdWJzY3JpYmUgPSAoa2V5LCBjYWxsYmFjayk9PntcbiAgICAgICAgICAgIGNvbnN0IHN1YnMgPSBzdWJzY3JpcHRpb25zW2tleV0gfHwgW107XG4gICAgICAgICAgICBzdWJzY3JpcHRpb25zW2tleV0gPSBzdWJzO1xuICAgICAgICAgICAgc3Vicy5wdXNoKGNhbGxiYWNrKTtcbiAgICAgICAgICAgIHJldHVybiAoKT0+c3Vicy5zcGxpY2Uoc3Vicy5pbmRleE9mKGNhbGxiYWNrKSwgMSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IHNldHRlciA9IChrZXksIHZhbHVlLCBwcmV2KT0+e1xuICAgICAgICAgICAgcHJvdmlkZXIuc2V0KGtleSwgdmFsdWUpO1xuICAgICAgICAgICAgY29uc3Qgc3VicyA9IHN1YnNjcmlwdGlvbnNba2V5XTtcbiAgICAgICAgICAgIGlmIChzdWJzKSB7XG4gICAgICAgICAgICAgICAgZm9yKGxldCBpID0gc3Vicy5sZW5ndGg7IGktLTspe1xuICAgICAgICAgICAgICAgICAgICBzdWJzW2ldKHZhbHVlLCBwcmV2KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGluaXRQcm92aWRlciA9ICgpPT57XG4gICAgICAgICAgICBpZiAoIVNXUkdsb2JhbFN0YXRlLmhhcyhwcm92aWRlcikpIHtcbiAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHN0YXRlIGlmIGl0J3MgbmV3LCBvciBpZiB0aGUgcHJvdmlkZXIgaGFzIGJlZW4gZXh0ZW5kZWQuXG4gICAgICAgICAgICAgICAgU1dSR2xvYmFsU3RhdGUuc2V0KHByb3ZpZGVyLCBbXG4gICAgICAgICAgICAgICAgICAgIEVWRU5UX1JFVkFMSURBVE9SUyxcbiAgICAgICAgICAgICAgICAgICAge30sXG4gICAgICAgICAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgICAgICAgICB7fSxcbiAgICAgICAgICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgICAgICAgICBzZXR0ZXIsXG4gICAgICAgICAgICAgICAgICAgIHN1YnNjcmliZVxuICAgICAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgICAgIGlmICghSVNfU0VSVkVSKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gbGlzdGVuaW5nIHRvIHRoZSBuYXRpdmUgZXZlbnRzIGZvciBhdXRvIHJldmFsaWRhdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlIGludGVudGlvbmFsbHkgcHV0IGEgZGVsYXkgKHNldFRpbWVvdXQpIGhlcmUgdG8gbWFrZSBzdXJlIHRoZXkgYXJlXG4gICAgICAgICAgICAgICAgICAgIC8vIGZpcmVkIGFmdGVyIGltbWVkaWF0ZSBKYXZhU2NyaXB0IGV4ZWN1dGlvbnMsIHdoaWNoIGNhbiBiZVxuICAgICAgICAgICAgICAgICAgICAvLyBSZWFjdCdzIHN0YXRlIHVwZGF0ZXMuXG4gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgYXZvaWRzIHNvbWUgdW5uZWNlc3NhcnkgcmV2YWxpZGF0aW9ucyBzdWNoIGFzXG4gICAgICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xNjgwLlxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZWxlYXNlRm9jdXMgPSBvcHRzLmluaXRGb2N1cyhzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBGT0NVU19FVkVOVCkpKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVsZWFzZVJlY29ubmVjdCA9IG9wdHMuaW5pdFJlY29ubmVjdChzZXRUaW1lb3V0LmJpbmQoVU5ERUZJTkVELCByZXZhbGlkYXRlQWxsS2V5cy5iaW5kKFVOREVGSU5FRCwgRVZFTlRfUkVWQUxJREFUT1JTLCBSRUNPTk5FQ1RfRVZFTlQpKSk7XG4gICAgICAgICAgICAgICAgICAgIHVubW91bnQgPSAoKT0+e1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZUZvY3VzICYmIHJlbGVhc2VGb2N1cygpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZVJlY29ubmVjdCAmJiByZWxlYXNlUmVjb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHVuLW1vdW50aW5nLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgY2FjaGUgcHJvdmlkZXIgZnJvbSB0aGUgc3RhdGVcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHN0b3JhZ2UgdG9vIGJlY2F1c2UgaXQncyBhIHNpZGUtZWZmZWN0LiBPdGhlcndpc2UsIHdoZW4gcmUtbW91bnRpbmcgd2VcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdpbGwgbm90IHJlLXJlZ2lzdGVyIHRob3NlIGV2ZW50IGxpc3RlbmVycy5cbiAgICAgICAgICAgICAgICAgICAgICAgIFNXUkdsb2JhbFN0YXRlLmRlbGV0ZShwcm92aWRlcik7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgICAgICBpbml0UHJvdmlkZXIoKTtcbiAgICAgICAgLy8gVGhpcyBpcyBhIG5ldyBwcm92aWRlciwgd2UgbmVlZCB0byBpbml0aWFsaXplIGl0IGFuZCBzZXR1cCBET00gZXZlbnRzXG4gICAgICAgIC8vIGxpc3RlbmVycyBmb3IgYGZvY3VzYCBhbmQgYHJlY29ubmVjdGAgYWN0aW9ucy5cbiAgICAgICAgLy8gV2UgbWlnaHQgd2FudCB0byBpbmplY3QgYW4gZXh0cmEgbGF5ZXIgb24gdG9wIG9mIGBwcm92aWRlcmAgaW4gdGhlIGZ1dHVyZSxcbiAgICAgICAgLy8gc3VjaCBhcyBrZXkgc2VyaWFsaXphdGlvbiwgYXV0byBHQywgZXRjLlxuICAgICAgICAvLyBGb3Igbm93LCBpdCdzIGp1c3QgYSBgTWFwYCBpbnRlcmZhY2Ugd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9ucy5cbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIHByb3ZpZGVyLFxuICAgICAgICAgICAgbXV0YXRlLFxuICAgICAgICAgICAgaW5pdFByb3ZpZGVyLFxuICAgICAgICAgICAgdW5tb3VudFxuICAgICAgICBdO1xuICAgIH1cbiAgICByZXR1cm4gW1xuICAgICAgICBwcm92aWRlcixcbiAgICAgICAgU1dSR2xvYmFsU3RhdGUuZ2V0KHByb3ZpZGVyKVs0XVxuICAgIF07XG59O1xuXG4vLyBlcnJvciByZXRyeVxuY29uc3Qgb25FcnJvclJldHJ5ID0gKF8sIF9fLCBjb25maWcsIHJldmFsaWRhdGUsIG9wdHMpPT57XG4gICAgY29uc3QgbWF4UmV0cnlDb3VudCA9IGNvbmZpZy5lcnJvclJldHJ5Q291bnQ7XG4gICAgY29uc3QgY3VycmVudFJldHJ5Q291bnQgPSBvcHRzLnJldHJ5Q291bnQ7XG4gICAgLy8gRXhwb25lbnRpYWwgYmFja29mZlxuICAgIGNvbnN0IHRpbWVvdXQgPSB+figoTWF0aC5yYW5kb20oKSArIDAuNSkgKiAoMSA8PCAoY3VycmVudFJldHJ5Q291bnQgPCA4ID8gY3VycmVudFJldHJ5Q291bnQgOiA4KSkpICogY29uZmlnLmVycm9yUmV0cnlJbnRlcnZhbDtcbiAgICBpZiAoIWlzVW5kZWZpbmVkKG1heFJldHJ5Q291bnQpICYmIGN1cnJlbnRSZXRyeUNvdW50ID4gbWF4UmV0cnlDb3VudCkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHNldFRpbWVvdXQocmV2YWxpZGF0ZSwgdGltZW91dCwgb3B0cyk7XG59O1xuY29uc3QgY29tcGFyZSA9IChjdXJyZW50RGF0YSwgbmV3RGF0YSk9PnN0YWJsZUhhc2goY3VycmVudERhdGEpID09IHN0YWJsZUhhc2gobmV3RGF0YSk7XG4vLyBEZWZhdWx0IGNhY2hlIHByb3ZpZGVyXG5jb25zdCBbY2FjaGUsIG11dGF0ZV0gPSBpbml0Q2FjaGUobmV3IE1hcCgpKTtcbi8vIERlZmF1bHQgY29uZmlnXG5jb25zdCBkZWZhdWx0Q29uZmlnID0gbWVyZ2VPYmplY3RzKHtcbiAgICAvLyBldmVudHNcbiAgICBvbkxvYWRpbmdTbG93OiBub29wLFxuICAgIG9uU3VjY2Vzczogbm9vcCxcbiAgICBvbkVycm9yOiBub29wLFxuICAgIG9uRXJyb3JSZXRyeSxcbiAgICBvbkRpc2NhcmRlZDogbm9vcCxcbiAgICAvLyBzd2l0Y2hlc1xuICAgIHJldmFsaWRhdGVPbkZvY3VzOiB0cnVlLFxuICAgIHJldmFsaWRhdGVPblJlY29ubmVjdDogdHJ1ZSxcbiAgICByZXZhbGlkYXRlSWZTdGFsZTogdHJ1ZSxcbiAgICBzaG91bGRSZXRyeU9uRXJyb3I6IHRydWUsXG4gICAgLy8gdGltZW91dHNcbiAgICBlcnJvclJldHJ5SW50ZXJ2YWw6IHNsb3dDb25uZWN0aW9uID8gMTAwMDAgOiA1MDAwLFxuICAgIGZvY3VzVGhyb3R0bGVJbnRlcnZhbDogNSAqIDEwMDAsXG4gICAgZGVkdXBpbmdJbnRlcnZhbDogMiAqIDEwMDAsXG4gICAgbG9hZGluZ1RpbWVvdXQ6IHNsb3dDb25uZWN0aW9uID8gNTAwMCA6IDMwMDAsXG4gICAgLy8gcHJvdmlkZXJzXG4gICAgY29tcGFyZSxcbiAgICBpc1BhdXNlZDogKCk9PmZhbHNlLFxuICAgIGNhY2hlLFxuICAgIG11dGF0ZSxcbiAgICBmYWxsYmFjazoge31cbn0sIC8vIHVzZSB3ZWIgcHJlc2V0IGJ5IGRlZmF1bHRcbnByZXNldCk7XG5cbmNvbnN0IG1lcmdlQ29uZmlncyA9IChhLCBiKT0+e1xuICAgIC8vIE5lZWQgdG8gY3JlYXRlIGEgbmV3IG9iamVjdCB0byBhdm9pZCBtdXRhdGluZyB0aGUgb3JpZ2luYWwgaGVyZS5cbiAgICBjb25zdCB2ID0gbWVyZ2VPYmplY3RzKGEsIGIpO1xuICAgIC8vIElmIHR3byBjb25maWdzIGFyZSBwcm92aWRlZCwgbWVyZ2UgdGhlaXIgYHVzZWAgYW5kIGBmYWxsYmFja2Agb3B0aW9ucy5cbiAgICBpZiAoYikge1xuICAgICAgICBjb25zdCB7IHVzZTogdTEgLCBmYWxsYmFjazogZjEgIH0gPSBhO1xuICAgICAgICBjb25zdCB7IHVzZTogdTIgLCBmYWxsYmFjazogZjIgIH0gPSBiO1xuICAgICAgICBpZiAodTEgJiYgdTIpIHtcbiAgICAgICAgICAgIHYudXNlID0gdTEuY29uY2F0KHUyKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoZjEgJiYgZjIpIHtcbiAgICAgICAgICAgIHYuZmFsbGJhY2sgPSBtZXJnZU9iamVjdHMoZjEsIGYyKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdjtcbn07XG5cbmNvbnN0IFNXUkNvbmZpZ0NvbnRleHQgPSBjcmVhdGVDb250ZXh0KHt9KTtcbmNvbnN0IFNXUkNvbmZpZyA9IChwcm9wcyk9PntcbiAgICBjb25zdCB7IHZhbHVlICB9ID0gcHJvcHM7XG4gICAgY29uc3QgcGFyZW50Q29uZmlnID0gdXNlQ29udGV4dChTV1JDb25maWdDb250ZXh0KTtcbiAgICBjb25zdCBpc0Z1bmN0aW9uYWxDb25maWcgPSBpc0Z1bmN0aW9uKHZhbHVlKTtcbiAgICBjb25zdCBjb25maWcgPSB1c2VNZW1vKCgpPT5pc0Z1bmN0aW9uYWxDb25maWcgPyB2YWx1ZShwYXJlbnRDb25maWcpIDogdmFsdWUsIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIHZhbHVlXG4gICAgXSk7XG4gICAgLy8gRXh0ZW5kIHBhcmVudCBjb250ZXh0IHZhbHVlcyBhbmQgbWlkZGxld2FyZS5cbiAgICBjb25zdCBleHRlbmRlZENvbmZpZyA9IHVzZU1lbW8oKCk9PmlzRnVuY3Rpb25hbENvbmZpZyA/IGNvbmZpZyA6IG1lcmdlQ29uZmlncyhwYXJlbnRDb25maWcsIGNvbmZpZyksIFtcbiAgICAgICAgaXNGdW5jdGlvbmFsQ29uZmlnLFxuICAgICAgICBwYXJlbnRDb25maWcsXG4gICAgICAgIGNvbmZpZ1xuICAgIF0pO1xuICAgIC8vIFNob3VsZCBub3QgdXNlIHRoZSBpbmhlcml0ZWQgcHJvdmlkZXIuXG4gICAgY29uc3QgcHJvdmlkZXIgPSBjb25maWcgJiYgY29uZmlnLnByb3ZpZGVyO1xuICAgIC8vIFVzZSBhIGxhenkgaW5pdGlhbGl6ZWQgc3RhdGUgdG8gY3JlYXRlIHRoZSBjYWNoZSBvbiBmaXJzdCBhY2Nlc3MuXG4gICAgY29uc3QgW2NhY2hlQ29udGV4dF0gPSB1c2VTdGF0ZSgoKT0+cHJvdmlkZXIgPyBpbml0Q2FjaGUocHJvdmlkZXIoZXh0ZW5kZWRDb25maWcuY2FjaGUgfHwgY2FjaGUpLCBjb25maWcpIDogVU5ERUZJTkVEKTtcbiAgICAvLyBPdmVycmlkZSB0aGUgY2FjaGUgaWYgYSBuZXcgcHJvdmlkZXIgaXMgZ2l2ZW4uXG4gICAgaWYgKGNhY2hlQ29udGV4dCkge1xuICAgICAgICBleHRlbmRlZENvbmZpZy5jYWNoZSA9IGNhY2hlQ29udGV4dFswXTtcbiAgICAgICAgZXh0ZW5kZWRDb25maWcubXV0YXRlID0gY2FjaGVDb250ZXh0WzFdO1xuICAgIH1cbiAgICAvLyBVbnN1YnNjcmliZSBldmVudHMuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoY2FjaGVDb250ZXh0KSB7XG4gICAgICAgICAgICBjYWNoZUNvbnRleHRbMl0gJiYgY2FjaGVDb250ZXh0WzJdKCk7XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVDb250ZXh0WzNdO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBjcmVhdGVFbGVtZW50KFNXUkNvbmZpZ0NvbnRleHQuUHJvdmlkZXIsIG1lcmdlT2JqZWN0cyhwcm9wcywge1xuICAgICAgICB2YWx1ZTogZXh0ZW5kZWRDb25maWdcbiAgICB9KSk7XG59O1xuXG4vLyBAdHMtZXhwZWN0LWVycm9yXG5jb25zdCBlbmFibGVEZXZ0b29scyA9IGlzV2luZG93RGVmaW5lZCAmJiB3aW5kb3cuX19TV1JfREVWVE9PTFNfVVNFX187XG5jb25zdCB1c2UgPSBlbmFibGVEZXZ0b29scyA/IHdpbmRvdy5fX1NXUl9ERVZUT09MU19VU0VfXyA6IFtdO1xuY29uc3Qgc2V0dXBEZXZUb29scyA9ICgpPT57XG4gICAgaWYgKGVuYWJsZURldnRvb2xzKSB7XG4gICAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3JcbiAgICAgICAgd2luZG93Ll9fU1dSX0RFVlRPT0xTX1JFQUNUX18gPSBSZWFjdDtcbiAgICB9XG59O1xuXG5jb25zdCBub3JtYWxpemUgPSAoYXJncyk9PntcbiAgICByZXR1cm4gaXNGdW5jdGlvbihhcmdzWzFdKSA/IFtcbiAgICAgICAgYXJnc1swXSxcbiAgICAgICAgYXJnc1sxXSxcbiAgICAgICAgYXJnc1syXSB8fCB7fVxuICAgIF0gOiBbXG4gICAgICAgIGFyZ3NbMF0sXG4gICAgICAgIG51bGwsXG4gICAgICAgIChhcmdzWzFdID09PSBudWxsID8gYXJnc1syXSA6IGFyZ3NbMV0pIHx8IHt9XG4gICAgXTtcbn07XG5cbmNvbnN0IHVzZVNXUkNvbmZpZyA9ICgpPT57XG4gICAgcmV0dXJuIG1lcmdlT2JqZWN0cyhkZWZhdWx0Q29uZmlnLCB1c2VDb250ZXh0KFNXUkNvbmZpZ0NvbnRleHQpKTtcbn07XG5cbmNvbnN0IHByZWxvYWQgPSAoa2V5XywgZmV0Y2hlcik9PntcbiAgICBjb25zdCBrZXkgPSBzZXJpYWxpemUoa2V5XylbMF07XG4gICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAvLyBQcmV2ZW50IHByZWxvYWQgdG8gYmUgY2FsbGVkIG11bHRpcGxlIHRpbWVzIGJlZm9yZSB1c2VkLlxuICAgIGlmIChQUkVMT0FEW2tleV0pIHJldHVybiBQUkVMT0FEW2tleV07XG4gICAgY29uc3QgcmVxID0gZmV0Y2hlcihrZXlfKTtcbiAgICBQUkVMT0FEW2tleV0gPSByZXE7XG4gICAgcmV0dXJuIHJlcTtcbn07XG5jb25zdCBtaWRkbGV3YXJlID0gKHVzZVNXUk5leHQpPT4oa2V5XywgZmV0Y2hlcl8sIGNvbmZpZyk9PntcbiAgICAgICAgLy8gZmV0Y2hlciBtaWdodCBiZSBhIHN5bmMgZnVuY3Rpb24sIHNvIHRoaXMgc2hvdWxkIG5vdCBiZSBhbiBhc3luYyBmdW5jdGlvblxuICAgICAgICBjb25zdCBmZXRjaGVyID0gZmV0Y2hlcl8gJiYgKCguLi5hcmdzKT0+e1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gc2VyaWFsaXplKGtleV8pWzBdO1xuICAgICAgICAgICAgY29uc3QgWywgLCAsIFBSRUxPQURdID0gU1dSR2xvYmFsU3RhdGUuZ2V0KGNhY2hlKTtcbiAgICAgICAgICAgIGNvbnN0IHJlcSA9IFBSRUxPQURba2V5XTtcbiAgICAgICAgICAgIGlmIChyZXEpIHtcbiAgICAgICAgICAgICAgICBkZWxldGUgUFJFTE9BRFtrZXldO1xuICAgICAgICAgICAgICAgIHJldHVybiByZXE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmV0Y2hlcl8oLi4uYXJncyk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdXNlU1dSTmV4dChrZXlfLCBmZXRjaGVyLCBjb25maWcpO1xuICAgIH07XG5cbmNvbnN0IEJVSUxUX0lOX01JRERMRVdBUkUgPSB1c2UuY29uY2F0KG1pZGRsZXdhcmUpO1xuXG4vLyBJdCdzIHRyaWNreSB0byBwYXNzIGdlbmVyaWMgdHlwZXMgYXMgcGFyYW1ldGVycywgc28gd2UganVzdCBkaXJlY3RseSBvdmVycmlkZVxuLy8gdGhlIHR5cGVzIGhlcmUuXG5jb25zdCB3aXRoQXJncyA9IChob29rKT0+e1xuICAgIHJldHVybiBmdW5jdGlvbiB1c2VTV1JBcmdzKC4uLmFyZ3MpIHtcbiAgICAgICAgLy8gR2V0IHRoZSBkZWZhdWx0IGFuZCBpbmhlcml0ZWQgY29uZmlndXJhdGlvbi5cbiAgICAgICAgY29uc3QgZmFsbGJhY2tDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICAgICAgLy8gTm9ybWFsaXplIGFyZ3VtZW50cy5cbiAgICAgICAgY29uc3QgW2tleSwgZm4sIF9jb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICAvLyBNZXJnZSBjb25maWd1cmF0aW9ucy5cbiAgICAgICAgY29uc3QgY29uZmlnID0gbWVyZ2VDb25maWdzKGZhbGxiYWNrQ29uZmlnLCBfY29uZmlnKTtcbiAgICAgICAgLy8gQXBwbHkgbWlkZGxld2FyZVxuICAgICAgICBsZXQgbmV4dCA9IGhvb2s7XG4gICAgICAgIGNvbnN0IHsgdXNlICB9ID0gY29uZmlnO1xuICAgICAgICBjb25zdCBtaWRkbGV3YXJlID0gKHVzZSB8fCBbXSkuY29uY2F0KEJVSUxUX0lOX01JRERMRVdBUkUpO1xuICAgICAgICBmb3IobGV0IGkgPSBtaWRkbGV3YXJlLmxlbmd0aDsgaS0tOyl7XG4gICAgICAgICAgICBuZXh0ID0gbWlkZGxld2FyZVtpXShuZXh0KTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbmV4dChrZXksIGZuIHx8IGNvbmZpZy5mZXRjaGVyIHx8IG51bGwsIGNvbmZpZyk7XG4gICAgfTtcbn07XG5cbi8qKlxuICogQW4gaW1wbGVtZW50YXRpb24gb2Ygc3RhdGUgd2l0aCBkZXBlbmRlbmN5LXRyYWNraW5nLlxuICovIGNvbnN0IHVzZVN0YXRlV2l0aERlcHMgPSAoc3RhdGUpPT57XG4gICAgY29uc3QgcmVyZW5kZXIgPSB1c2VTdGF0ZSh7fSlbMV07XG4gICAgY29uc3QgdW5tb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICBjb25zdCBzdGF0ZVJlZiA9IHVzZVJlZihzdGF0ZSk7XG4gICAgLy8gSWYgYSBzdGF0ZSBwcm9wZXJ0eSAoZGF0YSwgZXJyb3IsIG9yIGlzVmFsaWRhdGluZykgaXMgYWNjZXNzZWQgYnkgdGhlIHJlbmRlclxuICAgIC8vIGZ1bmN0aW9uLCB3ZSBtYXJrIHRoZSBwcm9wZXJ0eSBhcyBhIGRlcGVuZGVuY3kgc28gaWYgaXQgaXMgdXBkYXRlZCBhZ2FpblxuICAgIC8vIGluIHRoZSBmdXR1cmUsIHdlIHRyaWdnZXIgYSByZXJlbmRlci5cbiAgICAvLyBUaGlzIGlzIGFsc28ga25vd24gYXMgZGVwZW5kZW5jeS10cmFja2luZy5cbiAgICBjb25zdCBzdGF0ZURlcGVuZGVuY2llc1JlZiA9IHVzZVJlZih7XG4gICAgICAgIGRhdGE6IGZhbHNlLFxuICAgICAgICBlcnJvcjogZmFsc2UsXG4gICAgICAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICB9KTtcbiAgICAvKipcbiAgICogQHBhcmFtIHBheWxvYWQgVG8gY2hhbmdlIHN0YXRlUmVmLCBwYXNzIHRoZSB2YWx1ZXMgZXhwbGljaXRseSB0byBzZXRTdGF0ZTpcbiAgICogQGV4YW1wbGVcbiAgICogYGBganNcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiBuZXdEYXRhIC8vIHNldCBkYXRhIHRvIG5ld0RhdGFcbiAgICogICBlcnJvcjogdW5kZWZpbmVkIC8vIHNldCBlcnJvciB0byB1bmRlZmluZWRcbiAgICogfSlcbiAgICpcbiAgICogc2V0U3RhdGUoe1xuICAgKiAgIGlzVmFsaWRhdGluZzogZmFsc2VcbiAgICogICBkYXRhOiB1bmRlZmluZWQgLy8gc2V0IGRhdGEgdG8gdW5kZWZpbmVkXG4gICAqICAgZXJyb3I6IGVyciAvLyBzZXQgZXJyb3IgdG8gZXJyXG4gICAqIH0pXG4gICAqIGBgYFxuICAgKi8gY29uc3Qgc2V0U3RhdGUgPSB1c2VDYWxsYmFjaygocGF5bG9hZCk9PntcbiAgICAgICAgbGV0IHNob3VsZFJlcmVuZGVyID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IHN0YXRlUmVmLmN1cnJlbnQ7XG4gICAgICAgIGZvcihjb25zdCBfIGluIHBheWxvYWQpe1xuICAgICAgICAgICAgY29uc3QgayA9IF87XG4gICAgICAgICAgICAvLyBJZiB0aGUgcHJvcGVydHkgaGFzIGNoYW5nZWQsIHVwZGF0ZSB0aGUgc3RhdGUgYW5kIG1hcmsgcmVyZW5kZXIgYXNcbiAgICAgICAgICAgIC8vIG5lZWRlZC5cbiAgICAgICAgICAgIGlmIChjdXJyZW50U3RhdGVba10gIT09IHBheWxvYWRba10pIHtcbiAgICAgICAgICAgICAgICBjdXJyZW50U3RhdGVba10gPSBwYXlsb2FkW2tdO1xuICAgICAgICAgICAgICAgIC8vIElmIHRoZSBwcm9wZXJ0eSBpcyBhY2Nlc3NlZCBieSB0aGUgY29tcG9uZW50LCBhIHJlcmVuZGVyIHNob3VsZCBiZVxuICAgICAgICAgICAgICAgIC8vIHRyaWdnZXJlZC5cbiAgICAgICAgICAgICAgICBpZiAoc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudFtrXSkge1xuICAgICAgICAgICAgICAgICAgICBzaG91bGRSZXJlbmRlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChzaG91bGRSZXJlbmRlciAmJiAhdW5tb3VudGVkUmVmLmN1cnJlbnQpIHtcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXJlbmRlcih7fSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIFJlYWN0LnN0YXJ0VHJhbnNpdGlvbigoKT0+cmVyZW5kZXIoe30pKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0sIC8vIGNvbmZpZy5zdXNwZW5zZSBpc24ndCBhbGxvd2VkIHRvIGNoYW5nZSBkdXJpbmcgdGhlIGxpZmVjeWNsZVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICB1bm1vdW50ZWRSZWYuY3VycmVudCA9IGZhbHNlO1xuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIHVubW91bnRlZFJlZi5jdXJyZW50ID0gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gW1xuICAgICAgICBzdGF0ZVJlZixcbiAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXNSZWYuY3VycmVudCxcbiAgICAgICAgc2V0U3RhdGVcbiAgICBdO1xufTtcblxuLy8gQWRkIGEgY2FsbGJhY2sgZnVuY3Rpb24gdG8gYSBsaXN0IG9mIGtleWVkIGNhbGxiYWNrIGZ1bmN0aW9ucyBhbmQgcmV0dXJuXG4vLyB0aGUgdW5zdWJzY3JpYmUgZnVuY3Rpb24uXG5jb25zdCBzdWJzY3JpYmVDYWxsYmFjayA9IChrZXksIGNhbGxiYWNrcywgY2FsbGJhY2spPT57XG4gICAgY29uc3Qga2V5ZWRSZXZhbGlkYXRvcnMgPSBjYWxsYmFja3Nba2V5XSB8fCAoY2FsbGJhY2tzW2tleV0gPSBbXSk7XG4gICAga2V5ZWRSZXZhbGlkYXRvcnMucHVzaChjYWxsYmFjayk7XG4gICAgcmV0dXJuICgpPT57XG4gICAgICAgIGNvbnN0IGluZGV4ID0ga2V5ZWRSZXZhbGlkYXRvcnMuaW5kZXhPZihjYWxsYmFjayk7XG4gICAgICAgIGlmIChpbmRleCA+PSAwKSB7XG4gICAgICAgICAgICAvLyBPKDEpOiBmYXN0ZXIgdGhhbiBzcGxpY2VcbiAgICAgICAgICAgIGtleWVkUmV2YWxpZGF0b3JzW2luZGV4XSA9IGtleWVkUmV2YWxpZGF0b3JzW2tleWVkUmV2YWxpZGF0b3JzLmxlbmd0aCAtIDFdO1xuICAgICAgICAgICAga2V5ZWRSZXZhbGlkYXRvcnMucG9wKCk7XG4gICAgICAgIH1cbiAgICB9O1xufTtcblxuLy8gQ3JlYXRlIGEgY3VzdG9tIGhvb2sgd2l0aCBhIG1pZGRsZXdhcmVcbmNvbnN0IHdpdGhNaWRkbGV3YXJlID0gKHVzZVNXUiwgbWlkZGxld2FyZSk9PntcbiAgICByZXR1cm4gKC4uLmFyZ3MpPT57XG4gICAgICAgIGNvbnN0IFtrZXksIGZuLCBjb25maWddID0gbm9ybWFsaXplKGFyZ3MpO1xuICAgICAgICBjb25zdCB1c2VzID0gKGNvbmZpZy51c2UgfHwgW10pLmNvbmNhdChtaWRkbGV3YXJlKTtcbiAgICAgICAgcmV0dXJuIHVzZVNXUihrZXksIGZuLCB7XG4gICAgICAgICAgICAuLi5jb25maWcsXG4gICAgICAgICAgICB1c2U6IHVzZXNcbiAgICAgICAgfSk7XG4gICAgfTtcbn07XG5cbnNldHVwRGV2VG9vbHMoKTtcblxuZXhwb3J0IHsgSVNfUkVBQ1RfTEVHQUNZLCBJU19TRVJWRVIsIE9CSkVDVCwgU1dSQ29uZmlnLCBTV1JHbG9iYWxTdGF0ZSwgVU5ERUZJTkVELCBjYWNoZSwgY29tcGFyZSwgY3JlYXRlQ2FjaGVIZWxwZXIsIGRlZmF1bHRDb25maWcsIGRlZmF1bHRDb25maWdPcHRpb25zLCBnZXRUaW1lc3RhbXAsIGhhc1JlcXVlc3RBbmltYXRpb25GcmFtZSwgaW5pdENhY2hlLCBpbnRlcm5hbE11dGF0ZSwgaXNEb2N1bWVudERlZmluZWQsIGlzRnVuY3Rpb24sIGlzVW5kZWZpbmVkLCBpc1dpbmRvd0RlZmluZWQsIG1lcmdlQ29uZmlncywgbWVyZ2VPYmplY3RzLCBtdXRhdGUsIG5vb3AsIG5vcm1hbGl6ZSwgcHJlbG9hZCwgcHJlc2V0LCByQUYsIGNvbnN0YW50cyBhcyByZXZhbGlkYXRlRXZlbnRzLCBzZXJpYWxpemUsIHNsb3dDb25uZWN0aW9uLCBzdGFibGVIYXNoLCBzdWJzY3JpYmVDYWxsYmFjaywgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgdXNlU1dSQ29uZmlnLCB1c2VTdGF0ZVdpdGhEZXBzLCB3aXRoQXJncywgd2l0aE1pZGRsZXdhcmUgfTtcbiIsImltcG9ydCB7IHVzZVJlZiwgdXNlTWVtbywgdXNlQ2FsbGJhY2ssIHVzZURlYnVnVmFsdWUgfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1c2VTeW5jRXh0ZXJuYWxTdG9yZSB9IGZyb20gJ3VzZS1zeW5jLWV4dGVybmFsLXN0b3JlL3NoaW0vaW5kZXguanMnO1xuaW1wb3J0IHsgT0JKRUNULCBTV1JDb25maWcgYXMgU1dSQ29uZmlnJDEsIGRlZmF1bHRDb25maWcsIHdpdGhBcmdzLCBTV1JHbG9iYWxTdGF0ZSwgc2VyaWFsaXplLCBjcmVhdGVDYWNoZUhlbHBlciwgaXNVbmRlZmluZWQsIGdldFRpbWVzdGFtcCwgVU5ERUZJTkVELCBpc0Z1bmN0aW9uLCBpbnRlcm5hbE11dGF0ZSwgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCwgc3Vic2NyaWJlQ2FsbGJhY2ssIElTX1NFUlZFUiwgckFGLCBJU19SRUFDVF9MRUdBQ1ksIG1lcmdlT2JqZWN0cywgcmV2YWxpZGF0ZUV2ZW50cyB9IGZyb20gJ3N3ci9faW50ZXJuYWwnO1xuZXhwb3J0IHsgbXV0YXRlLCBwcmVsb2FkLCB1c2VTV1JDb25maWcgfSBmcm9tICdzd3IvX2ludGVybmFsJztcblxuY29uc3QgV0lUSF9ERURVUEUgPSB7XG4gICAgZGVkdXBlOiB0cnVlXG59O1xuY29uc3QgdXNlU1dSSGFuZGxlciA9IChfa2V5LCBmZXRjaGVyLCBjb25maWcpPT57XG4gICAgY29uc3QgeyBjYWNoZSAsIGNvbXBhcmUgLCBzdXNwZW5zZSAsIGZhbGxiYWNrRGF0YSAsIHJldmFsaWRhdGVPbk1vdW50ICwgcmV2YWxpZGF0ZUlmU3RhbGUgLCByZWZyZXNoSW50ZXJ2YWwgLCByZWZyZXNoV2hlbkhpZGRlbiAsIHJlZnJlc2hXaGVuT2ZmbGluZSAsIGtlZXBQcmV2aW91c0RhdGEgIH0gPSBjb25maWc7XG4gICAgY29uc3QgW0VWRU5UX1JFVkFMSURBVE9SUywgTVVUQVRJT04sIEZFVENIXSA9IFNXUkdsb2JhbFN0YXRlLmdldChjYWNoZSk7XG4gICAgLy8gYGtleWAgaXMgdGhlIGlkZW50aWZpZXIgb2YgdGhlIFNXUiBgZGF0YWAgc3RhdGUsIGBrZXlJbmZvYCBob2xkcyBleHRyYVxuICAgIC8vIHN0YXRlcyBzdWNoIGFzIGBlcnJvcmAgYW5kIGBpc1ZhbGlkYXRpbmdgIGluc2lkZSxcbiAgICAvLyBhbGwgb2YgdGhlbSBhcmUgZGVyaXZlZCBmcm9tIGBfa2V5YC5cbiAgICAvLyBgZm5BcmdgIGlzIHRoZSBhcmd1bWVudC9hcmd1bWVudHMgcGFyc2VkIGZyb20gdGhlIGtleSwgd2hpY2ggd2lsbCBiZSBwYXNzZWRcbiAgICAvLyB0byB0aGUgZmV0Y2hlci5cbiAgICBjb25zdCBba2V5LCBmbkFyZ10gPSBzZXJpYWxpemUoX2tleSk7XG4gICAgLy8gSWYgaXQncyB0aGUgaW5pdGlhbCByZW5kZXIgb2YgdGhpcyBob29rLlxuICAgIGNvbnN0IGluaXRpYWxNb3VudGVkUmVmID0gdXNlUmVmKGZhbHNlKTtcbiAgICAvLyBJZiB0aGUgaG9vayBpcyB1bm1vdW50ZWQgYWxyZWFkeS4gVGhpcyB3aWxsIGJlIHVzZWQgdG8gcHJldmVudCBzb21lIGVmZmVjdHNcbiAgICAvLyB0byBiZSBjYWxsZWQgYWZ0ZXIgdW5tb3VudGluZy5cbiAgICBjb25zdCB1bm1vdW50ZWRSZWYgPSB1c2VSZWYoZmFsc2UpO1xuICAgIC8vIFJlZnMgdG8ga2VlcCB0aGUga2V5IGFuZCBjb25maWcuXG4gICAgY29uc3Qga2V5UmVmID0gdXNlUmVmKGtleSk7XG4gICAgY29uc3QgZmV0Y2hlclJlZiA9IHVzZVJlZihmZXRjaGVyKTtcbiAgICBjb25zdCBjb25maWdSZWYgPSB1c2VSZWYoY29uZmlnKTtcbiAgICBjb25zdCBnZXRDb25maWcgPSAoKT0+Y29uZmlnUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaXNBY3RpdmUgPSAoKT0+Z2V0Q29uZmlnKCkuaXNWaXNpYmxlKCkgJiYgZ2V0Q29uZmlnKCkuaXNPbmxpbmUoKTtcbiAgICBjb25zdCBbZ2V0Q2FjaGUsIHNldENhY2hlLCBzdWJzY3JpYmVDYWNoZSwgZ2V0SW5pdGlhbENhY2hlXSA9IGNyZWF0ZUNhY2hlSGVscGVyKGNhY2hlLCBrZXkpO1xuICAgIGNvbnN0IHN0YXRlRGVwZW5kZW5jaWVzID0gdXNlUmVmKHt9KS5jdXJyZW50O1xuICAgIGNvbnN0IGZhbGxiYWNrID0gaXNVbmRlZmluZWQoZmFsbGJhY2tEYXRhKSA/IGNvbmZpZy5mYWxsYmFja1trZXldIDogZmFsbGJhY2tEYXRhO1xuICAgIGNvbnN0IGlzRXF1YWwgPSAocHJldiwgY3VycmVudCk9PntcbiAgICAgICAgbGV0IGVxdWFsID0gdHJ1ZTtcbiAgICAgICAgZm9yKGNvbnN0IF8gaW4gc3RhdGVEZXBlbmRlbmNpZXMpe1xuICAgICAgICAgICAgY29uc3QgdCA9IF87XG4gICAgICAgICAgICBpZiAodCA9PT0gJ2RhdGEnKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHByZXZbdF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcmV2W3RdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjb21wYXJlKGN1cnJlbnRbdF0sIHJldHVybmVkRGF0YSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRbdF0gIT09IHByZXZbdF0pIHtcbiAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVxdWFsO1xuICAgIH07XG4gICAgY29uc3QgZ2V0U25hcHNob3QgPSB1c2VNZW1vKCgpPT57XG4gICAgICAgIGNvbnN0IHNob3VsZFN0YXJ0UmVxdWVzdCA9ICgoKT0+e1xuICAgICAgICAgICAgaWYgKCFrZXkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghZmV0Y2hlcikgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVPbk1vdW50YCBpcyBzZXQsIHdlIHRha2UgdGhlIHZhbHVlIGRpcmVjdGx5LlxuICAgICAgICAgICAgaWYgKCFpc1VuZGVmaW5lZChyZXZhbGlkYXRlT25Nb3VudCkpIHJldHVybiByZXZhbGlkYXRlT25Nb3VudDtcbiAgICAgICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5pc1BhdXNlZCgpKSByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBpZiAoc3VzcGVuc2UpIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQocmV2YWxpZGF0ZUlmU3RhbGUpKSByZXR1cm4gcmV2YWxpZGF0ZUlmU3RhbGU7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSkoKTtcbiAgICAgICAgLy8gR2V0IHRoZSBjYWNoZSBhbmQgbWVyZ2UgaXQgd2l0aCBleHBlY3RlZCBzdGF0ZXMuXG4gICAgICAgIGNvbnN0IGdldFNlbGVjdGVkQ2FjaGUgPSAoc3RhdGUpPT57XG4gICAgICAgICAgICAvLyBXZSBvbmx5IHNlbGVjdCB0aGUgbmVlZGVkIGZpZWxkcyBmcm9tIHRoZSBzdGF0ZS5cbiAgICAgICAgICAgIGNvbnN0IHNuYXBzaG90ID0gbWVyZ2VPYmplY3RzKHN0YXRlKTtcbiAgICAgICAgICAgIGRlbGV0ZSBzbmFwc2hvdC5faztcbiAgICAgICAgICAgIGlmICghc2hvdWxkU3RhcnRSZXF1ZXN0KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHNuYXBzaG90O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWUsXG4gICAgICAgICAgICAgICAgaXNMb2FkaW5nOiB0cnVlLFxuICAgICAgICAgICAgICAgIC4uLnNuYXBzaG90XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgICAgICAvLyBUbyBtYWtlIHN1cmUgdGhhdCB3ZSBhcmUgcmV0dXJuaW5nIHRoZSBzYW1lIG9iamVjdCByZWZlcmVuY2UgdG8gYXZvaWRcbiAgICAgICAgLy8gdW5uZWNlc3NhcnkgcmUtcmVuZGVycywgd2Uga2VlcCB0aGUgcHJldmlvdXMgc25hcHNob3QgYW5kIHVzZSBkZWVwXG4gICAgICAgIC8vIGNvbXBhcmlzb24gdG8gY2hlY2sgaWYgd2UgbmVlZCB0byByZXR1cm4gYSBuZXcgb25lLlxuICAgICAgICBsZXQgbWVtb3JpemVkU25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGdldENhY2hlKCkpO1xuICAgICAgICBjb25zdCBtZW1vcml6ZWRJbml0aWFsU25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGdldEluaXRpYWxDYWNoZSgpKTtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICgpPT57XG4gICAgICAgICAgICAgICAgY29uc3QgbmV3U25hcHNob3QgPSBnZXRTZWxlY3RlZENhY2hlKGdldENhY2hlKCkpO1xuICAgICAgICAgICAgICAgIHJldHVybiBpc0VxdWFsKG5ld1NuYXBzaG90LCBtZW1vcml6ZWRTbmFwc2hvdCkgPyBtZW1vcml6ZWRTbmFwc2hvdCA6IG1lbW9yaXplZFNuYXBzaG90ID0gbmV3U25hcHNob3Q7XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgKCk9Pm1lbW9yaXplZEluaXRpYWxTbmFwc2hvdFxuICAgICAgICBdO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICB9LCBbXG4gICAgICAgIGNhY2hlLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBHZXQgdGhlIGN1cnJlbnQgc3RhdGUgdGhhdCBTV1Igc2hvdWxkIHJldHVybi5cbiAgICBjb25zdCBjYWNoZWQgPSB1c2VTeW5jRXh0ZXJuYWxTdG9yZSh1c2VDYWxsYmFjaygoY2FsbGJhY2spPT5zdWJzY3JpYmVDYWNoZShrZXksIChjdXJyZW50LCBwcmV2KT0+e1xuICAgICAgICAgICAgaWYgKCFpc0VxdWFsKHByZXYsIGN1cnJlbnQpKSBjYWxsYmFjaygpO1xuICAgICAgICB9KSwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIFtcbiAgICAgICAgY2FjaGUsXG4gICAgICAgIGtleVxuICAgIF0pLCBnZXRTbmFwc2hvdFswXSwgZ2V0U25hcHNob3RbMV0pO1xuICAgIGNvbnN0IGlzSW5pdGlhbE1vdW50ID0gIWluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQ7XG4gICAgY29uc3QgaGFzUmV2YWxpZGF0b3IgPSBFVkVOVF9SRVZBTElEQVRPUlNba2V5XSAmJiBFVkVOVF9SRVZBTElEQVRPUlNba2V5XS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IGNhY2hlZERhdGEgPSBjYWNoZWQuZGF0YTtcbiAgICBjb25zdCBkYXRhID0gaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkgPyBmYWxsYmFjayA6IGNhY2hlZERhdGE7XG4gICAgY29uc3QgZXJyb3IgPSBjYWNoZWQuZXJyb3I7XG4gICAgLy8gVXNlIGEgcmVmIHRvIHN0b3JlIHByZXZpb3VzbHkgcmV0dXJuZWQgZGF0YS4gVXNlIHRoZSBpbml0aWFsIGRhdGEgYXMgaXRzIGluaXRpYWwgdmFsdWUuXG4gICAgY29uc3QgbGFnZ3lEYXRhUmVmID0gdXNlUmVmKGRhdGEpO1xuICAgIGNvbnN0IHJldHVybmVkRGF0YSA9IGtlZXBQcmV2aW91c0RhdGEgPyBpc1VuZGVmaW5lZChjYWNoZWREYXRhKSA/IGxhZ2d5RGF0YVJlZi5jdXJyZW50IDogY2FjaGVkRGF0YSA6IGRhdGE7XG4gICAgLy8gLSBTdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSdzIHN0YWxlIGRhdGEgZm9yIHRoZSBpbml0aWFsIHJlbmRlci5cbiAgICAvLyAtIE5vdCBzdXNwZW5zZSBtb2RlIGFuZCB0aGVyZSBpcyBubyBmYWxsYmFjayBkYXRhIGFuZCBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQuXG4gICAgLy8gLSBgcmV2YWxpZGF0ZUlmU3RhbGVgIGlzIGVuYWJsZWQgYnV0IGBkYXRhYCBpcyBub3QgZGVmaW5lZC5cbiAgICBjb25zdCBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24gPSAoKCk9PntcbiAgICAgICAgLy8gaWYgYSBrZXkgYWxyZWFkeSBoYXMgcmV2YWxpZGF0b3JzIGFuZCBhbHNvIGhhcyBlcnJvciwgd2Ugc2hvdWxkIG5vdCB0cmlnZ2VyIHJldmFsaWRhdGlvblxuICAgICAgICBpZiAoaGFzUmV2YWxpZGF0b3IgJiYgIWlzVW5kZWZpbmVkKGVycm9yKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyBJZiBgcmV2YWxpZGF0ZU9uTW91bnRgIGlzIHNldCwgd2UgdGFrZSB0aGUgdmFsdWUgZGlyZWN0bHkuXG4gICAgICAgIGlmIChpc0luaXRpYWxNb3VudCAmJiAhaXNVbmRlZmluZWQocmV2YWxpZGF0ZU9uTW91bnQpKSByZXR1cm4gcmV2YWxpZGF0ZU9uTW91bnQ7XG4gICAgICAgIC8vIElmIGl0J3MgcGF1c2VkLCB3ZSBza2lwIHJldmFsaWRhdGlvbi5cbiAgICAgICAgaWYgKGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgLy8gVW5kZXIgc3VzcGVuc2UgbW9kZSwgaXQgd2lsbCBhbHdheXMgZmV0Y2ggb24gcmVuZGVyIGlmIHRoZXJlIGlzIG5vXG4gICAgICAgIC8vIHN0YWxlIGRhdGEgc28gbm8gbmVlZCB0byByZXZhbGlkYXRlIGltbWVkaWF0ZWx5IG1vdW50IGl0IGFnYWluLlxuICAgICAgICAvLyBJZiBkYXRhIGV4aXN0cywgb25seSByZXZhbGlkYXRlIGlmIGByZXZhbGlkYXRlSWZTdGFsZWAgaXMgdHJ1ZS5cbiAgICAgICAgaWYgKHN1c3BlbnNlKSByZXR1cm4gaXNVbmRlZmluZWQoZGF0YSkgPyBmYWxzZSA6IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBzdGFsZSBkYXRhLCB3ZSBuZWVkIHRvIHJldmFsaWRhdGUgd2hlbiBtb3VudDtcbiAgICAgICAgLy8gSWYgYHJldmFsaWRhdGVJZlN0YWxlYCBpcyBzZXQgdG8gdHJ1ZSwgd2Ugd2lsbCBhbHdheXMgcmV2YWxpZGF0ZS5cbiAgICAgICAgcmV0dXJuIGlzVW5kZWZpbmVkKGRhdGEpIHx8IHJldmFsaWRhdGVJZlN0YWxlO1xuICAgIH0pKCk7XG4gICAgLy8gUmVzb2x2ZSB0aGUgZGVmYXVsdCB2YWxpZGF0aW5nIHN0YXRlOlxuICAgIC8vIElmIGl0J3MgYWJsZSB0byB2YWxpZGF0ZSwgYW5kIGl0IHNob3VsZCByZXZhbGlkYXRlIHdoZW4gbW91bnQsIHRoaXMgd2lsbCBiZSB0cnVlLlxuICAgIGNvbnN0IGRlZmF1bHRWYWxpZGF0aW5nU3RhdGUgPSAhIShrZXkgJiYgZmV0Y2hlciAmJiBpc0luaXRpYWxNb3VudCAmJiBzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pO1xuICAgIGNvbnN0IGlzVmFsaWRhdGluZyA9IGlzVW5kZWZpbmVkKGNhY2hlZC5pc1ZhbGlkYXRpbmcpID8gZGVmYXVsdFZhbGlkYXRpbmdTdGF0ZSA6IGNhY2hlZC5pc1ZhbGlkYXRpbmc7XG4gICAgY29uc3QgaXNMb2FkaW5nID0gaXNVbmRlZmluZWQoY2FjaGVkLmlzTG9hZGluZykgPyBkZWZhdWx0VmFsaWRhdGluZ1N0YXRlIDogY2FjaGVkLmlzTG9hZGluZztcbiAgICAvLyBUaGUgcmV2YWxpZGF0aW9uIGZ1bmN0aW9uIGlzIGEgY2FyZWZ1bGx5IGNyYWZ0ZWQgd3JhcHBlciBvZiB0aGUgb3JpZ2luYWxcbiAgICAvLyBgZmV0Y2hlcmAsIHRvIGNvcnJlY3RseSBoYW5kbGUgdGhlIG1hbnkgZWRnZSBjYXNlcy5cbiAgICBjb25zdCByZXZhbGlkYXRlID0gdXNlQ2FsbGJhY2soYXN5bmMgKHJldmFsaWRhdGVPcHRzKT0+e1xuICAgICAgICBjb25zdCBjdXJyZW50RmV0Y2hlciA9IGZldGNoZXJSZWYuY3VycmVudDtcbiAgICAgICAgaWYgKCFrZXkgfHwgIWN1cnJlbnRGZXRjaGVyIHx8IHVubW91bnRlZFJlZi5jdXJyZW50IHx8IGdldENvbmZpZygpLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgbmV3RGF0YTtcbiAgICAgICAgbGV0IHN0YXJ0QXQ7XG4gICAgICAgIGxldCBsb2FkaW5nID0gdHJ1ZTtcbiAgICAgICAgY29uc3Qgb3B0cyA9IHJldmFsaWRhdGVPcHRzIHx8IHt9O1xuICAgICAgICAvLyBJZiB0aGVyZSBpcyBubyBvbmdvaW5nIGNvbmN1cnJlbnQgcmVxdWVzdCwgb3IgYGRlZHVwZWAgaXMgbm90IHNldCwgYVxuICAgICAgICAvLyBuZXcgcmVxdWVzdCBzaG91bGQgYmUgaW5pdGlhdGVkLlxuICAgICAgICBjb25zdCBzaG91bGRTdGFydE5ld1JlcXVlc3QgPSAhRkVUQ0hba2V5XSB8fCAhb3B0cy5kZWR1cGU7XG4gICAgICAgIC8qXG4gICAgICAgICBGb3IgUmVhY3QgMTdcbiAgICAgICAgIERvIHVubW91bnQgY2hlY2sgZm9yIGNhbGxzOlxuICAgICAgICAgSWYga2V5IGhhcyBjaGFuZ2VkIGR1cmluZyB0aGUgcmV2YWxpZGF0aW9uLCBvciB0aGUgY29tcG9uZW50IGhhcyBiZWVuXG4gICAgICAgICB1bm1vdW50ZWQsIG9sZCBkaXNwYXRjaCBhbmQgb2xkIGV2ZW50IGNhbGxiYWNrcyBzaG91bGQgbm90IHRha2UgYW55XG4gICAgICAgICBlZmZlY3RcblxuICAgICAgICBGb3IgUmVhY3QgMThcbiAgICAgICAgb25seSBjaGVjayBpZiBrZXkgaGFzIGNoYW5nZWRcbiAgICAgICAgaHR0cHM6Ly9naXRodWIuY29tL3JlYWN0d2cvcmVhY3QtMTgvZGlzY3Vzc2lvbnMvODJcbiAgICAgICovIGNvbnN0IGNhbGxiYWNrU2FmZWd1YXJkID0gKCk9PntcbiAgICAgICAgICAgIGlmIChJU19SRUFDVF9MRUdBQ1kpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXVubW91bnRlZFJlZi5jdXJyZW50ICYmIGtleSA9PT0ga2V5UmVmLmN1cnJlbnQgJiYgaW5pdGlhbE1vdW50ZWRSZWYuY3VycmVudDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBrZXkgPT09IGtleVJlZi5jdXJyZW50O1xuICAgICAgICB9O1xuICAgICAgICAvLyBUaGUgZmluYWwgc3RhdGUgb2JqZWN0IHdoZW4gdGhlIHJlcXVlc3QgZmluaXNoZXMuXG4gICAgICAgIGNvbnN0IGZpbmFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IGZhbHNlLFxuICAgICAgICAgICAgaXNMb2FkaW5nOiBmYWxzZVxuICAgICAgICB9O1xuICAgICAgICBjb25zdCBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUgPSAoKT0+e1xuICAgICAgICAgICAgc2V0Q2FjaGUoZmluYWxTdGF0ZSk7XG4gICAgICAgIH07XG4gICAgICAgIGNvbnN0IGNsZWFudXBTdGF0ZSA9ICgpPT57XG4gICAgICAgICAgICAvLyBDaGVjayBpZiBpdCdzIHN0aWxsIHRoZSBzYW1lIHJlcXVlc3QgYmVmb3JlIGRlbGV0aW5nIGl0LlxuICAgICAgICAgICAgY29uc3QgcmVxdWVzdEluZm8gPSBGRVRDSFtrZXldO1xuICAgICAgICAgICAgaWYgKHJlcXVlc3RJbmZvICYmIHJlcXVlc3RJbmZvWzFdID09PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIEZFVENIW2tleV07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8vIFN0YXJ0IGZldGNoaW5nLiBDaGFuZ2UgdGhlIGBpc1ZhbGlkYXRpbmdgIHN0YXRlLCB1cGRhdGUgdGhlIGNhY2hlLlxuICAgICAgICBjb25zdCBpbml0aWFsU3RhdGUgPSB7XG4gICAgICAgICAgICBpc1ZhbGlkYXRpbmc6IHRydWVcbiAgICAgICAgfTtcbiAgICAgICAgLy8gSXQgaXMgaW4gdGhlIGBpc0xvYWRpbmdgIHN0YXRlLCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBjYWNoZWQgZGF0YS5cbiAgICAgICAgLy8gVGhpcyBieXBhc3NlcyBmYWxsYmFjayBkYXRhIGFuZCBsYWdneSBkYXRhLlxuICAgICAgICBpZiAoaXNVbmRlZmluZWQoZ2V0Q2FjaGUoKS5kYXRhKSkge1xuICAgICAgICAgICAgaW5pdGlhbFN0YXRlLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBzZXRDYWNoZShpbml0aWFsU3RhdGUpO1xuICAgICAgICAgICAgICAgIC8vIElmIG5vIGNhY2hlIGlzIGJlaW5nIHJlbmRlcmVkIGN1cnJlbnRseSAoaXQgc2hvd3MgYSBibGFuayBwYWdlKSxcbiAgICAgICAgICAgICAgICAvLyB3ZSB0cmlnZ2VyIHRoZSBsb2FkaW5nIHNsb3cgZXZlbnQuXG4gICAgICAgICAgICAgICAgaWYgKGNvbmZpZy5sb2FkaW5nVGltZW91dCAmJiBpc1VuZGVmaW5lZChnZXRDYWNoZSgpLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoKCk9PntcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsb2FkaW5nICYmIGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vbkxvYWRpbmdTbG93KGtleSwgY29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSwgY29uZmlnLmxvYWRpbmdUaW1lb3V0KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIHJlcXVlc3QgYW5kIHNhdmUgdGhlIHRpbWVzdGFtcC5cbiAgICAgICAgICAgICAgICAvLyBLZXkgbXVzdCBiZSB0cnV0aHkgaWYgZW50ZXJpbmcgaGVyZS5cbiAgICAgICAgICAgICAgICBGRVRDSFtrZXldID0gW1xuICAgICAgICAgICAgICAgICAgICBjdXJyZW50RmV0Y2hlcihmbkFyZyksXG4gICAgICAgICAgICAgICAgICAgIGdldFRpbWVzdGFtcCgpXG4gICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFtuZXdEYXRhLCBzdGFydEF0XSA9IEZFVENIW2tleV07XG4gICAgICAgICAgICBuZXdEYXRhID0gYXdhaXQgbmV3RGF0YTtcbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAvLyBJZiB0aGUgcmVxdWVzdCBpc24ndCBpbnRlcnJ1cHRlZCwgY2xlYW4gaXQgdXAgYWZ0ZXIgdGhlXG4gICAgICAgICAgICAgICAgLy8gZGVkdXBsaWNhdGlvbiBpbnRlcnZhbC5cbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNsZWFudXBTdGF0ZSwgY29uZmlnLmRlZHVwaW5nSW50ZXJ2YWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gSWYgdGhlcmUncmUgb3RoZXIgb25nb2luZyByZXF1ZXN0KHMpLCBzdGFydGVkIGFmdGVyIHRoZSBjdXJyZW50IG9uZSxcbiAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gaWdub3JlIHRoZSBjdXJyZW50IG9uZSB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnM6XG4gICAgICAgICAgICAvLyAgIHJlcTEtLS0tLS0tLS0tLS0tLS0tLS0+cmVzMSAgICAgICAgKGN1cnJlbnQgb25lKVxuICAgICAgICAgICAgLy8gICAgICAgIHJlcTItLS0tLS0tLS0tLS0tLS0tPnJlczJcbiAgICAgICAgICAgIC8vIHRoZSByZXF1ZXN0IHRoYXQgZmlyZWQgbGF0ZXIgd2lsbCBhbHdheXMgYmUga2VwdC5cbiAgICAgICAgICAgIC8vIFRoZSB0aW1lc3RhbXAgbWF5YmUgYmUgYHVuZGVmaW5lZGAgb3IgYSBudW1iZXJcbiAgICAgICAgICAgIGlmICghRkVUQ0hba2V5XSB8fCBGRVRDSFtrZXldWzFdICE9PSBzdGFydEF0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Q29uZmlnKCkub25EaXNjYXJkZWQoa2V5KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICAvLyBDbGVhciBlcnJvci5cbiAgICAgICAgICAgIGZpbmFsU3RhdGUuZXJyb3IgPSBVTkRFRklORUQ7XG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdyZSBvdGhlciBtdXRhdGlvbnMocyksIHRoYXQgb3ZlcmxhcHBlZCB3aXRoIHRoZSBjdXJyZW50IHJldmFsaWRhdGlvbjpcbiAgICAgICAgICAgIC8vIGNhc2UgMTpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tPmVuZFxuICAgICAgICAgICAgLy8gY2FzZSAyOlxuICAgICAgICAgICAgLy8gICAgICAgICByZXEtLS0tLS0tLS0tLS0+cmVzXG4gICAgICAgICAgICAvLyAgIG11dGF0ZS0tLS0tLT5lbmRcbiAgICAgICAgICAgIC8vIGNhc2UgMzpcbiAgICAgICAgICAgIC8vICAgcmVxLS0tLS0tLS0tLS0tLS0tLS0tPnJlc1xuICAgICAgICAgICAgLy8gICAgICAgbXV0YXRlLS0tLS0tLS4uLi0tLS0tLS0tLS0+XG4gICAgICAgICAgICAvLyB3ZSBoYXZlIHRvIGlnbm9yZSB0aGUgcmV2YWxpZGF0aW9uIHJlc3VsdCAocmVzKSBiZWNhdXNlIGl0J3Mgbm8gbG9uZ2VyIGZyZXNoLlxuICAgICAgICAgICAgLy8gbWVhbndoaWxlLCBhIG5ldyByZXZhbGlkYXRpb24gc2hvdWxkIGJlIHRyaWdnZXJlZCB3aGVuIHRoZSBtdXRhdGlvbiBlbmRzLlxuICAgICAgICAgICAgY29uc3QgbXV0YXRpb25JbmZvID0gTVVUQVRJT05ba2V5XTtcbiAgICAgICAgICAgIGlmICghaXNVbmRlZmluZWQobXV0YXRpb25JbmZvKSAmJiAvLyBjYXNlIDFcbiAgICAgICAgICAgIChzdGFydEF0IDw9IG11dGF0aW9uSW5mb1swXSB8fCAvLyBjYXNlIDJcbiAgICAgICAgICAgIHN0YXJ0QXQgPD0gbXV0YXRpb25JbmZvWzFdIHx8IC8vIGNhc2UgM1xuICAgICAgICAgICAgbXV0YXRpb25JbmZvWzFdID09PSAwKSkge1xuICAgICAgICAgICAgICAgIGZpbmlzaFJlcXVlc3RBbmRVcGRhdGVTdGF0ZSgpO1xuICAgICAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxiYWNrU2FmZWd1YXJkKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGdldENvbmZpZygpLm9uRGlzY2FyZGVkKGtleSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gRGVlcCBjb21wYXJlIHdpdGggdGhlIGxhdGVzdCBzdGF0ZSB0byBhdm9pZCBleHRyYSByZS1yZW5kZXJzLlxuICAgICAgICAgICAgLy8gRm9yIGxvY2FsIHN0YXRlLCBjb21wYXJlIGFuZCBhc3NpZ24uXG4gICAgICAgICAgICBjb25zdCBjYWNoZURhdGEgPSBnZXRDYWNoZSgpLmRhdGE7XG4gICAgICAgICAgICAvLyBTaW5jZSB0aGUgY29tcGFyZSBmbiBjb3VsZCBiZSBjdXN0b20gZm5cbiAgICAgICAgICAgIC8vIGNhY2hlRGF0YSBtaWdodCBiZSBkaWZmZXJlbnQgZnJvbSBuZXdEYXRhIGV2ZW4gd2hlbiBjb21wYXJlIGZuIHJldHVybnMgVHJ1ZVxuICAgICAgICAgICAgZmluYWxTdGF0ZS5kYXRhID0gY29tcGFyZShjYWNoZURhdGEsIG5ld0RhdGEpID8gY2FjaGVEYXRhIDogbmV3RGF0YTtcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgdGhlIHN1Y2Nlc3NmdWwgY2FsbGJhY2sgaWYgaXQncyB0aGUgb3JpZ2luYWwgcmVxdWVzdC5cbiAgICAgICAgICAgIGlmIChzaG91bGRTdGFydE5ld1JlcXVlc3QpIHtcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2tTYWZlZ3VhcmQoKSkge1xuICAgICAgICAgICAgICAgICAgICBnZXRDb25maWcoKS5vblN1Y2Nlc3MobmV3RGF0YSwga2V5LCBjb25maWcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjbGVhbnVwU3RhdGUoKTtcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb25maWcgPSBnZXRDb25maWcoKTtcbiAgICAgICAgICAgIGNvbnN0IHsgc2hvdWxkUmV0cnlPbkVycm9yICB9ID0gY3VycmVudENvbmZpZztcbiAgICAgICAgICAgIC8vIE5vdCBwYXVzZWQsIHdlIGNvbnRpbnVlIGhhbmRsaW5nIHRoZSBlcnJvci4gT3RoZXJ3aXNlLCBkaXNjYXJkIGl0LlxuICAgICAgICAgICAgaWYgKCFjdXJyZW50Q29uZmlnLmlzUGF1c2VkKCkpIHtcbiAgICAgICAgICAgICAgICAvLyBHZXQgYSBuZXcgZXJyb3IsIGRvbid0IHVzZSBkZWVwIGNvbXBhcmlzb24gZm9yIGVycm9ycy5cbiAgICAgICAgICAgICAgICBmaW5hbFN0YXRlLmVycm9yID0gZXJyO1xuICAgICAgICAgICAgICAgIC8vIEVycm9yIGV2ZW50IGFuZCByZXRyeSBsb2dpYy4gT25seSBmb3IgdGhlIGFjdHVhbCByZXF1ZXN0LCBub3RcbiAgICAgICAgICAgICAgICAvLyBkZWR1cGVkIG9uZXMuXG4gICAgICAgICAgICAgICAgaWYgKHNob3VsZFN0YXJ0TmV3UmVxdWVzdCAmJiBjYWxsYmFja1NhZmVndWFyZCgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvcihlcnIsIGtleSwgY3VycmVudENvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChzaG91bGRSZXRyeU9uRXJyb3IgPT09IHRydWUgfHwgaXNGdW5jdGlvbihzaG91bGRSZXRyeU9uRXJyb3IpICYmIHNob3VsZFJldHJ5T25FcnJvcihlcnIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNBY3RpdmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElmIGl0J3MgaW5hY3RpdmUsIHN0b3AuIEl0IHdpbGwgYXV0by1yZXZhbGlkYXRlIHdoZW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZvY3VzaW5nIG9yIHJlY29ubmVjdGluZy5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXaGVuIHJldHJ5aW5nLCBkZWR1cGxpY2F0aW9uIGlzIGFsd2F5cyBlbmFibGVkLlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRDb25maWcub25FcnJvclJldHJ5KGVyciwga2V5LCBjdXJyZW50Q29uZmlnLCByZXZhbGlkYXRlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHJ5Q291bnQ6IChvcHRzLnJldHJ5Q291bnQgfHwgMCkgKyAxLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWR1cGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBNYXJrIGxvYWRpbmcgYXMgc3RvcHBlZC5cbiAgICAgICAgbG9hZGluZyA9IGZhbHNlO1xuICAgICAgICAvLyBVcGRhdGUgdGhlIGN1cnJlbnQgaG9vaydzIHN0YXRlLlxuICAgICAgICBmaW5pc2hSZXF1ZXN0QW5kVXBkYXRlU3RhdGUoKTtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSwgLy8gYHNldFN0YXRlYCBpcyBpbW11dGFibGUsIGFuZCBgZXZlbnRzQ2FsbGJhY2tgLCBgZm5BcmdgLCBhbmRcbiAgICAvLyBga2V5VmFsaWRhdGluZ2AgYXJlIGRlcGVuZGluZyBvbiBga2V5YCwgc28gd2UgY2FuIGV4Y2x1ZGUgdGhlbSBmcm9tXG4gICAgLy8gdGhlIGRlcHMgYXJyYXkuXG4gICAgLy9cbiAgICAvLyBGSVhNRTpcbiAgICAvLyBgZm5gIGFuZCBgY29uZmlnYCBtaWdodCBiZSBjaGFuZ2VkIGR1cmluZyB0aGUgbGlmZWN5Y2xlLFxuICAgIC8vIGJ1dCB0aGV5IG1pZ2h0IGJlIGNoYW5nZWQgZXZlcnkgcmVuZGVyIGxpa2UgdGhpcy5cbiAgICAvLyBgdXNlU1dSKCdrZXknLCAoKSA9PiBmZXRjaCgnL2FwaS8nKSwgeyBzdXNwZW5zZTogdHJ1ZSB9KWBcbiAgICAvLyBTbyB3ZSBvbWl0IHRoZSB2YWx1ZXMgZnJvbSB0aGUgZGVwcyBhcnJheVxuICAgIC8vIGV2ZW4gdGhvdWdoIGl0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3JzLlxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXG4gICAgICAgIGtleSxcbiAgICAgICAgY2FjaGVcbiAgICBdKTtcbiAgICAvLyBTaW1pbGFyIHRvIHRoZSBnbG9iYWwgbXV0YXRlIGJ1dCBib3VuZCB0byB0aGUgY3VycmVudCBjYWNoZSBhbmQga2V5LlxuICAgIC8vIGBjYWNoZWAgaXNuJ3QgYWxsb3dlZCB0byBjaGFuZ2UgZHVyaW5nIHRoZSBsaWZlY3ljbGUuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlYWN0LWhvb2tzL2V4aGF1c3RpdmUtZGVwc1xuICAgIGNvbnN0IGJvdW5kTXV0YXRlID0gdXNlQ2FsbGJhY2soLy8gVXNlIGNhbGxiYWNrIHRvIG1ha2Ugc3VyZSBga2V5UmVmLmN1cnJlbnRgIHJldHVybnMgbGF0ZXN0IHJlc3VsdCBldmVyeSB0aW1lXG4gICAgKC4uLmFyZ3MpPT57XG4gICAgICAgIHJldHVybiBpbnRlcm5hbE11dGF0ZShjYWNoZSwga2V5UmVmLmN1cnJlbnQsIC4uLmFyZ3MpO1xuICAgIH0sIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSByZWFjdC1ob29rcy9leGhhdXN0aXZlLWRlcHNcbiAgICBbXSk7XG4gICAgLy8gVGhlIGxvZ2ljIGZvciB1cGRhdGluZyByZWZzLlxuICAgIHVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QoKCk9PntcbiAgICAgICAgZmV0Y2hlclJlZi5jdXJyZW50ID0gZmV0Y2hlcjtcbiAgICAgICAgY29uZmlnUmVmLmN1cnJlbnQgPSBjb25maWc7XG4gICAgICAgIC8vIEhhbmRsZSBsYWdneSBkYXRhIHVwZGF0ZXMuIElmIHRoZXJlJ3MgY2FjaGVkIGRhdGEgb2YgdGhlIGN1cnJlbnQga2V5LFxuICAgICAgICAvLyBpdCdsbCBiZSB0aGUgY29ycmVjdCByZWZlcmVuY2UuXG4gICAgICAgIGlmICghaXNVbmRlZmluZWQoY2FjaGVkRGF0YSkpIHtcbiAgICAgICAgICAgIGxhZ2d5RGF0YVJlZi5jdXJyZW50ID0gY2FjaGVkRGF0YTtcbiAgICAgICAgfVxuICAgIH0pO1xuICAgIC8vIEFmdGVyIG1vdW50ZWQgb3Iga2V5IGNoYW5nZWQuXG4gICAgdXNlSXNvbW9ycGhpY0xheW91dEVmZmVjdCgoKT0+e1xuICAgICAgICBpZiAoIWtleSkgcmV0dXJuO1xuICAgICAgICBjb25zdCBzb2Z0UmV2YWxpZGF0ZSA9IHJldmFsaWRhdGUuYmluZChVTkRFRklORUQsIFdJVEhfREVEVVBFKTtcbiAgICAgICAgLy8gRXhwb3NlIHJldmFsaWRhdG9ycyB0byBnbG9iYWwgZXZlbnQgbGlzdGVuZXJzLiBTbyB3ZSBjYW4gdHJpZ2dlclxuICAgICAgICAvLyByZXZhbGlkYXRpb24gZnJvbSB0aGUgb3V0c2lkZS5cbiAgICAgICAgbGV0IG5leHRGb2N1c1JldmFsaWRhdGVkQXQgPSAwO1xuICAgICAgICBjb25zdCBvblJldmFsaWRhdGUgPSAodHlwZSk9PntcbiAgICAgICAgICAgIGlmICh0eXBlID09IHJldmFsaWRhdGVFdmVudHMuRk9DVVNfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBub3cgPSBEYXRlLm5vdygpO1xuICAgICAgICAgICAgICAgIGlmIChnZXRDb25maWcoKS5yZXZhbGlkYXRlT25Gb2N1cyAmJiBub3cgPiBuZXh0Rm9jdXNSZXZhbGlkYXRlZEF0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dEZvY3VzUmV2YWxpZGF0ZWRBdCA9IG5vdyArIGdldENvbmZpZygpLmZvY3VzVGhyb3R0bGVJbnRlcnZhbDtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5SRUNPTk5FQ1RfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICBpZiAoZ2V0Q29uZmlnKCkucmV2YWxpZGF0ZU9uUmVjb25uZWN0ICYmIGlzQWN0aXZlKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgc29mdFJldmFsaWRhdGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gcmV2YWxpZGF0ZUV2ZW50cy5NVVRBVEVfRVZFTlQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmV2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9O1xuICAgICAgICBjb25zdCB1bnN1YkV2ZW50cyA9IHN1YnNjcmliZUNhbGxiYWNrKGtleSwgRVZFTlRfUkVWQUxJREFUT1JTLCBvblJldmFsaWRhdGUpO1xuICAgICAgICAvLyBNYXJrIHRoZSBjb21wb25lbnQgYXMgbW91bnRlZCBhbmQgdXBkYXRlIGNvcnJlc3BvbmRpbmcgcmVmcy5cbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAga2V5UmVmLmN1cnJlbnQgPSBrZXk7XG4gICAgICAgIGluaXRpYWxNb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAvLyBLZWVwIHRoZSBvcmlnaW5hbCBrZXkgaW4gdGhlIGNhY2hlLlxuICAgICAgICBzZXRDYWNoZSh7XG4gICAgICAgICAgICBfazogZm5BcmdcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSByZXZhbGlkYXRpb24uXG4gICAgICAgIGlmIChzaG91bGREb0luaXRpYWxSZXZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChkYXRhKSB8fCBJU19TRVJWRVIpIHtcbiAgICAgICAgICAgICAgICAvLyBSZXZhbGlkYXRlIGltbWVkaWF0ZWx5LlxuICAgICAgICAgICAgICAgIHNvZnRSZXZhbGlkYXRlKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIERlbGF5IHRoZSByZXZhbGlkYXRlIGlmIHdlIGhhdmUgZGF0YSB0byByZXR1cm4gc28gd2Ugd29uJ3QgYmxvY2tcbiAgICAgICAgICAgICAgICAvLyByZW5kZXJpbmcuXG4gICAgICAgICAgICAgICAgckFGKHNvZnRSZXZhbGlkYXRlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKCk9PntcbiAgICAgICAgICAgIC8vIE1hcmsgaXQgYXMgdW5tb3VudGVkLlxuICAgICAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSB0cnVlO1xuICAgICAgICAgICAgdW5zdWJFdmVudHMoKTtcbiAgICAgICAgfTtcbiAgICB9LCBbXG4gICAgICAgIGtleVxuICAgIF0pO1xuICAgIC8vIFBvbGxpbmdcbiAgICB1c2VJc29tb3JwaGljTGF5b3V0RWZmZWN0KCgpPT57XG4gICAgICAgIGxldCB0aW1lcjtcbiAgICAgICAgZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICAgIC8vIFVzZSB0aGUgcGFzc2VkIGludGVydmFsXG4gICAgICAgICAgICAvLyAuLi5vciBpbnZva2UgdGhlIGZ1bmN0aW9uIHdpdGggdGhlIHVwZGF0ZWQgZGF0YSB0byBnZXQgdGhlIGludGVydmFsXG4gICAgICAgICAgICBjb25zdCBpbnRlcnZhbCA9IGlzRnVuY3Rpb24ocmVmcmVzaEludGVydmFsKSA/IHJlZnJlc2hJbnRlcnZhbChkYXRhKSA6IHJlZnJlc2hJbnRlcnZhbDtcbiAgICAgICAgICAgIC8vIFdlIG9ubHkgc3RhcnQgdGhlIG5leHQgaW50ZXJ2YWwgaWYgYHJlZnJlc2hJbnRlcnZhbGAgaXMgbm90IDAsIGFuZDpcbiAgICAgICAgICAgIC8vIC0gYGZvcmNlYCBpcyB0cnVlLCB3aGljaCBpcyB0aGUgc3RhcnQgb2YgcG9sbGluZ1xuICAgICAgICAgICAgLy8gLSBvciBgdGltZXJgIGlzIG5vdCAwLCB3aGljaCBtZWFucyB0aGUgZWZmZWN0IHdhc24ndCBjYW5jZWxlZFxuICAgICAgICAgICAgaWYgKGludGVydmFsICYmIHRpbWVyICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIHRpbWVyID0gc2V0VGltZW91dChleGVjdXRlLCBpbnRlcnZhbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gZXhlY3V0ZSgpIHtcbiAgICAgICAgICAgIC8vIENoZWNrIGlmIGl0J3MgT0sgdG8gZXhlY3V0ZTpcbiAgICAgICAgICAgIC8vIE9ubHkgcmV2YWxpZGF0ZSB3aGVuIHRoZSBwYWdlIGlzIHZpc2libGUsIG9ubGluZSwgYW5kIG5vdCBlcnJvcmVkLlxuICAgICAgICAgICAgaWYgKCFnZXRDYWNoZSgpLmVycm9yICYmIChyZWZyZXNoV2hlbkhpZGRlbiB8fCBnZXRDb25maWcoKS5pc1Zpc2libGUoKSkgJiYgKHJlZnJlc2hXaGVuT2ZmbGluZSB8fCBnZXRDb25maWcoKS5pc09ubGluZSgpKSkge1xuICAgICAgICAgICAgICAgIHJldmFsaWRhdGUoV0lUSF9ERURVUEUpLnRoZW4obmV4dCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIFNjaGVkdWxlIHRoZSBuZXh0IGludGVydmFsIHRvIGNoZWNrIGFnYWluLlxuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBuZXh0KCk7XG4gICAgICAgIHJldHVybiAoKT0+e1xuICAgICAgICAgICAgaWYgKHRpbWVyKSB7XG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVyKTtcbiAgICAgICAgICAgICAgICB0aW1lciA9IC0xO1xuICAgICAgICAgICAgfVxuICAgICAgICB9O1xuICAgIH0sIFtcbiAgICAgICAgcmVmcmVzaEludGVydmFsLFxuICAgICAgICByZWZyZXNoV2hlbkhpZGRlbixcbiAgICAgICAgcmVmcmVzaFdoZW5PZmZsaW5lLFxuICAgICAgICBrZXlcbiAgICBdKTtcbiAgICAvLyBEaXNwbGF5IGRlYnVnIGluZm8gaW4gUmVhY3QgRGV2VG9vbHMuXG4gICAgdXNlRGVidWdWYWx1ZShyZXR1cm5lZERhdGEpO1xuICAgIC8vIEluIFN1c3BlbnNlIG1vZGUsIHdlIGNhbid0IHJldHVybiB0aGUgZW1wdHkgYGRhdGFgIHN0YXRlLlxuICAgIC8vIElmIHRoZXJlIGlzIGFuIGBlcnJvcmAsIHRoZSBgZXJyb3JgIG5lZWRzIHRvIGJlIHRocm93biB0byB0aGUgZXJyb3IgYm91bmRhcnkuXG4gICAgLy8gSWYgdGhlcmUgaXMgbm8gYGVycm9yYCwgdGhlIGByZXZhbGlkYXRpb25gIHByb21pc2UgbmVlZHMgdG8gYmUgdGhyb3duIHRvXG4gICAgLy8gdGhlIHN1c3BlbnNlIGJvdW5kYXJ5LlxuICAgIGlmIChzdXNwZW5zZSAmJiBpc1VuZGVmaW5lZChkYXRhKSAmJiBrZXkpIHtcbiAgICAgICAgLy8gU1dSIHNob3VsZCB0aHJvdyB3aGVuIHRyeWluZyB0byB1c2UgU3VzcGVuc2Ugb24gdGhlIHNlcnZlciB3aXRoIFJlYWN0IDE4LFxuICAgICAgICAvLyB3aXRob3V0IHByb3ZpZGluZyBhbnkgaW5pdGlhbCBkYXRhLiBTZWU6XG4gICAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS92ZXJjZWwvc3dyL2lzc3Vlcy8xODMyXG4gICAgICAgIGlmICghSVNfUkVBQ1RfTEVHQUNZICYmIElTX1NFUlZFUikge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGYWxsYmFjayBkYXRhIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgc3VzcGVuc2UgaW4gU1NSLicpO1xuICAgICAgICB9XG4gICAgICAgIC8vIEFsd2F5cyB1cGRhdGUgZmV0Y2hlciBhbmQgY29uZmlnIHJlZnMgZXZlbiB3aXRoIHRoZSBTdXNwZW5zZSBtb2RlLlxuICAgICAgICBmZXRjaGVyUmVmLmN1cnJlbnQgPSBmZXRjaGVyO1xuICAgICAgICBjb25maWdSZWYuY3VycmVudCA9IGNvbmZpZztcbiAgICAgICAgdW5tb3VudGVkUmVmLmN1cnJlbnQgPSBmYWxzZTtcbiAgICAgICAgdGhyb3cgaXNVbmRlZmluZWQoZXJyb3IpID8gcmV2YWxpZGF0ZShXSVRIX0RFRFVQRSkgOiBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIHtcbiAgICAgICAgbXV0YXRlOiBib3VuZE11dGF0ZSxcbiAgICAgICAgZ2V0IGRhdGEgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZGF0YSA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gcmV0dXJuZWREYXRhO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgZXJyb3IgKCkge1xuICAgICAgICAgICAgc3RhdGVEZXBlbmRlbmNpZXMuZXJyb3IgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIGVycm9yO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNWYWxpZGF0aW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzVmFsaWRhdGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNWYWxpZGF0aW5nO1xuICAgICAgICB9LFxuICAgICAgICBnZXQgaXNMb2FkaW5nICgpIHtcbiAgICAgICAgICAgIHN0YXRlRGVwZW5kZW5jaWVzLmlzTG9hZGluZyA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gaXNMb2FkaW5nO1xuICAgICAgICB9XG4gICAgfTtcbn07XG5jb25zdCBTV1JDb25maWcgPSBPQkpFQ1QuZGVmaW5lUHJvcGVydHkoU1dSQ29uZmlnJDEsICdkZWZhdWx0VmFsdWUnLCB7XG4gICAgdmFsdWU6IGRlZmF1bHRDb25maWdcbn0pO1xuY29uc3QgdW5zdGFibGVfc2VyaWFsaXplID0gKGtleSk9PnNlcmlhbGl6ZShrZXkpWzBdO1xuLyoqXG4gKiBBIGhvb2sgdG8gZmV0Y2ggZGF0YS5cbiAqXG4gKiBAbGluayBodHRwczovL3N3ci52ZXJjZWwuYXBwXG4gKiBAZXhhbXBsZVxuICogYGBganN4XG4gKiBpbXBvcnQgdXNlU1dSIGZyb20gJ3N3cidcbiAqIGZ1bmN0aW9uIFByb2ZpbGUoKSB7XG4gKiAgIGNvbnN0IHsgZGF0YSwgZXJyb3IgfSA9IHVzZVNXUignL2FwaS91c2VyJywgZmV0Y2hlcilcbiAqICAgaWYgKGVycm9yKSByZXR1cm4gPGRpdj5mYWlsZWQgdG8gbG9hZDwvZGl2PlxuICogICBpZiAoIWRhdGEpIHJldHVybiA8ZGl2PmxvYWRpbmcuLi48L2Rpdj5cbiAqICAgcmV0dXJuIDxkaXY+aGVsbG8ge2RhdGEubmFtZX0hPC9kaXY+XG4gKiB9XG4gKiBgYGBcbiAqLyB2YXIgdXNlU1dSID0gd2l0aEFyZ3ModXNlU1dSSGFuZGxlcik7XG5cbi8vIHVzZVNXUlxuXG5leHBvcnQgeyBTV1JDb25maWcsIHVzZVNXUiBhcyBkZWZhdWx0LCB1bnN0YWJsZV9zZXJpYWxpemUgfTtcbiIsImltcG9ydCB7IHVzZU1lbW8gfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHVzZVNXUkNvbmZpZyB9IGZyb20gXCJzd3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHVzZVNXUkhvb2tzQ29uZmlnKCkge1xuICAgIHZhciBzd3JDb25maWcgPSB1c2VTV1JDb25maWcoKTtcbiAgICB2YXIgdmFsdWUgPSB1c2VNZW1vKGZ1bmN0aW9uICgpIHsgcmV0dXJuICh7IG11dGF0ZTogc3dyQ29uZmlnLm11dGF0ZSwgY2FjaGU6IHN3ckNvbmZpZy5jYWNoZSB9KTsgfSwgW3N3ckNvbmZpZy5tdXRhdGUsIHN3ckNvbmZpZy5jYWNoZV0pO1xuICAgIHJldHVybiB2YWx1ZTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXVzZVNXUkhvb2tzQ29uZmlnLmpzLm1hcCIsImltcG9ydCB7IF9fcmVhZCB9IGZyb20gXCJ0c2xpYlwiO1xuaW1wb3J0IHsgdXNlQ2FsbGJhY2ssIHVzZVN0YXRlIH0gZnJvbSBcInJlYWN0XCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB1c2VUb2dnbGUoaW5pdGlhbFZhbHVlKSB7XG4gICAgaWYgKGluaXRpYWxWYWx1ZSA9PT0gdm9pZCAwKSB7IGluaXRpYWxWYWx1ZSA9IGZhbHNlOyB9XG4gICAgdmFyIF9hID0gX19yZWFkKHVzZVN0YXRlKGluaXRpYWxWYWx1ZSksIDIpLCB2YWx1ZSA9IF9hWzBdLCBzZXRWYWx1ZSA9IF9hWzFdO1xuICAgIHZhciB0b2dnbGUgPSB1c2VDYWxsYmFjayhmdW5jdGlvbiAobmV3VmFsdWUpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBuZXdWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgIHNldFZhbHVlKG5ld1ZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHNldFZhbHVlKGZ1bmN0aW9uIChwcmV2VmFsdWUpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gIXByZXZWYWx1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfSwgW10pO1xuICAgIHJldHVybiBbdmFsdWUsIHRvZ2dsZV07XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD11c2VUb2dnbGUuanMubWFwIiwidmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjKG9iaikge1xuICB2YXIgb3V0ID0gXCJcIlxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSBcInN0cmluZ1wiIHx8IHR5cGVvZiBvYmogPT09IFwibnVtYmVyXCIpIHJldHVybiBvYmogfHwgXCJcIlxuXG4gIGlmIChpc0FycmF5KG9iaikpXG4gICAgZm9yICh2YXIgayA9IDAsIHRtcDsgayA8IG9iai5sZW5ndGg7IGsrKykge1xuICAgICAgaWYgKCh0bXAgPSBjYyhvYmpba10pKSAhPT0gXCJcIikge1xuICAgICAgICBvdXQgKz0gKG91dCAmJiBcIiBcIikgKyB0bXBcbiAgICAgIH1cbiAgICB9XG4gIGVsc2VcbiAgICBmb3IgKHZhciBrIGluIG9iaikge1xuICAgICAgaWYgKG9iai5oYXNPd25Qcm9wZXJ0eShrKSAmJiBvYmpba10pIG91dCArPSAob3V0ICYmIFwiIFwiKSArIGtcbiAgICB9XG5cbiAgcmV0dXJuIG91dFxufVxuIiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInVtS0FabUxrQVJMelgzZ251S2twXCIsXCJsZWZ0XCI6XCJ1MWw1QUpHYlVpUDZSVkZJS3hPSVwiLFwic21hbGxcIjpcImh4WnBLOUNwQksxd1IwVzB2NFNEXCIsXCJsYXJnZVwiOlwibzlEWW10NHhmTGFJbWlWekk5ZFFcIixcInhsYXJnZVwiOlwicW1FVnhTWlM1a2ZMM2FWYmVlMW5cIixcImludmVydGVkXCI6XCJDTk9aSExkOVhib2t6T1c2TFlCUFwiLFwicm91bmRlZFwiOlwiakpDQXp3MlN5YUg0dElXWHJBbFJcIixcInJpZ2h0T2Zmc2V0XCI6XCJLR0N1N2FQalF5X2FGTmpIV051d1wiLFwibGVmdE9mZnNldFwiOlwiZERIWXlHelhOaTc3M0ZBbDEzR1hcIixcIm5vU2hhZG93XCI6XCJsUUYxWWNVcU0wT0h2UFNsU3dsX1wiLFwibm9Cb3JkZXJcIjpcInNFbzI1RWl2NnpzMURfeDVxOFZ5XCIsXCJ0cmFuc3BhcmVudFwiOlwidm0zY21BTk51WWxhUU01WXF6OUdcIixcInN0cmV0Y2hIb3Jpem9udGFsbHlcIjpcIlBpa2Z6ajd6WWcySW50ZEp5bXVLXCIsXCJzdHJldGNoVmVydGljYWxseVwiOlwib1NnVjVjd1g2aW5rU2JDRzk4dzhcIixcIm5vUGFkZGluZ1wiOlwiZ1NackdSMXhxbThRMWlSVWZHZ2FcIixcImNvbnRlbnRcIjpcInBZTFVqOW5vQXFUOFd5dGpET09iXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiYnV0dG9uQmFkZ2VcIjpcImlPeV90aFVmd3hJcVpPcldTSXp4XCIsXCJpbnZlcnRlZFwiOlwiZzc5ampjV1ZubXhMb1BOeUF4NDlcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIlVuajRycDFEeTcxQUNydXpYbDc1XCIsXCJsZWZ0XCI6XCJFWFdNUnZ2ZVJ2UWlmaXh6VEgwMlwiLFwic21hbGxcIjpcIl9VMHpuVWs1UVRBelBuUzJnYUxDXCIsXCJtZWRpdW1cIjpcImFIOHU0czJNdFljNXk0dnl1YkR3XCIsXCJsYXJnZVwiOlwiYzMwNnlWNzhhbF9lR3dCU2ttRm1cIixcInhsYXJnZVwiOlwieHZBMW1lVW1FMjhBRU9wanNXYzlcIixcImludmVydGVkXCI6XCJXQjc3WUlET1N3Sm9YNjhOamxVR1wiLFwicm91bmRlZFwiOlwiazJuSkNzRU5OZ0N6Mkhsc2pfYkdcIixcInJpZ2h0T2Zmc2V0XCI6XCJqQWU1RVZFMzdPcktZdmtYZGMxc1wiLFwibGVmdE9mZnNldFwiOlwiRGdidEI2RzRMb0JEZDA0UF9Nek9cIixcIm5vU2hhZG93XCI6XCJLcFFJOTVfZjhuSHZrN0cySjZoOFwiLFwidHJhbnNwYXJlbnRcIjpcIkw4UG54VVFvZ3pnRk1NVDdRSTRkXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJKdWxheFNjY29HbXF0Z1ROSm1rOVwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcInpUWXI5VzdnMlNxYlZqUEZBb2tHXCIsXCJub1BhZGRpbmdcIjpcIlVIelRtNTFrVnlsbDUyX1M3c0dCXCIsXCJub0JvcmRlclwiOlwiaFJQMVhZZnVKNDlUc1lVX2NPNUFcIixcImRpc2FibGVkXCI6XCJsd1dJVFBoTTlUTW81ODVEc2F3OFwiLFwiY29udGVudFwiOlwiTXlUX1B1ZkpkRXZzWkUzaFNXOFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjaGVja2JveFwiOlwic3k4bEtWV1A1NkFsT1I3eXNfOUFcIixcInNtYWxsXCI6XCJYamZwY3VQdGd1Rlp2S3J4eHQ3eVwiLFwibWVkaXVtXCI6XCJ0TFAzZFpXZXBYSDNIS2cxN3NPSFwiLFwibGFyZ2VcIjpcIldncDlxSFdEclFpOWZtY3hRSVZLXCIsXCJ4bGFyZ2VcIjpcImxVQTZ0cExrV2NHRmdub3FDRnZ1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JQaWNrZXJcIjpcIktrMmRwMTVId01aeklOYlVGQVo0XCIsXCJob3Jpem9udGFsXCI6XCJKc3pPX1VnN3BLTFlRMERlaE44X1wiLFwidmVydGljYWxcIjpcIkVWVDYybGdoQzk5ZTliZGpZbHk1XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29sb3JTd2F0Y2hcIjpcIlB2YmVCbTRTTXRNcWxRTlR5UWpRXCIsXCJzbWFsbFwiOlwiUzdFM0VQeV9BV1F1a0VleHV2VGZcIixcImxhcmdlXCI6XCJhMUZzSXRLUFFFT0JlVHFCQ3VEbFwiLFwieGxhcmdlXCI6XCJzRmhnUUVOX1VPTDNaeE9BUjFJZVwiLFwic2VsZWN0ZWRcIjpcImFVeDJ1U0JTczE0VnF3UHFqdmxRXCIsXCJzck9ubHlcIjpcIkpJUW1lWmRkOVRGbDVJX2dpZlBpXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJaWlZIY1g0NVhDYmxtRGFiOWV3WlwiLFwibW9kYWxIZWFkZXJcIjpcInhUWDFYSmZDU1VzcmhfeUxsWm9pXCIsXCJtb2RhbENvbnRlbnRcIjpcIlRlNmpIZGx5anNRWG1uVHM5YmFuXCIsXCJub1BhZGRpbmdcIjpcIkx6X2d3U3dQM1FDTjV6WXpGc0VpXCIsXCJtb2RhbEJ1dHRvbnNDb250YWluZXJcIjpcIkdoMXV2eE1mRWdQVGR0NjZRaXMyXCIsXCJtb2RhbEJ1dHRvbnNcIjpcIklhdzM0RmtNSnFqckdRNThCR2Z4XCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJyQmFmWGtvVENuMkFoNnhZWW14ZlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImlucHV0XCI6XCJLV2s3b1o4dHZQZlFpY2dRWWxWYVwiLFwibGFiZWxcIjpcImU2enJ4N1VPUF9CU29NTTNHcmpRXCIsXCJzbWFsbFwiOlwiaWhTbkRRZzB5Z3hjVkxJeVNKa01cIixcImxhcmdlXCI6XCJGcHdoYkQ3SFh4X3VGVDNsMDF3YlwiLFwieGxhcmdlXCI6XCJZVmRzNHVfRGZXU0cxcjBTQUduU1wiLFwiaW52ZXJ0ZWRcIjpcIkNLeW5vTGhpTGQ2S3pBWWk1TnRHXCIsXCJyb3VuZGVkXCI6XCJ2NzJtekp1bUZTaURPT0UxTW5YSFwiLFwibm9TaGFkb3dcIjpcIkVvZXdKRURiR2R0ZUpfTlJmUzVGXCIsXCJub0JvcmRlclwiOlwiY2I3bDR4dmNObkhObFFabUxqa2JcIixcIm5vUGFkZGluZ1wiOlwidmNPd0RZdUdGMmV0b1BmeUZEWDVcIixcInRyYW5zcGFyZW50XCI6XCJsMDhraGFYSVVPY3J1QkZId3M3WFwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSTB4dkpiQjBMTlQwUzE1alRNV1dcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJYNmZxVWNWSDFCbENSSkJpaUppaVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiajFtZmlZRUdvbFRSbWJCbUdLbFFcIixcInJvd1wiOlwiRUdhS3ZtcU0yU2F3aUZyVzhDdHVcIixcImNvbHVtblwiOlwiTk1pME1UMWI3cnAxWmp5ZThVVkFcIixcImZpeGVkXCI6XCJnMGoza2tRcl9BakNLRmQ5NFMxc1wiLFwicGxhaW5cIjpcIkZyMXE3V25GMW5Gbm5iZmdwYVJ6XCIsXCJ0cmFuc3BhcmVudFwiOlwidWRSWmU5SDBiS1VIWGpPd0cxRm5cIixcInRvcFwiOlwidVlpS3c2VnZERWtoalpIenZvN2VcIixcInRvcEVkZ2VcIjpcInRSYkVjWWpFM0tuY3NOd1RidlZNXCIsXCJ0b3BPbkVkZ2VcIjpcIkxHdW5HMzdYMV9IUmV1dzNxenVhXCIsXCJyaWdodFwiOlwibHcyN3JHVmxvMzRheEN4dzNRSGlcIixcInJpZ2h0RWRnZVwiOlwiUFpJdHZsZUZJSWowSngyTWlrUkVcIixcInJpZ2h0T25FZGdlXCI6XCJLTnVHYURQcTlybVhmZ21PM3BjYlwiLFwiYm90dG9tXCI6XCJkbjF1aDF0YXNHeERHcW1VMThITlwiLFwiYm90dG9tRWRnZVwiOlwiZUQwVUNyQlJwc1JUUFB3d0lvVmdcIixcImJvdHRvbU9uRWRnZVwiOlwiSXJoSDVnZnlHc1E2a2RjUDk0UlFcIixcImxlZnRcIjpcIkQ1ZkdIbkFHQ01SNEx0Yjl5NEhyXCIsXCJsZWZ0RWRnZVwiOlwiX0F0QWQydHI3dDFrWHVzUmJYU3pcIixcImxlZnRPbkVkZ2VcIjpcIl84QzlkZDBYX0pYWTR1SHp3NU5qXCIsXCJob3Jpem9udGFsQ2VudGVyXCI6XCJRRGtzOG92dDlSVmNGV2VFQjh3YlwiLFwidmVydGljYWxDZW50ZXJcIjpcIkNWdVFSRTY1MkdIMlZKbjh6T1RzXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiaWNvblwiOlwiZnBfQkxKMkZXNE95eWIwYkhpRDRcIixcInNtYWxsXCI6XCJ6c1ZETmZOUmtvczBRNXV2OUZSOVwiLFwibWVkaXVtXCI6XCJlU2xpbDNldlB0UEJzd1dGODBDNVwiLFwibGFyZ2VcIjpcIlQ3VUx5cTF5RTlBVlhFTWtuVjRHXCIsXCJ4bGFyZ2VcIjpcIlFQQWNlVlFkWjZRSVEyUXZpandnXCIsXCJpbnZlcnRlZFwiOlwibUZUR2JoTGE0TmxVTzE2bnZKcmtcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIldjZW15cjJHcjhaQ0djNkJqYnF3XCIsXCJzbWFsbFwiOlwiVF9wYThDY3BMMUd2dURzZHZzcXFcIixcIm1lZGl1bVwiOlwibkxMRXJqT2dmYTViMnNPZVpyUTVcIixcImxhcmdlXCI6XCJRNzFORkJIclN4UUxRRTRBR0QyaFwiLFwieGxhcmdlXCI6XCJFYkJpeUYxcmc2d1JheFNNSzhzb1wiLFwicm91bmRlZFwiOlwidExqdXdSU3NJaUxKR1ZzcmFyYmRcIixcInRvcE9mZnNldFwiOlwiZDRLTHBJNzlDdVNVNmdrUFBJbkFcIixcInJpZ2h0T2Zmc2V0XCI6XCJHN2hKWm9ZdjhxSXJObUZDeWdNRVwiLFwiYm90dG9tT2Zmc2V0XCI6XCJEWnMzQXZHa1ZkT3ZKZkxlSjhHaFwiLFwibGVmdE9mZnNldFwiOlwid0VFbldSY3Z1dm9taF9PTE81aXFcIixcImludmVydGVkXCI6XCJLOVdHQ0ZwVWFkTzlXSVh3RmFqX1wiLFwibm9TaGFkb3dcIjpcImVBUUoxMGtFa1BtRHhNR3ZsWXp5XCIsXCJub0JvcmRlclwiOlwiT2xFTlI5bnR1V1lMR09LS0tyR1JcIixcInRyYW5zcGFyZW50XCI6XCJLT2NzUHJpdnI5NHJ4bmZIVmxmZVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZ1VTVHkzX05wMW1HSkhXMU4zZ3hcIixcInNtYWxsXCI6XCJJWXVWemgxSEJ6Z29UQ2kyV1FfcFwiLFwibWVkaXVtXCI6XCJKTmczX2JDRWZJdmk0Z2VFY3NTM1wiLFwibGFyZ2VcIjpcIm42MXNheEEyMF9Fd01ndDlHdzRzXCIsXCJ4bGFyZ2VcIjpcImdxR252bkg5WDZtR3Z6d2w0YUd6XCIsXCJyb3VuZGVkXCI6XCJEa3p1cWhFYWlNUjNYTXMxTTFJZlwiLFwidG9wT2Zmc2V0XCI6XCJzR252ZXZ2c3hCWlVhWHJwWlFwSVwiLFwicmlnaHRPZmZzZXRcIjpcImhnWTNacGt5RDcwcDdFOHJuM2JpXCIsXCJib3R0b21PZmZzZXRcIjpcIlJPb1FZNk9hUm5RekRPZlhfUURGXCIsXCJsZWZ0T2Zmc2V0XCI6XCJLZXZtNTgyZTNnWFBKRTNPRG9wYVwiLFwiaW52ZXJ0ZWRcIjpcIk9Pem5DYkFiak9MYzRfYkNFcWZ5XCIsXCJub1NoYWRvd1wiOlwieHJIeGZjZTAzNGRnWU5Fa25sVk1cIixcIm5vQm9yZGVyXCI6XCJlSHRfUklxOEpHb1lIYzRpQ29lZ1wiLFwidHJhbnNwYXJlbnRcIjpcIm5mZ3F0U2dmcnRyR0ZEV2Zab25RXCIsXCJkaXNhYmxlZFwiOlwiSV9uaEo5dTZwVERfMlNGM3FsX2xcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInJPNVc2RFFrNE50b1dyd21LTVdnXCIsXCJoYXNPdmVybGF5XCI6XCJsbHZubUk4SzEzZzlQVEJpQ056M1wiLFwib3ZlcmxheVwiOlwiR1ZrMmo4d1YxdDNnWTV1WFE0cUlcIixcImltYWdlXCI6XCJnWGpZcUtlOXczTmdZdXJZd1VRcFwiLFwiY292ZXJcIjpcIl9sN09OT1dheXI4dHl1R2l5VXNjXCIsXCJjb250YWluXCI6XCJTWWpPYjhsQWhtRGJkeWxGSVFZOVwiLFwic3RyZXRjaEhvcml6b250YWxseVwiOlwiSGtyb3pTZmxsVEZsa2ticXhYV2hcIixcInN0cmV0Y2hWZXJ0aWNhbGx5XCI6XCJ4eUhYaGhIRVlYTVllYXZXWndfTlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiUkRaeWxDTWxHZmVDVXdTYnllSXFcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImk4R3VfVzF3OFdCQVlmbExJWXp3XCIsXCJoZWFkZXJcIjpcIkdwN1I4d1l3YUx0Rm9LRmNSdGdOXCIsXCJoZWFkZXJMYWJlbFwiOlwiVkdrb3RNVG5xUFJhS2NHVjhSamdcIixcImxpc3RcIjpcInZnOVFMdENZVEFzNXgzZkY3OXpwXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wibGlzdFZpZXdJdGVtXCI6XCJaRlVkN29TcFBMdDBFZDJYcWFXWlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVcIjpcInhROUJmazBYMUhtWmdpaEN1dFpWXCIsXCJvcGVuXCI6XCJ1dHY5RllPVTdRMEpOblpXMWVqdlwiLFwiZW50cmFuY2VcIjpcInlZS2pjQ3ZEMkw5NEZwUGdPaWdRXCIsXCJoZWFkZXJcIjpcIndOTDg2czl6R0ZpOFhLMTFLbG9SXCIsXCJmb290ZXJcIjpcIm11NEpldjFjNEtjaWZlRjhNenFnXCIsXCJub0JvcmRlclwiOlwiRWFQU2pMMW5Yc3o3VEN4MTFMcmZcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcImtZaDdES1lxSDZqZExYZDdQZEp3XCIsXCJtZW51Q29udGFpbmVyXCI6XCJRbGVBTzN5bVRsaVU2Wk5CUXhmZ1wiLFwidG9wXCI6XCJheGZjcmpTSDRsdnVqenJzazJRcFwiLFwicmlnaHRcIjpcIkx0Vmx0VzNCUFo1Z05YVnh4a3JQXCIsXCJsZWZ0XCI6XCJQUmI1ZjhYY01aT2NZNXVmUE1kcVwiLFwiYm90dG9tXCI6XCJfX01aNU9vaUlyVmlkRlhiUWZqdVwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVJdGVtXCI6XCJnR1pmX0dzV3N3a3IwTlREX25iUVwiLFwibm9QYWRkaW5nXCI6XCJDTTJiSFNDeHd1aXRNZXM3dTlXZlwiLFwiYWN0aXZlXCI6XCJzNHRKbEs0T0ZjM3JuWEwwTXhxa1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm1lbnVMaW5rSXRlbVwiOlwiWDFGNFNRa2hRaDBmeHo1WXUzdEhcIixcIm5vUGFkZGluZ1wiOlwia3BETFhaU0QyS3AxOWg5c3VSTEFcIixcImFjdGl2ZVwiOlwiSXdJVGpHbjZ2VFp0ZUVLak5vWWNcIixcIm1lbnVJdGVtXCI6XCJsZG9SNnBHT3J0Z0hNWFNwbUg3RlwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcImowaDloZF9nbHZJOXhkT25hYXVZXCIsXCJub092ZXJsYXlcIjpcIlNMNDhTelp1ZktnZE1pR1kzWVROXCIsXCJtb2RhbFwiOlwiaFRYY1pldkd5eUkwQWN2cHJYVkpcIixcInRyYW5zcGFyZW50XCI6XCJpYnFsb0cxSHhIeDNzdGRrVlpTalwiLFwibm9TaGFkb3dcIjpcIklFbzV2RWVmdHZMcG13aTBWeWpEXCIsXCJtb2RhbEJ1dHRvblwiOlwiRm9QZkMzajdjSWcyQllmenFRR0VcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJudW1wYWRcIjpcIkdldmJiRzNEMFIzNHhHVUZzNVkxXCIsXCJudW1iZXJzXCI6XCJmTDVJMVdLWENhVTl2ckJHeUpCNFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcIm92ZXJsYXlcIjpcIkRoNmpzUTE1ZU15ZHNTTVRDd1J3XCIsXCJ0cmFuc3BhcmVudFwiOlwiV1Q2T1BsakMycWZiQVdzazB6NHJcIixcImZpeGVkXCI6XCJwdTZzOU1qNVQxWUlnbXY0TE9uQ1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImhlYWRlclwiOlwiV1NZWUJBejUzZGhxdUlPWlBXQlBcIixcImxhYmVsXCI6XCJiNTVoeVowb0hsMHM0T3Q5T2h3TVwiLFwiZXhwYW5kZWRcIjpcIk4zQXpPNWtabGg0SEFQa25uWXpxXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJTbUNpNHhPeEVzTHRpNjFHb1lrNFwiLFwic2VsZWN0ZWRcIjpcIl80ckp0Q09acG5mM3huOHBtRnZDUVwiLFwiY2hlY2tib3hDb250YWluZXJcIjpcIk1TWFpGN3hjQzVhb3FIbHFwSTBnXCIsXCJjaGVja2JveFwiOlwiTkpqcTlfZ0FlZERSck9FX1hXRTFcIixcImxhYmVsXCI6XCJ2d21ETGM5NkQ5dFhnV3FzNElLelwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZTN5WEpCcllUVzRzVlpLWTJORm1cIixcInNlbGVjdEFsbENvbnRhaW5lclwiOlwiY3pITGE0TDN0UkNKRENpREI2QXpcIixcImNoZWNrYm94XCI6XCJpS3FqV1VkOTZ6U3A5eG1vY1h6a1wiLFwiY2hlY2tib3hDb250YWluZXJcIjpcImF4aWg5RW51eksxZndocVlEVlJBXCIsXCJsYWJlbFwiOlwicTVXczlocjhaTVg3ZlN2REtfcW5cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcIml4M2FaV01lTjVBbDRVSzh5ZWJKXCIsXCJpY29uU2VhcmNoQ29udGFpbmVyXCI6XCJaNUxQeDQ3eWJFS2VYMjlYQllCQ1wiLFwicmVzZXRCdXR0b25cIjpcImhqVDlaWHZtdmM1UVVydXd6OEVsXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1wiY29udGFpbmVyXCI6XCJFVEdiWFRkWUFwMEc0MFRKUExuS1wiLFwiaGVhZGVyXCI6XCJYQW9KaHhUQXBjUjlsR2VneXA5QVwiLFwiY29udGVudFwiOlwiclJEV3YycXF3U3JCeTNldlo3RHdcIixcInNlYXJjaENvbnRhaW5lclwiOlwieU9FQ0RKZURWVDV6NVlhWHBlSm5cIixcImV4cGFuZGVkXCI6XCJCcnhydEQzYU1YN0lVNTJyQTIyMFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiXzF2NGxqT29HWHFUSlRuZU1OUHpcIixcInBsYWNlaG9sZGVyXCI6XCJkZGxSaWRuSXpZaFFDOURHcGdJdFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZzVPUjBhT05PVzFPczF4dGtOSGlcIixcInRhYmxlXCI6XCJzTVIxVmI2MlhFdk9PV1JyV2M0UVwiLFwicGxhY2Vob2xkZXJDb250YWluZXJcIjpcIl83eDJ6N3Bfa2JRT0xEbUVYNTRpQVwiLFwic2Nyb2xsYmFyQ29udGFpbmVyXCI6XCJFQUgxNFhQZUpCdURXR3A1TlZZb1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiajRQaWdKT0w1RGd6RDhPWXhza3pcIixcImlzSGVhZGVyU3RpY2t5XCI6XCJBWVJfNEhlb2xBakpDT3NsM0haSlwiLFwiYm9yZGVyQm90dG9tXCI6XCJpWnJEM3RIMTJ6RElGT1d2SlVEN1wifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcInRhYmxlSGVhZGVyQ2VsbFwiOlwiSmNBMVZ6VjRNd1ZRM05FaDB2ekVcIixcInNvcnRJY29uVmlzaWJsZVwiOlwiSXE3T3hzUXpMMDZ4ajk4TzBMcUpcIixcInNvcnRhYmxlXCI6XCJWU1RTaFk3TFRoX0lJam5yUF9fbFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiZE92aWdTZ2h4eVE0Q2JiQ01rQ1JcIixcImFjdGl2ZVwiOlwidHFuWWRZMEh0RGxtVzYxdGpHYlFcIixcImhhc0Fycm93XCI6XCJxcU82YTFqTkw2SFRKRzdIUjExdFwifTsiLCIvLyBleHRyYWN0ZWQgYnkgbWluaS1jc3MtZXh0cmFjdC1wbHVnaW5cbmV4cG9ydCBkZWZhdWx0IHtcImNvbnRhaW5lclwiOlwiQXZSN1dDRFJ4Q3d2UlVBX2o4MFBcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInpLRjM0YUt2WVpuYkx1WnpqRWVPXCIsXCJjbG9zZUJ1dHRvblwiOlwiWlpQUlpMVXE5TVF5aWZEOHgyakhcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0ZXh0SW5wdXRcIjpcIk5QWnJrc0NwblhWSlNxX3NuSGpSXCIsXCJzbWFsbFwiOlwialFHcmlRSlNhMDR6c29HMWEydTlcIixcIm1lZGl1bVwiOlwibFZvWTlEcDE3SE9CaW5NajBRN29cIixcImxhcmdlXCI6XCJRbFVhUGJYOEVhSWk3clo0RmI4b1wiLFwieGxhcmdlXCI6XCJyWVBPTTlmTnRWTGRQRnlXS2tHRVwiLFwibm9Cb3JkZXJcIjpcIktEVElOc0hkb2xZUmVTYkxjb29IXCJ9OyIsIi8vIGV4dHJhY3RlZCBieSBtaW5pLWNzcy1leHRyYWN0LXBsdWdpblxuZXhwb3J0IGRlZmF1bHQge1widG9hc3RcIjpcInpGaXVBVGdzU0I0MlZkRW1jSlpZXCIsXCJlbnRyYW5jZVwiOlwiUjhycE9VT3RuZ1lPRXQ3STBwR01cIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJ0b2FzdENvbnRhaW5lclwiOlwiWGxMUU9lNDc0T3RCaWFjX2dVN0hcIn07IiwiLy8gZXh0cmFjdGVkIGJ5IG1pbmktY3NzLWV4dHJhY3QtcGx1Z2luXG5leHBvcnQgZGVmYXVsdCB7XCJjb250YWluZXJcIjpcInlZOUhWNDBJVFRXZ0FWOHFMdzF3XCIsXCJoYXNPdmVybGF5XCI6XCJ6dWI1YnFkVlhtNE5GeHBJNEhCZlwiLFwidmlkZW9cIjpcIk1WQ0RWamZnbUhFN1FlbWNZeEdsXCIsXCJjb3ZlclwiOlwiVjRuRWNtMTc5dlplMk1MZ1JWYU1cIixcImNvbnRhaW5cIjpcInUyX01mZUNqTVNsX2FCTkpuNW5MXCIsXCJzdHJldGNoSG9yaXpvbnRhbGx5XCI6XCJsamZzWXM4QlFxbGVLemJMa2thZFwiLFwic3RyZXRjaFZlcnRpY2FsbHlcIjpcIkhKdFJxYkFGTE9uWFZ5R3o4aUZVXCIsXCJvdmVybGF5XCI6XCJBTEhoT0hBZUxsQkR5MURwWXFpdlwifTsiLCIvKiohIFxuICogaG90a2V5cy1qcyB2My45LjQgXG4gKiBBIHNpbXBsZSBtaWNyby1saWJyYXJ5IGZvciBkZWZpbmluZyBhbmQgZGlzcGF0Y2hpbmcga2V5Ym9hcmQgc2hvcnRjdXRzLiBJdCBoYXMgbm8gZGVwZW5kZW5jaWVzLiBcbiAqIFxuICogQ29weXJpZ2h0IChjKSAyMDIyIGtlbm55IHdvbmcgPHdvd29ob29AcXEuY29tPiBcbiAqIGh0dHA6Ly9qYXl3Y2psb3ZlLmdpdGh1Yi5pby9ob3RrZXlzIFxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIFxuICovXG5cbnZhciBpc2ZmID0gdHlwZW9mIG5hdmlnYXRvciAhPT0gJ3VuZGVmaW5lZCcgPyBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpID4gMCA6IGZhbHNlOyAvLyDnu5Hlrprkuovku7ZcblxuZnVuY3Rpb24gYWRkRXZlbnQob2JqZWN0LCBldmVudCwgbWV0aG9kLCB1c2VDYXB0dXJlKSB7XG4gIGlmIChvYmplY3QuYWRkRXZlbnRMaXN0ZW5lcikge1xuICAgIG9iamVjdC5hZGRFdmVudExpc3RlbmVyKGV2ZW50LCBtZXRob2QsIHVzZUNhcHR1cmUpO1xuICB9IGVsc2UgaWYgKG9iamVjdC5hdHRhY2hFdmVudCkge1xuICAgIG9iamVjdC5hdHRhY2hFdmVudChcIm9uXCIuY29uY2F0KGV2ZW50KSwgZnVuY3Rpb24gKCkge1xuICAgICAgbWV0aG9kKHdpbmRvdy5ldmVudCk7XG4gICAgfSk7XG4gIH1cbn0gLy8g5L+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/IHRydWUgOiBfcmVmMiRlbmFibGVkLFxuICAgICAgX3JlZjIkZW5hYmxlT25Db250ZW50ID0gX3JlZjIuZW5hYmxlT25Db250ZW50RWRpdGFibGUsXG4gICAgICBlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSA9IF9yZWYyJGVuYWJsZU9uQ29udGVudCA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcmVmMiRlbmFibGVPbkNvbnRlbnQ7XG5cbiAgdmFyIHJlZiA9IHVzZVJlZihudWxsKTsgLy8gVGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIGNhbGxiYWNrIGRldGVybWluZXMgaWYgdGhlIGJyb3dzZXJzIGRlZmF1bHQgYmVoYXZpb3IgaXMgcHJldmVudGVkLlxuXG4gIHZhciBtZW1vaXNlZENhbGxiYWNrID0gdXNlQ2FsbGJhY2soZnVuY3Rpb24gKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCkge1xuICAgIHZhciBfa2V5Ym9hcmRFdmVudCR0YXJnZXQsIF9yZWYkY3VycmVudDtcblxuICAgIGlmIChmaWx0ZXIgJiYgIWZpbHRlcihrZXlib2FyZEV2ZW50KSkge1xuICAgICAgcmV0dXJuICFmaWx0ZXJQcmV2ZW50RGVmYXVsdDtcbiAgICB9IC8vIENoZWNrIHdoZXRoZXIgdGhlIGhvdGtleXMgd2FzIHRyaWdnZXJlZCBpbnNpZGUgYW4gaW5wdXQgYW5kIHRoYXQgaW5wdXQgaXMgZW5hYmxlZCBvciBpZiBpdCB3YXMgdHJpZ2dlcmVkIGJ5IGEgY29udGVudCBlZGl0YWJsZSB0YWcgYW5kIGl0IGlzIGVuYWJsZWQuXG5cblxuICAgIGlmIChpc0tleWJvYXJkRXZlbnRUcmlnZ2VyZWRCeUlucHV0KGtleWJvYXJkRXZlbnQpICYmICF0YWdGaWx0ZXIoa2V5Ym9hcmRFdmVudCwgZW5hYmxlT25UYWdzKSB8fCAoX2tleWJvYXJkRXZlbnQkdGFyZ2V0ID0ga2V5Ym9hcmRFdmVudC50YXJnZXQpICE9IG51bGwgJiYgX2tleWJvYXJkRXZlbnQkdGFyZ2V0LmlzQ29udGVudEVkaXRhYmxlICYmICFlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKHJlZi5jdXJyZW50ID09PSBudWxsIHx8IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHJlZi5jdXJyZW50IHx8IChfcmVmJGN1cnJlbnQgPSByZWYuY3VycmVudCkgIT0gbnVsbCAmJiBfcmVmJGN1cnJlbnQuY29udGFpbnMoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCkpIHtcbiAgICAgIGNhbGxiYWNrKGtleWJvYXJkRXZlbnQsIGhvdGtleXNFdmVudCk7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH0sIGRlcHMgPyBbcmVmLCBlbmFibGVPblRhZ3MsIGZpbHRlcl0uY29uY2F0KGRlcHMpIDogW3JlZiwgZW5hYmxlT25UYWdzLCBmaWx0ZXJdKTtcbiAgdXNlRWZmZWN0KGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIWVuYWJsZWQpIHtcbiAgICAgIGhvdGtleXMudW5iaW5kKGtleXMsIG1lbW9pc2VkQ2FsbGJhY2spO1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gSW4gdGhpcyBjYXNlIGtleWRvd24gaXMgbGlrZWx5IHVuZGVmaW5lZCwgc28gd2Ugc2V0IGl0IHRvIGZhbHNlLCBzaW5jZSBob3RrZXlzIG5lZWRzIHRoZSBga2V5ZG93bmAga2V5IHRvIGhhdmUgYSB2YWx1ZS5cblxuXG4gICAgaWYgKGtleXVwICYmIGtleWRvd24gIT09IHRydWUpIHtcbiAgICAgIG9wdGlvbnMua2V5ZG93biA9IGZhbHNlO1xuICAgIH1cblxuICAgIGhvdGtleXMoa2V5cywgb3B0aW9ucyB8fCB7fSwgbWVtb2lzZWRDYWxsYmFjayk7XG4gICAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiBob3RrZXlzLnVuYmluZChrZXlzLCBtZW1vaXNlZENhbGxiYWNrKTtcbiAgICB9O1xuICB9LCBbbWVtb2lzZWRDYWxsYmFjaywga2V5cywgZW5hYmxlZF0pO1xuICByZXR1cm4gcmVmO1xufVxuXG52YXIgaXNIb3RrZXlQcmVzc2VkID0gaG90a2V5cy5pc1ByZXNzZWQ7XG5cbmV4cG9ydCB7IGlzSG90a2V5UHJlc3NlZCwgdXNlSG90a2V5cywgdXNlSXNIb3RrZXlQcmVzc2VkIH07XG4vLyMgc291cmNlTWFwcGluZ1VSTD1yZWFjdC1ob3RrZXlzLWhvb2suZXNtLmpzLm1hcFxuIiwiaW1wb3J0IHsgUHVyZUNvbXBvbmVudCB9IGZyb20gJ3JlYWN0JztcblxuZnVuY3Rpb24gaXNJbnRlZ2VyKHZhbHVlKSB7XG4gIHJldHVybiB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInICYmIGlzRmluaXRlKHZhbHVlKSAmJiBNYXRoLmZsb29yKHZhbHVlKSA9PT0gdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGlzUmFuZ2VWaXNpYmxlKF9yZWYpIHtcbiAgdmFyIGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICBsYXN0UmVuZGVyZWRTdG9wSW5kZXggPSBfcmVmLmxhc3RSZW5kZXJlZFN0b3BJbmRleCxcbiAgICAgIHN0YXJ0SW5kZXggPSBfcmVmLnN0YXJ0SW5kZXgsXG4gICAgICBzdG9wSW5kZXggPSBfcmVmLnN0b3BJbmRleDtcblxuICByZXR1cm4gIShzdGFydEluZGV4ID4gbGFzdFJlbmRlcmVkU3RvcEluZGV4IHx8IHN0b3BJbmRleCA8IGxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgpO1xufVxuXG5mdW5jdGlvbiBzY2FuRm9yVW5sb2FkZWRSYW5nZXMoX3JlZikge1xuICB2YXIgaXNJdGVtTG9hZGVkID0gX3JlZi5pc0l0ZW1Mb2FkZWQsXG4gICAgICBpdGVtQ291bnQgPSBfcmVmLml0ZW1Db3VudCxcbiAgICAgIG1pbmltdW1CYXRjaFNpemUgPSBfcmVmLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICBzdGFydEluZGV4ID0gX3JlZi5zdGFydEluZGV4LFxuICAgICAgc3RvcEluZGV4ID0gX3JlZi5zdG9wSW5kZXg7XG5cbiAgdmFyIHVubG9hZGVkUmFuZ2VzID0gW107XG5cbiAgdmFyIHJhbmdlU3RhcnRJbmRleCA9IG51bGw7XG4gIHZhciByYW5nZVN0b3BJbmRleCA9IG51bGw7XG5cbiAgZm9yICh2YXIgX2luZGV4ID0gc3RhcnRJbmRleDsgX2luZGV4IDw9IHN0b3BJbmRleDsgX2luZGV4KyspIHtcbiAgICB2YXIgbG9hZGVkID0gaXNJdGVtTG9hZGVkKF9pbmRleCk7XG5cbiAgICBpZiAoIWxvYWRlZCkge1xuICAgICAgcmFuZ2VTdG9wSW5kZXggPSBfaW5kZXg7XG4gICAgICBpZiAocmFuZ2VTdGFydEluZGV4ID09PSBudWxsKSB7XG4gICAgICAgIHJhbmdlU3RhcnRJbmRleCA9IF9pbmRleDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHJhbmdlU3RvcEluZGV4ICE9PSBudWxsKSB7XG4gICAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuXG4gICAgICByYW5nZVN0YXJ0SW5kZXggPSByYW5nZVN0b3BJbmRleCA9IG51bGw7XG4gICAgfVxuICB9XG5cbiAgLy8gSWYgOnJhbmdlU3RvcEluZGV4IGlzIG5vdCBudWxsIGl0IG1lYW5zIHdlIGhhdmVuJ3QgcmFuIG91dCBvZiB1bmxvYWRlZCByb3dzLlxuICAvLyBTY2FuIGZvcndhcmQgdG8gdHJ5IGZpbGxpbmcgb3VyIDptaW5pbXVtQmF0Y2hTaXplLlxuICBpZiAocmFuZ2VTdG9wSW5kZXggIT09IG51bGwpIHtcbiAgICB2YXIgcG90ZW50aWFsU3RvcEluZGV4ID0gTWF0aC5taW4oTWF0aC5tYXgocmFuZ2VTdG9wSW5kZXgsIHJhbmdlU3RhcnRJbmRleCArIG1pbmltdW1CYXRjaFNpemUgLSAxKSwgaXRlbUNvdW50IC0gMSk7XG5cbiAgICBmb3IgKHZhciBfaW5kZXgyID0gcmFuZ2VTdG9wSW5kZXggKyAxOyBfaW5kZXgyIDw9IHBvdGVudGlhbFN0b3BJbmRleDsgX2luZGV4MisrKSB7XG4gICAgICBpZiAoIWlzSXRlbUxvYWRlZChfaW5kZXgyKSkge1xuICAgICAgICByYW5nZVN0b3BJbmRleCA9IF9pbmRleDI7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG5cbiAgICB1bmxvYWRlZFJhbmdlcy5wdXNoKHJhbmdlU3RhcnRJbmRleCwgcmFuZ2VTdG9wSW5kZXgpO1xuICB9XG5cbiAgLy8gQ2hlY2sgdG8gc2VlIGlmIG91ciBmaXJzdCByYW5nZSBlbmRlZCBwcmVtYXR1cmVseS5cbiAgLy8gSW4gdGhpcyBjYXNlIHdlIHNob3VsZCBzY2FuIGJhY2t3YXJkcyB0byB0cnkgZmlsbGluZyBvdXIgOm1pbmltdW1CYXRjaFNpemUuXG4gIGlmICh1bmxvYWRlZFJhbmdlcy5sZW5ndGgpIHtcbiAgICB3aGlsZSAodW5sb2FkZWRSYW5nZXNbMV0gLSB1bmxvYWRlZFJhbmdlc1swXSArIDEgPCBtaW5pbXVtQmF0Y2hTaXplICYmIHVubG9hZGVkUmFuZ2VzWzBdID4gMCkge1xuICAgICAgdmFyIF9pbmRleDMgPSB1bmxvYWRlZFJhbmdlc1swXSAtIDE7XG5cbiAgICAgIGlmICghaXNJdGVtTG9hZGVkKF9pbmRleDMpKSB7XG4gICAgICAgIHVubG9hZGVkUmFuZ2VzWzBdID0gX2luZGV4MztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB1bmxvYWRlZFJhbmdlcztcbn1cblxudmFyIGNsYXNzQ2FsbENoZWNrID0gZnVuY3Rpb24gKGluc3RhbmNlLCBDb25zdHJ1Y3Rvcikge1xuICBpZiAoIShpbnN0YW5jZSBpbnN0YW5jZW9mIENvbnN0cnVjdG9yKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIik7XG4gIH1cbn07XG5cbnZhciBjcmVhdGVDbGFzcyA9IGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyh0YXJnZXQsIHByb3BzKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wcy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGRlc2NyaXB0b3IgPSBwcm9wc1tpXTtcbiAgICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IGRlc2NyaXB0b3IuZW51bWVyYWJsZSB8fCBmYWxzZTtcbiAgICAgIGRlc2NyaXB0b3IuY29uZmlndXJhYmxlID0gdHJ1ZTtcbiAgICAgIGlmIChcInZhbHVlXCIgaW4gZGVzY3JpcHRvcikgZGVzY3JpcHRvci53cml0YWJsZSA9IHRydWU7XG4gICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBkZXNjcmlwdG9yLmtleSwgZGVzY3JpcHRvcik7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uIChDb25zdHJ1Y3RvciwgcHJvdG9Qcm9wcywgc3RhdGljUHJvcHMpIHtcbiAgICBpZiAocHJvdG9Qcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIHByb3RvUHJvcHMpO1xuICAgIGlmIChzdGF0aWNQcm9wcykgZGVmaW5lUHJvcGVydGllcyhDb25zdHJ1Y3Rvciwgc3RhdGljUHJvcHMpO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfTtcbn0oKTtcblxudmFyIGluaGVyaXRzID0gZnVuY3Rpb24gKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIGlmICh0eXBlb2Ygc3VwZXJDbGFzcyAhPT0gXCJmdW5jdGlvblwiICYmIHN1cGVyQ2xhc3MgIT09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIiArIHR5cGVvZiBzdXBlckNsYXNzKTtcbiAgfVxuXG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcyAmJiBzdXBlckNsYXNzLnByb3RvdHlwZSwge1xuICAgIGNvbnN0cnVjdG9yOiB7XG4gICAgICB2YWx1ZTogc3ViQ2xhc3MsXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlXG4gICAgfVxuICB9KTtcbiAgaWYgKHN1cGVyQ2xhc3MpIE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZihzdWJDbGFzcywgc3VwZXJDbGFzcykgOiBzdWJDbGFzcy5fX3Byb3RvX18gPSBzdXBlckNsYXNzO1xufTtcblxudmFyIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4gPSBmdW5jdGlvbiAoc2VsZiwgY2FsbCkge1xuICBpZiAoIXNlbGYpIHtcbiAgICB0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG4gIH1cblxuICByZXR1cm4gY2FsbCAmJiAodHlwZW9mIGNhbGwgPT09IFwib2JqZWN0XCIgfHwgdHlwZW9mIGNhbGwgPT09IFwiZnVuY3Rpb25cIikgPyBjYWxsIDogc2VsZjtcbn07XG5cbnZhciBJbmZpbml0ZUxvYWRlciA9IGZ1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICBpbmhlcml0cyhJbmZpbml0ZUxvYWRlciwgX1B1cmVDb21wb25lbnQpO1xuXG4gIGZ1bmN0aW9uIEluZmluaXRlTG9hZGVyKCkge1xuICAgIHZhciBfcmVmO1xuXG4gICAgdmFyIF90ZW1wLCBfdGhpcywgX3JldDtcblxuICAgIGNsYXNzQ2FsbENoZWNrKHRoaXMsIEluZmluaXRlTG9hZGVyKTtcblxuICAgIGZvciAodmFyIF9sZW4gPSBhcmd1bWVudHMubGVuZ3RoLCBhcmdzID0gQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICAgIH1cblxuICAgIHJldHVybiBfcmV0ID0gKF90ZW1wID0gKF90aGlzID0gcG9zc2libGVDb25zdHJ1Y3RvclJldHVybih0aGlzLCAoX3JlZiA9IEluZmluaXRlTG9hZGVyLl9fcHJvdG9fXyB8fCBPYmplY3QuZ2V0UHJvdG90eXBlT2YoSW5maW5pdGVMb2FkZXIpKS5jYWxsLmFwcGx5KF9yZWYsIFt0aGlzXS5jb25jYXQoYXJncykpKSwgX3RoaXMpLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IC0xLCBfdGhpcy5fbGFzdFJlbmRlcmVkU3RvcEluZGV4ID0gLTEsIF90aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzID0gW10sIF90aGlzLl9vbkl0ZW1zUmVuZGVyZWQgPSBmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgIHZhciB2aXNpYmxlU3RhcnRJbmRleCA9IF9yZWYyLnZpc2libGVTdGFydEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdG9wSW5kZXggPSBfcmVmMi52aXNpYmxlU3RvcEluZGV4O1xuXG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICBpZiAoIWlzSW50ZWdlcih2aXNpYmxlU3RhcnRJbmRleCkgfHwgIWlzSW50ZWdlcih2aXNpYmxlU3RvcEluZGV4KSkge1xuICAgICAgICAgIGNvbnNvbGUud2FybignSW52YWxpZCBvbkl0ZW1zUmVuZGVyZWQgc2lnbmF0dXJlOyBwbGVhc2UgcmVmZXIgdG8gSW5maW5pdGVMb2FkZXIgZG9jdW1lbnRhdGlvbi4nKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgX3RoaXMucHJvcHMubG9hZE1vcmVSb3dzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgY29uc29sZS53YXJuKCdJbmZpbml0ZUxvYWRlciBcImxvYWRNb3JlUm93c1wiIHByb3AgaGFzIGJlZW4gcmVuYW1lZCB0byBcImxvYWRNb3JlSXRlbXNcIi4nKTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBfdGhpcy5fbGFzdFJlbmRlcmVkU3RhcnRJbmRleCA9IHZpc2libGVTdGFydEluZGV4O1xuICAgICAgX3RoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCA9IHZpc2libGVTdG9wSW5kZXg7XG5cbiAgICAgIF90aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHZpc2libGVTdGFydEluZGV4LCB2aXNpYmxlU3RvcEluZGV4KTtcbiAgICB9LCBfdGhpcy5fc2V0UmVmID0gZnVuY3Rpb24gKGxpc3RSZWYpIHtcbiAgICAgIF90aGlzLl9saXN0UmVmID0gbGlzdFJlZjtcbiAgICB9LCBfdGVtcCksIHBvc3NpYmxlQ29uc3RydWN0b3JSZXR1cm4oX3RoaXMsIF9yZXQpO1xuICB9XG5cbiAgY3JlYXRlQ2xhc3MoSW5maW5pdGVMb2FkZXIsIFt7XG4gICAga2V5OiAncmVzZXRsb2FkTW9yZUl0ZW1zQ2FjaGUnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiByZXNldGxvYWRNb3JlSXRlbXNDYWNoZSgpIHtcbiAgICAgIHZhciBhdXRvUmVsb2FkID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB1bmRlZmluZWQgPyBhcmd1bWVudHNbMF0gOiBmYWxzZTtcblxuICAgICAgdGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyA9IFtdO1xuXG4gICAgICBpZiAoYXV0b1JlbG9hZCkge1xuICAgICAgICB0aGlzLl9lbnN1cmVSb3dzTG9hZGVkKHRoaXMuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsIHRoaXMuX2xhc3RSZW5kZXJlZFN0b3BJbmRleCk7XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAnY29tcG9uZW50RGlkTW91bnQnLFxuICAgIHZhbHVlOiBmdW5jdGlvbiBjb21wb25lbnREaWRNb3VudCgpIHtcbiAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgICAgIGlmICh0aGlzLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICBjb25zb2xlLndhcm4oJ0ludmFsaWQgbGlzdCByZWY7IHBsZWFzZSByZWZlciB0byBJbmZpbml0ZUxvYWRlciBkb2N1bWVudGF0aW9uLicpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9LCB7XG4gICAga2V5OiAncmVuZGVyJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIGNoaWxkcmVuID0gdGhpcy5wcm9wcy5jaGlsZHJlbjtcblxuXG4gICAgICByZXR1cm4gY2hpbGRyZW4oe1xuICAgICAgICBvbkl0ZW1zUmVuZGVyZWQ6IHRoaXMuX29uSXRlbXNSZW5kZXJlZCxcbiAgICAgICAgcmVmOiB0aGlzLl9zZXRSZWZcbiAgICAgIH0pO1xuICAgIH1cbiAgfSwge1xuICAgIGtleTogJ19lbnN1cmVSb3dzTG9hZGVkJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2Vuc3VyZVJvd3NMb2FkZWQoc3RhcnRJbmRleCwgc3RvcEluZGV4KSB7XG4gICAgICB2YXIgX3Byb3BzID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpc0l0ZW1Mb2FkZWQgPSBfcHJvcHMuaXNJdGVtTG9hZGVkLFxuICAgICAgICAgIGl0ZW1Db3VudCA9IF9wcm9wcy5pdGVtQ291bnQsXG4gICAgICAgICAgX3Byb3BzJG1pbmltdW1CYXRjaFNpID0gX3Byb3BzLm1pbmltdW1CYXRjaFNpemUsXG4gICAgICAgICAgbWluaW11bUJhdGNoU2l6ZSA9IF9wcm9wcyRtaW5pbXVtQmF0Y2hTaSA9PT0gdW5kZWZpbmVkID8gMTAgOiBfcHJvcHMkbWluaW11bUJhdGNoU2ksXG4gICAgICAgICAgX3Byb3BzJHRocmVzaG9sZCA9IF9wcm9wcy50aHJlc2hvbGQsXG4gICAgICAgICAgdGhyZXNob2xkID0gX3Byb3BzJHRocmVzaG9sZCA9PT0gdW5kZWZpbmVkID8gMTUgOiBfcHJvcHMkdGhyZXNob2xkO1xuXG5cbiAgICAgIHZhciB1bmxvYWRlZFJhbmdlcyA9IHNjYW5Gb3JVbmxvYWRlZFJhbmdlcyh7XG4gICAgICAgIGlzSXRlbUxvYWRlZDogaXNJdGVtTG9hZGVkLFxuICAgICAgICBpdGVtQ291bnQ6IGl0ZW1Db3VudCxcbiAgICAgICAgbWluaW11bUJhdGNoU2l6ZTogbWluaW11bUJhdGNoU2l6ZSxcbiAgICAgICAgc3RhcnRJbmRleDogTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIHRocmVzaG9sZCksXG4gICAgICAgIHN0b3BJbmRleDogTWF0aC5taW4oaXRlbUNvdW50IC0gMSwgc3RvcEluZGV4ICsgdGhyZXNob2xkKVxuICAgICAgfSk7XG5cbiAgICAgIC8vIEF2b2lkIGNhbGxpbmcgbG9hZC1yb3dzIHVubGVzcyByYW5nZSBoYXMgY2hhbmdlZC5cbiAgICAgIC8vIFRoaXMgc2hvdWxkbid0IGJlIHN0cmljdGx5IG5lY2Vzc2FyeSwgYnV0IGlzIG1heWJlIG5pY2UgdG8gZG8uXG4gICAgICBpZiAodGhpcy5fbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcy5sZW5ndGggIT09IHVubG9hZGVkUmFuZ2VzLmxlbmd0aCB8fCB0aGlzLl9tZW1vaXplZFVubG9hZGVkUmFuZ2VzLnNvbWUoZnVuY3Rpb24gKHN0YXJ0T3JTdG9wLCBpbmRleCkge1xuICAgICAgICByZXR1cm4gdW5sb2FkZWRSYW5nZXNbaW5kZXhdICE9PSBzdGFydE9yU3RvcDtcbiAgICAgIH0pKSB7XG4gICAgICAgIHRoaXMuX21lbW9pemVkVW5sb2FkZWRSYW5nZXMgPSB1bmxvYWRlZFJhbmdlcztcbiAgICAgICAgdGhpcy5fbG9hZFVubG9hZGVkUmFuZ2VzKHVubG9hZGVkUmFuZ2VzKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sIHtcbiAgICBrZXk6ICdfbG9hZFVubG9hZGVkUmFuZ2VzJyxcbiAgICB2YWx1ZTogZnVuY3Rpb24gX2xvYWRVbmxvYWRlZFJhbmdlcyh1bmxvYWRlZFJhbmdlcykge1xuICAgICAgdmFyIF90aGlzMiA9IHRoaXM7XG5cbiAgICAgIC8vIGxvYWRNb3JlUm93cyB3YXMgcmVuYW1lZCB0byBsb2FkTW9yZUl0ZW1zIGluIHYxLjAuMzsgd2lsbCBiZSByZW1vdmVkIGluIHYyLjBcbiAgICAgIHZhciBsb2FkTW9yZUl0ZW1zID0gdGhpcy5wcm9wcy5sb2FkTW9yZUl0ZW1zIHx8IHRoaXMucHJvcHMubG9hZE1vcmVSb3dzO1xuXG4gICAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChpKSB7XG4gICAgICAgIHZhciBzdGFydEluZGV4ID0gdW5sb2FkZWRSYW5nZXNbaV07XG4gICAgICAgIHZhciBzdG9wSW5kZXggPSB1bmxvYWRlZFJhbmdlc1tpICsgMV07XG4gICAgICAgIHZhciBwcm9taXNlID0gbG9hZE1vcmVJdGVtcyhzdGFydEluZGV4LCBzdG9wSW5kZXgpO1xuICAgICAgICBpZiAocHJvbWlzZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbWlzZS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIC8vIFJlZnJlc2ggdGhlIHZpc2libGUgcm93cyBpZiBhbnkgb2YgdGhlbSBoYXZlIGp1c3QgYmVlbiBsb2FkZWQuXG4gICAgICAgICAgICAvLyBPdGhlcndpc2UgdGhleSB3aWxsIHJlbWFpbiBpbiB0aGVpciB1bmxvYWRlZCB2aXN1YWwgc3RhdGUuXG4gICAgICAgICAgICBpZiAoaXNSYW5nZVZpc2libGUoe1xuICAgICAgICAgICAgICBsYXN0UmVuZGVyZWRTdGFydEluZGV4OiBfdGhpczIuX2xhc3RSZW5kZXJlZFN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIGxhc3RSZW5kZXJlZFN0b3BJbmRleDogX3RoaXMyLl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgsXG4gICAgICAgICAgICAgIHN0YXJ0SW5kZXg6IHN0YXJ0SW5kZXgsXG4gICAgICAgICAgICAgIHN0b3BJbmRleDogc3RvcEluZGV4XG4gICAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgICAvLyBIYW5kbGUgYW4gdW5tb3VudCB3aGlsZSBwcm9taXNlcyBhcmUgc3RpbGwgaW4gZmxpZ2h0LlxuICAgICAgICAgICAgICBpZiAoX3RoaXMyLl9saXN0UmVmID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAvLyBSZXNpemUgY2FjaGVkIHJvdyBzaXplcyBmb3IgVmFyaWFibGVTaXplTGlzdCxcbiAgICAgICAgICAgICAgLy8gb3RoZXJ3aXNlIGp1c3QgcmUtcmVuZGVyIHRoZSBsaXN0LlxuICAgICAgICAgICAgICBpZiAodHlwZW9mIF90aGlzMi5fbGlzdFJlZi5yZXNldEFmdGVySW5kZXggPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBfdGhpczIuX2xpc3RSZWYucmVzZXRBZnRlckluZGV4KHN0YXJ0SW5kZXgsIHRydWUpO1xuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEhBQ0sgcmVzZXQgdGVtcG9yYXJpbHkgY2FjaGVkIGl0ZW0gc3R5bGVzIHRvIGZvcmNlIFB1cmVDb21wb25lbnQgdG8gcmUtcmVuZGVyLlxuICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgcHJldHR5IGdyb3NzLCBidXQgSSdtIG9rYXkgd2l0aCBpdCBmb3Igbm93LlxuICAgICAgICAgICAgICAgIC8vIERvbid0IGp1ZGdlIG1lLlxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgX3RoaXMyLl9saXN0UmVmLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIF90aGlzMi5fbGlzdFJlZi5mb3JjZVVwZGF0ZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH07XG5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdW5sb2FkZWRSYW5nZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgX2xvb3AoaSk7XG4gICAgICB9XG4gICAgfVxuICB9XSk7XG4gIHJldHVybiBJbmZpbml0ZUxvYWRlcjtcbn0oUHVyZUNvbXBvbmVudCk7XG5cbmV4cG9ydCBkZWZhdWx0IEluZmluaXRlTG9hZGVyO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gX2V4dGVuZHMoKSB7XG4gIF9leHRlbmRzID0gT2JqZWN0LmFzc2lnbiB8fCBmdW5jdGlvbiAodGFyZ2V0KSB7XG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBzb3VyY2UgPSBhcmd1bWVudHNbaV07XG5cbiAgICAgIGZvciAodmFyIGtleSBpbiBzb3VyY2UpIHtcbiAgICAgICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzb3VyY2UsIGtleSkpIHtcbiAgICAgICAgICB0YXJnZXRba2V5XSA9IHNvdXJjZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHRhcmdldDtcbiAgfTtcblxuICByZXR1cm4gX2V4dGVuZHMuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKHNlbGYpIHtcbiAgaWYgKHNlbGYgPT09IHZvaWQgMCkge1xuICAgIHRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbiAgfVxuXG4gIHJldHVybiBzZWxmO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9pbmhlcml0c0xvb3NlKHN1YkNsYXNzLCBzdXBlckNsYXNzKSB7XG4gIHN1YkNsYXNzLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDbGFzcy5wcm90b3R5cGUpO1xuICBzdWJDbGFzcy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBzdWJDbGFzcztcbiAgc3ViQ2xhc3MuX19wcm90b19fID0gc3VwZXJDbGFzcztcbn0iLCJ2YXIgc2FmZUlzTmFOID0gTnVtYmVyLmlzTmFOIHx8XG4gICAgZnVuY3Rpb24gcG9ueWZpbGwodmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgJiYgdmFsdWUgIT09IHZhbHVlO1xuICAgIH07XG5mdW5jdGlvbiBpc0VxdWFsKGZpcnN0LCBzZWNvbmQpIHtcbiAgICBpZiAoZmlyc3QgPT09IHNlY29uZCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgaWYgKHNhZmVJc05hTihmaXJzdCkgJiYgc2FmZUlzTmFOKHNlY29uZCkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIHJldHVybiBmYWxzZTtcbn1cbmZ1bmN0aW9uIGFyZUlucHV0c0VxdWFsKG5ld0lucHV0cywgbGFzdElucHV0cykge1xuICAgIGlmIChuZXdJbnB1dHMubGVuZ3RoICE9PSBsYXN0SW5wdXRzLmxlbmd0aCkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbmV3SW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmICghaXNFcXVhbChuZXdJbnB1dHNbaV0sIGxhc3RJbnB1dHNbaV0pKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIG1lbW9pemVPbmUocmVzdWx0Rm4sIGlzRXF1YWwpIHtcbiAgICBpZiAoaXNFcXVhbCA9PT0gdm9pZCAwKSB7IGlzRXF1YWwgPSBhcmVJbnB1dHNFcXVhbDsgfVxuICAgIHZhciBsYXN0VGhpcztcbiAgICB2YXIgbGFzdEFyZ3MgPSBbXTtcbiAgICB2YXIgbGFzdFJlc3VsdDtcbiAgICB2YXIgY2FsbGVkT25jZSA9IGZhbHNlO1xuICAgIGZ1bmN0aW9uIG1lbW9pemVkKCkge1xuICAgICAgICB2YXIgbmV3QXJncyA9IFtdO1xuICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykge1xuICAgICAgICAgICAgbmV3QXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjYWxsZWRPbmNlICYmIGxhc3RUaGlzID09PSB0aGlzICYmIGlzRXF1YWwobmV3QXJncywgbGFzdEFyZ3MpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdFJlc3VsdDtcbiAgICAgICAgfVxuICAgICAgICBsYXN0UmVzdWx0ID0gcmVzdWx0Rm4uYXBwbHkodGhpcywgbmV3QXJncyk7XG4gICAgICAgIGNhbGxlZE9uY2UgPSB0cnVlO1xuICAgICAgICBsYXN0VGhpcyA9IHRoaXM7XG4gICAgICAgIGxhc3RBcmdzID0gbmV3QXJncztcbiAgICAgICAgcmV0dXJuIGxhc3RSZXN1bHQ7XG4gICAgfVxuICAgIHJldHVybiBtZW1vaXplZDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgbWVtb2l6ZU9uZTtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHNvdXJjZSwgZXhjbHVkZWQpIHtcbiAgaWYgKHNvdXJjZSA9PSBudWxsKSByZXR1cm4ge307XG4gIHZhciB0YXJnZXQgPSB7fTtcbiAgdmFyIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpO1xuICB2YXIga2V5LCBpO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBzb3VyY2VLZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAga2V5ID0gc291cmNlS2V5c1tpXTtcbiAgICBpZiAoZXhjbHVkZWQuaW5kZXhPZihrZXkpID49IDApIGNvbnRpbnVlO1xuICAgIHRhcmdldFtrZXldID0gc291cmNlW2tleV07XG4gIH1cblxuICByZXR1cm4gdGFyZ2V0O1xufSIsImltcG9ydCBfZXh0ZW5kcyBmcm9tICdAYmFiZWwvcnVudGltZS9oZWxwZXJzL2VzbS9leHRlbmRzJztcbmltcG9ydCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL2Fzc2VydFRoaXNJbml0aWFsaXplZCc7XG5pbXBvcnQgX2luaGVyaXRzTG9vc2UgZnJvbSAnQGJhYmVsL3J1bnRpbWUvaGVscGVycy9lc20vaW5oZXJpdHNMb29zZSc7XG5pbXBvcnQgbWVtb2l6ZU9uZSBmcm9tICdtZW1vaXplLW9uZSc7XG5pbXBvcnQgeyBjcmVhdGVFbGVtZW50LCBQdXJlQ29tcG9uZW50IH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlIGZyb20gJ0BiYWJlbC9ydW50aW1lL2hlbHBlcnMvZXNtL29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UnO1xuXG4vLyBBbmltYXRpb24gZnJhbWUgYmFzZWQgaW1wbGVtZW50YXRpb24gb2Ygc2V0VGltZW91dC5cbi8vIEluc3BpcmVkIGJ5IEpvZSBMYW1iZXJ0LCBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9qb2VsYW1iZXJ0LzEwMDIxMTYjZmlsZS1yZXF1ZXN0dGltZW91dC1qc1xudmFyIGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID0gdHlwZW9mIHBlcmZvcm1hbmNlID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgcGVyZm9ybWFuY2Uubm93ID09PSAnZnVuY3Rpb24nO1xudmFyIG5vdyA9IGhhc05hdGl2ZVBlcmZvcm1hbmNlTm93ID8gZnVuY3Rpb24gKCkge1xuICByZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7XG59IDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gRGF0ZS5ub3coKTtcbn07XG5mdW5jdGlvbiBjYW5jZWxUaW1lb3V0KHRpbWVvdXRJRCkge1xuICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aW1lb3V0SUQuaWQpO1xufVxuZnVuY3Rpb24gcmVxdWVzdFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5KSB7XG4gIHZhciBzdGFydCA9IG5vdygpO1xuXG4gIGZ1bmN0aW9uIHRpY2soKSB7XG4gICAgaWYgKG5vdygpIC0gc3RhcnQgPj0gZGVsYXkpIHtcbiAgICAgIGNhbGxiYWNrLmNhbGwobnVsbCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRpbWVvdXRJRC5pZCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSh0aWNrKTtcbiAgICB9XG4gIH1cblxuICB2YXIgdGltZW91dElEID0ge1xuICAgIGlkOiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGljaylcbiAgfTtcbiAgcmV0dXJuIHRpbWVvdXRJRDtcbn1cblxudmFyIHNpemUgPSAtMTsgLy8gVGhpcyB1dGlsaXR5IGNvcGllZCBmcm9tIFwiZG9tLWhlbHBlcnNcIiBwYWNrYWdlLlxuXG5mdW5jdGlvbiBnZXRTY3JvbGxiYXJTaXplKHJlY2FsY3VsYXRlKSB7XG4gIGlmIChyZWNhbGN1bGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgcmVjYWxjdWxhdGUgPSBmYWxzZTtcbiAgfVxuXG4gIGlmIChzaXplID09PSAtMSB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgc3R5bGUgPSBkaXYuc3R5bGU7XG4gICAgc3R5bGUud2lkdGggPSAnNTBweCc7XG4gICAgc3R5bGUuaGVpZ2h0ID0gJzUwcHgnO1xuICAgIHN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpO1xuICAgIHNpemUgPSBkaXYub2Zmc2V0V2lkdGggLSBkaXYuY2xpZW50V2lkdGg7XG4gICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpO1xuICB9XG5cbiAgcmV0dXJuIHNpemU7XG59XG52YXIgY2FjaGVkUlRMUmVzdWx0ID0gbnVsbDsgLy8gVFJJQ0tZIEFjY29yZGluZyB0byB0aGUgc3BlYywgc2Nyb2xsTGVmdCBzaG91bGQgYmUgbmVnYXRpdmUgZm9yIFJUTCBhbGlnbmVkIGVsZW1lbnRzLlxuLy8gQ2hyb21lIGRvZXMgbm90IHNlZW0gdG8gYWRoZXJlOyBpdHMgc2Nyb2xsTGVmdCB2YWx1ZXMgYXJlIHBvc2l0aXZlIChtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4vLyBTYWZhcmkncyBlbGFzdGljIGJvdW5jZSBtYWtlcyBkZXRlY3RpbmcgdGhpcyBldmVuIG1vcmUgY29tcGxpY2F0ZWQgd3J0IHBvdGVudGlhbCBmYWxzZSBwb3NpdGl2ZXMuXG4vLyBUaGUgc2FmZXN0IHdheSB0byBjaGVjayB0aGlzIGlzIHRvIGludGVudGlvbmFsbHkgc2V0IGEgbmVnYXRpdmUgb2Zmc2V0LFxuLy8gYW5kIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIHN1YnNlcXVlbnQgXCJzY3JvbGxcIiBldmVudCBtYXRjaGVzIHRoZSBuZWdhdGl2ZSBvZmZzZXQuXG4vLyBJZiBpdCBkb2VzIG5vdCBtYXRjaCwgdGhlbiB3ZSBjYW4gYXNzdW1lIGEgbm9uLXN0YW5kYXJkIFJUTCBzY3JvbGwgaW1wbGVtZW50YXRpb24uXG5cbmZ1bmN0aW9uIGdldFJUTE9mZnNldFR5cGUocmVjYWxjdWxhdGUpIHtcbiAgaWYgKHJlY2FsY3VsYXRlID09PSB2b2lkIDApIHtcbiAgICByZWNhbGN1bGF0ZSA9IGZhbHNlO1xuICB9XG5cbiAgaWYgKGNhY2hlZFJUTFJlc3VsdCA9PT0gbnVsbCB8fCByZWNhbGN1bGF0ZSkge1xuICAgIHZhciBvdXRlckRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIHZhciBvdXRlclN0eWxlID0gb3V0ZXJEaXYuc3R5bGU7XG4gICAgb3V0ZXJTdHlsZS53aWR0aCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLmhlaWdodCA9ICc1MHB4JztcbiAgICBvdXRlclN0eWxlLm92ZXJmbG93ID0gJ3Njcm9sbCc7XG4gICAgb3V0ZXJTdHlsZS5kaXJlY3Rpb24gPSAncnRsJztcbiAgICB2YXIgaW5uZXJEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICB2YXIgaW5uZXJTdHlsZSA9IGlubmVyRGl2LnN0eWxlO1xuICAgIGlubmVyU3R5bGUud2lkdGggPSAnMTAwcHgnO1xuICAgIGlubmVyU3R5bGUuaGVpZ2h0ID0gJzEwMHB4JztcbiAgICBvdXRlckRpdi5hcHBlbmRDaGlsZChpbm5lckRpdik7XG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChvdXRlckRpdik7XG5cbiAgICBpZiAob3V0ZXJEaXYuc2Nyb2xsTGVmdCA+IDApIHtcbiAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICdwb3NpdGl2ZS1kZXNjZW5kaW5nJztcbiAgICB9IGVsc2Uge1xuICAgICAgb3V0ZXJEaXYuc2Nyb2xsTGVmdCA9IDE7XG5cbiAgICAgIGlmIChvdXRlckRpdi5zY3JvbGxMZWZ0ID09PSAwKSB7XG4gICAgICAgIGNhY2hlZFJUTFJlc3VsdCA9ICduZWdhdGl2ZSc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjYWNoZWRSVExSZXN1bHQgPSAncG9zaXRpdmUtYXNjZW5kaW5nJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG91dGVyRGl2KTtcbiAgICByZXR1cm4gY2FjaGVkUlRMUmVzdWx0O1xuICB9XG5cbiAgcmV0dXJuIGNhY2hlZFJUTFJlc3VsdDtcbn1cblxudmFyIElTX1NDUk9MTElOR19ERUJPVU5DRV9JTlRFUlZBTCA9IDE1MDtcblxudmFyIGRlZmF1bHRJdGVtS2V5ID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoX3JlZikge1xuICB2YXIgY29sdW1uSW5kZXggPSBfcmVmLmNvbHVtbkluZGV4LFxuICAgICAgZGF0YSA9IF9yZWYuZGF0YSxcbiAgICAgIHJvd0luZGV4ID0gX3JlZi5yb3dJbmRleDtcbiAgcmV0dXJuIHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbn07IC8vIEluIERFViBtb2RlLCB0aGlzIFNldCBoZWxwcyB1cyBvbmx5IGxvZyBhIHdhcm5pbmcgb25jZSBwZXIgY29tcG9uZW50IGluc3RhbmNlLlxuLy8gVGhpcyBhdm9pZHMgc3BhbW1pbmcgdGhlIGNvbnNvbGUgZXZlcnkgdGltZSBhIHJlbmRlciBoYXBwZW5zLlxuXG5cbnZhciBkZXZXYXJuaW5nc092ZXJzY2FuQ291bnQgPSBudWxsO1xudmFyIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUgPSBudWxsO1xuXG5pZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICBpZiAodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHdpbmRvdy5XZWFrU2V0ICE9PSAndW5kZWZpbmVkJykge1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICAgIGRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50ID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gICAgZGV2V2FybmluZ3NUYWdOYW1lID0gLyojX19QVVJFX18qL25ldyBXZWFrU2V0KCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY3JlYXRlR3JpZENvbXBvbmVudChfcmVmMikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRDb2x1bW5PZmZzZXQgPSBfcmVmMi5nZXRDb2x1bW5PZmZzZXQsXG4gICAgICBnZXRDb2x1bW5TdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZjIuZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCxcbiAgICAgIGdldENvbHVtblN0b3BJbmRleEZvclN0YXJ0SW5kZXggPSBfcmVmMi5nZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4LFxuICAgICAgZ2V0Q29sdW1uV2lkdGggPSBfcmVmMi5nZXRDb2x1bW5XaWR0aCxcbiAgICAgIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoID0gX3JlZjIuZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCxcbiAgICAgIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCxcbiAgICAgIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCA9IF9yZWYyLmdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudCxcbiAgICAgIGdldFJvd0hlaWdodCA9IF9yZWYyLmdldFJvd0hlaWdodCxcbiAgICAgIGdldFJvd09mZnNldCA9IF9yZWYyLmdldFJvd09mZnNldCxcbiAgICAgIGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQgPSBfcmVmMi5nZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYyLmdldFJvd1N0b3BJbmRleEZvclN0YXJ0SW5kZXgsXG4gICAgICBpbml0SW5zdGFuY2VQcm9wcyA9IF9yZWYyLmluaXRJbnN0YW5jZVByb3BzLFxuICAgICAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSA9IF9yZWYyLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZjIudmFsaWRhdGVQcm9wcztcbiAgcmV0dXJuIF9jbGFzcyA9IC8qI19fUFVSRV9fKi9mdW5jdGlvbiAoX1B1cmVDb21wb25lbnQpIHtcbiAgICBfaW5oZXJpdHNMb29zZShHcmlkLCBfUHVyZUNvbXBvbmVudCk7XG5cbiAgICAvLyBBbHdheXMgdXNlIGV4cGxpY2l0IGNvbnN0cnVjdG9yIGZvciBSZWFjdCBjb21wb25lbnRzLlxuICAgIC8vIEl0IHByb2R1Y2VzIGxlc3MgY29kZSBhZnRlciB0cmFuc3BpbGF0aW9uLiAoIzI2KVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNvbnN0cnVjdG9yXG4gICAgZnVuY3Rpb24gR3JpZChwcm9wcykge1xuICAgICAgdmFyIF90aGlzO1xuXG4gICAgICBfdGhpcyA9IF9QdXJlQ29tcG9uZW50LmNhbGwodGhpcywgcHJvcHMpIHx8IHRoaXM7XG4gICAgICBfdGhpcy5faW5zdGFuY2VQcm9wcyA9IGluaXRJbnN0YW5jZVByb3BzKF90aGlzLnByb3BzLCBfYXNzZXJ0VGhpc0luaXRpYWxpemVkKF90aGlzKSk7XG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG4gICAgICBfdGhpcy5fb3V0ZXJSZWYgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5zdGF0ZSA9IHtcbiAgICAgICAgaW5zdGFuY2U6IF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpLFxuICAgICAgICBpc1Njcm9sbGluZzogZmFsc2UsXG4gICAgICAgIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJyxcbiAgICAgICAgc2Nyb2xsTGVmdDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJyA/IF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxMZWZ0IDogMCxcbiAgICAgICAgc2Nyb2xsVG9wOiB0eXBlb2YgX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicgPyBfdGhpcy5wcm9wcy5pbml0aWFsU2Nyb2xsVG9wIDogMCxcbiAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZSxcbiAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246ICdmb3J3YXJkJ1xuICAgICAgfTtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPbkl0ZW1zUmVuZGVyZWQgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LCBvdmVyc2NhblJvd1N0YXJ0SW5kZXgsIG92ZXJzY2FuUm93U3RvcEluZGV4LCB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleCwgdmlzaWJsZUNvbHVtblN0b3BJbmRleCwgdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIHZpc2libGVSb3dTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4OiBvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5TdG9wSW5kZXg6IG92ZXJzY2FuQ29sdW1uU3RvcEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RhcnRJbmRleDogb3ZlcnNjYW5Sb3dTdGFydEluZGV4LFxuICAgICAgICAgIG92ZXJzY2FuUm93U3RvcEluZGV4OiBvdmVyc2NhblJvd1N0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlQ29sdW1uU3RhcnRJbmRleDogdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZUNvbHVtblN0b3BJbmRleDogdmlzaWJsZUNvbHVtblN0b3BJbmRleCxcbiAgICAgICAgICB2aXNpYmxlUm93U3RhcnRJbmRleDogdmlzaWJsZVJvd1N0YXJ0SW5kZXgsXG4gICAgICAgICAgdmlzaWJsZVJvd1N0b3BJbmRleDogdmlzaWJsZVJvd1N0b3BJbmRleFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25TY3JvbGwgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChzY3JvbGxMZWZ0LCBzY3JvbGxUb3AsIGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3AsXG4gICAgICAgICAgdmVydGljYWxTY3JvbGxEaXJlY3Rpb246IHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gdm9pZCAwO1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlID0gZnVuY3Rpb24gKHJvd0luZGV4LCBjb2x1bW5JbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGNvbHVtbldpZHRoID0gX3RoaXMkcHJvcHMuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wcy5kaXJlY3Rpb24sXG4gICAgICAgICAgICByb3dIZWlnaHQgPSBfdGhpcyRwcm9wcy5yb3dIZWlnaHQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgY29sdW1uV2lkdGgsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgZGlyZWN0aW9uLCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIHJvd0hlaWdodCk7XG5cbiAgICAgICAgdmFyIGtleSA9IHJvd0luZGV4ICsgXCI6XCIgKyBjb2x1bW5JbmRleDtcbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShrZXkpKSB7XG4gICAgICAgICAgc3R5bGUgPSBpdGVtU3R5bGVDYWNoZVtrZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHZhciBfb2Zmc2V0ID0gZ2V0Q29sdW1uT2Zmc2V0KF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpO1xuXG4gICAgICAgICAgdmFyIGlzUnRsID0gZGlyZWN0aW9uID09PSAncnRsJztcbiAgICAgICAgICBpdGVtU3R5bGVDYWNoZVtrZXldID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogX29mZnNldCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IF9vZmZzZXQgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6IGdldFJvd09mZnNldChfdGhpcy5wcm9wcywgcm93SW5kZXgsIF90aGlzLl9pbnN0YW5jZVByb3BzKSxcbiAgICAgICAgICAgIGhlaWdodDogZ2V0Um93SGVpZ2h0KF90aGlzLnByb3BzLCByb3dJbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpLFxuICAgICAgICAgICAgd2lkdGg6IGdldENvbHVtbldpZHRoKF90aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKF8sIF9fLCBfX18pIHtcbiAgICAgICAgcmV0dXJuIHt9O1xuICAgICAgfSk7XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbCA9IGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICB2YXIgX2V2ZW50JGN1cnJlbnRUYXJnZXQgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuY2xpZW50SGVpZ2h0LFxuICAgICAgICAgICAgY2xpZW50V2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgIHNjcm9sbExlZnQgPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxMZWZ0LFxuICAgICAgICAgICAgc2Nyb2xsVG9wID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsVG9wLFxuICAgICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQuc2Nyb2xsSGVpZ2h0LFxuICAgICAgICAgICAgc2Nyb2xsV2lkdGggPSBfZXZlbnQkY3VycmVudFRhcmdldC5zY3JvbGxXaWR0aDtcblxuICAgICAgICBfdGhpcy5zZXRTdGF0ZShmdW5jdGlvbiAocHJldlN0YXRlKSB7XG4gICAgICAgICAgaWYgKHByZXZTdGF0ZS5zY3JvbGxMZWZ0ID09PSBzY3JvbGxMZWZ0ICYmIHByZXZTdGF0ZS5zY3JvbGxUb3AgPT09IHNjcm9sbFRvcCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uOyAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgLy8gU28gdGhlIHNpbXBsZXN0IHNvbHV0aW9uIGlzIHRvIGRldGVybWluZSB3aGljaCBicm93c2VyIGJlaGF2aW9yIHdlJ3JlIGRlYWxpbmcgd2l0aCwgYW5kIGNvbnZlcnQgYmFzZWQgb24gaXQuXG5cbiAgICAgICAgICB2YXIgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVkU2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgJ3Bvc2l0aXZlLWRlc2NlbmRpbmcnOlxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZWRTY3JvbGxMZWZ0ID0gc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCAtIHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSAvLyBQcmV2ZW50IFNhZmFyaSdzIGVsYXN0aWMgc2Nyb2xsaW5nIGZyb20gY2F1c2luZyB2aXN1YWwgc2hha2luZyB3aGVuIHNjcm9sbGluZyBwYXN0IGJvdW5kcy5cblxuXG4gICAgICAgICAgY2FsY3VsYXRlZFNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjYWxjdWxhdGVkU2Nyb2xsTGVmdCwgc2Nyb2xsV2lkdGggLSBjbGllbnRXaWR0aCkpO1xuICAgICAgICAgIHZhciBjYWxjdWxhdGVkU2Nyb2xsVG9wID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2Nyb2xsVG9wLCBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uOiBwcmV2U3RhdGUuc2Nyb2xsTGVmdCA8IHNjcm9sbExlZnQgPyAnZm9yd2FyZCcgOiAnYmFja3dhcmQnLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdDogY2FsY3VsYXRlZFNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxUb3A6IGNhbGN1bGF0ZWRTY3JvbGxUb3AsXG4gICAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IGZhbHNlXG4gICAgICAgICAgfTtcbiAgICAgICAgfSwgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgICAgfTtcblxuICAgICAgX3RoaXMuX291dGVyUmVmU2V0dGVyID0gZnVuY3Rpb24gKHJlZikge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSBfdGhpcy5wcm9wcy5vdXRlclJlZjtcbiAgICAgICAgX3RoaXMuX291dGVyUmVmID0gcmVmO1xuXG4gICAgICAgIGlmICh0eXBlb2Ygb3V0ZXJSZWYgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICBvdXRlclJlZihyZWYpO1xuICAgICAgICB9IGVsc2UgaWYgKG91dGVyUmVmICE9IG51bGwgJiYgdHlwZW9mIG91dGVyUmVmID09PSAnb2JqZWN0JyAmJiBvdXRlclJlZi5oYXNPd25Qcm9wZXJ0eSgnY3VycmVudCcpKSB7XG4gICAgICAgICAgb3V0ZXJSZWYuY3VycmVudCA9IHJlZjtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmIChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICAgIGNhbmNlbFRpbWVvdXQoX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgICB9XG5cbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSByZXF1ZXN0VGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZywgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nID0gZnVuY3Rpb24gKCkge1xuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IG51bGw7XG5cbiAgICAgICAgX3RoaXMuc2V0U3RhdGUoe1xuICAgICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZVxuICAgICAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgLy8gQ2xlYXIgc3R5bGUgY2FjaGUgYWZ0ZXIgc3RhdGUgdXBkYXRlIGhhcyBiZWVuIGNvbW1pdHRlZC5cbiAgICAgICAgICAvLyBUaGlzIHdheSB3ZSBkb24ndCBicmVhayBwdXJlIHNDVSBmb3IgaXRlbXMgdGhhdCBkb24ndCB1c2UgaXNTY3JvbGxpbmcgcGFyYW0uXG4gICAgICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcbiAgICAgICAgfSk7XG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gX3RoaXM7XG4gICAgfVxuXG4gICAgR3JpZC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMgPSBmdW5jdGlvbiBnZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpIHtcbiAgICAgIHZhbGlkYXRlU2hhcmVkUHJvcHMobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBHcmlkLnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKF9yZWYzKSB7XG4gICAgICB2YXIgc2Nyb2xsTGVmdCA9IF9yZWYzLnNjcm9sbExlZnQsXG4gICAgICAgICAgc2Nyb2xsVG9wID0gX3JlZjMuc2Nyb2xsVG9wO1xuXG4gICAgICBpZiAoc2Nyb2xsTGVmdCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgIH1cblxuICAgICAgaWYgKHNjcm9sbFRvcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAoc2Nyb2xsTGVmdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IHByZXZTdGF0ZS5zY3JvbGxMZWZ0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNjcm9sbFRvcCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgc2Nyb2xsVG9wID0gcHJldlN0YXRlLnNjcm9sbFRvcDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcmV2U3RhdGUuc2Nyb2xsTGVmdCA9PT0gc2Nyb2xsTGVmdCAmJiBwcmV2U3RhdGUuc2Nyb2xsVG9wID09PSBzY3JvbGxUb3ApIHtcbiAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbExlZnQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICBzY3JvbGxMZWZ0OiBzY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcDogc2Nyb2xsVG9wLFxuICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogdHJ1ZSxcbiAgICAgICAgICB2ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbFRvcCA8IHNjcm9sbFRvcCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCdcbiAgICAgICAgfTtcbiAgICAgIH0sIHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdEZWJvdW5jZWQpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uc2Nyb2xsVG9JdGVtID0gZnVuY3Rpb24gc2Nyb2xsVG9JdGVtKF9yZWY0KSB7XG4gICAgICB2YXIgX3JlZjQkYWxpZ24gPSBfcmVmNC5hbGlnbixcbiAgICAgICAgICBhbGlnbiA9IF9yZWY0JGFsaWduID09PSB2b2lkIDAgPyAnYXV0bycgOiBfcmVmNCRhbGlnbixcbiAgICAgICAgICBjb2x1bW5JbmRleCA9IF9yZWY0LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjQucm93SW5kZXg7XG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzMi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBoZWlnaHQgPSBfdGhpcyRwcm9wczIuaGVpZ2h0LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHMyLnJvd0NvdW50LFxuICAgICAgICAgIHdpZHRoID0gX3RoaXMkcHJvcHMyLndpZHRoO1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUuc2Nyb2xsTGVmdCxcbiAgICAgICAgICBzY3JvbGxUb3AgPSBfdGhpcyRzdGF0ZS5zY3JvbGxUb3A7XG4gICAgICB2YXIgc2Nyb2xsYmFyU2l6ZSA9IGdldFNjcm9sbGJhclNpemUoKTtcblxuICAgICAgaWYgKGNvbHVtbkluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29sdW1uSW5kZXggPSBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5JbmRleCwgY29sdW1uQ291bnQgLSAxKSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChyb3dJbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHJvd0luZGV4ID0gTWF0aC5tYXgoMCwgTWF0aC5taW4ocm93SW5kZXgsIHJvd0NvdW50IC0gMSkpO1xuICAgICAgfVxuXG4gICAgICB2YXIgZXN0aW1hdGVkVG90YWxIZWlnaHQgPSBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFdpZHRoID0gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aCh0aGlzLnByb3BzLCB0aGlzLl9pbnN0YW5jZVByb3BzKTsgLy8gVGhlIHNjcm9sbGJhciBzaXplIHNob3VsZCBiZSBjb25zaWRlcmVkIHdoZW4gc2Nyb2xsaW5nIGFuIGl0ZW0gaW50byB2aWV3LFxuICAgICAgLy8gdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG5cbiAgICAgIHZhciBob3Jpem9udGFsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsV2lkdGggPiB3aWR0aCA/IHNjcm9sbGJhclNpemUgOiAwO1xuICAgICAgdmFyIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSA9IGVzdGltYXRlZFRvdGFsSGVpZ2h0ID4gaGVpZ2h0ID8gc2Nyb2xsYmFyU2l6ZSA6IDA7XG4gICAgICB0aGlzLnNjcm9sbFRvKHtcbiAgICAgICAgc2Nyb2xsTGVmdDogY29sdW1uSW5kZXggIT09IHVuZGVmaW5lZCA/IGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudCh0aGlzLnByb3BzLCBjb2x1bW5JbmRleCwgYWxpZ24sIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMsIHZlcnRpY2FsU2Nyb2xsYmFyU2l6ZSkgOiBzY3JvbGxMZWZ0LFxuICAgICAgICBzY3JvbGxUb3A6IHJvd0luZGV4ICE9PSB1bmRlZmluZWQgPyBnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQodGhpcy5wcm9wcywgcm93SW5kZXgsIGFsaWduLCBzY3JvbGxUb3AsIHRoaXMuX2luc3RhbmNlUHJvcHMsIGhvcml6b250YWxTY3JvbGxiYXJTaXplKSA6IHNjcm9sbFRvcFxuICAgICAgfSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbExlZnQgPSBfdGhpcyRwcm9wczMuaW5pdGlhbFNjcm9sbExlZnQsXG4gICAgICAgICAgaW5pdGlhbFNjcm9sbFRvcCA9IF90aGlzJHByb3BzMy5pbml0aWFsU2Nyb2xsVG9wO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYgIT0gbnVsbCkge1xuICAgICAgICB2YXIgb3V0ZXJSZWYgPSB0aGlzLl9vdXRlclJlZjtcblxuICAgICAgICBpZiAodHlwZW9mIGluaXRpYWxTY3JvbGxMZWZ0ID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBpbml0aWFsU2Nyb2xsTGVmdDtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgaW5pdGlhbFNjcm9sbFRvcCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsVG9wO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIGRpcmVjdGlvbiA9IHRoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgdmFyIF90aGlzJHN0YXRlMiA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgc2Nyb2xsTGVmdCA9IF90aGlzJHN0YXRlMi5zY3JvbGxMZWZ0LFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlMi5zY3JvbGxUb3AsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUyLnNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDtcblxuICAgICAgaWYgKHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGNhc2UgZm9yIGFsbCBicm93c2VycyB0aG91Z2ggKGUuZy4gQ2hyb21lIHJlcG9ydHMgdmFsdWVzIGFzIHBvc2l0aXZlLCBtZWFzdXJlZCByZWxhdGl2ZSB0byB0aGUgbGVmdCkuXG4gICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmO1xuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgc3dpdGNoIChnZXRSVExPZmZzZXRUeXBlKCkpIHtcbiAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxMZWZ0O1xuICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbExlZnQ7XG4gICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICB2YXIgY2xpZW50V2lkdGggPSBvdXRlclJlZi5jbGllbnRXaWR0aCxcbiAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBzY3JvbGxMZWZ0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbFRvcCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50V2lsbFVubW91bnQgPSBmdW5jdGlvbiBjb21wb25lbnRXaWxsVW5tb3VudCgpIHtcbiAgICAgIGlmICh0aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgIGNhbmNlbFRpbWVvdXQodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIF9wcm90by5yZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM0ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjaGlsZHJlbiA9IF90aGlzJHByb3BzNC5jaGlsZHJlbixcbiAgICAgICAgICBjbGFzc05hbWUgPSBfdGhpcyRwcm9wczQuY2xhc3NOYW1lLFxuICAgICAgICAgIGNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM0LmNvbHVtbkNvdW50LFxuICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzNC5kaXJlY3Rpb24sXG4gICAgICAgICAgaGVpZ2h0ID0gX3RoaXMkcHJvcHM0LmhlaWdodCxcbiAgICAgICAgICBpbm5lclJlZiA9IF90aGlzJHByb3BzNC5pbm5lclJlZixcbiAgICAgICAgICBpbm5lckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0LmlubmVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgaW5uZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0LmlubmVyVGFnTmFtZSxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNC5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczQkaXRlbUtleSA9IF90aGlzJHByb3BzNC5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczQkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkgOiBfdGhpcyRwcm9wczQkaXRlbUtleSxcbiAgICAgICAgICBvdXRlckVsZW1lbnRUeXBlID0gX3RoaXMkcHJvcHM0Lm91dGVyRWxlbWVudFR5cGUsXG4gICAgICAgICAgb3V0ZXJUYWdOYW1lID0gX3RoaXMkcHJvcHM0Lm91dGVyVGFnTmFtZSxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNC5yb3dDb3VudCxcbiAgICAgICAgICBzdHlsZSA9IF90aGlzJHByb3BzNC5zdHlsZSxcbiAgICAgICAgICB1c2VJc1Njcm9sbGluZyA9IF90aGlzJHByb3BzNC51c2VJc1Njcm9sbGluZyxcbiAgICAgICAgICB3aWR0aCA9IF90aGlzJHByb3BzNC53aWR0aDtcbiAgICAgIHZhciBpc1Njcm9sbGluZyA9IHRoaXMuc3RhdGUuaXNTY3JvbGxpbmc7XG5cbiAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIgPSB0aGlzLl9nZXRIb3Jpem9udGFsUmFuZ2VUb1JlbmRlcigpLFxuICAgICAgICAgIGNvbHVtblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0SG9yaXpvbnRhbFJbMF0sXG4gICAgICAgICAgY29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSWzFdO1xuXG4gICAgICB2YXIgX3RoaXMkX2dldFZlcnRpY2FsUmFuID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgcm93U3RhcnRJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhblswXSxcbiAgICAgICAgICByb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW5bMV07XG5cbiAgICAgIHZhciBpdGVtcyA9IFtdO1xuXG4gICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50KSB7XG4gICAgICAgIGZvciAodmFyIF9yb3dJbmRleCA9IHJvd1N0YXJ0SW5kZXg7IF9yb3dJbmRleCA8PSByb3dTdG9wSW5kZXg7IF9yb3dJbmRleCsrKSB7XG4gICAgICAgICAgZm9yICh2YXIgX2NvbHVtbkluZGV4ID0gY29sdW1uU3RhcnRJbmRleDsgX2NvbHVtbkluZGV4IDw9IGNvbHVtblN0b3BJbmRleDsgX2NvbHVtbkluZGV4KyspIHtcbiAgICAgICAgICAgIGl0ZW1zLnB1c2goY3JlYXRlRWxlbWVudChjaGlsZHJlbiwge1xuICAgICAgICAgICAgICBjb2x1bW5JbmRleDogX2NvbHVtbkluZGV4LFxuICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHVzZUlzU2Nyb2xsaW5nID8gaXNTY3JvbGxpbmcgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICAgIGtleTogaXRlbUtleSh7XG4gICAgICAgICAgICAgICAgY29sdW1uSW5kZXg6IF9jb2x1bW5JbmRleCxcbiAgICAgICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICByb3dJbmRleDogX3Jvd0luZGV4LFxuICAgICAgICAgICAgICBzdHlsZTogdGhpcy5fZ2V0SXRlbVN0eWxlKF9yb3dJbmRleCwgX2NvbHVtbkluZGV4KVxuICAgICAgICAgICAgfSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbEhlaWdodCA9IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgdmFyIGVzdGltYXRlZFRvdGFsV2lkdGggPSBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHRoaXMucHJvcHMsIHRoaXMuX2luc3RhbmNlUHJvcHMpO1xuICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQob3V0ZXJFbGVtZW50VHlwZSB8fCBvdXRlclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2xhc3NOYW1lOiBjbGFzc05hbWUsXG4gICAgICAgIG9uU2Nyb2xsOiB0aGlzLl9vblNjcm9sbCxcbiAgICAgICAgcmVmOiB0aGlzLl9vdXRlclJlZlNldHRlcixcbiAgICAgICAgc3R5bGU6IF9leHRlbmRzKHtcbiAgICAgICAgICBwb3NpdGlvbjogJ3JlbGF0aXZlJyxcbiAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgb3ZlcmZsb3c6ICdhdXRvJyxcbiAgICAgICAgICBXZWJraXRPdmVyZmxvd1Njcm9sbGluZzogJ3RvdWNoJyxcbiAgICAgICAgICB3aWxsQ2hhbmdlOiAndHJhbnNmb3JtJyxcbiAgICAgICAgICBkaXJlY3Rpb246IGRpcmVjdGlvblxuICAgICAgICB9LCBzdHlsZSlcbiAgICAgIH0sIGNyZWF0ZUVsZW1lbnQoaW5uZXJFbGVtZW50VHlwZSB8fCBpbm5lclRhZ05hbWUgfHwgJ2RpdicsIHtcbiAgICAgICAgY2hpbGRyZW46IGl0ZW1zLFxuICAgICAgICByZWY6IGlubmVyUmVmLFxuICAgICAgICBzdHlsZToge1xuICAgICAgICAgIGhlaWdodDogZXN0aW1hdGVkVG90YWxIZWlnaHQsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGVzdGltYXRlZFRvdGFsV2lkdGhcbiAgICAgICAgfVxuICAgICAgfSkpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uX2NhbGxQcm9wc0NhbGxiYWNrcyA9IGZ1bmN0aW9uIF9jYWxsUHJvcHNDYWxsYmFja3MoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM1ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNS5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvbkl0ZW1zUmVuZGVyZWQgPSBfdGhpcyRwcm9wczUub25JdGVtc1JlbmRlcmVkLFxuICAgICAgICAgIG9uU2Nyb2xsID0gX3RoaXMkcHJvcHM1Lm9uU2Nyb2xsLFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM1LnJvd0NvdW50O1xuXG4gICAgICBpZiAodHlwZW9mIG9uSXRlbXNSZW5kZXJlZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBpZiAoY29sdW1uQ291bnQgPiAwICYmIHJvd0NvdW50ID4gMCkge1xuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0SG9yaXpvbnRhbFIyID0gdGhpcy5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICAgICAgX292ZXJzY2FuQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMF0sXG4gICAgICAgICAgICAgIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMV0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RhcnRJbmRleCA9IF90aGlzJF9nZXRIb3Jpem9udGFsUjJbMl0sXG4gICAgICAgICAgICAgIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4ID0gX3RoaXMkX2dldEhvcml6b250YWxSMlszXTtcblxuICAgICAgICAgIHZhciBfdGhpcyRfZ2V0VmVydGljYWxSYW4yID0gdGhpcy5fZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5Sb3dTdG9wSW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0VmVydGljYWxSYW4yWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVJvd1N0b3BJbmRleCA9IF90aGlzJF9nZXRWZXJ0aWNhbFJhbjJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgsIF9vdmVyc2NhbkNvbHVtblN0b3BJbmRleCwgX292ZXJzY2FuUm93U3RhcnRJbmRleCwgX292ZXJzY2FuUm93U3RvcEluZGV4LCBfdmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgsIF92aXNpYmxlQ29sdW1uU3RvcEluZGV4LCBfdmlzaWJsZVJvd1N0YXJ0SW5kZXgsIF92aXNpYmxlUm93U3RvcEluZGV4KTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIG9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPSBfdGhpcyRzdGF0ZTMuaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICAgIF9zY3JvbGxMZWZ0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbExlZnQsXG4gICAgICAgICAgICBfc2Nyb2xsVG9wID0gX3RoaXMkc3RhdGUzLnNjcm9sbFRvcCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTMuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkLFxuICAgICAgICAgICAgX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGUzLnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsTGVmdCwgX3Njcm9sbFRvcCwgX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24sIF92ZXJ0aWNhbFNjcm9sbERpcmVjdGlvbiwgX3Njcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCk7XG4gICAgICB9XG4gICAgfSAvLyBMYXppbHkgY3JlYXRlIGFuZCBjYWNoZSBpdGVtIHN0eWxlcyB3aGlsZSBzY3JvbGxpbmcsXG4gICAgLy8gU28gdGhhdCBwdXJlIGNvbXBvbmVudCBzQ1Ugd2lsbCBwcmV2ZW50IHJlLXJlbmRlcnMuXG4gICAgLy8gV2UgbWFpbnRhaW4gdGhpcyBjYWNoZSwgYW5kIHBhc3MgYSBzdHlsZSBwcm9wIHJhdGhlciB0aGFuIGluZGV4LFxuICAgIC8vIFNvIHRoYXQgTGlzdCBjYW4gY2xlYXIgY2FjaGVkIHN0eWxlcyBhbmQgZm9yY2UgaXRlbSByZS1yZW5kZXIgaWYgbmVjZXNzYXJ5LlxuICAgIDtcblxuICAgIF9wcm90by5fZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0SG9yaXpvbnRhbFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBjb2x1bW5Db3VudCA9IF90aGlzJHByb3BzNi5jb2x1bW5Db3VudCxcbiAgICAgICAgICBvdmVyc2NhbkNvbHVtbkNvdW50ID0gX3RoaXMkcHJvcHM2Lm92ZXJzY2FuQ29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db2x1bW5zQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNi5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIHJvd0NvdW50ID0gX3RoaXMkcHJvcHM2LnJvd0NvdW50O1xuICAgICAgdmFyIF90aGlzJHN0YXRlNCA9IHRoaXMuc3RhdGUsXG4gICAgICAgICAgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlNC5ob3Jpem9udGFsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU0LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbExlZnQgPSBfdGhpcyRzdGF0ZTQuc2Nyb2xsTGVmdDtcbiAgICAgIHZhciBvdmVyc2NhbkNvdW50UmVzb2x2ZWQgPSBvdmVyc2NhbkNvbHVtbkNvdW50IHx8IG92ZXJzY2FuQ29sdW1uc0NvdW50IHx8IG92ZXJzY2FuQ291bnQgfHwgMTtcblxuICAgICAgaWYgKGNvbHVtbkNvdW50ID09PSAwIHx8IHJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgIHJldHVybiBbMCwgMCwgMCwgMF07XG4gICAgICB9XG5cbiAgICAgIHZhciBzdGFydEluZGV4ID0gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldCh0aGlzLnByb3BzLCBzY3JvbGxMZWZ0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQsIHRoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBPdmVyc2NhbiBieSBvbmUgaXRlbSBpbiBlYWNoIGRpcmVjdGlvbiBzbyB0aGF0IHRhYi9mb2N1cyB3b3Jrcy5cbiAgICAgIC8vIElmIHRoZXJlIGlzbid0IGF0IGxlYXN0IG9uZSBleHRyYSBpdGVtLCB0YWIgbG9vcHMgYmFjayBhcm91bmQuXG5cbiAgICAgIHZhciBvdmVyc2NhbkJhY2t3YXJkID0gIWlzU2Nyb2xsaW5nIHx8IGhvcml6b250YWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiA9PT0gJ2ZvcndhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudFJlc29sdmVkKSA6IDE7XG4gICAgICByZXR1cm4gW01hdGgubWF4KDAsIHN0YXJ0SW5kZXggLSBvdmVyc2NhbkJhY2t3YXJkKSwgTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIgPSBmdW5jdGlvbiBfZ2V0VmVydGljYWxSYW5nZVRvUmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY29sdW1uQ291bnQgPSBfdGhpcyRwcm9wczcuY29sdW1uQ291bnQsXG4gICAgICAgICAgb3ZlcnNjYW5Db3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhbkNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuUm93Q291bnQgPSBfdGhpcyRwcm9wczcub3ZlcnNjYW5Sb3dDb3VudCxcbiAgICAgICAgICBvdmVyc2NhblJvd3NDb3VudCA9IF90aGlzJHByb3BzNy5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgICAgICByb3dDb3VudCA9IF90aGlzJHByb3BzNy5yb3dDb3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTUgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGU1LmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uID0gX3RoaXMkc3RhdGU1LnZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uLFxuICAgICAgICAgIHNjcm9sbFRvcCA9IF90aGlzJHN0YXRlNS5zY3JvbGxUb3A7XG4gICAgICB2YXIgb3ZlcnNjYW5Db3VudFJlc29sdmVkID0gb3ZlcnNjYW5Sb3dDb3VudCB8fCBvdmVyc2NhblJvd3NDb3VudCB8fCBvdmVyc2NhbkNvdW50IHx8IDE7XG5cbiAgICAgIGlmIChjb2x1bW5Db3VudCA9PT0gMCB8fCByb3dDb3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFJvd1N0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsVG9wLCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbFRvcCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdiYWNrd2FyZCcgPyBNYXRoLm1heCgxLCBvdmVyc2NhbkNvdW50UmVzb2x2ZWQpIDogMTtcbiAgICAgIHZhciBvdmVyc2NhbkZvcndhcmQgPSAhaXNTY3JvbGxpbmcgfHwgdmVydGljYWxTY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnRSZXNvbHZlZCkgOiAxO1xuICAgICAgcmV0dXJuIFtNYXRoLm1heCgwLCBzdGFydEluZGV4IC0gb3ZlcnNjYW5CYWNrd2FyZCksIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RvcEluZGV4ICsgb3ZlcnNjYW5Gb3J3YXJkKSksIHN0YXJ0SW5kZXgsIHN0b3BJbmRleF07XG4gICAgfTtcblxuICAgIHJldHVybiBHcmlkO1xuICB9KFB1cmVDb21wb25lbnQpLCBfY2xhc3MuZGVmYXVsdFByb3BzID0ge1xuICAgIGRpcmVjdGlvbjogJ2x0cicsXG4gICAgaXRlbURhdGE6IHVuZGVmaW5lZCxcbiAgICB1c2VJc1Njcm9sbGluZzogZmFsc2VcbiAgfSwgX2NsYXNzO1xufVxuXG52YXIgdmFsaWRhdGVTaGFyZWRQcm9wcyA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjUsIF9yZWY2KSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWY1LmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjUuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjUuaGVpZ2h0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjUuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjUub3V0ZXJUYWdOYW1lLFxuICAgICAgb3ZlcnNjYW5Db2x1bW5zQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvbHVtbnNDb3VudCxcbiAgICAgIG92ZXJzY2FuQ291bnQgPSBfcmVmNS5vdmVyc2NhbkNvdW50LFxuICAgICAgb3ZlcnNjYW5Sb3dzQ291bnQgPSBfcmVmNS5vdmVyc2NhblJvd3NDb3VudCxcbiAgICAgIHdpZHRoID0gX3JlZjUud2lkdGg7XG4gIHZhciBpbnN0YW5jZSA9IF9yZWY2Lmluc3RhbmNlO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gICAgaWYgKHR5cGVvZiBvdmVyc2NhbkNvdW50ID09PSAnbnVtYmVyJykge1xuICAgICAgaWYgKGRldldhcm5pbmdzT3ZlcnNjYW5Db3VudCAmJiAhZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhbkNvdW50LmFkZChpbnN0YW5jZSk7XG4gICAgICAgIGNvbnNvbGUud2FybignVGhlIG92ZXJzY2FuQ291bnQgcHJvcCBoYXMgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG92ZXJzY2FuQ29sdW1uc0NvdW50ID09PSAnbnVtYmVyJyB8fCB0eXBlb2Ygb3ZlcnNjYW5Sb3dzQ291bnQgPT09ICdudW1iZXInKSB7XG4gICAgICBpZiAoZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQgJiYgIWRldldhcm5pbmdzT3ZlcnNjYW5Sb3dzQ29sdW1uc0NvdW50LmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgZGV2V2FybmluZ3NPdmVyc2NhblJvd3NDb2x1bW5zQ291bnQuYWRkKGluc3RhbmNlKTtcbiAgICAgICAgY29uc29sZS53YXJuKCdUaGUgb3ZlcnNjYW5Db2x1bW5zQ291bnQgYW5kIG92ZXJzY2FuUm93c0NvdW50IHByb3BzIGhhdmUgYmVlbiBkZXByZWNhdGVkLiAnICsgJ1BsZWFzZSB1c2UgdGhlIG92ZXJzY2FuQ29sdW1uQ291bnQgYW5kIG92ZXJzY2FuUm93Q291bnQgcHJvcHMgaW5zdGVhZC4nKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUgJiYgIWRldldhcm5pbmdzVGFnTmFtZS5oYXMoaW5zdGFuY2UpKSB7XG4gICAgICAgIGRldldhcm5pbmdzVGFnTmFtZS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNoaWxkcmVuID09IG51bGwpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwiY2hpbGRyZW5cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBSZWFjdCBjb21wb25lbnQuICcgKyAoXCJcXFwiXCIgKyAoY2hpbGRyZW4gPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY2hpbGRyZW4pICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG5cbiAgICBzd2l0Y2ggKGRpcmVjdGlvbikge1xuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiB3aWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwid2lkdGhcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdHcmlkcyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ0dyaWRzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUgPSA1MDtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0ID0gZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZiwgX3JlZjIpIHtcbiAgdmFyIHJvd0NvdW50ID0gX3JlZi5yb3dDb3VudDtcbiAgdmFyIHJvd01ldGFkYXRhTWFwID0gX3JlZjIucm93TWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQgPSBfcmVmMi5lc3RpbWF0ZWRSb3dIZWlnaHQsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleCA9IF9yZWYyLmxhc3RNZWFzdXJlZFJvd0luZGV4O1xuICB2YXIgdG90YWxTaXplT2ZNZWFzdXJlZFJvd3MgPSAwOyAvLyBFZGdlIGNhc2UgY2hlY2sgZm9yIHdoZW4gdGhlIG51bWJlciBvZiBpdGVtcyBkZWNyZWFzZXMgd2hpbGUgYSBzY3JvbGwgaXMgaW4gcHJvZ3Jlc3MuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9idmF1Z2huL3JlYWN0LXdpbmRvdy9wdWxsLzEzOFxuXG4gIGlmIChsYXN0TWVhc3VyZWRSb3dJbmRleCA+PSByb3dDb3VudCkge1xuICAgIGxhc3RNZWFzdXJlZFJvd0luZGV4ID0gcm93Q291bnQgLSAxO1xuICB9XG5cbiAgaWYgKGxhc3RNZWFzdXJlZFJvd0luZGV4ID49IDApIHtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gcm93TWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkUm93SW5kZXhdO1xuICAgIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IHJvd0NvdW50IC0gbGFzdE1lYXN1cmVkUm93SW5kZXggLSAxO1xuICB2YXIgdG90YWxTaXplT2ZVbm1lYXN1cmVkSXRlbXMgPSBudW1Vbm1lYXN1cmVkSXRlbXMgKiBlc3RpbWF0ZWRSb3dIZWlnaHQ7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEVzdGltYXRlZFRvdGFsV2lkdGggPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKF9yZWYzLCBfcmVmNCkge1xuICB2YXIgY29sdW1uQ291bnQgPSBfcmVmMy5jb2x1bW5Db3VudDtcbiAgdmFyIGNvbHVtbk1ldGFkYXRhTWFwID0gX3JlZjQuY29sdW1uTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRDb2x1bW5XaWR0aCA9IF9yZWY0LmVzdGltYXRlZENvbHVtbldpZHRoLFxuICAgICAgbGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBfcmVmNC5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzID0gMDsgLy8gRWRnZSBjYXNlIGNoZWNrIGZvciB3aGVuIHRoZSBudW1iZXIgb2YgaXRlbXMgZGVjcmVhc2VzIHdoaWxlIGEgc2Nyb2xsIGlzIGluIHByb2dyZXNzLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vYnZhdWdobi9yZWFjdC13aW5kb3cvcHVsbC8xMzhcblxuICBpZiAobGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPj0gY29sdW1uQ291bnQpIHtcbiAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA9IGNvbHVtbkNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRDb2x1bW5JbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGNvbHVtbk1ldGFkYXRhTWFwW2xhc3RNZWFzdXJlZENvbHVtbkluZGV4XTtcbiAgICB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgfVxuXG4gIHZhciBudW1Vbm1lYXN1cmVkSXRlbXMgPSBjb2x1bW5Db3VudCAtIGxhc3RNZWFzdXJlZENvbHVtbkluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkQ29sdW1uV2lkdGg7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkUm93cyArIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zO1xufTtcblxudmFyIGdldEl0ZW1NZXRhZGF0YSA9IGZ1bmN0aW9uIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAsIGl0ZW1TaXplLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBpdGVtU2l6ZSA9IHByb3BzLmNvbHVtbldpZHRoO1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRDb2x1bW5JbmRleDtcbiAgfSBlbHNlIHtcbiAgICBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwO1xuICAgIGl0ZW1TaXplID0gcHJvcHMucm93SGVpZ2h0O1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleDtcbiAgfVxuXG4gIGlmIChpbmRleCA+IGxhc3RNZWFzdXJlZEluZGV4KSB7XG4gICAgdmFyIG9mZnNldCA9IDA7XG5cbiAgICBpZiAobGFzdE1lYXN1cmVkSW5kZXggPj0gMCkge1xuICAgICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgICBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSA9IGxhc3RNZWFzdXJlZEluZGV4ICsgMTsgaSA8PSBpbmRleDsgaSsrKSB7XG4gICAgICB2YXIgc2l6ZSA9IGl0ZW1TaXplKGkpO1xuICAgICAgaXRlbU1ldGFkYXRhTWFwW2ldID0ge1xuICAgICAgICBvZmZzZXQ6IG9mZnNldCxcbiAgICAgICAgc2l6ZTogc2l6ZVxuICAgICAgfTtcbiAgICAgIG9mZnNldCArPSBzaXplO1xuICAgIH1cblxuICAgIGlmIChpdGVtVHlwZSA9PT0gJ2NvbHVtbicpIHtcbiAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBpbmRleDtcbiAgICB9IGVsc2Uge1xuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCA9IGluZGV4O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBpdGVtTWV0YWRhdGFNYXBbaW5kZXhdO1xufTtcblxudmFyIGZpbmROZWFyZXN0SXRlbSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIG9mZnNldCkge1xuICB2YXIgaXRlbU1ldGFkYXRhTWFwLCBsYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaXRlbVR5cGUgPT09ICdjb2x1bW4nKSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXg7XG4gIH0gZWxzZSB7XG4gICAgaXRlbU1ldGFkYXRhTWFwID0gaW5zdGFuY2VQcm9wcy5yb3dNZXRhZGF0YU1hcDtcbiAgICBsYXN0TWVhc3VyZWRJbmRleCA9IGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkUm93SW5kZXg7XG4gIH1cblxuICB2YXIgbGFzdE1lYXN1cmVkSXRlbU9mZnNldCA9IGxhc3RNZWFzdXJlZEluZGV4ID4gMCA/IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF0ub2Zmc2V0IDogMDtcblxuICBpZiAobGFzdE1lYXN1cmVkSXRlbU9mZnNldCA+PSBvZmZzZXQpIHtcbiAgICAvLyBJZiB3ZSd2ZSBhbHJlYWR5IG1lYXN1cmVkIGl0ZW1zIHdpdGhpbiB0aGlzIHJhbmdlIGp1c3QgdXNlIGEgYmluYXJ5IHNlYXJjaCBhcyBpdCdzIGZhc3Rlci5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtQmluYXJ5U2VhcmNoKGl0ZW1UeXBlLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgbGFzdE1lYXN1cmVkSW5kZXgsIDAsIG9mZnNldCk7XG4gIH0gZWxzZSB7XG4gICAgLy8gSWYgd2UgaGF2ZW4ndCB5ZXQgbWVhc3VyZWQgdGhpcyBoaWdoLCBmYWxsYmFjayB0byBhbiBleHBvbmVudGlhbCBzZWFyY2ggd2l0aCBhbiBpbm5lciBiaW5hcnkgc2VhcmNoLlxuICAgIC8vIFRoZSBleHBvbmVudGlhbCBzZWFyY2ggYXZvaWRzIHByZS1jb21wdXRpbmcgc2l6ZXMgZm9yIHRoZSBmdWxsIHNldCBvZiBpdGVtcyBhcyBhIGJpbmFyeSBzZWFyY2ggd291bGQuXG4gICAgLy8gVGhlIG92ZXJhbGwgY29tcGxleGl0eSBmb3IgdGhpcyBhcHByb2FjaCBpcyBPKGxvZyBuKS5cbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2goaXRlbVR5cGUsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBoaWdoLCBsb3csIG9mZnNldCkge1xuICB3aGlsZSAobG93IDw9IGhpZ2gpIHtcbiAgICB2YXIgbWlkZGxlID0gbG93ICsgTWF0aC5mbG9vcigoaGlnaCAtIGxvdykgLyAyKTtcbiAgICB2YXIgY3VycmVudE9mZnNldCA9IGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIG1pZGRsZSwgaW5zdGFuY2VQcm9wcykub2Zmc2V0O1xuXG4gICAgaWYgKGN1cnJlbnRPZmZzZXQgPT09IG9mZnNldCkge1xuICAgICAgcmV0dXJuIG1pZGRsZTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPCBvZmZzZXQpIHtcbiAgICAgIGxvdyA9IG1pZGRsZSArIDE7XG4gICAgfSBlbHNlIGlmIChjdXJyZW50T2Zmc2V0ID4gb2Zmc2V0KSB7XG4gICAgICBoaWdoID0gbWlkZGxlIC0gMTtcbiAgICB9XG4gIH1cblxuICBpZiAobG93ID4gMCkge1xuICAgIHJldHVybiBsb3cgLSAxO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiAwO1xuICB9XG59O1xuXG52YXIgZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2ggPSBmdW5jdGlvbiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLmNvbHVtbkNvdW50IDogcHJvcHMucm93Q291bnQ7XG4gIHZhciBpbnRlcnZhbCA9IDE7XG5cbiAgd2hpbGUgKGluZGV4IDwgaXRlbUNvdW50ICYmIGdldEl0ZW1NZXRhZGF0YShpdGVtVHlwZSwgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChpdGVtVHlwZSwgcHJvcHMsIGluc3RhbmNlUHJvcHMsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSwgTWF0aC5mbG9vcihpbmRleCAvIDIpLCBvZmZzZXQpO1xufTtcblxudmFyIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50ID0gZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoaXRlbVR5cGUsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICB2YXIgc2l6ZSA9IGl0ZW1UeXBlID09PSAnY29sdW1uJyA/IHByb3BzLndpZHRoIDogcHJvcHMuaGVpZ2h0O1xuICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKGl0ZW1UeXBlLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpOyAvLyBHZXQgZXN0aW1hdGVkIHRvdGFsIHNpemUgYWZ0ZXIgSXRlbU1ldGFkYXRhIGlzIGNvbXB1dGVkLFxuICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBpdGVtVHlwZSA9PT0gJ2NvbHVtbicgPyBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoKHByb3BzLCBpbnN0YW5jZVByb3BzKSA6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0KHByb3BzLCBpbnN0YW5jZVByb3BzKTtcbiAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgdmFyIG1pbk9mZnNldCA9IE1hdGgubWF4KDAsIGl0ZW1NZXRhZGF0YS5vZmZzZXQgLSBzaXplICsgc2Nyb2xsYmFyU2l6ZSArIGl0ZW1NZXRhZGF0YS5zaXplKTtcblxuICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgIH0gZWxzZSB7XG4gICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgIH1cbiAgfVxuXG4gIHN3aXRjaCAoYWxpZ24pIHtcbiAgICBjYXNlICdzdGFydCc6XG4gICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgY2FzZSAnZW5kJzpcbiAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICBjYXNlICdjZW50ZXInOlxuICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgIGNhc2UgJ2F1dG8nOlxuICAgIGRlZmF1bHQ6XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBzY3JvbGxPZmZzZXQ7XG4gICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgIC8vIHRoaXMgdmFsdWUgY2FuIGJlIGxhcmdlciB0aGFuIG1heE9mZnNldCB3aGVuIGF0IHRoZSBlbmQgb2YgdGhlIGxpc3RcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsT2Zmc2V0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgfVxuXG4gIH1cbn07XG5cbnZhciBWYXJpYWJsZVNpemVHcmlkID0gLyojX19QVVJFX18qL2NyZWF0ZUdyaWRDb21wb25lbnQoe1xuICBnZXRDb2x1bW5PZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtbk9mZnNldChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW0oJ2NvbHVtbicsIHByb3BzLCBpbnN0YW5jZVByb3BzLCBzY3JvbGxMZWZ0KTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsTGVmdCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IHByb3BzLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoO1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEoJ2NvbHVtbicsIHByb3BzLCBzdGFydEluZGV4LCBpbnN0YW5jZVByb3BzKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gc2Nyb2xsTGVmdCArIHdpZHRoO1xuICAgIHZhciBvZmZzZXQgPSBpdGVtTWV0YWRhdGEub2Zmc2V0ICsgaXRlbU1ldGFkYXRhLnNpemU7XG4gICAgdmFyIHN0b3BJbmRleCA9IHN0YXJ0SW5kZXg7XG5cbiAgICB3aGlsZSAoc3RvcEluZGV4IDwgY29sdW1uQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhKCdjb2x1bW4nLCBwcm9wcywgc3RvcEluZGV4LCBpbnN0YW5jZVByb3BzKS5zaXplO1xuICAgIH1cblxuICAgIHJldHVybiBzdG9wSW5kZXg7XG4gIH0sXG4gIGdldENvbHVtbldpZHRoOiBmdW5jdGlvbiBnZXRDb2x1bW5XaWR0aChwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gaW5zdGFuY2VQcm9wcy5jb2x1bW5NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQ6IGdldEVzdGltYXRlZFRvdGFsSGVpZ2h0LFxuICBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoOiBnZXRFc3RpbWF0ZWRUb3RhbFdpZHRoLFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICByZXR1cm4gZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQoJ2NvbHVtbicsIHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSk7XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KHByb3BzLCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHJldHVybiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCgncm93JywgcHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKTtcbiAgfSxcbiAgZ2V0Um93T2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dPZmZzZXQocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG4gIH0sXG4gIGdldFJvd0hlaWdodDogZnVuY3Rpb24gZ2V0Um93SGVpZ2h0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLnJvd01ldGFkYXRhTWFwW2luZGV4XS5zaXplO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KHByb3BzLCBzY3JvbGxUb3AsIGluc3RhbmNlUHJvcHMpIHtcbiAgICByZXR1cm4gZmluZE5lYXJlc3RJdGVtKCdyb3cnLCBwcm9wcywgaW5zdGFuY2VQcm9wcywgc2Nyb2xsVG9wKTtcbiAgfSxcbiAgZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleChwcm9wcywgc3RhcnRJbmRleCwgc2Nyb2xsVG9wLCBpbnN0YW5jZVByb3BzKSB7XG4gICAgdmFyIHJvd0NvdW50ID0gcHJvcHMucm93Q291bnQsXG4gICAgICAgIGhlaWdodCA9IHByb3BzLmhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhKCdyb3cnLCBwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbFRvcCArIGhlaWdodDtcbiAgICB2YXIgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIHZhciBzdG9wSW5kZXggPSBzdGFydEluZGV4O1xuXG4gICAgd2hpbGUgKHN0b3BJbmRleCA8IHJvd0NvdW50IC0gMSAmJiBvZmZzZXQgPCBtYXhPZmZzZXQpIHtcbiAgICAgIHN0b3BJbmRleCsrO1xuICAgICAgb2Zmc2V0ICs9IGdldEl0ZW1NZXRhZGF0YSgncm93JywgcHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY1ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoID0gX3JlZjUuZXN0aW1hdGVkQ29sdW1uV2lkdGgsXG4gICAgICAgIGVzdGltYXRlZFJvd0hlaWdodCA9IF9yZWY1LmVzdGltYXRlZFJvd0hlaWdodDtcbiAgICB2YXIgaW5zdGFuY2VQcm9wcyA9IHtcbiAgICAgIGNvbHVtbk1ldGFkYXRhTWFwOiB7fSxcbiAgICAgIGVzdGltYXRlZENvbHVtbldpZHRoOiBlc3RpbWF0ZWRDb2x1bW5XaWR0aCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBlc3RpbWF0ZWRSb3dIZWlnaHQ6IGVzdGltYXRlZFJvd0hlaWdodCB8fCBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUsXG4gICAgICBsYXN0TWVhc3VyZWRDb2x1bW5JbmRleDogLTEsXG4gICAgICBsYXN0TWVhc3VyZWRSb3dJbmRleDogLTEsXG4gICAgICByb3dNZXRhZGF0YU1hcDoge31cbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckNvbHVtbkluZGV4ID0gZnVuY3Rpb24gKGNvbHVtbkluZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIGNvbHVtbkluZGV4OiBjb2x1bW5JbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlclJvd0luZGV4ID0gZnVuY3Rpb24gKHJvd0luZGV4LCBzaG91bGRGb3JjZVVwZGF0ZSkge1xuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlID09PSB2b2lkIDApIHtcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSB0cnVlO1xuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5yZXNldEFmdGVySW5kaWNlcyh7XG4gICAgICAgIHJvd0luZGV4OiByb3dJbmRleCxcbiAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGU6IHNob3VsZEZvcmNlVXBkYXRlXG4gICAgICB9KTtcbiAgICB9O1xuXG4gICAgaW5zdGFuY2UucmVzZXRBZnRlckluZGljZXMgPSBmdW5jdGlvbiAoX3JlZjYpIHtcbiAgICAgIHZhciBjb2x1bW5JbmRleCA9IF9yZWY2LmNvbHVtbkluZGV4LFxuICAgICAgICAgIHJvd0luZGV4ID0gX3JlZjYucm93SW5kZXgsXG4gICAgICAgICAgX3JlZjYkc2hvdWxkRm9yY2VVcGRhID0gX3JlZjYuc2hvdWxkRm9yY2VVcGRhdGUsXG4gICAgICAgICAgc2hvdWxkRm9yY2VVcGRhdGUgPSBfcmVmNiRzaG91bGRGb3JjZVVwZGEgPT09IHZvaWQgMCA/IHRydWUgOiBfcmVmNiRzaG91bGRGb3JjZVVwZGE7XG5cbiAgICAgIGlmICh0eXBlb2YgY29sdW1uSW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkQ29sdW1uSW5kZXggPSBNYXRoLm1pbihpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZENvbHVtbkluZGV4LCBjb2x1bW5JbmRleCAtIDEpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0luZGV4ID09PSAnbnVtYmVyJykge1xuICAgICAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZFJvd0luZGV4ID0gTWF0aC5taW4oaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRSb3dJbmRleCwgcm93SW5kZXggLSAxKTtcbiAgICAgIH0gLy8gV2UgY291bGQgcG90ZW50aWFsbHkgb3B0aW1pemUgZnVydGhlciBieSBvbmx5IGV2aWN0aW5nIHN0eWxlcyBhZnRlciB0aGlzIGluZGV4LFxuICAgICAgLy8gQnV0IHNpbmNlIHN0eWxlcyBhcmUgb25seSBjYWNoZWQgd2hpbGUgc2Nyb2xsaW5nIGlzIGluIHByb2dyZXNzLVxuICAgICAgLy8gSXQgc2VlbXMgYW4gdW5uZWNlc3Nhcnkgb3B0aW1pemF0aW9uLlxuICAgICAgLy8gSXQncyB1bmxpa2VseSB0aGF0IHJlc2V0QWZ0ZXJJbmRleCgpIHdpbGwgYmUgY2FsbGVkIHdoaWxlIGEgdXNlciBpcyBzY3JvbGxpbmcuXG5cblxuICAgICAgaW5zdGFuY2UuX2dldEl0ZW1TdHlsZUNhY2hlKC0xKTtcblxuICAgICAgaWYgKHNob3VsZEZvcmNlVXBkYXRlKSB7XG4gICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIHJldHVybiBpbnN0YW5jZVByb3BzO1xuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiBmYWxzZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmNykge1xuICAgIHZhciBjb2x1bW5XaWR0aCA9IF9yZWY3LmNvbHVtbldpZHRoLFxuICAgICAgICByb3dIZWlnaHQgPSBfcmVmNy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNvbHVtbldpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoY29sdW1uV2lkdGggPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgY29sdW1uV2lkdGgpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcInJvd0hlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIGZ1bmN0aW9uLiAnICsgKFwiXFxcIlwiICsgKHJvd0hlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiByb3dIZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMJDEgPSAxNTA7XG5cbnZhciBkZWZhdWx0SXRlbUtleSQxID0gZnVuY3Rpb24gZGVmYXVsdEl0ZW1LZXkoaW5kZXgsIGRhdGEpIHtcbiAgcmV0dXJuIGluZGV4O1xufTsgLy8gSW4gREVWIG1vZGUsIHRoaXMgU2V0IGhlbHBzIHVzIG9ubHkgbG9nIGEgd2FybmluZyBvbmNlIHBlciBjb21wb25lbnQgaW5zdGFuY2UuXG4vLyBUaGlzIGF2b2lkcyBzcGFtbWluZyB0aGUgY29uc29sZSBldmVyeSB0aW1lIGEgcmVuZGVyIGhhcHBlbnMuXG5cblxudmFyIGRldldhcm5pbmdzRGlyZWN0aW9uID0gbnVsbDtcbnZhciBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IG51bGw7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gJ3Byb2R1Y3Rpb24nKSB7XG4gIGlmICh0eXBlb2Ygd2luZG93ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2Ygd2luZG93LldlYWtTZXQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgZGV2V2FybmluZ3NEaXJlY3Rpb24gPSAvKiNfX1BVUkVfXyovbmV3IFdlYWtTZXQoKTtcbiAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMSA9IC8qI19fUFVSRV9fKi9uZXcgV2Vha1NldCgpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxpc3RDb21wb25lbnQoX3JlZikge1xuICB2YXIgX2NsYXNzO1xuXG4gIHZhciBnZXRJdGVtT2Zmc2V0ID0gX3JlZi5nZXRJdGVtT2Zmc2V0LFxuICAgICAgZ2V0RXN0aW1hdGVkVG90YWxTaXplID0gX3JlZi5nZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICBnZXRJdGVtU2l6ZSA9IF9yZWYuZ2V0SXRlbVNpemUsXG4gICAgICBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudCA9IF9yZWYuZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQsXG4gICAgICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0ID0gX3JlZi5nZXRTdGFydEluZGV4Rm9yT2Zmc2V0LFxuICAgICAgZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCA9IF9yZWYuZ2V0U3RvcEluZGV4Rm9yU3RhcnRJbmRleCxcbiAgICAgIGluaXRJbnN0YW5jZVByb3BzID0gX3JlZi5pbml0SW5zdGFuY2VQcm9wcyxcbiAgICAgIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgPSBfcmVmLnNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UsXG4gICAgICB2YWxpZGF0ZVByb3BzID0gX3JlZi52YWxpZGF0ZVByb3BzO1xuICByZXR1cm4gX2NsYXNzID0gLyojX19QVVJFX18qL2Z1bmN0aW9uIChfUHVyZUNvbXBvbmVudCkge1xuICAgIF9pbmhlcml0c0xvb3NlKExpc3QsIF9QdXJlQ29tcG9uZW50KTtcblxuICAgIC8vIEFsd2F5cyB1c2UgZXhwbGljaXQgY29uc3RydWN0b3IgZm9yIFJlYWN0IGNvbXBvbmVudHMuXG4gICAgLy8gSXQgcHJvZHVjZXMgbGVzcyBjb2RlIGFmdGVyIHRyYW5zcGlsYXRpb24uICgjMjYpXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVzZWxlc3MtY29uc3RydWN0b3JcbiAgICBmdW5jdGlvbiBMaXN0KHByb3BzKSB7XG4gICAgICB2YXIgX3RoaXM7XG5cbiAgICAgIF90aGlzID0gX1B1cmVDb21wb25lbnQuY2FsbCh0aGlzLCBwcm9wcykgfHwgdGhpcztcbiAgICAgIF90aGlzLl9pbnN0YW5jZVByb3BzID0gaW5pdEluc3RhbmNlUHJvcHMoX3RoaXMucHJvcHMsIF9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQoX3RoaXMpKTtcbiAgICAgIF90aGlzLl9vdXRlclJlZiA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkID0gbnVsbDtcbiAgICAgIF90aGlzLnN0YXRlID0ge1xuICAgICAgICBpbnN0YW5jZTogX2Fzc2VydFRoaXNJbml0aWFsaXplZChfdGhpcyksXG4gICAgICAgIGlzU2Nyb2xsaW5nOiBmYWxzZSxcbiAgICAgICAgc2Nyb2xsRGlyZWN0aW9uOiAnZm9yd2FyZCcsXG4gICAgICAgIHNjcm9sbE9mZnNldDogdHlwZW9mIF90aGlzLnByb3BzLmluaXRpYWxTY3JvbGxPZmZzZXQgPT09ICdudW1iZXInID8gX3RoaXMucHJvcHMuaW5pdGlhbFNjcm9sbE9mZnNldCA6IDAsXG4gICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgIH07XG4gICAgICBfdGhpcy5fY2FsbE9uSXRlbXNSZW5kZXJlZCA9IHZvaWQgMDtcbiAgICAgIF90aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkID0gbWVtb2l6ZU9uZShmdW5jdGlvbiAob3ZlcnNjYW5TdGFydEluZGV4LCBvdmVyc2NhblN0b3BJbmRleCwgdmlzaWJsZVN0YXJ0SW5kZXgsIHZpc2libGVTdG9wSW5kZXgpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uSXRlbXNSZW5kZXJlZCh7XG4gICAgICAgICAgb3ZlcnNjYW5TdGFydEluZGV4OiBvdmVyc2NhblN0YXJ0SW5kZXgsXG4gICAgICAgICAgb3ZlcnNjYW5TdG9wSW5kZXg6IG92ZXJzY2FuU3RvcEluZGV4LFxuICAgICAgICAgIHZpc2libGVTdGFydEluZGV4OiB2aXNpYmxlU3RhcnRJbmRleCxcbiAgICAgICAgICB2aXNpYmxlU3RvcEluZGV4OiB2aXNpYmxlU3RvcEluZGV4XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBfdGhpcy5fY2FsbE9uU2Nyb2xsID0gdm9pZCAwO1xuICAgICAgX3RoaXMuX2NhbGxPblNjcm9sbCA9IG1lbW9pemVPbmUoZnVuY3Rpb24gKHNjcm9sbERpcmVjdGlvbiwgc2Nyb2xsT2Zmc2V0LCBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQpIHtcbiAgICAgICAgcmV0dXJuIF90aGlzLnByb3BzLm9uU2Nyb2xsKHtcbiAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHNjcm9sbERpcmVjdGlvbixcbiAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICBzY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQ6IHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IHZvaWQgMDtcblxuICAgICAgX3RoaXMuX2dldEl0ZW1TdHlsZSA9IGZ1bmN0aW9uIChpbmRleCkge1xuICAgICAgICB2YXIgX3RoaXMkcHJvcHMgPSBfdGhpcy5wcm9wcyxcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IF90aGlzJHByb3BzLmRpcmVjdGlvbixcbiAgICAgICAgICAgIGl0ZW1TaXplID0gX3RoaXMkcHJvcHMuaXRlbVNpemUsXG4gICAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wcy5sYXlvdXQ7XG5cbiAgICAgICAgdmFyIGl0ZW1TdHlsZUNhY2hlID0gX3RoaXMuX2dldEl0ZW1TdHlsZUNhY2hlKHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgaXRlbVNpemUsIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2UgJiYgbGF5b3V0LCBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlICYmIGRpcmVjdGlvbik7XG5cbiAgICAgICAgdmFyIHN0eWxlO1xuXG4gICAgICAgIGlmIChpdGVtU3R5bGVDYWNoZS5oYXNPd25Qcm9wZXJ0eShpbmRleCkpIHtcbiAgICAgICAgICBzdHlsZSA9IGl0ZW1TdHlsZUNhY2hlW2luZGV4XTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB2YXIgX29mZnNldCA9IGdldEl0ZW1PZmZzZXQoX3RoaXMucHJvcHMsIGluZGV4LCBfdGhpcy5faW5zdGFuY2VQcm9wcyk7XG5cbiAgICAgICAgICB2YXIgc2l6ZSA9IGdldEl0ZW1TaXplKF90aGlzLnByb3BzLCBpbmRleCwgX3RoaXMuX2luc3RhbmNlUHJvcHMpOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICAgICAgICB2YXIgaXNSdGwgPSBkaXJlY3Rpb24gPT09ICdydGwnO1xuICAgICAgICAgIHZhciBvZmZzZXRIb3Jpem9udGFsID0gaXNIb3Jpem9udGFsID8gX29mZnNldCA6IDA7XG4gICAgICAgICAgaXRlbVN0eWxlQ2FjaGVbaW5kZXhdID0gc3R5bGUgPSB7XG4gICAgICAgICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJyxcbiAgICAgICAgICAgIGxlZnQ6IGlzUnRsID8gdW5kZWZpbmVkIDogb2Zmc2V0SG9yaXpvbnRhbCxcbiAgICAgICAgICAgIHJpZ2h0OiBpc1J0bCA/IG9mZnNldEhvcml6b250YWwgOiB1bmRlZmluZWQsXG4gICAgICAgICAgICB0b3A6ICFpc0hvcml6b250YWwgPyBfb2Zmc2V0IDogMCxcbiAgICAgICAgICAgIGhlaWdodDogIWlzSG9yaXpvbnRhbCA/IHNpemUgOiAnMTAwJScsXG4gICAgICAgICAgICB3aWR0aDogaXNIb3Jpem9udGFsID8gc2l6ZSA6ICcxMDAlJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSB2b2lkIDA7XG4gICAgICBfdGhpcy5fZ2V0SXRlbVN0eWxlQ2FjaGUgPSBtZW1vaXplT25lKGZ1bmN0aW9uIChfLCBfXywgX19fKSB7XG4gICAgICAgIHJldHVybiB7fTtcbiAgICAgIH0pO1xuXG4gICAgICBfdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQsXG4gICAgICAgICAgICBjbGllbnRXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LmNsaWVudFdpZHRoLFxuICAgICAgICAgICAgc2Nyb2xsTGVmdCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbExlZnQsXG4gICAgICAgICAgICBzY3JvbGxXaWR0aCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0LnNjcm9sbFdpZHRoO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsTGVmdCkge1xuICAgICAgICAgICAgLy8gU2Nyb2xsIHBvc2l0aW9uIG1heSBoYXZlIGJlZW4gdXBkYXRlZCBieSBjRE0vY0RVLFxuICAgICAgICAgICAgLy8gSW4gd2hpY2ggY2FzZSB3ZSBkb24ndCBuZWVkIHRvIHRyaWdnZXIgYW5vdGhlciByZW5kZXIsXG4gICAgICAgICAgICAvLyBBbmQgd2UgZG9uJ3Qgd2FudCB0byB1cGRhdGUgc3RhdGUuaXNTY3JvbGxpbmcuXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgZGlyZWN0aW9uID0gX3RoaXMucHJvcHMuZGlyZWN0aW9uO1xuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBzY3JvbGxMZWZ0O1xuXG4gICAgICAgICAgaWYgKGRpcmVjdGlvbiA9PT0gJ3J0bCcpIHtcbiAgICAgICAgICAgIC8vIFRSSUNLWSBBY2NvcmRpbmcgdG8gdGhlIHNwZWMsIHNjcm9sbExlZnQgc2hvdWxkIGJlIG5lZ2F0aXZlIGZvciBSVEwgYWxpZ25lZCBlbGVtZW50cy5cbiAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBjYXNlIGZvciBhbGwgYnJvd3NlcnMgdGhvdWdoIChlLmcuIENocm9tZSByZXBvcnRzIHZhbHVlcyBhcyBwb3NpdGl2ZSwgbWVhc3VyZWQgcmVsYXRpdmUgdG8gdGhlIGxlZnQpLlxuICAgICAgICAgICAgLy8gSXQncyBhbHNvIGVhc2llciBmb3IgdGhpcyBjb21wb25lbnQgaWYgd2UgY29udmVydCBvZmZzZXRzIHRvIHRoZSBzYW1lIGZvcm1hdCBhcyB0aGV5IHdvdWxkIGJlIGluIGZvciBsdHIuXG4gICAgICAgICAgICAvLyBTbyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgY29udmVydCBiYXNlZCBvbiBpdC5cbiAgICAgICAgICAgIHN3aXRjaCAoZ2V0UlRMT2Zmc2V0VHlwZSgpKSB7XG4gICAgICAgICAgICAgIGNhc2UgJ25lZ2F0aXZlJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSAtc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlICdwb3NpdGl2ZS1kZXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gc2Nyb2xsTGVmdDtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IC8vIFByZXZlbnQgU2FmYXJpJ3MgZWxhc3RpYyBzY3JvbGxpbmcgZnJvbSBjYXVzaW5nIHZpc3VhbCBzaGFraW5nIHdoZW4gc2Nyb2xsaW5nIHBhc3QgYm91bmRzLlxuXG5cbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxPZmZzZXQsIHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGgpKTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWUsXG4gICAgICAgICAgICBzY3JvbGxEaXJlY3Rpb246IHByZXZTdGF0ZS5zY3JvbGxPZmZzZXQgPCBzY3JvbGxMZWZ0ID8gJ2ZvcndhcmQnIDogJ2JhY2t3YXJkJyxcbiAgICAgICAgICAgIHNjcm9sbE9mZnNldDogc2Nyb2xsT2Zmc2V0LFxuICAgICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiBmYWxzZVxuICAgICAgICAgIH07XG4gICAgICAgIH0sIF90aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICAgIH07XG5cbiAgICAgIF90aGlzLl9vblNjcm9sbFZlcnRpY2FsID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIHZhciBfZXZlbnQkY3VycmVudFRhcmdldDIgPSBldmVudC5jdXJyZW50VGFyZ2V0LFxuICAgICAgICAgICAgY2xpZW50SGVpZ2h0ID0gX2V2ZW50JGN1cnJlbnRUYXJnZXQyLmNsaWVudEhlaWdodCxcbiAgICAgICAgICAgIHNjcm9sbEhlaWdodCA9IF9ldmVudCRjdXJyZW50VGFyZ2V0Mi5zY3JvbGxIZWlnaHQsXG4gICAgICAgICAgICBzY3JvbGxUb3AgPSBfZXZlbnQkY3VycmVudFRhcmdldDIuc2Nyb2xsVG9wO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKGZ1bmN0aW9uIChwcmV2U3RhdGUpIHtcbiAgICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsVG9wKSB7XG4gICAgICAgICAgICAvLyBTY3JvbGwgcG9zaXRpb24gbWF5IGhhdmUgYmVlbiB1cGRhdGVkIGJ5IGNETS9jRFUsXG4gICAgICAgICAgICAvLyBJbiB3aGljaCBjYXNlIHdlIGRvbid0IG5lZWQgdG8gdHJpZ2dlciBhbm90aGVyIHJlbmRlcixcbiAgICAgICAgICAgIC8vIEFuZCB3ZSBkb24ndCB3YW50IHRvIHVwZGF0ZSBzdGF0ZS5pc1Njcm9sbGluZy5cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgIH0gLy8gUHJldmVudCBTYWZhcmkncyBlbGFzdGljIHNjcm9sbGluZyBmcm9tIGNhdXNpbmcgdmlzdWFsIHNoYWtpbmcgd2hlbiBzY3JvbGxpbmcgcGFzdCBib3VuZHMuXG5cblxuICAgICAgICAgIHZhciBzY3JvbGxPZmZzZXQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbihzY3JvbGxUb3AsIHNjcm9sbEhlaWdodCAtIGNsaWVudEhlaWdodCkpO1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZSxcbiAgICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgICBzY3JvbGxPZmZzZXQ6IHNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIHNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZDogZmFsc2VcbiAgICAgICAgICB9O1xuICAgICAgICB9LCBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fb3V0ZXJSZWZTZXR0ZXIgPSBmdW5jdGlvbiAocmVmKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IF90aGlzLnByb3BzLm91dGVyUmVmO1xuICAgICAgICBfdGhpcy5fb3V0ZXJSZWYgPSByZWY7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBvdXRlclJlZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIG91dGVyUmVmKHJlZik7XG4gICAgICAgIH0gZWxzZSBpZiAob3V0ZXJSZWYgIT0gbnVsbCAmJiB0eXBlb2Ygb3V0ZXJSZWYgPT09ICdvYmplY3QnICYmIG91dGVyUmVmLmhhc093blByb3BlcnR5KCdjdXJyZW50JykpIHtcbiAgICAgICAgICBvdXRlclJlZi5jdXJyZW50ID0gcmVmO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ0RlYm91bmNlZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKF90aGlzLl9yZXNldElzU2Nyb2xsaW5nVGltZW91dElkICE9PSBudWxsKSB7XG4gICAgICAgICAgY2FuY2VsVGltZW91dChfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCk7XG4gICAgICAgIH1cblxuICAgICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCA9IHJlcXVlc3RUaW1lb3V0KF90aGlzLl9yZXNldElzU2Nyb2xsaW5nLCBJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSk7XG4gICAgICB9O1xuXG4gICAgICBfdGhpcy5fcmVzZXRJc1Njcm9sbGluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgX3RoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQgPSBudWxsO1xuXG4gICAgICAgIF90aGlzLnNldFN0YXRlKHtcbiAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgIC8vIENsZWFyIHN0eWxlIGNhY2hlIGFmdGVyIHN0YXRlIHVwZGF0ZSBoYXMgYmVlbiBjb21taXR0ZWQuXG4gICAgICAgICAgLy8gVGhpcyB3YXkgd2UgZG9uJ3QgYnJlYWsgcHVyZSBzQ1UgZm9yIGl0ZW1zIHRoYXQgZG9uJ3QgdXNlIGlzU2Nyb2xsaW5nIHBhcmFtLlxuICAgICAgICAgIF90aGlzLl9nZXRJdGVtU3R5bGVDYWNoZSgtMSwgbnVsbCk7XG4gICAgICAgIH0pO1xuICAgICAgfTtcblxuICAgICAgcmV0dXJuIF90aGlzO1xuICAgIH1cblxuICAgIExpc3QuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzID0gZnVuY3Rpb24gZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzKG5leHRQcm9wcywgcHJldlN0YXRlKSB7XG4gICAgICB2YWxpZGF0ZVNoYXJlZFByb3BzJDEobmV4dFByb3BzLCBwcmV2U3RhdGUpO1xuICAgICAgdmFsaWRhdGVQcm9wcyhuZXh0UHJvcHMpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfTtcblxuICAgIHZhciBfcHJvdG8gPSBMaXN0LnByb3RvdHlwZTtcblxuICAgIF9wcm90by5zY3JvbGxUbyA9IGZ1bmN0aW9uIHNjcm9sbFRvKHNjcm9sbE9mZnNldCkge1xuICAgICAgc2Nyb2xsT2Zmc2V0ID0gTWF0aC5tYXgoMCwgc2Nyb2xsT2Zmc2V0KTtcbiAgICAgIHRoaXMuc2V0U3RhdGUoZnVuY3Rpb24gKHByZXZTdGF0ZSkge1xuICAgICAgICBpZiAocHJldlN0YXRlLnNjcm9sbE9mZnNldCA9PT0gc2Nyb2xsT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbjogcHJldlN0YXRlLnNjcm9sbE9mZnNldCA8IHNjcm9sbE9mZnNldCA/ICdmb3J3YXJkJyA6ICdiYWNrd2FyZCcsXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0OiBzY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkOiB0cnVlXG4gICAgICAgIH07XG4gICAgICB9LCB0aGlzLl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLnNjcm9sbFRvSXRlbSA9IGZ1bmN0aW9uIHNjcm9sbFRvSXRlbShpbmRleCwgYWxpZ24pIHtcbiAgICAgIGlmIChhbGlnbiA9PT0gdm9pZCAwKSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfVxuXG4gICAgICB2YXIgX3RoaXMkcHJvcHMyID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczIuaXRlbUNvdW50LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzMi5sYXlvdXQ7XG4gICAgICB2YXIgc2Nyb2xsT2Zmc2V0ID0gdGhpcy5zdGF0ZS5zY3JvbGxPZmZzZXQ7XG4gICAgICBpbmRleCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGluZGV4LCBpdGVtQ291bnQgLSAxKSk7IC8vIFRoZSBzY3JvbGxiYXIgc2l6ZSBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIHNjcm9sbGluZyBhbiBpdGVtIGludG8gdmlldywgdG8gZW5zdXJlIGl0J3MgZnVsbHkgdmlzaWJsZS5cbiAgICAgIC8vIEJ1dCB3ZSBvbmx5IG5lZWQgdG8gYWNjb3VudCBmb3IgaXRzIHNpemUgd2hlbiBpdCdzIGFjdHVhbGx5IHZpc2libGUuXG4gICAgICAvLyBUaGlzIGlzIGFuIGVkZ2UgY2FzZSBmb3IgbGlzdHM7IG5vcm1hbGx5IHRoZXkgb25seSBzY3JvbGwgaW4gdGhlIGRvbWluYW50IGRpcmVjdGlvbi5cblxuICAgICAgdmFyIHNjcm9sbGJhclNpemUgPSAwO1xuXG4gICAgICBpZiAodGhpcy5fb3V0ZXJSZWYpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7XG5cbiAgICAgICAgaWYgKGxheW91dCA9PT0gJ3ZlcnRpY2FsJykge1xuICAgICAgICAgIHNjcm9sbGJhclNpemUgPSBvdXRlclJlZi5zY3JvbGxXaWR0aCA+IG91dGVyUmVmLmNsaWVudFdpZHRoID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBzY3JvbGxiYXJTaXplID0gb3V0ZXJSZWYuc2Nyb2xsSGVpZ2h0ID4gb3V0ZXJSZWYuY2xpZW50SGVpZ2h0ID8gZ2V0U2Nyb2xsYmFyU2l6ZSgpIDogMDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLnNjcm9sbFRvKGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KHRoaXMucHJvcHMsIGluZGV4LCBhbGlnbiwgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSk7XG4gICAgfTtcblxuICAgIF9wcm90by5jb21wb25lbnREaWRNb3VudCA9IGZ1bmN0aW9uIGNvbXBvbmVudERpZE1vdW50KCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzMyA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHMzLmRpcmVjdGlvbixcbiAgICAgICAgICBpbml0aWFsU2Nyb2xsT2Zmc2V0ID0gX3RoaXMkcHJvcHMzLmluaXRpYWxTY3JvbGxPZmZzZXQsXG4gICAgICAgICAgbGF5b3V0ID0gX3RoaXMkcHJvcHMzLmxheW91dDtcblxuICAgICAgaWYgKHR5cGVvZiBpbml0aWFsU2Nyb2xsT2Zmc2V0ID09PSAnbnVtYmVyJyAmJiB0aGlzLl9vdXRlclJlZiAhPSBudWxsKSB7XG4gICAgICAgIHZhciBvdXRlclJlZiA9IHRoaXMuX291dGVyUmVmOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgICBpZiAoZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCcpIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gaW5pdGlhbFNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRlclJlZi5zY3JvbGxUb3AgPSBpbml0aWFsU2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2NhbGxQcm9wc0NhbGxiYWNrcygpO1xuICAgIH07XG5cbiAgICBfcHJvdG8uY29tcG9uZW50RGlkVXBkYXRlID0gZnVuY3Rpb24gY29tcG9uZW50RGlkVXBkYXRlKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNCA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgZGlyZWN0aW9uID0gX3RoaXMkcHJvcHM0LmRpcmVjdGlvbixcbiAgICAgICAgICBsYXlvdXQgPSBfdGhpcyRwcm9wczQubGF5b3V0O1xuICAgICAgdmFyIF90aGlzJHN0YXRlID0gdGhpcy5zdGF0ZSxcbiAgICAgICAgICBzY3JvbGxPZmZzZXQgPSBfdGhpcyRzdGF0ZS5zY3JvbGxPZmZzZXQsXG4gICAgICAgICAgc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkID0gX3RoaXMkc3RhdGUuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICBpZiAoc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkICYmIHRoaXMuX291dGVyUmVmICE9IG51bGwpIHtcbiAgICAgICAgdmFyIG91dGVyUmVmID0gdGhpcy5fb3V0ZXJSZWY7IC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuXG4gICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJykge1xuICAgICAgICAgIGlmIChkaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgICAgICAgICAvLyBUUklDS1kgQWNjb3JkaW5nIHRvIHRoZSBzcGVjLCBzY3JvbGxMZWZ0IHNob3VsZCBiZSBuZWdhdGl2ZSBmb3IgUlRMIGFsaWduZWQgZWxlbWVudHMuXG4gICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCB0aGUgY2FzZSBmb3IgYWxsIGJyb3dzZXJzIHRob3VnaCAoZS5nLiBDaHJvbWUgcmVwb3J0cyB2YWx1ZXMgYXMgcG9zaXRpdmUsIG1lYXN1cmVkIHJlbGF0aXZlIHRvIHRoZSBsZWZ0KS5cbiAgICAgICAgICAgIC8vIFNvIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoaWNoIGJyb3dzZXIgYmVoYXZpb3Igd2UncmUgZGVhbGluZyB3aXRoLCBhbmQgbWltaWMgaXQuXG4gICAgICAgICAgICBzd2l0Y2ggKGdldFJUTE9mZnNldFR5cGUoKSkge1xuICAgICAgICAgICAgICBjYXNlICduZWdhdGl2ZSc6XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IC1zY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSAncG9zaXRpdmUtYXNjZW5kaW5nJzpcbiAgICAgICAgICAgICAgICBvdXRlclJlZi5zY3JvbGxMZWZ0ID0gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdmFyIGNsaWVudFdpZHRoID0gb3V0ZXJSZWYuY2xpZW50V2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFdpZHRoID0gb3V0ZXJSZWYuc2Nyb2xsV2lkdGg7XG4gICAgICAgICAgICAgICAgb3V0ZXJSZWYuc2Nyb2xsTGVmdCA9IHNjcm9sbFdpZHRoIC0gY2xpZW50V2lkdGggLSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG91dGVyUmVmLnNjcm9sbExlZnQgPSBzY3JvbGxPZmZzZXQ7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dGVyUmVmLnNjcm9sbFRvcCA9IHNjcm9sbE9mZnNldDtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jYWxsUHJvcHNDYWxsYmFja3MoKTtcbiAgICB9O1xuXG4gICAgX3Byb3RvLmNvbXBvbmVudFdpbGxVbm1vdW50ID0gZnVuY3Rpb24gY29tcG9uZW50V2lsbFVubW91bnQoKSB7XG4gICAgICBpZiAodGhpcy5fcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCAhPT0gbnVsbCkge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KHRoaXMuX3Jlc2V0SXNTY3JvbGxpbmdUaW1lb3V0SWQpO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBfcHJvdG8ucmVuZGVyID0gZnVuY3Rpb24gcmVuZGVyKCkge1xuICAgICAgdmFyIF90aGlzJHByb3BzNSA9IHRoaXMucHJvcHMsXG4gICAgICAgICAgY2hpbGRyZW4gPSBfdGhpcyRwcm9wczUuY2hpbGRyZW4sXG4gICAgICAgICAgY2xhc3NOYW1lID0gX3RoaXMkcHJvcHM1LmNsYXNzTmFtZSxcbiAgICAgICAgICBkaXJlY3Rpb24gPSBfdGhpcyRwcm9wczUuZGlyZWN0aW9uLFxuICAgICAgICAgIGhlaWdodCA9IF90aGlzJHByb3BzNS5oZWlnaHQsXG4gICAgICAgICAgaW5uZXJSZWYgPSBfdGhpcyRwcm9wczUuaW5uZXJSZWYsXG4gICAgICAgICAgaW5uZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5pbm5lckVsZW1lbnRUeXBlLFxuICAgICAgICAgIGlubmVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5pbm5lclRhZ05hbWUsXG4gICAgICAgICAgaXRlbUNvdW50ID0gX3RoaXMkcHJvcHM1Lml0ZW1Db3VudCxcbiAgICAgICAgICBpdGVtRGF0YSA9IF90aGlzJHByb3BzNS5pdGVtRGF0YSxcbiAgICAgICAgICBfdGhpcyRwcm9wczUkaXRlbUtleSA9IF90aGlzJHByb3BzNS5pdGVtS2V5LFxuICAgICAgICAgIGl0ZW1LZXkgPSBfdGhpcyRwcm9wczUkaXRlbUtleSA9PT0gdm9pZCAwID8gZGVmYXVsdEl0ZW1LZXkkMSA6IF90aGlzJHByb3BzNSRpdGVtS2V5LFxuICAgICAgICAgIGxheW91dCA9IF90aGlzJHByb3BzNS5sYXlvdXQsXG4gICAgICAgICAgb3V0ZXJFbGVtZW50VHlwZSA9IF90aGlzJHByb3BzNS5vdXRlckVsZW1lbnRUeXBlLFxuICAgICAgICAgIG91dGVyVGFnTmFtZSA9IF90aGlzJHByb3BzNS5vdXRlclRhZ05hbWUsXG4gICAgICAgICAgc3R5bGUgPSBfdGhpcyRwcm9wczUuc3R5bGUsXG4gICAgICAgICAgdXNlSXNTY3JvbGxpbmcgPSBfdGhpcyRwcm9wczUudXNlSXNTY3JvbGxpbmcsXG4gICAgICAgICAgd2lkdGggPSBfdGhpcyRwcm9wczUud2lkdGg7XG4gICAgICB2YXIgaXNTY3JvbGxpbmcgPSB0aGlzLnN0YXRlLmlzU2Nyb2xsaW5nOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgICAgdmFyIG9uU2Nyb2xsID0gaXNIb3Jpem9udGFsID8gdGhpcy5fb25TY3JvbGxIb3Jpem9udGFsIDogdGhpcy5fb25TY3JvbGxWZXJ0aWNhbDtcblxuICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZCA9IHRoaXMuX2dldFJhbmdlVG9SZW5kZXIoKSxcbiAgICAgICAgICBzdGFydEluZGV4ID0gX3RoaXMkX2dldFJhbmdlVG9SZW5kWzBdLFxuICAgICAgICAgIHN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZFsxXTtcblxuICAgICAgdmFyIGl0ZW1zID0gW107XG5cbiAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgIGZvciAodmFyIF9pbmRleCA9IHN0YXJ0SW5kZXg7IF9pbmRleCA8PSBzdG9wSW5kZXg7IF9pbmRleCsrKSB7XG4gICAgICAgICAgaXRlbXMucHVzaChjcmVhdGVFbGVtZW50KGNoaWxkcmVuLCB7XG4gICAgICAgICAgICBkYXRhOiBpdGVtRGF0YSxcbiAgICAgICAgICAgIGtleTogaXRlbUtleShfaW5kZXgsIGl0ZW1EYXRhKSxcbiAgICAgICAgICAgIGluZGV4OiBfaW5kZXgsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdXNlSXNTY3JvbGxpbmcgPyBpc1Njcm9sbGluZyA6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHN0eWxlOiB0aGlzLl9nZXRJdGVtU3R5bGUoX2luZGV4KVxuICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgfSAvLyBSZWFkIHRoaXMgdmFsdWUgQUZURVIgaXRlbXMgaGF2ZSBiZWVuIGNyZWF0ZWQsXG4gICAgICAvLyBTbyB0aGVpciBhY3R1YWwgc2l6ZXMgKGlmIHZhcmlhYmxlKSBhcmUgdGFrZW4gaW50byBjb25zaWRlcmF0aW9uLlxuXG5cbiAgICAgIHZhciBlc3RpbWF0ZWRUb3RhbFNpemUgPSBnZXRFc3RpbWF0ZWRUb3RhbFNpemUodGhpcy5wcm9wcywgdGhpcy5faW5zdGFuY2VQcm9wcyk7XG4gICAgICByZXR1cm4gY3JlYXRlRWxlbWVudChvdXRlckVsZW1lbnRUeXBlIHx8IG91dGVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjbGFzc05hbWU6IGNsYXNzTmFtZSxcbiAgICAgICAgb25TY3JvbGw6IG9uU2Nyb2xsLFxuICAgICAgICByZWY6IHRoaXMuX291dGVyUmVmU2V0dGVyLFxuICAgICAgICBzdHlsZTogX2V4dGVuZHMoe1xuICAgICAgICAgIHBvc2l0aW9uOiAncmVsYXRpdmUnLFxuICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICBvdmVyZmxvdzogJ2F1dG8nLFxuICAgICAgICAgIFdlYmtpdE92ZXJmbG93U2Nyb2xsaW5nOiAndG91Y2gnLFxuICAgICAgICAgIHdpbGxDaGFuZ2U6ICd0cmFuc2Zvcm0nLFxuICAgICAgICAgIGRpcmVjdGlvbjogZGlyZWN0aW9uXG4gICAgICAgIH0sIHN0eWxlKVxuICAgICAgfSwgY3JlYXRlRWxlbWVudChpbm5lckVsZW1lbnRUeXBlIHx8IGlubmVyVGFnTmFtZSB8fCAnZGl2Jywge1xuICAgICAgICBjaGlsZHJlbjogaXRlbXMsXG4gICAgICAgIHJlZjogaW5uZXJSZWYsXG4gICAgICAgIHN0eWxlOiB7XG4gICAgICAgICAgaGVpZ2h0OiBpc0hvcml6b250YWwgPyAnMTAwJScgOiBlc3RpbWF0ZWRUb3RhbFNpemUsXG4gICAgICAgICAgcG9pbnRlckV2ZW50czogaXNTY3JvbGxpbmcgPyAnbm9uZScgOiB1bmRlZmluZWQsXG4gICAgICAgICAgd2lkdGg6IGlzSG9yaXpvbnRhbCA/IGVzdGltYXRlZFRvdGFsU2l6ZSA6ICcxMDAlJ1xuICAgICAgICB9XG4gICAgICB9KSk7XG4gICAgfTtcblxuICAgIF9wcm90by5fY2FsbFByb3BzQ2FsbGJhY2tzID0gZnVuY3Rpb24gX2NhbGxQcm9wc0NhbGxiYWNrcygpIHtcbiAgICAgIGlmICh0eXBlb2YgdGhpcy5wcm9wcy5vbkl0ZW1zUmVuZGVyZWQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdmFyIGl0ZW1Db3VudCA9IHRoaXMucHJvcHMuaXRlbUNvdW50O1xuXG4gICAgICAgIGlmIChpdGVtQ291bnQgPiAwKSB7XG4gICAgICAgICAgdmFyIF90aGlzJF9nZXRSYW5nZVRvUmVuZDIgPSB0aGlzLl9nZXRSYW5nZVRvUmVuZGVyKCksXG4gICAgICAgICAgICAgIF9vdmVyc2NhblN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzBdLFxuICAgICAgICAgICAgICBfb3ZlcnNjYW5TdG9wSW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzFdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0YXJ0SW5kZXggPSBfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyWzJdLFxuICAgICAgICAgICAgICBfdmlzaWJsZVN0b3BJbmRleCA9IF90aGlzJF9nZXRSYW5nZVRvUmVuZDJbM107XG5cbiAgICAgICAgICB0aGlzLl9jYWxsT25JdGVtc1JlbmRlcmVkKF9vdmVyc2NhblN0YXJ0SW5kZXgsIF9vdmVyc2NhblN0b3BJbmRleCwgX3Zpc2libGVTdGFydEluZGV4LCBfdmlzaWJsZVN0b3BJbmRleCk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiB0aGlzLnByb3BzLm9uU2Nyb2xsID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHZhciBfdGhpcyRzdGF0ZTIgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgICAgX3Njcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMi5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgICBfc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUyLnNjcm9sbE9mZnNldCxcbiAgICAgICAgICAgIF9zY3JvbGxVcGRhdGVXYXNSZXF1ZXN0ZWQgPSBfdGhpcyRzdGF0ZTIuc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkO1xuXG4gICAgICAgIHRoaXMuX2NhbGxPblNjcm9sbChfc2Nyb2xsRGlyZWN0aW9uLCBfc2Nyb2xsT2Zmc2V0LCBfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkKTtcbiAgICAgIH1cbiAgICB9IC8vIExhemlseSBjcmVhdGUgYW5kIGNhY2hlIGl0ZW0gc3R5bGVzIHdoaWxlIHNjcm9sbGluZyxcbiAgICAvLyBTbyB0aGF0IHB1cmUgY29tcG9uZW50IHNDVSB3aWxsIHByZXZlbnQgcmUtcmVuZGVycy5cbiAgICAvLyBXZSBtYWludGFpbiB0aGlzIGNhY2hlLCBhbmQgcGFzcyBhIHN0eWxlIHByb3AgcmF0aGVyIHRoYW4gaW5kZXgsXG4gICAgLy8gU28gdGhhdCBMaXN0IGNhbiBjbGVhciBjYWNoZWQgc3R5bGVzIGFuZCBmb3JjZSBpdGVtIHJlLXJlbmRlciBpZiBuZWNlc3NhcnkuXG4gICAgO1xuXG4gICAgX3Byb3RvLl9nZXRSYW5nZVRvUmVuZGVyID0gZnVuY3Rpb24gX2dldFJhbmdlVG9SZW5kZXIoKSB7XG4gICAgICB2YXIgX3RoaXMkcHJvcHM2ID0gdGhpcy5wcm9wcyxcbiAgICAgICAgICBpdGVtQ291bnQgPSBfdGhpcyRwcm9wczYuaXRlbUNvdW50LFxuICAgICAgICAgIG92ZXJzY2FuQ291bnQgPSBfdGhpcyRwcm9wczYub3ZlcnNjYW5Db3VudDtcbiAgICAgIHZhciBfdGhpcyRzdGF0ZTMgPSB0aGlzLnN0YXRlLFxuICAgICAgICAgIGlzU2Nyb2xsaW5nID0gX3RoaXMkc3RhdGUzLmlzU2Nyb2xsaW5nLFxuICAgICAgICAgIHNjcm9sbERpcmVjdGlvbiA9IF90aGlzJHN0YXRlMy5zY3JvbGxEaXJlY3Rpb24sXG4gICAgICAgICAgc2Nyb2xsT2Zmc2V0ID0gX3RoaXMkc3RhdGUzLnNjcm9sbE9mZnNldDtcblxuICAgICAgaWYgKGl0ZW1Db3VudCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gWzAsIDAsIDAsIDBdO1xuICAgICAgfVxuXG4gICAgICB2YXIgc3RhcnRJbmRleCA9IGdldFN0YXJ0SW5kZXhGb3JPZmZzZXQodGhpcy5wcm9wcywgc2Nyb2xsT2Zmc2V0LCB0aGlzLl9pbnN0YW5jZVByb3BzKTtcbiAgICAgIHZhciBzdG9wSW5kZXggPSBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHRoaXMucHJvcHMsIHN0YXJ0SW5kZXgsIHNjcm9sbE9mZnNldCwgdGhpcy5faW5zdGFuY2VQcm9wcyk7IC8vIE92ZXJzY2FuIGJ5IG9uZSBpdGVtIGluIGVhY2ggZGlyZWN0aW9uIHNvIHRoYXQgdGFiL2ZvY3VzIHdvcmtzLlxuICAgICAgLy8gSWYgdGhlcmUgaXNuJ3QgYXQgbGVhc3Qgb25lIGV4dHJhIGl0ZW0sIHRhYiBsb29wcyBiYWNrIGFyb3VuZC5cblxuICAgICAgdmFyIG92ZXJzY2FuQmFja3dhcmQgPSAhaXNTY3JvbGxpbmcgfHwgc2Nyb2xsRGlyZWN0aW9uID09PSAnYmFja3dhcmQnID8gTWF0aC5tYXgoMSwgb3ZlcnNjYW5Db3VudCkgOiAxO1xuICAgICAgdmFyIG92ZXJzY2FuRm9yd2FyZCA9ICFpc1Njcm9sbGluZyB8fCBzY3JvbGxEaXJlY3Rpb24gPT09ICdmb3J3YXJkJyA/IE1hdGgubWF4KDEsIG92ZXJzY2FuQ291bnQpIDogMTtcbiAgICAgIHJldHVybiBbTWF0aC5tYXgoMCwgc3RhcnRJbmRleCAtIG92ZXJzY2FuQmFja3dhcmQpLCBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBzdG9wSW5kZXggKyBvdmVyc2NhbkZvcndhcmQpKSwgc3RhcnRJbmRleCwgc3RvcEluZGV4XTtcbiAgICB9O1xuXG4gICAgcmV0dXJuIExpc3Q7XG4gIH0oUHVyZUNvbXBvbmVudCksIF9jbGFzcy5kZWZhdWx0UHJvcHMgPSB7XG4gICAgZGlyZWN0aW9uOiAnbHRyJyxcbiAgICBpdGVtRGF0YTogdW5kZWZpbmVkLFxuICAgIGxheW91dDogJ3ZlcnRpY2FsJyxcbiAgICBvdmVyc2NhbkNvdW50OiAyLFxuICAgIHVzZUlzU2Nyb2xsaW5nOiBmYWxzZVxuICB9LCBfY2xhc3M7XG59IC8vIE5PVEU6IEkgY29uc2lkZXJlZCBmdXJ0aGVyIHdyYXBwaW5nIGluZGl2aWR1YWwgaXRlbXMgd2l0aCBhIHB1cmUgTGlzdEl0ZW0gY29tcG9uZW50LlxuLy8gVGhpcyB3b3VsZCBhdm9pZCBldmVyIGNhbGxpbmcgdGhlIHJlbmRlciBmdW5jdGlvbiBmb3IgdGhlIHNhbWUgaW5kZXggbW9yZSB0aGFuIG9uY2UsXG4vLyBCdXQgaXQgd291bGQgYWxzbyBhZGQgdGhlIG92ZXJoZWFkIG9mIGEgbG90IG9mIGNvbXBvbmVudHMvZmliZXJzLlxuLy8gSSBhc3N1bWUgcGVvcGxlIGFscmVhZHkgZG8gdGhpcyAocmVuZGVyIGZ1bmN0aW9uIHJldHVybmluZyBhIGNsYXNzIGNvbXBvbmVudCksXG4vLyBTbyBteSBkb2luZyBpdCB3b3VsZCBqdXN0IHVubmVjZXNzYXJpbHkgZG91YmxlIHRoZSB3cmFwcGVycy5cblxudmFyIHZhbGlkYXRlU2hhcmVkUHJvcHMkMSA9IGZ1bmN0aW9uIHZhbGlkYXRlU2hhcmVkUHJvcHMoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBjaGlsZHJlbiA9IF9yZWYyLmNoaWxkcmVuLFxuICAgICAgZGlyZWN0aW9uID0gX3JlZjIuZGlyZWN0aW9uLFxuICAgICAgaGVpZ2h0ID0gX3JlZjIuaGVpZ2h0LFxuICAgICAgbGF5b3V0ID0gX3JlZjIubGF5b3V0LFxuICAgICAgaW5uZXJUYWdOYW1lID0gX3JlZjIuaW5uZXJUYWdOYW1lLFxuICAgICAgb3V0ZXJUYWdOYW1lID0gX3JlZjIub3V0ZXJUYWdOYW1lLFxuICAgICAgd2lkdGggPSBfcmVmMi53aWR0aDtcbiAgdmFyIGluc3RhbmNlID0gX3JlZjMuaW5zdGFuY2U7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSAncHJvZHVjdGlvbicpIHtcbiAgICBpZiAoaW5uZXJUYWdOYW1lICE9IG51bGwgfHwgb3V0ZXJUYWdOYW1lICE9IG51bGwpIHtcbiAgICAgIGlmIChkZXZXYXJuaW5nc1RhZ05hbWUkMSAmJiAhZGV2V2FybmluZ3NUYWdOYW1lJDEuaGFzKGluc3RhbmNlKSkge1xuICAgICAgICBkZXZXYXJuaW5nc1RhZ05hbWUkMS5hZGQoaW5zdGFuY2UpO1xuICAgICAgICBjb25zb2xlLndhcm4oJ1RoZSBpbm5lclRhZ05hbWUgYW5kIG91dGVyVGFnTmFtZSBwcm9wcyBoYXZlIGJlZW4gZGVwcmVjYXRlZC4gJyArICdQbGVhc2UgdXNlIHRoZSBpbm5lckVsZW1lbnRUeXBlIGFuZCBvdXRlckVsZW1lbnRUeXBlIHByb3BzIGluc3RlYWQuJyk7XG4gICAgICB9XG4gICAgfSAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuXG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICBpZiAoZGV2V2FybmluZ3NEaXJlY3Rpb24gJiYgIWRldldhcm5pbmdzRGlyZWN0aW9uLmhhcyhpbnN0YW5jZSkpIHtcbiAgICAgICAgICBkZXZXYXJuaW5nc0RpcmVjdGlvbi5hZGQoaW5zdGFuY2UpO1xuICAgICAgICAgIGNvbnNvbGUud2FybignVGhlIGRpcmVjdGlvbiBwcm9wIHNob3VsZCBiZSBlaXRoZXIgXCJsdHJcIiAoZGVmYXVsdCkgb3IgXCJydGxcIi4gJyArICdQbGVhc2UgdXNlIHRoZSBsYXlvdXQgcHJvcCB0byBzcGVjaWZ5IFwidmVydGljYWxcIiAoZGVmYXVsdCkgb3IgXCJob3Jpem9udGFsXCIgb3JpZW50YXRpb24uJyk7XG4gICAgICAgIH1cblxuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAnbHRyJzpcbiAgICAgIGNhc2UgJ3J0bCc6XG4gICAgICAgIC8vIFZhbGlkIHZhbHVlc1xuICAgICAgICBicmVhaztcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJkaXJlY3Rpb25cIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgZWl0aGVyIFwibHRyXCIgb3IgXCJydGxcIi4gJyArIChcIlxcXCJcIiArIGRpcmVjdGlvbiArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgc3dpdGNoIChsYXlvdXQpIHtcbiAgICAgIGNhc2UgJ2hvcml6b250YWwnOlxuICAgICAgY2FzZSAndmVydGljYWwnOlxuICAgICAgICAvLyBWYWxpZCB2YWx1ZXNcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IEVycm9yKCdBbiBpbnZhbGlkIFwibGF5b3V0XCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGVpdGhlciBcImhvcml6b250YWxcIiBvciBcInZlcnRpY2FsXCIuICcgKyAoXCJcXFwiXCIgKyBsYXlvdXQgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgIH1cblxuICAgIGlmIChjaGlsZHJlbiA9PSBudWxsKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImNoaWxkcmVuXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgUmVhY3QgY29tcG9uZW50LiAnICsgKFwiXFxcIlwiICsgKGNoaWxkcmVuID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIGNoaWxkcmVuKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfVxuXG4gICAgaWYgKGlzSG9yaXpvbnRhbCAmJiB0eXBlb2Ygd2lkdGggIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIndpZHRoXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnSG9yaXpvbnRhbCBsaXN0cyBtdXN0IHNwZWNpZnkgYSBudW1iZXIgZm9yIHdpZHRoLiAnICsgKFwiXFxcIlwiICsgKHdpZHRoID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHdpZHRoKSArIFwiXFxcIiB3YXMgc3BlY2lmaWVkLlwiKSk7XG4gICAgfSBlbHNlIGlmICghaXNIb3Jpem9udGFsICYmIHR5cGVvZiBoZWlnaHQgIT09ICdudW1iZXInKSB7XG4gICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcImhlaWdodFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZlcnRpY2FsIGxpc3RzIG11c3Qgc3BlY2lmeSBhIG51bWJlciBmb3IgaGVpZ2h0LiAnICsgKFwiXFxcIlwiICsgKGhlaWdodCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBoZWlnaHQpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICB9XG4gIH1cbn07XG5cbnZhciBERUZBVUxUX0VTVElNQVRFRF9JVEVNX1NJWkUkMSA9IDUwO1xuXG52YXIgZ2V0SXRlbU1ldGFkYXRhJDEgPSBmdW5jdGlvbiBnZXRJdGVtTWV0YWRhdGEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKSB7XG4gIHZhciBfcmVmID0gcHJvcHMsXG4gICAgICBpdGVtU2l6ZSA9IF9yZWYuaXRlbVNpemU7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcblxuICBpZiAoaW5kZXggPiBsYXN0TWVhc3VyZWRJbmRleCkge1xuICAgIHZhciBvZmZzZXQgPSAwO1xuXG4gICAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IDApIHtcbiAgICAgIHZhciBpdGVtTWV0YWRhdGEgPSBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdO1xuICAgICAgb2Zmc2V0ID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgPSBsYXN0TWVhc3VyZWRJbmRleCArIDE7IGkgPD0gaW5kZXg7IGkrKykge1xuICAgICAgdmFyIHNpemUgPSBpdGVtU2l6ZShpKTtcbiAgICAgIGl0ZW1NZXRhZGF0YU1hcFtpXSA9IHtcbiAgICAgICAgb2Zmc2V0OiBvZmZzZXQsXG4gICAgICAgIHNpemU6IHNpemVcbiAgICAgIH07XG4gICAgICBvZmZzZXQgKz0gc2l6ZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZVByb3BzLmxhc3RNZWFzdXJlZEluZGV4ID0gaW5kZXg7XG4gIH1cblxuICByZXR1cm4gaXRlbU1ldGFkYXRhTWFwW2luZGV4XTtcbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW0kMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbShwcm9wcywgaW5zdGFuY2VQcm9wcywgb2Zmc2V0KSB7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcCxcbiAgICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPSBsYXN0TWVhc3VyZWRJbmRleCA+IDAgPyBpdGVtTWV0YWRhdGFNYXBbbGFzdE1lYXN1cmVkSW5kZXhdLm9mZnNldCA6IDA7XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEl0ZW1PZmZzZXQgPj0gb2Zmc2V0KSB7XG4gICAgLy8gSWYgd2UndmUgYWxyZWFkeSBtZWFzdXJlZCBpdGVtcyB3aXRoaW4gdGhpcyByYW5nZSBqdXN0IHVzZSBhIGJpbmFyeSBzZWFyY2ggYXMgaXQncyBmYXN0ZXIuXG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBsYXN0TWVhc3VyZWRJbmRleCwgMCwgb2Zmc2V0KTtcbiAgfSBlbHNlIHtcbiAgICAvLyBJZiB3ZSBoYXZlbid0IHlldCBtZWFzdXJlZCB0aGlzIGhpZ2gsIGZhbGxiYWNrIHRvIGFuIGV4cG9uZW50aWFsIHNlYXJjaCB3aXRoIGFuIGlubmVyIGJpbmFyeSBzZWFyY2guXG4gICAgLy8gVGhlIGV4cG9uZW50aWFsIHNlYXJjaCBhdm9pZHMgcHJlLWNvbXB1dGluZyBzaXplcyBmb3IgdGhlIGZ1bGwgc2V0IG9mIGl0ZW1zIGFzIGEgYmluYXJ5IHNlYXJjaCB3b3VsZC5cbiAgICAvLyBUaGUgb3ZlcmFsbCBjb21wbGV4aXR5IGZvciB0aGlzIGFwcHJvYWNoIGlzIE8obG9nIG4pLlxuICAgIHJldHVybiBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1heCgwLCBsYXN0TWVhc3VyZWRJbmRleCksIG9mZnNldCk7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1CaW5hcnlTZWFyY2gkMSA9IGZ1bmN0aW9uIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaChwcm9wcywgaW5zdGFuY2VQcm9wcywgaGlnaCwgbG93LCBvZmZzZXQpIHtcbiAgd2hpbGUgKGxvdyA8PSBoaWdoKSB7XG4gICAgdmFyIG1pZGRsZSA9IGxvdyArIE1hdGguZmxvb3IoKGhpZ2ggLSBsb3cpIC8gMik7XG4gICAgdmFyIGN1cnJlbnRPZmZzZXQgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgbWlkZGxlLCBpbnN0YW5jZVByb3BzKS5vZmZzZXQ7XG5cbiAgICBpZiAoY3VycmVudE9mZnNldCA9PT0gb2Zmc2V0KSB7XG4gICAgICByZXR1cm4gbWlkZGxlO1xuICAgIH0gZWxzZSBpZiAoY3VycmVudE9mZnNldCA8IG9mZnNldCkge1xuICAgICAgbG93ID0gbWlkZGxlICsgMTtcbiAgICB9IGVsc2UgaWYgKGN1cnJlbnRPZmZzZXQgPiBvZmZzZXQpIHtcbiAgICAgIGhpZ2ggPSBtaWRkbGUgLSAxO1xuICAgIH1cbiAgfVxuXG4gIGlmIChsb3cgPiAwKSB7XG4gICAgcmV0dXJuIGxvdyAtIDE7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIDA7XG4gIH1cbn07XG5cbnZhciBmaW5kTmVhcmVzdEl0ZW1FeHBvbmVudGlhbFNlYXJjaCQxID0gZnVuY3Rpb24gZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gocHJvcHMsIGluc3RhbmNlUHJvcHMsIGluZGV4LCBvZmZzZXQpIHtcbiAgdmFyIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudDtcbiAgdmFyIGludGVydmFsID0gMTtcblxuICB3aGlsZSAoaW5kZXggPCBpdGVtQ291bnQgJiYgZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKS5vZmZzZXQgPCBvZmZzZXQpIHtcbiAgICBpbmRleCArPSBpbnRlcnZhbDtcbiAgICBpbnRlcnZhbCAqPSAyO1xuICB9XG5cbiAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBNYXRoLm1pbihpbmRleCwgaXRlbUNvdW50IC0gMSksIE1hdGguZmxvb3IoaW5kZXggLyAyKSwgb2Zmc2V0KTtcbn07XG5cbnZhciBnZXRFc3RpbWF0ZWRUb3RhbFNpemUgPSBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjIsIF9yZWYzKSB7XG4gIHZhciBpdGVtQ291bnQgPSBfcmVmMi5pdGVtQ291bnQ7XG4gIHZhciBpdGVtTWV0YWRhdGFNYXAgPSBfcmVmMy5pdGVtTWV0YWRhdGFNYXAsXG4gICAgICBlc3RpbWF0ZWRJdGVtU2l6ZSA9IF9yZWYzLmVzdGltYXRlZEl0ZW1TaXplLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXggPSBfcmVmMy5sYXN0TWVhc3VyZWRJbmRleDtcbiAgdmFyIHRvdGFsU2l6ZU9mTWVhc3VyZWRJdGVtcyA9IDA7IC8vIEVkZ2UgY2FzZSBjaGVjayBmb3Igd2hlbiB0aGUgbnVtYmVyIG9mIGl0ZW1zIGRlY3JlYXNlcyB3aGlsZSBhIHNjcm9sbCBpcyBpbiBwcm9ncmVzcy5cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2J2YXVnaG4vcmVhY3Qtd2luZG93L3B1bGwvMTM4XG5cbiAgaWYgKGxhc3RNZWFzdXJlZEluZGV4ID49IGl0ZW1Db3VudCkge1xuICAgIGxhc3RNZWFzdXJlZEluZGV4ID0gaXRlbUNvdW50IC0gMTtcbiAgfVxuXG4gIGlmIChsYXN0TWVhc3VyZWRJbmRleCA+PSAwKSB7XG4gICAgdmFyIGl0ZW1NZXRhZGF0YSA9IGl0ZW1NZXRhZGF0YU1hcFtsYXN0TWVhc3VyZWRJbmRleF07XG4gICAgdG90YWxTaXplT2ZNZWFzdXJlZEl0ZW1zID0gaXRlbU1ldGFkYXRhLm9mZnNldCArIGl0ZW1NZXRhZGF0YS5zaXplO1xuICB9XG5cbiAgdmFyIG51bVVubWVhc3VyZWRJdGVtcyA9IGl0ZW1Db3VudCAtIGxhc3RNZWFzdXJlZEluZGV4IC0gMTtcbiAgdmFyIHRvdGFsU2l6ZU9mVW5tZWFzdXJlZEl0ZW1zID0gbnVtVW5tZWFzdXJlZEl0ZW1zICogZXN0aW1hdGVkSXRlbVNpemU7XG4gIHJldHVybiB0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMgKyB0b3RhbFNpemVPZlVubWVhc3VyZWRJdGVtcztcbn07XG5cbnZhciBWYXJpYWJsZVNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgaW5kZXgsIGluc3RhbmNlUHJvcHMpLm9mZnNldDtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKHByb3BzLCBpbmRleCwgaW5zdGFuY2VQcm9wcykge1xuICAgIHJldHVybiBpbnN0YW5jZVByb3BzLml0ZW1NZXRhZGF0YU1hcFtpbmRleF0uc2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUsXG4gIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50OiBmdW5jdGlvbiBnZXRPZmZzZXRGb3JJbmRleEFuZEFsaWdubWVudChwcm9wcywgaW5kZXgsIGFsaWduLCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMsIHNjcm9sbGJhclNpemUpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGxheW91dCA9IHByb3BzLmxheW91dCxcbiAgICAgICAgd2lkdGggPSBwcm9wcy53aWR0aDsgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG5cbiAgICB2YXIgaXNIb3Jpem9udGFsID0gZGlyZWN0aW9uID09PSAnaG9yaXpvbnRhbCcgfHwgbGF5b3V0ID09PSAnaG9yaXpvbnRhbCc7XG4gICAgdmFyIHNpemUgPSBpc0hvcml6b250YWwgPyB3aWR0aCA6IGhlaWdodDtcbiAgICB2YXIgaXRlbU1ldGFkYXRhID0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIGluZGV4LCBpbnN0YW5jZVByb3BzKTsgLy8gR2V0IGVzdGltYXRlZCB0b3RhbCBzaXplIGFmdGVyIEl0ZW1NZXRhZGF0YSBpcyBjb21wdXRlZCxcbiAgICAvLyBUbyBlbnN1cmUgaXQgcmVmbGVjdHMgYWN0dWFsIG1lYXN1cmVtZW50cyBpbnN0ZWFkIG9mIGp1c3QgZXN0aW1hdGVzLlxuXG4gICAgdmFyIGVzdGltYXRlZFRvdGFsU2l6ZSA9IGdldEVzdGltYXRlZFRvdGFsU2l6ZShwcm9wcywgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IE1hdGgubWF4KDAsIE1hdGgubWluKGVzdGltYXRlZFRvdGFsU2l6ZSAtIHNpemUsIGl0ZW1NZXRhZGF0YS5vZmZzZXQpKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbU1ldGFkYXRhLm9mZnNldCAtIHNpemUgKyBpdGVtTWV0YWRhdGEuc2l6ZSArIHNjcm9sbGJhclNpemUpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAtIHNpemUgJiYgc2Nyb2xsT2Zmc2V0IDw9IG1heE9mZnNldCArIHNpemUpIHtcbiAgICAgICAgYWxpZ24gPSAnYXV0byc7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhbGlnbiA9ICdjZW50ZXInO1xuICAgICAgfVxuICAgIH1cblxuICAgIHN3aXRjaCAoYWxpZ24pIHtcbiAgICAgIGNhc2UgJ3N0YXJ0JzpcbiAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcblxuICAgICAgY2FzZSAnZW5kJzpcbiAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcblxuICAgICAgY2FzZSAnY2VudGVyJzpcbiAgICAgICAgcmV0dXJuIE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsT2Zmc2V0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbE9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxPZmZzZXQgPCBtaW5PZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgIH1cbiAgfSxcbiAgZ2V0U3RhcnRJbmRleEZvck9mZnNldDogZnVuY3Rpb24gZ2V0U3RhcnRJbmRleEZvck9mZnNldChwcm9wcywgb2Zmc2V0LCBpbnN0YW5jZVByb3BzKSB7XG4gICAgcmV0dXJuIGZpbmROZWFyZXN0SXRlbSQxKHByb3BzLCBpbnN0YW5jZVByb3BzLCBvZmZzZXQpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KHByb3BzLCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQsIGluc3RhbmNlUHJvcHMpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gcHJvcHMuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBwcm9wcy5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IHByb3BzLml0ZW1Db3VudCxcbiAgICAgICAgbGF5b3V0ID0gcHJvcHMubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IHByb3BzLndpZHRoOyAvLyBUT0RPIERlcHJlY2F0ZSBkaXJlY3Rpb24gXCJob3Jpem9udGFsXCJcblxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgc2l6ZSA9IGlzSG9yaXpvbnRhbCA/IHdpZHRoIDogaGVpZ2h0O1xuICAgIHZhciBpdGVtTWV0YWRhdGEgPSBnZXRJdGVtTWV0YWRhdGEkMShwcm9wcywgc3RhcnRJbmRleCwgaW5zdGFuY2VQcm9wcyk7XG4gICAgdmFyIG1heE9mZnNldCA9IHNjcm9sbE9mZnNldCArIHNpemU7XG4gICAgdmFyIG9mZnNldCA9IGl0ZW1NZXRhZGF0YS5vZmZzZXQgKyBpdGVtTWV0YWRhdGEuc2l6ZTtcbiAgICB2YXIgc3RvcEluZGV4ID0gc3RhcnRJbmRleDtcblxuICAgIHdoaWxlIChzdG9wSW5kZXggPCBpdGVtQ291bnQgLSAxICYmIG9mZnNldCA8IG1heE9mZnNldCkge1xuICAgICAgc3RvcEluZGV4Kys7XG4gICAgICBvZmZzZXQgKz0gZ2V0SXRlbU1ldGFkYXRhJDEocHJvcHMsIHN0b3BJbmRleCwgaW5zdGFuY2VQcm9wcykuc2l6ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3RvcEluZGV4O1xuICB9LFxuICBpbml0SW5zdGFuY2VQcm9wczogZnVuY3Rpb24gaW5pdEluc3RhbmNlUHJvcHMocHJvcHMsIGluc3RhbmNlKSB7XG4gICAgdmFyIF9yZWY0ID0gcHJvcHMsXG4gICAgICAgIGVzdGltYXRlZEl0ZW1TaXplID0gX3JlZjQuZXN0aW1hdGVkSXRlbVNpemU7XG4gICAgdmFyIGluc3RhbmNlUHJvcHMgPSB7XG4gICAgICBpdGVtTWV0YWRhdGFNYXA6IHt9LFxuICAgICAgZXN0aW1hdGVkSXRlbVNpemU6IGVzdGltYXRlZEl0ZW1TaXplIHx8IERFRkFVTFRfRVNUSU1BVEVEX0lURU1fU0laRSQxLFxuICAgICAgbGFzdE1lYXN1cmVkSW5kZXg6IC0xXG4gICAgfTtcblxuICAgIGluc3RhbmNlLnJlc2V0QWZ0ZXJJbmRleCA9IGZ1bmN0aW9uIChpbmRleCwgc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgIGlmIChzaG91bGRGb3JjZVVwZGF0ZSA9PT0gdm9pZCAwKSB7XG4gICAgICAgIHNob3VsZEZvcmNlVXBkYXRlID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaW5zdGFuY2VQcm9wcy5sYXN0TWVhc3VyZWRJbmRleCA9IE1hdGgubWluKGluc3RhbmNlUHJvcHMubGFzdE1lYXN1cmVkSW5kZXgsIGluZGV4IC0gMSk7IC8vIFdlIGNvdWxkIHBvdGVudGlhbGx5IG9wdGltaXplIGZ1cnRoZXIgYnkgb25seSBldmljdGluZyBzdHlsZXMgYWZ0ZXIgdGhpcyBpbmRleCxcbiAgICAgIC8vIEJ1dCBzaW5jZSBzdHlsZXMgYXJlIG9ubHkgY2FjaGVkIHdoaWxlIHNjcm9sbGluZyBpcyBpbiBwcm9ncmVzcy1cbiAgICAgIC8vIEl0IHNlZW1zIGFuIHVubmVjZXNzYXJ5IG9wdGltaXphdGlvbi5cbiAgICAgIC8vIEl0J3MgdW5saWtlbHkgdGhhdCByZXNldEFmdGVySW5kZXgoKSB3aWxsIGJlIGNhbGxlZCB3aGlsZSBhIHVzZXIgaXMgc2Nyb2xsaW5nLlxuXG4gICAgICBpbnN0YW5jZS5fZ2V0SXRlbVN0eWxlQ2FjaGUoLTEpO1xuXG4gICAgICBpZiAoc2hvdWxkRm9yY2VVcGRhdGUpIHtcbiAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgcmV0dXJuIGluc3RhbmNlUHJvcHM7XG4gIH0sXG4gIHNob3VsZFJlc2V0U3R5bGVDYWNoZU9uSXRlbVNpemVDaGFuZ2U6IGZhbHNlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY1KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjUuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQW4gaW52YWxpZCBcIml0ZW1TaXplXCIgcHJvcCBoYXMgYmVlbiBzcGVjaWZpZWQuICcgKyAnVmFsdWUgc2hvdWxkIGJlIGEgZnVuY3Rpb24uICcgKyAoXCJcXFwiXCIgKyAoaXRlbVNpemUgPT09IG51bGwgPyAnbnVsbCcgOiB0eXBlb2YgaXRlbVNpemUpICsgXCJcXFwiIHdhcyBzcGVjaWZpZWQuXCIpKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG52YXIgRml4ZWRTaXplR3JpZCA9IC8qI19fUFVSRV9fKi9jcmVhdGVHcmlkQ29tcG9uZW50KHtcbiAgZ2V0Q29sdW1uT2Zmc2V0OiBmdW5jdGlvbiBnZXRDb2x1bW5PZmZzZXQoX3JlZiwgaW5kZXgpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmLmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBpbmRleCAqIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRDb2x1bW5XaWR0aDogZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgoX3JlZjIsIGluZGV4KSB7XG4gICAgdmFyIGNvbHVtbldpZHRoID0gX3JlZjIuY29sdW1uV2lkdGg7XG4gICAgcmV0dXJuIGNvbHVtbldpZHRoO1xuICB9LFxuICBnZXRSb3dPZmZzZXQ6IGZ1bmN0aW9uIGdldFJvd09mZnNldChfcmVmMywgaW5kZXgpIHtcbiAgICB2YXIgcm93SGVpZ2h0ID0gX3JlZjMucm93SGVpZ2h0O1xuICAgIHJldHVybiBpbmRleCAqIHJvd0hlaWdodDtcbiAgfSxcbiAgZ2V0Um93SGVpZ2h0OiBmdW5jdGlvbiBnZXRSb3dIZWlnaHQoX3JlZjQsIGluZGV4KSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWY0LnJvd0hlaWdodDtcbiAgICByZXR1cm4gcm93SGVpZ2h0O1xuICB9LFxuICBnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxIZWlnaHQoX3JlZjUpIHtcbiAgICB2YXIgcm93Q291bnQgPSBfcmVmNS5yb3dDb3VudCxcbiAgICAgICAgcm93SGVpZ2h0ID0gX3JlZjUucm93SGVpZ2h0O1xuICAgIHJldHVybiByb3dIZWlnaHQgKiByb3dDb3VudDtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxXaWR0aDogZnVuY3Rpb24gZ2V0RXN0aW1hdGVkVG90YWxXaWR0aChfcmVmNikge1xuICAgIHZhciBjb2x1bW5Db3VudCA9IF9yZWY2LmNvbHVtbkNvdW50LFxuICAgICAgICBjb2x1bW5XaWR0aCA9IF9yZWY2LmNvbHVtbldpZHRoO1xuICAgIHJldHVybiBjb2x1bW5XaWR0aCAqIGNvbHVtbkNvdW50O1xuICB9LFxuICBnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckNvbHVtbkFuZEFsaWdubWVudChfcmVmNywgY29sdW1uSW5kZXgsIGFsaWduLCBzY3JvbGxMZWZ0LCBpbnN0YW5jZVByb3BzLCBzY3JvbGxiYXJTaXplKSB7XG4gICAgdmFyIGNvbHVtbkNvdW50ID0gX3JlZjcuY29sdW1uQ291bnQsXG4gICAgICAgIGNvbHVtbldpZHRoID0gX3JlZjcuY29sdW1uV2lkdGgsXG4gICAgICAgIHdpZHRoID0gX3JlZjcud2lkdGg7XG4gICAgdmFyIGxhc3RDb2x1bW5PZmZzZXQgPSBNYXRoLm1heCgwLCBjb2x1bW5Db3VudCAqIGNvbHVtbldpZHRoIC0gd2lkdGgpO1xuICAgIHZhciBtYXhPZmZzZXQgPSBNYXRoLm1pbihsYXN0Q29sdW1uT2Zmc2V0LCBjb2x1bW5JbmRleCAqIGNvbHVtbldpZHRoKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gTWF0aC5tYXgoMCwgY29sdW1uSW5kZXggKiBjb2x1bW5XaWR0aCAtIHdpZHRoICsgc2Nyb2xsYmFyU2l6ZSArIGNvbHVtbldpZHRoKTtcblxuICAgIGlmIChhbGlnbiA9PT0gJ3NtYXJ0Jykge1xuICAgICAgaWYgKHNjcm9sbExlZnQgPj0gbWluT2Zmc2V0IC0gd2lkdGggJiYgc2Nyb2xsTGVmdCA8PSBtYXhPZmZzZXQgKyB3aWR0aCkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICAvLyBcIkNlbnRlcmVkXCIgb2Zmc2V0IGlzIHVzdWFsbHkgdGhlIGF2ZXJhZ2Ugb2YgdGhlIG1pbiBhbmQgbWF4LlxuICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgIHZhciBtaWRkbGVPZmZzZXQgPSBNYXRoLnJvdW5kKG1pbk9mZnNldCArIChtYXhPZmZzZXQgLSBtaW5PZmZzZXQpIC8gMik7XG5cbiAgICAgICAgaWYgKG1pZGRsZU9mZnNldCA8IE1hdGguY2VpbCh3aWR0aCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RDb2x1bW5PZmZzZXQgKyBNYXRoLmZsb29yKHdpZHRoIC8gMikpIHtcbiAgICAgICAgICByZXR1cm4gbGFzdENvbHVtbk9mZnNldDsgLy8gbmVhciB0aGUgZW5kXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1pZGRsZU9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxMZWZ0ID49IG1pbk9mZnNldCAmJiBzY3JvbGxMZWZ0IDw9IG1heE9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBzY3JvbGxMZWZ0O1xuICAgICAgICB9IGVsc2UgaWYgKG1pbk9mZnNldCA+IG1heE9mZnNldCkge1xuICAgICAgICAgIC8vIEJlY2F1c2Ugd2Ugb25seSB0YWtlIGludG8gYWNjb3VudCB0aGUgc2Nyb2xsYmFyIHNpemUgd2hlbiBjYWxjdWxhdGluZyBtaW5PZmZzZXRcbiAgICAgICAgICAvLyB0aGlzIHZhbHVlIGNhbiBiZSBsYXJnZXIgdGhhbiBtYXhPZmZzZXQgd2hlbiBhdCB0aGUgZW5kIG9mIHRoZSBsaXN0XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIGlmIChzY3JvbGxMZWZ0IDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldE9mZnNldEZvclJvd0FuZEFsaWdubWVudDogZnVuY3Rpb24gZ2V0T2Zmc2V0Rm9yUm93QW5kQWxpZ25tZW50KF9yZWY4LCByb3dJbmRleCwgYWxpZ24sIHNjcm9sbFRvcCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciByb3dIZWlnaHQgPSBfcmVmOC5yb3dIZWlnaHQsXG4gICAgICAgIGhlaWdodCA9IF9yZWY4LmhlaWdodCxcbiAgICAgICAgcm93Q291bnQgPSBfcmVmOC5yb3dDb3VudDtcbiAgICB2YXIgbGFzdFJvd09mZnNldCA9IE1hdGgubWF4KDAsIHJvd0NvdW50ICogcm93SGVpZ2h0IC0gaGVpZ2h0KTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdFJvd09mZnNldCwgcm93SW5kZXggKiByb3dIZWlnaHQpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCByb3dJbmRleCAqIHJvd0hlaWdodCAtIGhlaWdodCArIHNjcm9sbGJhclNpemUgKyByb3dIZWlnaHQpO1xuXG4gICAgaWYgKGFsaWduID09PSAnc21hcnQnKSB7XG4gICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAtIGhlaWdodCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0ICsgaGVpZ2h0KSB7XG4gICAgICAgIGFsaWduID0gJ2F1dG8nO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYWxpZ24gPSAnY2VudGVyJztcbiAgICAgIH1cbiAgICB9XG5cbiAgICBzd2l0Y2ggKGFsaWduKSB7XG4gICAgICBjYXNlICdzdGFydCc6XG4gICAgICAgIHJldHVybiBtYXhPZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2VuZCc6XG4gICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG5cbiAgICAgIGNhc2UgJ2NlbnRlcic6XG4gICAgICAgIC8vIFwiQ2VudGVyZWRcIiBvZmZzZXQgaXMgdXN1YWxseSB0aGUgYXZlcmFnZSBvZiB0aGUgbWluIGFuZCBtYXguXG4gICAgICAgIC8vIEJ1dCBuZWFyIHRoZSBlZGdlcyBvZiB0aGUgbGlzdCwgdGhpcyBkb2Vzbid0IGhvbGQgdHJ1ZS5cbiAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICBpZiAobWlkZGxlT2Zmc2V0IDwgTWF0aC5jZWlsKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIDA7IC8vIG5lYXIgdGhlIGJlZ2lubmluZ1xuICAgICAgICB9IGVsc2UgaWYgKG1pZGRsZU9mZnNldCA+IGxhc3RSb3dPZmZzZXQgKyBNYXRoLmZsb29yKGhlaWdodCAvIDIpKSB7XG4gICAgICAgICAgcmV0dXJuIGxhc3RSb3dPZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiBtaWRkbGVPZmZzZXQ7XG4gICAgICAgIH1cblxuICAgICAgY2FzZSAnYXV0byc6XG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAoc2Nyb2xsVG9wID49IG1pbk9mZnNldCAmJiBzY3JvbGxUb3AgPD0gbWF4T2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIHNjcm9sbFRvcDtcbiAgICAgICAgfSBlbHNlIGlmIChtaW5PZmZzZXQgPiBtYXhPZmZzZXQpIHtcbiAgICAgICAgICAvLyBCZWNhdXNlIHdlIG9ubHkgdGFrZSBpbnRvIGFjY291bnQgdGhlIHNjcm9sbGJhciBzaXplIHdoZW4gY2FsY3VsYXRpbmcgbWluT2Zmc2V0XG4gICAgICAgICAgLy8gdGhpcyB2YWx1ZSBjYW4gYmUgbGFyZ2VyIHRoYW4gbWF4T2Zmc2V0IHdoZW4gYXQgdGhlIGVuZCBvZiB0aGUgbGlzdFxuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsVG9wIDwgbWluT2Zmc2V0KSB7XG4gICAgICAgICAgcmV0dXJuIG1pbk9mZnNldDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuICAgICAgICB9XG5cbiAgICB9XG4gIH0sXG4gIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQ6IGZ1bmN0aW9uIGdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQoX3JlZjksIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmOS5jb2x1bW5XaWR0aCxcbiAgICAgICAgY29sdW1uQ291bnQgPSBfcmVmOS5jb2x1bW5Db3VudDtcbiAgICByZXR1cm4gTWF0aC5tYXgoMCwgTWF0aC5taW4oY29sdW1uQ291bnQgLSAxLCBNYXRoLmZsb29yKHNjcm9sbExlZnQgLyBjb2x1bW5XaWR0aCkpKTtcbiAgfSxcbiAgZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleDogZnVuY3Rpb24gZ2V0Q29sdW1uU3RvcEluZGV4Rm9yU3RhcnRJbmRleChfcmVmMTAsIHN0YXJ0SW5kZXgsIHNjcm9sbExlZnQpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTAuY29sdW1uV2lkdGgsXG4gICAgICAgIGNvbHVtbkNvdW50ID0gX3JlZjEwLmNvbHVtbkNvdW50LFxuICAgICAgICB3aWR0aCA9IF9yZWYxMC53aWR0aDtcbiAgICB2YXIgbGVmdCA9IHN0YXJ0SW5kZXggKiBjb2x1bW5XaWR0aDtcbiAgICB2YXIgbnVtVmlzaWJsZUNvbHVtbnMgPSBNYXRoLmNlaWwoKHdpZHRoICsgc2Nyb2xsTGVmdCAtIGxlZnQpIC8gY29sdW1uV2lkdGgpO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihjb2x1bW5Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlQ29sdW1ucyAtIDEgLy8gLTEgaXMgYmVjYXVzZSBzdG9wIGluZGV4IGlzIGluY2x1c2l2ZVxuICAgICkpO1xuICB9LFxuICBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWYxMSwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMS5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjExLnJvd0NvdW50O1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihyb3dDb3VudCAtIDEsIE1hdGguZmxvb3Ioc2Nyb2xsVG9wIC8gcm93SGVpZ2h0KSkpO1xuICB9LFxuICBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRSb3dTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWYxMiwgc3RhcnRJbmRleCwgc2Nyb2xsVG9wKSB7XG4gICAgdmFyIHJvd0hlaWdodCA9IF9yZWYxMi5yb3dIZWlnaHQsXG4gICAgICAgIHJvd0NvdW50ID0gX3JlZjEyLnJvd0NvdW50LFxuICAgICAgICBoZWlnaHQgPSBfcmVmMTIuaGVpZ2h0O1xuICAgIHZhciB0b3AgPSBzdGFydEluZGV4ICogcm93SGVpZ2h0O1xuICAgIHZhciBudW1WaXNpYmxlUm93cyA9IE1hdGguY2VpbCgoaGVpZ2h0ICsgc2Nyb2xsVG9wIC0gdG9wKSAvIHJvd0hlaWdodCk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKHJvd0NvdW50IC0gMSwgc3RhcnRJbmRleCArIG51bVZpc2libGVSb3dzIC0gMSAvLyAtMSBpcyBiZWNhdXNlIHN0b3AgaW5kZXggaXMgaW5jbHVzaXZlXG4gICAgKSk7XG4gIH0sXG4gIGluaXRJbnN0YW5jZVByb3BzOiBmdW5jdGlvbiBpbml0SW5zdGFuY2VQcm9wcyhwcm9wcykgey8vIE5vb3BcbiAgfSxcbiAgc2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZTogdHJ1ZSxcbiAgdmFsaWRhdGVQcm9wczogZnVuY3Rpb24gdmFsaWRhdGVQcm9wcyhfcmVmMTMpIHtcbiAgICB2YXIgY29sdW1uV2lkdGggPSBfcmVmMTMuY29sdW1uV2lkdGgsXG4gICAgICAgIHJvd0hlaWdodCA9IF9yZWYxMy5yb3dIZWlnaHQ7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBjb2x1bW5XaWR0aCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJjb2x1bW5XaWR0aFwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChjb2x1bW5XaWR0aCA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBjb2x1bW5XaWR0aCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIHJvd0hlaWdodCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJyb3dIZWlnaHRcIiBwcm9wIGhhcyBiZWVuIHNwZWNpZmllZC4gJyArICdWYWx1ZSBzaG91bGQgYmUgYSBudW1iZXIuICcgKyAoXCJcXFwiXCIgKyAocm93SGVpZ2h0ID09PSBudWxsID8gJ251bGwnIDogdHlwZW9mIHJvd0hlaWdodCkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbnZhciBGaXhlZFNpemVMaXN0ID0gLyojX19QVVJFX18qL2NyZWF0ZUxpc3RDb21wb25lbnQoe1xuICBnZXRJdGVtT2Zmc2V0OiBmdW5jdGlvbiBnZXRJdGVtT2Zmc2V0KF9yZWYsIGluZGV4KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZi5pdGVtU2l6ZTtcbiAgICByZXR1cm4gaW5kZXggKiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0SXRlbVNpemU6IGZ1bmN0aW9uIGdldEl0ZW1TaXplKF9yZWYyLCBpbmRleCkge1xuICAgIHZhciBpdGVtU2l6ZSA9IF9yZWYyLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZTtcbiAgfSxcbiAgZ2V0RXN0aW1hdGVkVG90YWxTaXplOiBmdW5jdGlvbiBnZXRFc3RpbWF0ZWRUb3RhbFNpemUoX3JlZjMpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjMuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWYzLml0ZW1TaXplO1xuICAgIHJldHVybiBpdGVtU2l6ZSAqIGl0ZW1Db3VudDtcbiAgfSxcbiAgZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQ6IGZ1bmN0aW9uIGdldE9mZnNldEZvckluZGV4QW5kQWxpZ25tZW50KF9yZWY0LCBpbmRleCwgYWxpZ24sIHNjcm9sbE9mZnNldCwgaW5zdGFuY2VQcm9wcywgc2Nyb2xsYmFyU2l6ZSkge1xuICAgIHZhciBkaXJlY3Rpb24gPSBfcmVmNC5kaXJlY3Rpb24sXG4gICAgICAgIGhlaWdodCA9IF9yZWY0LmhlaWdodCxcbiAgICAgICAgaXRlbUNvdW50ID0gX3JlZjQuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY0Lml0ZW1TaXplLFxuICAgICAgICBsYXlvdXQgPSBfcmVmNC5sYXlvdXQsXG4gICAgICAgIHdpZHRoID0gX3JlZjQud2lkdGg7XG4gICAgLy8gVE9ETyBEZXByZWNhdGUgZGlyZWN0aW9uIFwiaG9yaXpvbnRhbFwiXG4gICAgdmFyIGlzSG9yaXpvbnRhbCA9IGRpcmVjdGlvbiA9PT0gJ2hvcml6b250YWwnIHx8IGxheW91dCA9PT0gJ2hvcml6b250YWwnO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIGxhc3RJdGVtT2Zmc2V0ID0gTWF0aC5tYXgoMCwgaXRlbUNvdW50ICogaXRlbVNpemUgLSBzaXplKTtcbiAgICB2YXIgbWF4T2Zmc2V0ID0gTWF0aC5taW4obGFzdEl0ZW1PZmZzZXQsIGluZGV4ICogaXRlbVNpemUpO1xuICAgIHZhciBtaW5PZmZzZXQgPSBNYXRoLm1heCgwLCBpbmRleCAqIGl0ZW1TaXplIC0gc2l6ZSArIGl0ZW1TaXplICsgc2Nyb2xsYmFyU2l6ZSk7XG5cbiAgICBpZiAoYWxpZ24gPT09ICdzbWFydCcpIHtcbiAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0IC0gc2l6ZSAmJiBzY3JvbGxPZmZzZXQgPD0gbWF4T2Zmc2V0ICsgc2l6ZSkge1xuICAgICAgICBhbGlnbiA9ICdhdXRvJztcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGFsaWduID0gJ2NlbnRlcic7XG4gICAgICB9XG4gICAgfVxuXG4gICAgc3dpdGNoIChhbGlnbikge1xuICAgICAgY2FzZSAnc3RhcnQnOlxuICAgICAgICByZXR1cm4gbWF4T2Zmc2V0O1xuXG4gICAgICBjYXNlICdlbmQnOlxuICAgICAgICByZXR1cm4gbWluT2Zmc2V0O1xuXG4gICAgICBjYXNlICdjZW50ZXInOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gXCJDZW50ZXJlZFwiIG9mZnNldCBpcyB1c3VhbGx5IHRoZSBhdmVyYWdlIG9mIHRoZSBtaW4gYW5kIG1heC5cbiAgICAgICAgICAvLyBCdXQgbmVhciB0aGUgZWRnZXMgb2YgdGhlIGxpc3QsIHRoaXMgZG9lc24ndCBob2xkIHRydWUuXG4gICAgICAgICAgdmFyIG1pZGRsZU9mZnNldCA9IE1hdGgucm91bmQobWluT2Zmc2V0ICsgKG1heE9mZnNldCAtIG1pbk9mZnNldCkgLyAyKTtcblxuICAgICAgICAgIGlmIChtaWRkbGVPZmZzZXQgPCBNYXRoLmNlaWwoc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gMDsgLy8gbmVhciB0aGUgYmVnaW5uaW5nXG4gICAgICAgICAgfSBlbHNlIGlmIChtaWRkbGVPZmZzZXQgPiBsYXN0SXRlbU9mZnNldCArIE1hdGguZmxvb3Ioc2l6ZSAvIDIpKSB7XG4gICAgICAgICAgICByZXR1cm4gbGFzdEl0ZW1PZmZzZXQ7IC8vIG5lYXIgdGhlIGVuZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbWlkZGxlT2Zmc2V0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICBjYXNlICdhdXRvJzpcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQgPj0gbWluT2Zmc2V0ICYmIHNjcm9sbE9mZnNldCA8PSBtYXhPZmZzZXQpIHtcbiAgICAgICAgICByZXR1cm4gc2Nyb2xsT2Zmc2V0O1xuICAgICAgICB9IGVsc2UgaWYgKHNjcm9sbE9mZnNldCA8IG1pbk9mZnNldCkge1xuICAgICAgICAgIHJldHVybiBtaW5PZmZzZXQ7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIG1heE9mZnNldDtcbiAgICAgICAgfVxuXG4gICAgfVxuICB9LFxuICBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0OiBmdW5jdGlvbiBnZXRTdGFydEluZGV4Rm9yT2Zmc2V0KF9yZWY1LCBvZmZzZXQpIHtcbiAgICB2YXIgaXRlbUNvdW50ID0gX3JlZjUuaXRlbUNvdW50LFxuICAgICAgICBpdGVtU2l6ZSA9IF9yZWY1Lml0ZW1TaXplO1xuICAgIHJldHVybiBNYXRoLm1heCgwLCBNYXRoLm1pbihpdGVtQ291bnQgLSAxLCBNYXRoLmZsb29yKG9mZnNldCAvIGl0ZW1TaXplKSkpO1xuICB9LFxuICBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4OiBmdW5jdGlvbiBnZXRTdG9wSW5kZXhGb3JTdGFydEluZGV4KF9yZWY2LCBzdGFydEluZGV4LCBzY3JvbGxPZmZzZXQpIHtcbiAgICB2YXIgZGlyZWN0aW9uID0gX3JlZjYuZGlyZWN0aW9uLFxuICAgICAgICBoZWlnaHQgPSBfcmVmNi5oZWlnaHQsXG4gICAgICAgIGl0ZW1Db3VudCA9IF9yZWY2Lml0ZW1Db3VudCxcbiAgICAgICAgaXRlbVNpemUgPSBfcmVmNi5pdGVtU2l6ZSxcbiAgICAgICAgbGF5b3V0ID0gX3JlZjYubGF5b3V0LFxuICAgICAgICB3aWR0aCA9IF9yZWY2LndpZHRoO1xuICAgIC8vIFRPRE8gRGVwcmVjYXRlIGRpcmVjdGlvbiBcImhvcml6b250YWxcIlxuICAgIHZhciBpc0hvcml6b250YWwgPSBkaXJlY3Rpb24gPT09ICdob3Jpem9udGFsJyB8fCBsYXlvdXQgPT09ICdob3Jpem9udGFsJztcbiAgICB2YXIgb2Zmc2V0ID0gc3RhcnRJbmRleCAqIGl0ZW1TaXplO1xuICAgIHZhciBzaXplID0gaXNIb3Jpem9udGFsID8gd2lkdGggOiBoZWlnaHQ7XG4gICAgdmFyIG51bVZpc2libGVJdGVtcyA9IE1hdGguY2VpbCgoc2l6ZSArIHNjcm9sbE9mZnNldCAtIG9mZnNldCkgLyBpdGVtU2l6ZSk7XG4gICAgcmV0dXJuIE1hdGgubWF4KDAsIE1hdGgubWluKGl0ZW1Db3VudCAtIDEsIHN0YXJ0SW5kZXggKyBudW1WaXNpYmxlSXRlbXMgLSAxIC8vIC0xIGlzIGJlY2F1c2Ugc3RvcCBpbmRleCBpcyBpbmNsdXNpdmVcbiAgICApKTtcbiAgfSxcbiAgaW5pdEluc3RhbmNlUHJvcHM6IGZ1bmN0aW9uIGluaXRJbnN0YW5jZVByb3BzKHByb3BzKSB7Ly8gTm9vcFxuICB9LFxuICBzaG91bGRSZXNldFN0eWxlQ2FjaGVPbkl0ZW1TaXplQ2hhbmdlOiB0cnVlLFxuICB2YWxpZGF0ZVByb3BzOiBmdW5jdGlvbiB2YWxpZGF0ZVByb3BzKF9yZWY3KSB7XG4gICAgdmFyIGl0ZW1TaXplID0gX3JlZjcuaXRlbVNpemU7XG5cbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgaWYgKHR5cGVvZiBpdGVtU2l6ZSAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ0FuIGludmFsaWQgXCJpdGVtU2l6ZVwiIHByb3AgaGFzIGJlZW4gc3BlY2lmaWVkLiAnICsgJ1ZhbHVlIHNob3VsZCBiZSBhIG51bWJlci4gJyArIChcIlxcXCJcIiArIChpdGVtU2l6ZSA9PT0gbnVsbCA/ICdudWxsJyA6IHR5cGVvZiBpdGVtU2l6ZSkgKyBcIlxcXCIgd2FzIHNwZWNpZmllZC5cIikpO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSk7XG5cbi8vIFB1bGxlZCBmcm9tIHJlYWN0LWNvbXBhdFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2RldmVsb3BpdC9wcmVhY3QtY29tcGF0L2Jsb2IvN2M1ZGUwMGU3Yzg1ZTJmZmQwMTFiZjNhZjAyODk5YjYzZjY5OWQzYS9zcmMvaW5kZXguanMjTDM0OVxuZnVuY3Rpb24gc2hhbGxvd0RpZmZlcnMocHJldiwgbmV4dCkge1xuICBmb3IgKHZhciBhdHRyaWJ1dGUgaW4gcHJldikge1xuICAgIGlmICghKGF0dHJpYnV0ZSBpbiBuZXh0KSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgX2F0dHJpYnV0ZSBpbiBuZXh0KSB7XG4gICAgaWYgKHByZXZbX2F0dHJpYnV0ZV0gIT09IG5leHRbX2F0dHJpYnV0ZV0pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxudmFyIF9leGNsdWRlZCA9IFtcInN0eWxlXCJdLFxuICAgIF9leGNsdWRlZDIgPSBbXCJzdHlsZVwiXTtcbi8vIEl0IGtub3dzIHRvIGNvbXBhcmUgaW5kaXZpZHVhbCBzdHlsZSBwcm9wcyBhbmQgaWdub3JlIHRoZSB3cmFwcGVyIG9iamVjdC5cbi8vIFNlZSBodHRwczovL3JlYWN0anMub3JnL2RvY3MvcmVhY3QtYXBpLmh0bWwjcmVhY3RtZW1vXG5cbmZ1bmN0aW9uIGFyZUVxdWFsKHByZXZQcm9wcywgbmV4dFByb3BzKSB7XG4gIHZhciBwcmV2U3R5bGUgPSBwcmV2UHJvcHMuc3R5bGUsXG4gICAgICBwcmV2UmVzdCA9IF9vYmplY3RXaXRob3V0UHJvcGVydGllc0xvb3NlKHByZXZQcm9wcywgX2V4Y2x1ZGVkKTtcblxuICB2YXIgbmV4dFN0eWxlID0gbmV4dFByb3BzLnN0eWxlLFxuICAgICAgbmV4dFJlc3QgPSBfb2JqZWN0V2l0aG91dFByb3BlcnRpZXNMb29zZShuZXh0UHJvcHMsIF9leGNsdWRlZDIpO1xuXG4gIHJldHVybiAhc2hhbGxvd0RpZmZlcnMocHJldlN0eWxlLCBuZXh0U3R5bGUpICYmICFzaGFsbG93RGlmZmVycyhwcmV2UmVzdCwgbmV4dFJlc3QpO1xufVxuXG4vLyBJdCBrbm93cyB0byBjb21wYXJlIGluZGl2aWR1YWwgc3R5bGUgcHJvcHMgYW5kIGlnbm9yZSB0aGUgd3JhcHBlciBvYmplY3QuXG4vLyBTZWUgaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL3JlYWN0LWNvbXBvbmVudC5odG1sI3Nob3VsZGNvbXBvbmVudHVwZGF0ZVxuXG5mdW5jdGlvbiBzaG91bGRDb21wb25lbnRVcGRhdGUobmV4dFByb3BzLCBuZXh0U3RhdGUpIHtcbiAgcmV0dXJuICFhcmVFcXVhbCh0aGlzLnByb3BzLCBuZXh0UHJvcHMpIHx8IHNoYWxsb3dEaWZmZXJzKHRoaXMuc3RhdGUsIG5leHRTdGF0ZSk7XG59XG5cbmV4cG9ydCB7IEZpeGVkU2l6ZUdyaWQsIEZpeGVkU2l6ZUxpc3QsIFZhcmlhYmxlU2l6ZUdyaWQsIFZhcmlhYmxlU2l6ZUxpc3QsIGFyZUVxdWFsLCBzaG91bGRDb21wb25lbnRVcGRhdGUgfTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmVzbS5qcy5tYXBcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0J1dHRvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQnV0dG9uUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBSZWFjdE5vZGU7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxCdXR0b25FbGVtZW50PjtcbiAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICBpbnZlcnRlZD86IGJvb2xlYW47XG4gIHJvdW5kZWQ/OiBib29sZWFuO1xuICBub1NoYWRvdz86IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vQm9yZGVyPzogYm9vbGVhbjtcbiAgdHJhbnNwYXJlbnQ/OiBib29sZWFuO1xuICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgc3RyZXRjaFZlcnRpY2FsbHk/OiBib29sZWFuO1xuICBhdXRvRm9jdXM/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxCdXR0b25FbGVtZW50LCBNb3VzZUV2ZW50PikgPT4gdm9pZDtcbiAgb25Qb2ludGVyRG93bj86IChldmVudDogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4gdm9pZDtcbiAgc2l6ZT86IFNpemU7XG4gIHR5cGU/OiBcInN1Ym1pdFwiIHwgXCJyZXNldFwiIHwgXCJidXR0b25cIjtcbiAgYWxpZ24/OiBcImxlZnRcIiB8IFwiY2VudGVyXCI7XG4gIG9mZnNldFNpZGVzPzogQXJyYXk8XCJsZWZ0XCIgfCBcInJpZ2h0XCI+O1xufTtcblxuZnVuY3Rpb24gQnV0dG9uKHtcbiAgY2hpbGRyZW4sXG4gIGNsYXNzTmFtZSxcbiAgb25DbGljayxcbiAgb25Qb2ludGVyRG93bixcbiAgY29udGFpbmVyUmVmLFxuICBkaXNhYmxlZCA9IGZhbHNlLFxuICBpbnZlcnRlZCA9IGZhbHNlLFxuICByb3VuZGVkID0gZmFsc2UsXG4gIG5vU2hhZG93ID0gZmFsc2UsXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub0JvcmRlciA9IGZhbHNlLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBzdHJldGNoSG9yaXpvbnRhbGx5ID0gZmFsc2UsXG4gIHN0cmV0Y2hWZXJ0aWNhbGx5ID0gZmFsc2UsXG4gIGF1dG9Gb2N1cyA9IGZhbHNlLFxuICBvZmZzZXRTaWRlcyA9IFtdLFxuICBhbGlnbiA9IFwiY2VudGVyXCIsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICB0eXBlLFxufTogQnV0dG9uUHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8YnV0dG9uXG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMuY29udGFpbmVyLFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHN0eWxlc1thbGlnbl0sXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmludmVydGVkXTogaW52ZXJ0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5yb3VuZGVkXTogcm91bmRlZCxcbiAgICAgICAgICBbc3R5bGVzLm5vU2hhZG93XTogbm9TaGFkb3csXG4gICAgICAgICAgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcsXG4gICAgICAgICAgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyLFxuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLnN0cmV0Y2hIb3Jpem9udGFsbHldOiBzdHJldGNoSG9yaXpvbnRhbGx5LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaFZlcnRpY2FsbHldOiBzdHJldGNoVmVydGljYWxseSxcbiAgICAgICAgICBbc3R5bGVzLmxlZnRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwibGVmdFwiKSxcbiAgICAgICAgICBbc3R5bGVzLnJpZ2h0T2Zmc2V0XTogcm91bmRlZCAmJiBvZmZzZXRTaWRlcy5pbmNsdWRlcyhcInJpZ2h0XCIpLFxuICAgICAgICB9LFxuICAgICAgICBjbGFzc05hbWUsXG4gICAgICBdKX1cbiAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgIGF1dG9Gb2N1cz17YXV0b0ZvY3VzfVxuICAgICAgdHlwZT17dHlwZX1cbiAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIG9uUG9pbnRlckRvd249e29uUG9pbnRlckRvd259XG4gICAgPlxuICAgICAge3R5cGVvZiBjaGlsZHJlbiAhPT0gXCJzdHJpbmdcIiAmJlxuICAgICAgQXJyYXkuaXNBcnJheShjaGlsZHJlbikgJiZcbiAgICAgIGNoaWxkcmVuLmxlbmd0aCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250ZW50fT57Y2hpbGRyZW59PC9kaXY+XG4gICAgICApIDogKFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKX1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBCdXR0b24gfSBmcm9tIFwiLi9CdXR0b25cIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25CYWRnZS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQnV0dG9uQmFkZ2VQcm9wcyA9IHtcbiAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgaW52ZXJ0ZWQ/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBCdXR0b25CYWRnZSh7IGNoaWxkcmVuLCBpbnZlcnRlZCA9IGZhbHNlLCBjbGFzc05hbWUgfTogQnV0dG9uQmFkZ2VQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmJ1dHRvbkJhZGdlLCB7W3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkfSwgY2xhc3NOYW1lXSl9PntjaGlsZHJlbn08L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQnV0dG9uQmFkZ2U7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkJhZGdlIH0gZnJvbSBcIi4vQnV0dG9uQmFkZ2VcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIEVsZW1lbnRUeXBlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9CdXR0b25MaW5rLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBPZmZzZXRTaWRlID0gXCJsZWZ0XCIgfCBcInJpZ2h0XCI7XG5cbnR5cGUgQnV0dG9uTGlua1Byb3BzID1cbiAgfCB7XG4gICAgICBhcz86IEVsZW1lbnRUeXBlO1xuICAgICAgY2hpbGRyZW46IFJlYWN0Tm9kZTtcbiAgICAgIGNsYXNzTmFtZT86IHN0cmluZztcbiAgICAgIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRWxlbWVudD47XG4gICAgICBpbnZlcnRlZD86IGJvb2xlYW47XG4gICAgICByb3VuZGVkPzogYm9vbGVhbjtcbiAgICAgIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgICAgIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgICAgIG5vUGFkZGluZz86IGJvb2xlYW47XG4gICAgICBub0JvcmRlcj86IGJvb2xlYW47XG4gICAgICBzdHJldGNoSG9yaXpvbnRhbGx5PzogYm9vbGVhbjtcbiAgICAgIHN0cmV0Y2hWZXJ0aWNhbGx5PzogYm9vbGVhbjtcbiAgICAgIHNpemU/OiBTaXplO1xuICAgICAgZGlzYWJsZWQ/OiBib29sZWFuO1xuICAgICAgb2Zmc2V0U2lkZXM/OiBBcnJheTxPZmZzZXRTaWRlPjtcbiAgICAgIGFsaWduPzogXCJsZWZ0XCIgfCBcImNlbnRlclwiO1xuICAgIH1cbiAgfCBhbnk7XG5cbmZ1bmN0aW9uIEJ1dHRvbkxpbmsoe1xuICBhczogQ29tcG9uZW50LFxuICBjaGlsZHJlbixcbiAgY2xhc3NOYW1lLFxuICBzaXplLFxuICBjb250YWluZXJSZWYsXG4gIGludmVydGVkID0gZmFsc2UsXG4gIHJvdW5kZWQgPSBmYWxzZSxcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9QYWRkaW5nID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIHN0cmV0Y2hIb3Jpem9udGFsbHkgPSBmYWxzZSxcbiAgc3RyZXRjaFZlcnRpY2FsbHkgPSBmYWxzZSxcbiAgZGlzYWJsZWQgPSBmYWxzZSxcbiAgb2Zmc2V0U2lkZXMgPSBbXSxcbiAgYWxpZ24gPSBcImNlbnRlclwiLFxuICAuLi5wcm9wc1xufTogQnV0dG9uTGlua1Byb3BzKSB7XG4gIGlmICh0eXBlb2YgQ29tcG9uZW50ID09PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgQ29tcG9uZW50ID0gXCJhXCI7XG4gIH1cblxuICByZXR1cm4gKFxuICAgIDxDb21wb25lbnRcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJidXR0b24tbGlua1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICBzdHlsZXNbYWxpZ25dLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5pbnZlcnRlZF06IGludmVydGVkLFxuICAgICAgICAgIFtzdHlsZXMucm91bmRlZF06IHJvdW5kZWQsXG4gICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgIFtzdHlsZXMubm9QYWRkaW5nXTogbm9QYWRkaW5nLFxuICAgICAgICAgIFtzdHlsZXMubm9Cb3JkZXJdOiBub0JvcmRlcixcbiAgICAgICAgICBbc3R5bGVzLmRpc2FibGVkXTogZGlzYWJsZWQsXG4gICAgICAgICAgW3N0eWxlcy50cmFuc3BhcmVudF06IHRyYW5zcGFyZW50LFxuICAgICAgICAgIFtzdHlsZXMuc3RyZXRjaEhvcml6b250YWxseV06IHN0cmV0Y2hIb3Jpem9udGFsbHksXG4gICAgICAgICAgW3N0eWxlcy5zdHJldGNoVmVydGljYWxseV06IHN0cmV0Y2hWZXJ0aWNhbGx5LFxuICAgICAgICAgIFtzdHlsZXMubGVmdE9mZnNldF06IHJvdW5kZWQgJiYgb2Zmc2V0U2lkZXMuaW5jbHVkZXMoXCJsZWZ0XCIpLFxuICAgICAgICAgIFtzdHlsZXMucmlnaHRPZmZzZXRdOiByb3VuZGVkICYmIG9mZnNldFNpZGVzLmluY2x1ZGVzKFwicmlnaHRcIiksXG4gICAgICAgIH0sXG4gICAgICAgIGNsYXNzTmFtZSxcbiAgICAgIF0pfVxuICAgICAgey4uLnByb3BzfVxuICAgID5cbiAgICAgIHt0eXBlb2YgY2hpbGRyZW4gIT09IFwic3RyaW5nXCIgJiZcbiAgICAgIEFycmF5LmlzQXJyYXkoY2hpbGRyZW4pICYmXG4gICAgICBjaGlsZHJlbi5sZW5ndGggPyAoXG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuY29udGVudH0+e2NoaWxkcmVufTwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICl9XG4gICAgPC9Db21wb25lbnQ+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvbkxpbms7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIEJ1dHRvbkxpbmsgfSBmcm9tIFwiLi9CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgTGFiZWwgfSBmcm9tIFwiLi4vTGFiZWxcIjtcbmltcG9ydCB7IFNpemUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9DaGVja2JveC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgQ2hlY2tib3hQcm9wcyA9IHtcbiAgbGFiZWw/OiBzdHJpbmc7XG4gIG9uQ2hhbmdlPzogKHZhbHVlOiBib29sZWFuKSA9PiB2b2lkO1xuICBwbGFjZWhvbGRlcj86IHN0cmluZztcbiAgY2hlY2tlZD86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgbmFtZT86IHN0cmluZztcbiAgc2l6ZT86IFNpemU7XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGluZGV0ZXJtaW5hdGU/OiBib29sZWFuO1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG59O1xuXG5mdW5jdGlvbiBDaGVja2JveCh7XG4gIGxhYmVsLFxuICBvbkNoYW5nZSxcbiAgcGxhY2Vob2xkZXIsXG4gIGNoZWNrZWQsXG4gIGRpc2FibGVkLFxuICBuYW1lLFxuICBjbGFzc05hbWUsXG4gIGluZGV0ZXJtaW5hdGUsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBhdXRvRm9jdXMgPSBmYWxzZSxcbn06IENoZWNrYm94UHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKGU6IFJlYWN0LkZvcm1FdmVudDxIVE1MSW5wdXRFbGVtZW50PikgPT4ge1xuICAgICAgaWYgKHR5cGVvZiBvbkNoYW5nZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2hhbmdlKChlLnRhcmdldCBhcyBIVE1MSW5wdXRFbGVtZW50KS5jaGVja2VkKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNoYW5nZV1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDxMYWJlbCB2YWx1ZT17bGFiZWx9PlxuICAgICAgPGlucHV0XG4gICAgICAgIGRhdGEtdGVzdGlkPVwiY2hlY2tib3hcIlxuICAgICAgICByZWY9eyhpbnB1dFJlZikgPT4ge1xuICAgICAgICAgIGlmIChpbnB1dFJlZikge1xuICAgICAgICAgICAgaW5wdXRSZWYuaW5kZXRlcm1pbmF0ZSA9IGluZGV0ZXJtaW5hdGU7XG4gICAgICAgICAgfVxuICAgICAgICB9fVxuICAgICAgICBjaGVja2VkPXtjaGVja2VkfVxuICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jaGVja2JveCwgY2xhc3NOYW1lLCBzdHlsZXNbc2l6ZV1dKX1cbiAgICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgICAgcGxhY2Vob2xkZXI9e3BsYWNlaG9sZGVyfVxuICAgICAgICBuYW1lPXtuYW1lfVxuICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICBhdXRvRm9jdXM9e2F1dG9Gb2N1c31cbiAgICAgIC8+XG4gICAgPC9MYWJlbD5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ2hlY2tib3g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENoZWNrYm94IH0gZnJvbSBcIi4vQ2hlY2tib3hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sb3JTd2F0Y2ggfSBmcm9tIFwiLi4vQ29sb3JTd2F0Y2hcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vQ29sb3JQaWNrZXIubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgQ29sb3IgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcblxudHlwZSBDb2xvclBpY2tlclByb3BzID0ge1xuICBjb2xvcnM6IENvbG9yW107XG4gIGNvbnRhaW5lclJlZj86IFJlZk9iamVjdDxIVE1MRGl2RWxlbWVudD47XG4gIGRpcmVjdGlvbj86IFwiaG9yaXpvbnRhbFwiIHwgXCJ2ZXJ0aWNhbFwiO1xuICBvblNlbGVjdDogKGNvbG9yOiBDb2xvcikgPT4gdm9pZDtcbiAgc2VsZWN0ZWRDb2xvcj86IENvbG9yO1xuICBjYW5Ub2dnbGU/OiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gQ29sb3JQaWNrZXIoe1xuICBjb2xvcnMsXG4gIGNvbnRhaW5lclJlZixcbiAgb25TZWxlY3QsXG4gIHNlbGVjdGVkQ29sb3IsXG4gIGRpcmVjdGlvbiA9IFwidmVydGljYWxcIixcbiAgY2FuVG9nZ2xlID0gZmFsc2UsXG59OiBDb2xvclBpY2tlclByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgcmVmPXtjb250YWluZXJSZWZ9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29sb3JQaWNrZXIsIHN0eWxlc1tkaXJlY3Rpb25dXSl9XG4gICAgPlxuICAgICAge2NvbG9ycy5tYXAoKGNvbG9yOiBDb2xvcikgPT4ge1xuICAgICAgICBjb25zdCBoYW5kbGVTZWxlY3QgPSAoKSA9PiB7XG4gICAgICAgICAgaWYgKGNhblRvZ2dsZSAmJiBjb2xvci5rZXkgPT09IHNlbGVjdGVkQ29sb3I/LmtleSkge1xuICAgICAgICAgICAgb25TZWxlY3QobnVsbCk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIG9uU2VsZWN0KGNvbG9yKTtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICA8Q29sb3JTd2F0Y2hcbiAgICAgICAgICAgIGtleT17Y29sb3Iua2V5fVxuICAgICAgICAgICAgY29sb3I9e2NvbG9yfVxuICAgICAgICAgICAgaXNTZWxlY3RlZD17Y29sb3Iua2V5ID09PSBzZWxlY3RlZENvbG9yPy5rZXl9XG4gICAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWxlY3R9XG4gICAgICAgICAgLz5cbiAgICAgICAgKTtcbiAgICAgIH0pfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBDb2xvclBpY2tlcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29sb3JQaWNrZXIgfSBmcm9tIFwiLi9Db2xvclBpY2tlclwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbG9yU3dhdGNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IENvbG9yLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgQ29sb3JTd2F0Y2hQcm9wcyA9IHtcbiAgY29sb3I6IENvbG9yO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTEJ1dHRvbkVsZW1lbnQ+O1xuICBpc1NlbGVjdGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIG9uQ2xpY2s/OiAoKSA9PiB2b2lkO1xufTtcblxuZnVuY3Rpb24gQ29sb3JTd2F0Y2goe1xuICBjb2xvcixcbiAgY29udGFpbmVyUmVmLFxuICBpc1NlbGVjdGVkID0gZmFsc2UsXG4gIHNpemUgPSBcIm1lZGl1bVwiLFxuICBvbkNsaWNrLFxufTogQ29sb3JTd2F0Y2hQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxidXR0b25cbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb2xvclN3YXRjaCxcbiAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zZWxlY3RlZF06IGlzU2VsZWN0ZWQsXG4gICAgICAgIH0sXG4gICAgICBdKX1cbiAgICAgIGRhdGEtdGVzdGlkPVwiY29sb3Itc3dhdGNoXCJcbiAgICAgIG9uQ2xpY2s9e29uQ2xpY2t9XG4gICAgICBzdHlsZT17eyBiYWNrZ3JvdW5kQ29sb3I6IGNvbG9yLmhleENvZGUgfX1cbiAgICA+XG4gICAgICB7Y29sb3IubGFiZWwgJiYgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMuc3JPbmx5fT57YFNlbGVjdCAke2NvbG9yLmxhYmVsfSBjb2xvcmB9PC9zcGFuPn1cbiAgICA8L2J1dHRvbj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgQ29sb3JTd2F0Y2g7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIENvbG9yU3dhdGNoIH0gZnJvbSBcIi4vQ29sb3JTd2F0Y2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdEVsZW1lbnQsIFJlYWN0Tm9kZSwgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IE1vZGFsIH0gZnJvbSBcIi4uL01vZGFsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL0NvbmZpcm1hdGlvbk1vZGFsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBDb25maXJtYXRpb25Nb2RhbFByb3BzID0ge1xuICBjbGFzc05hbWU/OiBzdHJpbmc7XG4gIGJ1dHRvbnNMZWZ0PzogUmVhY3RFbGVtZW50W107XG4gIGJ1dHRvbnNSaWdodD86IFJlYWN0RWxlbWVudFtdO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgaGVhZGVyPzogc3RyaW5nO1xuICBpc09wZW46IGJvb2xlYW47XG4gIG5vUGFkZGluZz86IGJvb2xlYW47XG4gIG5vT3ZlcmxheT86IGJvb2xlYW47XG4gIG5vU2hhZG93PzogYm9vbGVhbjtcbiAgb25DbG9zZT86ICgpID0+IHZvaWQ7XG4gIGJhc2VaSW5kZXg/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBDb25maXJtYXRpb25Nb2RhbCh7XG4gIGNsYXNzTmFtZSxcbiAgY2hpbGRyZW4sXG4gIGNvbnRhaW5lclJlZixcbiAgaGVhZGVyLFxuICBpc09wZW4sXG4gIGJ1dHRvbnNMZWZ0ID0gW10sXG4gIGJ1dHRvbnNSaWdodCA9IFtdLFxuICBvbkNsb3NlID0gKCkgPT4ge30sXG4gIG5vUGFkZGluZyA9IGZhbHNlLFxuICBub092ZXJsYXkgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgYmFzZVpJbmRleCA9IDEwMTksXG59OiBDb25maXJtYXRpb25Nb2RhbFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPE1vZGFsXG4gICAgICBjb250YWluZXJSZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGlzT3Blbj17aXNPcGVufVxuICAgICAgb25DbG9zZT17b25DbG9zZX1cbiAgICAgIG5vT3ZlcmxheT17bm9PdmVybGF5fVxuICAgICAgbm9TaGFkb3c9e25vU2hhZG93fVxuICAgICAgYmFzZVpJbmRleD17YmFzZVpJbmRleH1cbiAgICA+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNsYXNzTmFtZV0pfT5cbiAgICAgICAgeyEhaGVhZGVyICYmIDxoMSBjbGFzc05hbWU9e3N0eWxlcy5tb2RhbEhlYWRlcn0+e2hlYWRlcn08L2gxPn1cbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm1vZGFsQ29udGVudCxcbiAgICAgICAgICAgIHsgW3N0eWxlcy5ub1BhZGRpbmddOiBub1BhZGRpbmcgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zQ29udGFpbmVyfT5cbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9uc30+e2J1dHRvbnNMZWZ0fTwvZGl2PlxuICAgICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMubW9kYWxCdXR0b25zfT57YnV0dG9uc1JpZ2h0fTwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGl2PlxuICAgIDwvTW9kYWw+XG4gICk7XG59XG5cbkNvbmZpcm1hdGlvbk1vZGFsLmRpc3BsYXlOYW1lID0gXCJDb25maXJtYXRpb25Nb2RhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBDb25maXJtYXRpb25Nb2RhbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgQ29uZmlybWF0aW9uTW9kYWwgfSBmcm9tIFwiLi9Db25maXJtYXRpb25Nb2RhbFwiO1xuIiwiaW1wb3J0IFJlYWN0IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBCdXR0b24gfSBmcm9tIFwiLi4vQnV0dG9uXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCB7IEl0ZW0sIFJlbmRlckRpc3BsYXlQcm9wcyB9IGZyb20gXCIuL0Ryb3Bkb3duXCI7XG5cbmltcG9ydCBjc3MgZnJvbSBcIi4vQ2xpY2thYmxlLm1vZHVsZS5jc3NcIjtcblxuaW1wb3J0IGljb25NZW51IGZyb20gXCIuLi8uLi8uLi9hc3NldHMvY2FyZXQtZG93bi5zdmdcIjtcblxuZXhwb3J0IHR5cGUgQ2xpY2thYmxlUHJvcHM8VCBleHRlbmRzIEl0ZW0+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+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEljb25CdXR0b25MaW5rO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBJY29uQnV0dG9uTGluayB9IGZyb20gXCIuL0ljb25CdXR0b25MaW5rXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVmT2JqZWN0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vSW1hZ2UubW9kdWxlLmNzc1wiO1xuXG5leHBvcnQgdHlwZSBJbWFnZVByb3BzID0ge1xuICBhbHQ/OiBzdHJpbmc7XG4gIGNoaWxkcmVuPzogUmVhY3QuUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBsYXlvdXQ/OiBcImNvdmVyXCIgfCBcImNvbnRhaW5cIiB8IFwic3RyZXRjaEhvcml6b250YWxseVwiIHwgXCJzdHJldGNoVmVydGljYWxseVwiO1xuICBzcmM6IHN0cmluZztcbiAgc3JjV2lkdGg/OiBudW1iZXI7XG4gIHNyY0hlaWdodD86IG51bWJlcjtcbiAgZGVjb2Rpbmc/OiBcImFzeW5jXCIgfCBcInN5bmNcIiB8IFwiYXV0b1wiO1xuICBsb2FkaW5nPzogXCJlYWdlclwiIHwgXCJsYXp5XCI7XG4gIHN0eWxlPzogUmVhY3QuQ1NTUHJvcGVydGllcztcbn07XG5cbmZ1bmN0aW9uIEltYWdlQ29tcG9uZW50KHtcbiAgc3JjLFxuICBhbHQsXG4gIHNyY1dpZHRoLFxuICBzcmNIZWlnaHQsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIGxheW91dCA9IFwiY29udGFpblwiLFxuICBkZWNvZGluZyA9IFwiYXV0b1wiLFxuICBsb2FkaW5nID0gXCJlYWdlclwiLFxuICBzdHlsZSxcbn06IEltYWdlUHJvcHMpIHtcbiAgY29uc3QgaW1hZ2VFbGVtZW50ID0gKFxuICAgIDxpbWdcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5pbWFnZSwgc3R5bGVzW2xheW91dF1dKX1cbiAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW1hZ2VcIlxuICAgICAgYWx0PXthbHR9XG4gICAgICBzcmM9e3NyY31cbiAgICAgIHdpZHRoPXtzcmNXaWR0aH1cbiAgICAgIGhlaWdodD17c3JjSGVpZ2h0fVxuICAgICAgZGVjb2Rpbmc9e2RlY29kaW5nfVxuICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgIHN0eWxlPXtzdHlsZX1cbiAgICAvPlxuICApO1xuXG4gIHJldHVybiBjaGlsZHJlbiA/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+O1xuICBpc09wZW46IGJvb2xlYW47XG4gIG9uQ2xvc2U/OiAoKSA9PiB2b2lkO1xuICBidXR0b24/OiBSZWFjdE5vZGU7XG4gIHRyYW5zcGFyZW50PzogYm9vbGVhbjtcbiAgbm9TaGFkb3c/OiBib29sZWFuO1xuICBub092ZXJsYXk/OiBib29sZWFuO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcblxuZnVuY3Rpb24gTW9kYWwoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICBpc09wZW4sXG4gIGJ1dHRvbixcbiAgdHJhbnNwYXJlbnQgPSBmYWxzZSxcbiAgbm9TaGFkb3cgPSBmYWxzZSxcbiAgbm9PdmVybGF5ID0gZmFsc2UsXG4gIG9uQ2xvc2UgPSAoKSA9PiB7fSxcbiAgYmFzZVpJbmRleCA9IDEwMDksXG59OiBNb2RhbFByb3BzKSB7XG4gIHVzZUhvdGtleXMoXCJFc2NhcGVcIiwgb25DbG9zZSk7XG5cbiAgY29uc3QgaGFuZGxlT3ZlcmxheUNsaWNrID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIG9uQ2xvc2UoKTtcbiAgfSwgW29uQ2xvc2VdKTtcblxuICByZXR1cm4gKFxuICAgIGlzT3BlbiAmJiAoXG4gICAgICA8ZGl2IHJlZj17Y29udGFpbmVyUmVmfT5cbiAgICAgICAgPGRpdlxuICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCB9fVxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLm92ZXJsYXksXG4gICAgICAgICAgICB7IFtzdHlsZXMubm9PdmVybGF5XTogbm9PdmVybGF5IH0sXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgZGF0YS10ZXN0aWQ9XCJtb2RhbC1vdmVybGF5XCJcbiAgICAgICAgICBvbkNsaWNrPXtoYW5kbGVPdmVybGF5Q2xpY2t9XG4gICAgICAgIC8+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBzdHlsZT17eyB6SW5kZXg6IGJhc2VaSW5kZXggKyAxIH19XG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICBzdHlsZXMubW9kYWwsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICAgICAgW3N0eWxlcy5ub1NoYWRvd106IG5vU2hhZG93LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBkYXRhLXRlc3RpZD1cIm1vZGFsXCJcbiAgICAgICAgPlxuICAgICAgICAgIHtjaGlsZHJlbn1cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIHtidXR0b24gJiYgKFxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIHN0eWxlPXt7IHpJbmRleDogYmFzZVpJbmRleCArIDIgfX1cbiAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLm1vZGFsQnV0dG9ufVxuICAgICAgICAgID5cbiAgICAgICAgICAgIHtidXR0b259XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgICl9XG4gICAgICA8L2Rpdj5cbiAgICApXG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBNb2RhbCB9IGZyb20gXCIuL01vZGFsXCI7XG4iLCJpbXBvcnQgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCB7IEJ1dHRvbiB9IGZyb20gXCIuLi9CdXR0b25cIjtcbmltcG9ydCB7IEljb24gfSBmcm9tIFwiLi4vSWNvblwiO1xuXG5pbXBvcnQgY3NzIGZyb20gXCIuL051bXBhZC5tb2R1bGUuY3NzXCI7XG5cbmltcG9ydCBiYWNrc3BhY2VJY29uIGZyb20gXCIuLi8uLi8uLi9hc3NldHMvYmFja3NwYWNlLnN2Z1wiO1xuXG50eXBlIERpZ2l0ID0gMCB8IDEgfCAyIHwgMyB8IDQgfCA1IHwgNiB8IDcgfCA4IHwgOTtcblxuY29uc3QgYXBwZW5kRGlnaXQgPSAobnVtYmVyOiBudW1iZXIsIGRpZ2l0OiBEaWdpdCkgPT4ge1xuICByZXR1cm4gbnVtYmVyICogMTAgKyBkaWdpdDtcbn07XG5cbmNvbnN0IHBvcERpZ2l0ID0gKG51bWJlcjogbnVtYmVyKSA9PiB7XG4gIHJldHVybiBNYXRoLmZsb29yKG51bWJlciAvIDEwKTtcbn07XG5cbmNvbnN0IGV2ZW50RGlnaXRLZXlzID0gW1wiMFwiLCBcIjFcIiwgXCIyXCIsIFwiM1wiLCBcIjRcIiwgXCI1XCIsIFwiNlwiLCBcIjdcIiwgXCI4XCIsIFwiOVwiXTtcblxuZXhwb3J0IGludGVyZmFjZSBOdW1wYWRQcm9wcyB7XG4gIG51bWJlcjogbnVtYmVyO1xuICBkaXNhYmxlZD86IGJvb2xlYW47XG4gIG9uQ2hhbmdlOiAobmV3TnVtYmVyOiBudW1iZXIpID0+IHZvaWQ7XG59XG5cbmV4cG9ydCBjb25zdCBOdW1wYWQgPSBSZWFjdC5mb3J3YXJkUmVmPEhUTUxEaXZFbGVtZW50LCBOdW1wYWRQcm9wcz4oXG4gICh7IG51bWJlciwgb25DaGFuZ2UsIGRpc2FibGVkID0gZmFsc2UgfSwgcmVmKSA9PiB7ICAgIFxuICAgIGNvbnN0IGhhbmRsZUtleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRGl2RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChlLmtleSA9PT0gXCJCYWNrc3BhY2VcIikge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKHBvcERpZ2l0KG51bWJlcikpO1xuICAgICAgfSBlbHNlIGlmIChldmVudERpZ2l0S2V5cy5pbmNsdWRlcyhlLmtleSkpIHtcbiAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcblxuICAgICAgICBjb25zdCBkaWdpdCA9IHBhcnNlSW50KGUua2V5LCAxMCkgYXMgRGlnaXQ7XG4gICAgICAgIG9uQ2hhbmdlKGFwcGVuZERpZ2l0KG51bWJlciwgZGlnaXQpKTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgY29uc3QgY3JlYXRlRW1pdE51bWJlckhhbmRsZXIgPSAobmV3TnVtYmVyOiBudW1iZXIpID0+XG4gICAgICAoZTogUmVhY3QuUG9pbnRlckV2ZW50PEhUTUxCdXR0b25FbGVtZW50PikgPT4ge1xuICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuXG4gICAgICAgIG9uQ2hhbmdlKG5ld051bWJlcik7XG4gICAgICB9O1xuXG4gICAgY29uc3QgTnVtcGFkS2V5cyA9IEFycmF5KDEwKVxuICAgICAgLmZpbGwoMClcbiAgICAgIC5tYXAoKF8sIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IG51bXBhZFZhbHVlID0gKChpbmRleCArIDEpICUgMTApIGFzIERpZ2l0O1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICBkaXNhYmxlZD17ZGlzYWJsZWR9XG4gICAgICAgICAgICBub0JvcmRlclxuICAgICAgICAgICAgbm9TaGFkb3dcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKGFwcGVuZERpZ2l0KG51bWJlciwgbnVtcGFkVmFsdWUpKX1cbiAgICAgICAgICA+XG4gICAgICAgICAgICB7bnVtcGFkVmFsdWV9XG4gICAgICAgICAgPC9CdXR0b24+XG4gICAgICAgICk7XG4gICAgICB9KTtcblxuICAgIHJldHVybiAoXG4gICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bXBhZH0gcmVmPXtyZWZ9IHRhYkluZGV4PXstMX0gb25LZXlEb3duPXtoYW5kbGVLZXlEb3dufSBkYXRhLXRlc3RpZD1cIm51bXBhZFwiPlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17Y3NzLm51bWJlcnN9PlxuICAgICAgICAgIHtOdW1wYWRLZXlzfVxuICAgICAgICAgIDxCdXR0b25cbiAgICAgICAgICAgIGRpc2FibGVkPXtkaXNhYmxlZH1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICBub1NoYWRvd1xuICAgICAgICAgICAgdHJhbnNwYXJlbnRcbiAgICAgICAgICAgIG9uUG9pbnRlckRvd249e2NyZWF0ZUVtaXROdW1iZXJIYW5kbGVyKHBvcERpZ2l0KG51bWJlcikpfVxuICAgICAgICAgID5cbiAgICAgICAgICAgIDxJY29uIGFsdD1cIkJhY2tzcGFjZVwiIHNyYz17YmFja3NwYWNlSWNvbn0gLz5cbiAgICAgICAgICA8L0J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2Rpdj5cbiAgICApO1xuICB9XG4pO1xuIiwiZXhwb3J0IHsgTnVtcGFkIH0gZnJvbSBcIi4vTnVtcGFkXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3ZlcmxheS5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgT3ZlcmxheVByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICB0cmFuc3BhcmVudD86IGJvb2xlYW47XG4gIGlzRml4ZWQ/OiBib29sZWFuO1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIE92ZXJsYXkoe1xuICBjaGlsZHJlbixcbiAgY29udGFpbmVyUmVmLFxuICB0cmFuc3BhcmVudCA9IGZhbHNlLFxuICBpc0ZpeGVkID0gZmFsc2UsXG4gIG9uQ2xpY2sgPSAoKSA9PiB7fSxcbn06IE92ZXJsYXlQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgZGF0YS10ZXN0aWQ9XCJvdmVybGF5XCJcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMub3ZlcmxheSxcbiAgICAgICAge1xuICAgICAgICAgIFtzdHlsZXMudHJhbnNwYXJlbnRdOiB0cmFuc3BhcmVudCxcbiAgICAgICAgICBbc3R5bGVzLmZpeGVkXTogaXNGaXhlZCxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICA+XG4gICAgICB7Y2hpbGRyZW59XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE92ZXJsYXk7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE92ZXJsYXkgfSBmcm9tIFwiLi9PdmVybGF5XCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2sgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9Hcm91cE9wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyB1c2VUb2dnbGUgfSBmcm9tIFwiQHRvdWNodGVjaC93ZWItaG9va3NcIjtcbmltcG9ydCB7IE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IE9wdGlvbiB9IGZyb20gXCIuLi9PcHRpb25cIjtcbmltcG9ydCB7IEljb25CdXR0b24gfSBmcm9tIFwiLi4vLi4vSWNvbkJ1dHRvblwiO1xuaW1wb3J0IGljb25DYXJldERvd24gZnJvbSBcIi4uLy4uLy4uLy4uL2Fzc2V0cy9zZWxlY3QtY2FyZXQtZG93bi5zdmdcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBsYWJlbDogc3RyaW5nO1xuICBvcHRpb25zOiBBcnJheTxPcHRpb25UeXBlPjtcbn07XG5cbmZ1bmN0aW9uIEdyb3VwT3B0aW9uKHsgY2xhc3NOYW1lLCBsYWJlbCwgb3B0aW9ucyB9OiBQcm9wcykge1xuICBjb25zdCBbZXhwYW5kZWQsIHRvZ2dsZUV4cGFuZF0gPSB1c2VUb2dnbGUoZmFsc2UpO1xuXG4gIGNvbnN0IGhhbmRsZUdyb3VwQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgdG9nZ2xlRXhwYW5kKCk7XG4gIH0sIFtdKTtcblxuICByZXR1cm4gKFxuICAgIDxkaXYgY2xhc3NOYW1lPXtjbGFzc05hbWV9PlxuICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5oZWFkZXJ9IG9uQ2xpY2s9e2hhbmRsZUdyb3VwQ2xpY2t9PlxuICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57bGFiZWx9PC9kaXY+XG4gICAgICAgIDxJY29uQnV0dG9uXG4gICAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgICAgICB7IFtzdHlsZXMuZXhwYW5kZWRdOiAhZXhwYW5kZWQgfSxcbiAgICAgICAgICBdKX1cbiAgICAgICAgICBzcmM9e2ljb25DYXJldERvd259XG4gICAgICAgICAgYWx0PXtleHBhbmRlZCA/IFwiQ29sbGFwc2VcIiA6IFwiRXhwYW5kXCJ9XG4gICAgICAgICAgbm9Cb3JkZXJcbiAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAvPlxuICAgICAgPC9kaXY+XG4gICAgICB7IWV4cGFuZGVkICYmXG4gICAgICAgIG9wdGlvbnMubWFwKChvcHRpb24pID0+IChcbiAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgKSl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IEdyb3VwT3B0aW9uO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBHcm91cE9wdGlvbiB9IGZyb20gXCIuL0dyb3VwT3B0aW9uXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZUNvbnRleHQsXG4gIHVzZU1lbW8sXG59IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL09wdGlvbi5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBDaGVja2JveCB9IGZyb20gXCIuLi8uLi9DaGVja2JveFwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5pbXBvcnQgeyBPcHRpb25UeXBlIH0gZnJvbSBcIi4uLy4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGNoaWxkcmVuOiBzdHJpbmc7XG4gIGNsYXNzTmFtZT86IHN0cmluZztcbiAgZGF0YTogT3B0aW9uVHlwZTtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbih7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGRhdGEgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBtdWx0aXBsZSwgc2VsZWN0ZWRPcHRpb25zLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGlzQ2hlY2tlZCA9IHVzZU1lbW8oXG4gICAgKCkgPT4gc2VsZWN0ZWRPcHRpb25zLm1hcCgoeyB2YWx1ZSB9KSA9PiB2YWx1ZSkuaW5jbHVkZXMoZGF0YS52YWx1ZSksXG4gICAgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc11cbiAgKTtcblxuICBjb25zdCBoYW5kbGVDbGljayA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB1cGRhdGVTZWxlY3RlZE9wdGlvbihkYXRhKTtcbiAgfSwgW2RhdGEsIHNlbGVjdGVkT3B0aW9uc10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5zZWxlY3RlZF06IGlzQ2hlY2tlZCAmJiAhbXVsdGlwbGUgfSxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgXSl9XG4gICAgICBvbkNsaWNrPXtoYW5kbGVDbGlja31cbiAgICA+XG4gICAgICB7bXVsdGlwbGUgJiYgKFxuICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgPENoZWNrYm94XG4gICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveH1cbiAgICAgICAgICAgIGNoZWNrZWQ9e2lzQ2hlY2tlZH1cbiAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgLz5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgKX1cbiAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmxhYmVsfT57Y2hpbGRyZW59PC9zcGFuPlxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBPcHRpb247XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbiB9IGZyb20gXCIuL09wdGlvblwiO1xuIiwiaW1wb3J0IHsgdXNlVG9nZ2xlIH0gZnJvbSBcIkB0b3VjaHRlY2gvd2ViLWhvb2tzXCI7XG5pbXBvcnQgUmVhY3QsIHsgdXNlQ2FsbGJhY2ssIHVzZUNvbnRleHQsIHVzZUVmZmVjdCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IENoZWNrYm94IH0gZnJvbSBcIi4uLy4uL0NoZWNrYm94XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvbiB9IGZyb20gXCIuLi9Hcm91cE9wdGlvblwiO1xuaW1wb3J0IHsgT3B0aW9uIH0gZnJvbSBcIi4uL09wdGlvblwiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dCB9IGZyb20gXCIuLi9TZWxlY3RDb250ZXh0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vT3B0aW9uTGlzdC5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkZpbHRlcj86IChvcHRpb246IE9wdGlvblR5cGUsIHNlYXJjaEtleXdvcmQ6IHN0cmluZykgPT4gYm9vbGVhbjtcbiAgb25DaGFuZ2U/OiAodmFsdWVzOiBBcnJheTxzdHJpbmc+KSA9PiB2b2lkO1xufTtcblxuLy8gc2VlIGRvY3MgdG8gdW5kZXJzdGFuZCBuZWVkIG9mIHRoZSBmdW5jdGlvbiBiZWxvdyBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay8yL25hcnJvd2luZy5odG1sI3VzaW5nLXR5cGUtcHJlZGljYXRlc1xuZXhwb3J0IGNvbnN0IGlzT3B0aW9uID0gKFxuICBvcHRpb246IE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGVcbik6IG9wdGlvbiBpcyBPcHRpb25UeXBlID0+IHtcbiAgcmV0dXJuIChvcHRpb24gYXMgT3B0aW9uVHlwZSkudmFsdWUgIT09IHVuZGVmaW5lZDtcbn07XG5cbmZ1bmN0aW9uIE9wdGlvbkxpc3QoeyBvcHRpb25zLCBvbkZpbHRlciwgb25DaGFuZ2UgfTogUHJvcHMpIHtcbiAgY29uc3QgW3NlbGVjdEFsbENoZWNrZWQsIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcbiAgY29uc3Qge1xuICAgIG11bHRpcGxlLFxuICAgIHNlYXJjaEtleXdvcmQsXG4gICAgc2VsZWN0QWxsLFxuICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gIH0gPSB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhc0dyb3VwT3B0aW9uID0gb3B0aW9ucy5zb21lKChvcHRpb24pID0+ICFpc09wdGlvbihvcHRpb24pKTtcblxuICBjb25zdCBmaWx0ZXJPcHRpb25zID0gKG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+KSA9PiB7XG4gICAgY29uc3Qga2V5d29yZCA9IHNlYXJjaEtleXdvcmQudG9Mb3dlckNhc2UoKS50cmltKCk7XG5cbiAgICByZXR1cm4ga2V5d29yZC5sZW5ndGhcbiAgICAgID8gb3B0aW9ucy5maWx0ZXIoKG9wdGlvbikgPT5cbiAgICAgICAgICBvbkZpbHRlclxuICAgICAgICAgICAgPyBvbkZpbHRlcihvcHRpb24sIGtleXdvcmQpXG4gICAgICAgICAgICA6IG9wdGlvbi5sYWJlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGtleXdvcmQpXG4gICAgICAgIClcbiAgICAgIDogb3B0aW9ucztcbiAgfTtcblxuICBjb25zdCBmaWx0ZXJlZE9wdGlvbnMgPSB1c2VNZW1vKCgpID0+IHtcbiAgICBpZiAoaGFzR3JvdXBPcHRpb24pIHtcbiAgICAgIHJldHVybiBvcHRpb25zLnJlZHVjZShcbiAgICAgICAgKGZpbHRlcmVkOiBBcnJheTxHcm91cE9wdGlvblR5cGU+LCBncm91cE9wdGlvbjogR3JvdXBPcHRpb25UeXBlKSA9PiB7XG4gICAgICAgICAgY29uc3QgZmlsdGVyZWRHcm91cE9wdGlvbnMgPSBmaWx0ZXJPcHRpb25zKGdyb3VwT3B0aW9uLm9wdGlvbnMpO1xuXG4gICAgICAgICAgaWYgKGZpbHRlcmVkR3JvdXBPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgLi4uZmlsdGVyZWQsXG4gICAgICAgICAgICAgIHsgLi4uZ3JvdXBPcHRpb24sIG9wdGlvbnM6IGZpbHRlcmVkR3JvdXBPcHRpb25zIH0sXG4gICAgICAgICAgICBdO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmaWx0ZXJlZDtcbiAgICAgICAgfSxcbiAgICAgICAgW11cbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmaWx0ZXJPcHRpb25zKG9wdGlvbnMgYXMgQXJyYXk8T3B0aW9uVHlwZT4pO1xuICAgIH1cbiAgfSwgW2hhc0dyb3VwT3B0aW9uLCBvcHRpb25zLCBzZWFyY2hLZXl3b3JkXSk7XG5cbiAgY29uc3QgaGFuZGxlU2VsZWN0QWxsQ2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RBbGxDaGVja2VkKSB7XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMoZmlsdGVyZWRPcHRpb25zIGFzIE9wdGlvblR5cGVbXSk7XG4gICAgICBvbkNoYW5nZSAmJlxuICAgICAgICBvbkNoYW5nZSgoZmlsdGVyZWRPcHRpb25zIGFzIE9wdGlvblR5cGVbXSkubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldFNlbGVjdGVkT3B0aW9ucyhbXSk7XG4gICAgICBvbkNoYW5nZSAmJiBvbkNoYW5nZShbXSk7XG4gICAgfVxuXG4gICAgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZCgpO1xuICB9LCBbXG4gICAgZmlsdGVyZWRPcHRpb25zLFxuICAgIHNlbGVjdEFsbENoZWNrZWQsXG4gICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQsXG4gIF0pO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRvZ2dsZVNlbGVjdEFsbENoZWNrZWQoZmFsc2UpO1xuICAgIH1cbiAgfSwgW3NlbGVjdGVkT3B0aW9ucywgdG9nZ2xlU2VsZWN0QWxsQ2hlY2tlZF0pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAge3NlbGVjdEFsbCAmJiBtdWx0aXBsZSAmJiAoXG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zZWxlY3RBbGxDb250YWluZXJ9XG4gICAgICAgICAgb25DbGljaz17aGFuZGxlU2VsZWN0QWxsQ2xpY2t9XG4gICAgICAgID5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5jaGVja2JveENvbnRhaW5lcn0+XG4gICAgICAgICAgICA8Q2hlY2tib3hcbiAgICAgICAgICAgICAgY2xhc3NOYW1lPXtzdHlsZXMuY2hlY2tib3h9XG4gICAgICAgICAgICAgIGNoZWNrZWQ9e3NlbGVjdEFsbENoZWNrZWR9XG4gICAgICAgICAgICAgIHNpemU9XCJzbWFsbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgICA8c3BhbiBjbGFzc05hbWU9e3N0eWxlcy5sYWJlbH0+U2VsZWN0IEFsbDwvc3Bhbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgICAge2ZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbikgPT5cbiAgICAgICAgaXNPcHRpb24ob3B0aW9uKSA/IChcbiAgICAgICAgICA8T3B0aW9uIGtleT17b3B0aW9uLnZhbHVlfSBkYXRhPXtvcHRpb259PlxuICAgICAgICAgICAge29wdGlvbi5sYWJlbH1cbiAgICAgICAgICA8L09wdGlvbj5cbiAgICAgICAgKSA6IChcbiAgICAgICAgICA8R3JvdXBPcHRpb25cbiAgICAgICAgICAgIGtleT17b3B0aW9uLmxhYmVsfVxuICAgICAgICAgICAgbGFiZWw9e29wdGlvbi5sYWJlbH1cbiAgICAgICAgICAgIG9wdGlvbnM9e29wdGlvbi5vcHRpb25zfVxuICAgICAgICAgIC8+XG4gICAgICAgIClcbiAgICAgICl9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IE9wdGlvbkxpc3Q7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIE9wdGlvbkxpc3QsIGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrLCB1c2VDb250ZXh0IH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vU2VhcmNoLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGV4dElucHV0IH0gZnJvbSBcIi4uLy4uL1RleHRJbnB1dFwiO1xuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi8uLi9JY29uXCI7XG5pbXBvcnQgaWNvblNlYXJjaCBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL3NlYXJjaC5zdmdcIjtcbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uLy4uL0ljb25CdXR0b25cIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gU2VhcmNoKHsgY2xhc3NOYW1lIH06IFByb3BzKSB7XG4gIGNvbnN0IHsgc2VhcmNoS2V5d29yZCwgc2V0U2VhcmNoS2V5d29yZCB9ID0gdXNlQ29udGV4dChTZWxlY3RDb250ZXh0KTtcblxuICBjb25zdCBoYW5kbGVTZWFyY2hLZXl3b3JkQ2hhbmdlID0gdXNlQ2FsbGJhY2soXG4gICAgKHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIHNldFNlYXJjaEtleXdvcmQodmFsdWUpO1xuICAgIH0sXG4gICAgW3NlYXJjaEtleXdvcmRdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU2VhcmNoS2V5d29yZFJlc2V0Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgc2V0U2VhcmNoS2V5d29yZChcIlwiKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmljb25TZWFyY2hDb250YWluZXJ9PlxuICAgICAgICA8SWNvbiBzcmM9e2ljb25TZWFyY2h9IC8+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxUZXh0SW5wdXRcbiAgICAgICAgdmFsdWU9e3NlYXJjaEtleXdvcmR9XG4gICAgICAgIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBzZWFyY2guLi5cIlxuICAgICAgICBvbkNoYW5nZT17aGFuZGxlU2VhcmNoS2V5d29yZENoYW5nZX1cbiAgICAgICAgbm9Cb3JkZXJcbiAgICAgIC8+XG4gICAgICA8SWNvbkJ1dHRvblxuICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5yZXNldEJ1dHRvbn1cbiAgICAgICAgc3JjPXtpY29uQ3Jvc3NlZH1cbiAgICAgICAgYWx0PVwiQ2xlYXJcIlxuICAgICAgICBvbkNsaWNrPXtoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGlja31cbiAgICAgICAgZGlzYWJsZWQ9eyFzZWFyY2hLZXl3b3JkfVxuICAgICAgICBub0JvcmRlclxuICAgICAgICBub1NoYWRvd1xuICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgLz5cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VhcmNoO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWFyY2ggfSBmcm9tIFwiLi9TZWFyY2hcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjayB9IGZyb20gXCJyZWFjdFwiO1xuaW1wb3J0IGNsYXNzY2F0IGZyb20gXCJjbGFzc2NhdFwiO1xuXG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL3NlbGVjdC1jYXJldC1kb3duLnN2Z1wiO1xuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9TZWxlY3QubW9kdWxlLmNzc1wiO1xuaW1wb3J0IHsgR3JvdXBPcHRpb25UeXBlLCBPcHRpb25UeXBlLCBTaXplIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5pbXBvcnQgeyB1c2VPdXRzaWRlQ2xpY2ssIHVzZVRvZ2dsZSB9IGZyb20gXCJAdG91Y2h0ZWNoL3dlYi1ob29rc1wiO1xuaW1wb3J0IHsgU2VsZWN0Q29udGV4dFByb3ZpZGVyIH0gZnJvbSBcIi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuaW1wb3J0IHsgU2VhcmNoIH0gZnJvbSBcIi4vU2VhcmNoXCI7XG5pbXBvcnQgeyBJY29uQnV0dG9uIH0gZnJvbSBcIi4uL0ljb25CdXR0b25cIjtcbmltcG9ydCB7IGlzT3B0aW9uLCBPcHRpb25MaXN0IH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuXG50eXBlIFNlbGVjdFByb3BzID0ge1xuICBkZWZhdWx0VmFsdWU/OiBzdHJpbmcgfCBzdHJpbmdbXTtcbiAgcGxhY2Vob2xkZXI6IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIGRpc2FibGVkPzogYm9vbGVhbjtcbiAgc2l6ZT86IFNpemU7XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIHNob3dTZWxlY3RlZEFzVGFncz86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICB3aWR0aDogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG4gIG9uRmlsdGVyPzogKG9wdGlvbjogT3B0aW9uVHlwZSwgc2VhcmNoS2V5d29yZDogc3RyaW5nKSA9PiBib29sZWFuO1xufTtcblxuZnVuY3Rpb24gU2VsZWN0KHtcbiAgY2xhc3NOYW1lLFxuICBkZWZhdWx0VmFsdWUsXG4gIGRpc2FibGVkLFxuICBtdWx0aXBsZSA9IGZhbHNlLFxuICBvcHRpb25zLFxuICBwbGFjZWhvbGRlcixcbiAgc2VsZWN0QWxsLFxuICBzaXplID0gXCJtZWRpdW1cIixcbiAgc2hvd1NlbGVjdGVkQXNUYWdzID0gZmFsc2UsXG4gIHdpZHRoLFxuICBvbkNoYW5nZSxcbiAgb25GaWx0ZXIsXG59OiBTZWxlY3RQcm9wcykge1xuICBjb25zdCBbb3BlbmVkLCB0b2dnbGVPcGVuZWRdID0gdXNlVG9nZ2xlKGZhbHNlKTtcblxuICBjb25zdCByZWYgPSB1c2VPdXRzaWRlQ2xpY2soKCkgPT4gdG9nZ2xlT3BlbmVkKGZhbHNlKSk7XG5cbiAgY29uc3QgaGFuZGxlT3BlblNlbGVjdCA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICB0b2dnbGVPcGVuZWQoKTtcbiAgfSwgW10pO1xuXG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKCh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHtcbiAgICBpZiAoIW11bHRpcGxlKSB0b2dnbGVPcGVuZWQoZmFsc2UpO1xuXG4gICAgb25DaGFuZ2UgJiYgb25DaGFuZ2UodmFsdWVzKTtcbiAgfSwgW10pO1xuXG4gIHJldHVybiAoXG4gICAgPFNlbGVjdENvbnRleHRQcm92aWRlclxuICAgICAgZGVmYXVsdFZhbHVlPXtkZWZhdWx0VmFsdWV9XG4gICAgICBtdWx0aXBsZT17bXVsdGlwbGV9XG4gICAgICBvcHRpb25zPXtvcHRpb25zfVxuICAgICAgb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX1cbiAgICAgIHNlbGVjdEFsbD17c2VsZWN0QWxsfVxuICAgID5cbiAgICAgIDxkaXZcbiAgICAgICAgcmVmPXtyZWZ9XG4gICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgICAgc3R5bGVzW3NpemVdLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIFtzdHlsZXMuZGlzYWJsZWRdOiBkaXNhYmxlZCxcbiAgICAgICAgICB9LFxuICAgICAgICAgIGNsYXNzTmFtZSxcbiAgICAgICAgXSl9XG4gICAgICAgIHN0eWxlPXt7IHdpZHRoIH19XG4gICAgICA+XG4gICAgICAgIDxkaXYgY2xhc3NOYW1lPXtzdHlsZXMuaGVhZGVyfSBvbkNsaWNrPXtoYW5kbGVPcGVuU2VsZWN0fT5cbiAgICAgICAgICA8U2VsZWN0b3JcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgIHNob3dTZWxlY3RlZEFzVGFncz17c2hvd1NlbGVjdGVkQXNUYWdzfVxuICAgICAgICAgIC8+XG4gICAgICAgICAgPEljb25CdXR0b25cbiAgICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgICBzdHlsZXMuaWNvbkJ1dHRvbixcbiAgICAgICAgICAgICAgeyBbc3R5bGVzLmV4cGFuZGVkXTogb3BlbmVkIH0sXG4gICAgICAgICAgICBdKX1cbiAgICAgICAgICAgIHNyYz17aWNvbkNhcmV0RG93bn1cbiAgICAgICAgICAgIGFsdD17b3BlbmVkID8gXCJDb2xsYXBzZVwiIDogXCJFeHBhbmRcIn1cbiAgICAgICAgICAgIG5vQm9yZGVyXG4gICAgICAgICAgICB0cmFuc3BhcmVudFxuICAgICAgICAgIC8+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICB7b3BlbmVkICYmIChcbiAgICAgICAgICA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRlbnR9PlxuICAgICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5zZWFyY2hDb250YWluZXJ9PlxuICAgICAgICAgICAgICA8U2VhcmNoIC8+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDxPcHRpb25MaXN0IG9wdGlvbnM9e29wdGlvbnN9IG9uRmlsdGVyPXtvbkZpbHRlcn0gb25DaGFuZ2U9e2hhbmRsZUNoYW5nZX0gLz5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgKX1cbiAgICAgIDwvZGl2PlxuICAgIDwvU2VsZWN0Q29udGV4dFByb3ZpZGVyPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHtcbiAgY3JlYXRlQ29udGV4dCxcbiAgdXNlQ2FsbGJhY2ssXG4gIHVzZU1lbW8sXG4gIHVzZVN0YXRlLFxuICB1c2VFZmZlY3QsXG4gIHVzZVJlZixcbn0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBHcm91cE9wdGlvblR5cGUsIE9wdGlvblR5cGUgfSBmcm9tIFwiLi4vLi4vdHlwZXNcIjtcbmltcG9ydCB7IGlzT3B0aW9uIH0gZnJvbSBcIi4vT3B0aW9uTGlzdFwiO1xuXG50eXBlIFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3QuUmVhY3ROb2RlO1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZyB8IHN0cmluZ1tdO1xuICBtdWx0aXBsZT86IGJvb2xlYW47XG4gIHNlbGVjdEFsbD86IGJvb2xlYW47XG4gIG9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGUgfCBHcm91cE9wdGlvblR5cGU+O1xuICBvbkNoYW5nZT86ICh2YWx1ZXM6IEFycmF5PHN0cmluZz4pID0+IHZvaWQ7XG59O1xuXG50eXBlIFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU/OiBib29sZWFuO1xuICBzZWxlY3RBbGw/OiBib29sZWFuO1xuICBzZWxlY3RlZE9wdGlvbnM6IEFycmF5PE9wdGlvblR5cGU+O1xuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKG9wdGlvbjogT3B0aW9uVHlwZSkgPT4gdm9pZDtcbiAgc2VhcmNoS2V5d29yZDogc3RyaW5nO1xuICBzZXRTZWFyY2hLZXl3b3JkOiAodmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbiAgc2V0U2VsZWN0ZWRPcHRpb25zOiAodmFsdWVzOiBPcHRpb25UeXBlW10pID0+IHZvaWQ7XG59O1xuXG5jb25zdCBpbml0aWFsU3RhdGU6IFNlbGVjdENvbnRleHRTdGF0ZSA9IHtcbiAgbXVsdGlwbGU6IGZhbHNlLFxuICBzZWxlY3RBbGw6IGZhbHNlLFxuICBzZWxlY3RlZE9wdGlvbnM6IFtdLFxuICB1cGRhdGVTZWxlY3RlZE9wdGlvbjogKHZhbHVlOiBPcHRpb25UeXBlKSA9PiB7fSxcbiAgc2VhcmNoS2V5d29yZDogXCJcIixcbiAgc2V0U2VhcmNoS2V5d29yZDogKHZhbHVlOiBzdHJpbmcpID0+IHt9LFxuICBzZXRTZWxlY3RlZE9wdGlvbnM6ICh2YWx1ZXM6IE9wdGlvblR5cGVbXSkgPT4ge30sXG59O1xuXG5jb25zdCBTZWxlY3RDb250ZXh0ID0gY3JlYXRlQ29udGV4dDxTZWxlY3RDb250ZXh0U3RhdGU+KGluaXRpYWxTdGF0ZSk7XG5cbmNvbnN0IFNlbGVjdENvbnRleHRQcm92aWRlciA9ICh7XG4gIGNoaWxkcmVuLFxuICBkZWZhdWx0VmFsdWUsXG4gIG11bHRpcGxlID0gZmFsc2UsXG4gIHNlbGVjdEFsbCA9IGZhbHNlLFxuICBvcHRpb25zLFxuICBvbkNoYW5nZSxcbn06IFByb3BzKSA9PiB7XG4gIGNvbnN0IFtzZWxlY3RlZE9wdGlvbnMsIHNldFNlbGVjdGVkT3B0aW9uc10gPSB1c2VTdGF0ZTxPcHRpb25UeXBlW10+KFxuICAgIGluaXRpYWxTdGF0ZS5zZWxlY3RlZE9wdGlvbnNcbiAgKTtcbiAgY29uc3QgW3NlYXJjaEtleXdvcmQsIHNldFNlYXJjaEtleXdvcmRdID0gdXNlU3RhdGUoXG4gICAgaW5pdGlhbFN0YXRlLnNlYXJjaEtleXdvcmRcbiAgKTtcblxuICBjb25zdCB1cGRhdGVTZWxlY3RlZE9wdGlvbiA9IHVzZUNhbGxiYWNrKFxuICAgIChvcHRpb246IE9wdGlvblR5cGUpID0+IHtcbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zO1xuICAgICAgaWYgKG11bHRpcGxlKSB7XG4gICAgICAgIHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMgPSBzZWxlY3RlZE9wdGlvbnMuc29tZShcbiAgICAgICAgICAoeyB2YWx1ZSB9KSA9PiB2YWx1ZSA9PT0gb3B0aW9uLnZhbHVlXG4gICAgICAgIClcbiAgICAgICAgICA/IHNlbGVjdGVkT3B0aW9ucy5maWx0ZXIoKHsgdmFsdWUgfSkgPT4gdmFsdWUgIT09IG9wdGlvbi52YWx1ZSlcbiAgICAgICAgICA6IFsuLi5zZWxlY3RlZE9wdGlvbnMsIG9wdGlvbl07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW29wdGlvbl07XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG5cbiAgICAgIG9uQ2hhbmdlICYmIG9uQ2hhbmdlKHVwZGF0ZWRTZWxlY3RlZE9wdGlvbnMubWFwKCh7IHZhbHVlIH0pID0+IHZhbHVlKSk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zLCBzZXRTZWxlY3RlZE9wdGlvbnNdXG4gICk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0VmFsdWVzID0gQXJyYXkuaXNBcnJheShkZWZhdWx0VmFsdWUpXG4gICAgICAgID8gZGVmYXVsdFZhbHVlXG4gICAgICAgIDogW2RlZmF1bHRWYWx1ZV07XG5cbiAgICAgIGxldCB1cGRhdGVkU2VsZWN0ZWRPcHRpb25zID0gW107XG4gICAgICBpZiAoZGVmYXVsdFZhbHVlcy5sZW5ndGgpIHtcbiAgICAgICAgY29uc3QgYWxsT3B0aW9ucyA9IG9wdGlvbnMucmVkdWNlKChhbGwsIGl0ZW0pID0+IHtcbiAgICAgICAgICBpZiAoaXNPcHRpb24oaXRlbSkpIHtcbiAgICAgICAgICAgIHJldHVybiBbLi4uYWxsLCBpdGVtXTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIFsuLi5hbGwsIC4uLml0ZW0ub3B0aW9uc107XG4gICAgICAgICAgfVxuICAgICAgICB9LCBbXSk7XG5cbiAgICAgICAgdXBkYXRlZFNlbGVjdGVkT3B0aW9ucyA9IGFsbE9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+XG4gICAgICAgICAgZGVmYXVsdFZhbHVlcy5pbmNsdWRlcyhvcHRpb24udmFsdWUpXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnModXBkYXRlZFNlbGVjdGVkT3B0aW9ucyk7XG4gICAgfVxuICB9LCBbZGVmYXVsdFZhbHVlXSk7XG5cbiAgY29uc3QgY29udGV4dFZhbHVlOiBTZWxlY3RDb250ZXh0U3RhdGUgPSB1c2VNZW1vKFxuICAgICgpID0+ICh7XG4gICAgICBtdWx0aXBsZSxcbiAgICAgIHNlbGVjdEFsbCxcbiAgICAgIHNlbGVjdGVkT3B0aW9ucyxcbiAgICAgIHVwZGF0ZVNlbGVjdGVkT3B0aW9uLFxuICAgICAgc2VhcmNoS2V5d29yZCxcbiAgICAgIHNldFNlYXJjaEtleXdvcmQsXG4gICAgICBzZXRTZWxlY3RlZE9wdGlvbnMsXG4gICAgfSksXG4gICAgW1xuICAgICAgc2VsZWN0QWxsLFxuICAgICAgc2VsZWN0ZWRPcHRpb25zLFxuICAgICAgc2V0U2VsZWN0ZWRPcHRpb25zLFxuICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24sXG4gICAgICBzZWFyY2hLZXl3b3JkLFxuICAgICAgc2V0U2VhcmNoS2V5d29yZCxcbiAgICBdXG4gICk7XG5cbiAgcmV0dXJuIChcbiAgICA8U2VsZWN0Q29udGV4dC5Qcm92aWRlciB2YWx1ZT17Y29udGV4dFZhbHVlfT5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L1NlbGVjdENvbnRleHQuUHJvdmlkZXI+XG4gICk7XG59O1xuXG5leHBvcnQgeyBTZWxlY3RDb250ZXh0LCBTZWxlY3RDb250ZXh0UHJvdmlkZXIgfTtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlQ29udGV4dCwgdXNlTWVtbyB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1NlbGVjdG9yLm1vZHVsZS5jc3NcIjtcbmltcG9ydCB7IFNlbGVjdENvbnRleHQgfSBmcm9tIFwiLi4vU2VsZWN0Q29udGV4dFwiO1xuaW1wb3J0IHsgVGFnIH0gZnJvbSBcIi4uLy4uL1RhZ1wiO1xuXG50eXBlIFByb3BzID0ge1xuICBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICBzaG93U2VsZWN0ZWRBc1RhZ3M6IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBTZWxlY3Rvcih7IHBsYWNlaG9sZGVyLCBzaG93U2VsZWN0ZWRBc1RhZ3MgfTogUHJvcHMpIHtcbiAgY29uc3QgeyBzZWxlY3RlZE9wdGlvbnMsIG11bHRpcGxlLCB1cGRhdGVTZWxlY3RlZE9wdGlvbiB9ID1cbiAgICB1c2VDb250ZXh0KFNlbGVjdENvbnRleHQpO1xuXG4gIGNvbnN0IGhhbmRsZVRhZ0NsaWNrID0gdXNlQ2FsbGJhY2soKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50KSA9PiB7XG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gIH0sIFtdKTtcblxuICBjb25zdCBoYW5kbGVUYWdDbG9zZSA9IHVzZUNhbGxiYWNrKFxuICAgIChldmVudDogUmVhY3QuTW91c2VFdmVudDxIVE1MRWxlbWVudD4sIHZhbHVlOiBzdHJpbmcpID0+IHtcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICBjb25zdCBvcHRpb24gPSBzZWxlY3RlZE9wdGlvbnMuZmluZCgob3B0aW9uKSA9PiBvcHRpb24udmFsdWUgPT09IHZhbHVlKTtcblxuICAgICAgICBpZiAob3B0aW9uKSB7XG4gICAgICAgICAgdXBkYXRlU2VsZWN0ZWRPcHRpb24ob3B0aW9uKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RhZ3MgPSB1c2VNZW1vKFxuICAgICgpID0+XG4gICAgICAhc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCA/IChcbiAgICAgICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMucGxhY2Vob2xkZXJ9PntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICAgICApIDogKFxuICAgICAgICBzZWxlY3RlZE9wdGlvbnMubWFwKCh7IGxhYmVsLCB2YWx1ZSB9KSA9PiAoXG4gICAgICAgICAgPHNwYW4ga2V5PXt2YWx1ZX0gb25DbGljaz17aGFuZGxlVGFnQ2xpY2t9PlxuICAgICAgICAgICAgPFRhZyBrZXk9e3ZhbHVlfSB2YWx1ZT17dmFsdWV9IGNsb3NhYmxlIG9uQ2xvc2U9e2hhbmRsZVRhZ0Nsb3NlfT5cbiAgICAgICAgICAgICAge2xhYmVsfVxuICAgICAgICAgICAgPC9UYWc+XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICApKVxuICAgICAgKSxcbiAgICBbc2VsZWN0ZWRPcHRpb25zXVxuICApO1xuXG4gIGNvbnN0IHNob3dBc1RleHQgPSBzZWxlY3RlZE9wdGlvbnMubGVuZ3RoID8gKFxuICAgIGAke3BsYWNlaG9sZGVyfSAoJHtzZWxlY3RlZE9wdGlvbnMubGVuZ3RofSlgXG4gICkgOiAoXG4gICAgPHNwYW4gY2xhc3NOYW1lPXtzdHlsZXMucGxhY2Vob2xkZXJ9PntwbGFjZWhvbGRlcn08L3NwYW4+XG4gICk7XG5cbiAgbGV0IGNvbnRlbnQ7XG4gIGlmIChtdWx0aXBsZSkge1xuICAgIGNvbnRlbnQgPSBzaG93U2VsZWN0ZWRBc1RhZ3MgPyBzaG93QXNUYWdzIDogc2hvd0FzVGV4dDtcbiAgfSBlbHNlIHtcbiAgICBjb250ZW50ID0gIXNlbGVjdGVkT3B0aW9ucy5sZW5ndGggPyBwbGFjZWhvbGRlciA6IHNlbGVjdGVkT3B0aW9uc1swXS5sYWJlbDtcbiAgfVxuXG4gIHJldHVybiA8ZGl2IGNsYXNzTmFtZT17c3R5bGVzLmNvbnRhaW5lcn0+e2NvbnRlbnR9PC9kaXY+O1xufVxuXG5leHBvcnQgZGVmYXVsdCBTZWxlY3RvcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgU2VsZWN0b3IgfSBmcm9tIFwiLi9TZWxlY3RvclwiO1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBTZWxlY3QgfSBmcm9tIFwiLi9TZWxlY3RcIjtcbiIsImltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCB7IEZpeGVkU2l6ZUxpc3QsIExpc3RPblNjcm9sbFByb3BzIH0gZnJvbSBcInJlYWN0LXdpbmRvd1wiO1xuaW1wb3J0IEluZmluaXRlTG9hZGVyIGZyb20gXCJyZWFjdC13aW5kb3ctaW5maW5pdGUtbG9hZGVyXCI7XG5cbmltcG9ydCBUYWJsZUhlYWRlciBmcm9tIFwiLi9UYWJsZUhlYWRlclwiO1xuaW1wb3J0IFRhYmxlUm93IGZyb20gXCIuL1RhYmxlUm93XCI7XG5pbXBvcnQgeyBTb3J0T3JkZXIgfSBmcm9tIFwiLi4vLi4vdHlwZXMvdGFibGVcIjtcbmltcG9ydCB7IFRhYmxlQ29uZmlnIH0gZnJvbSBcIi4uLy4uL2NvbnN0YW50c1wiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlLm1vZHVsZS5jc3NcIjtcblxuXG5cblxuZXhwb3J0IHR5cGUgQ29sdW1uVHlwZSA9IHtcbiAga2V5OiBzdHJpbmc7XG4gIHRpdGxlOiBKU1guRWxlbWVudCB8IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBkYXRhSW5kZXg6IHN0cmluZztcbiAgcmVuZGVyPzogKGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmcpID0+IEpTWC5FbGVtZW50O1xuICB3aWR0aD86IHN0cmluZztcbiAgZGVmYXVsdFNvcnRPcmRlcj86IFNvcnRPcmRlcjtcbiAgc29ydGVkPzogYm9vbGVhbjtcbiAgc29ydGFibGU/OiBib29sZWFuO1xuICBvblNvcnQ/OiAoc29ydE9yZGVyOiBzdHJpbmcpID0+IHZvaWQ7XG59O1xuXG50eXBlIFByb3BzID0ge1xuICBjb2x1bW5zOiBDb2x1bW5UeXBlW107XG4gIGRhdGFTb3VyY2U6IFJlY29yZDxzdHJpbmcsIGFueT5bXTtcbiAgdGFibGVIZWlnaHQ6IG51bWJlcjtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIG9uTG9hZE1vcmU/OiAocGFnZTogbnVtYmVyKSA9PiB2b2lkO1xuICBwYWdlPzogbnVtYmVyO1xuICBzZXRQYWdlPzogKHBhZ2U6IG51bWJlcikgPT4gdm9pZDtcbiAgcGFnZVNpemU/OiBudW1iZXI7XG4gIHBsYWNlaG9sZGVyPzogUmVhY3QuUmVhY3RFbGVtZW50O1xuICByb3dIZWlnaHQ/OiBudW1iZXI7XG4gIGhlYWRlckhlaWdodD86IG51bWJlcjtcbiAgZGlzYWJsZUxhenlMb2FkZXI/OiBib29sZWFuO1xuICBhY3RpdmVSb3dzPzogUmVjb3JkPHN0cmluZywgYW55PjtcbiAgaXRlbXNDb3VudD86IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoYXNWaXJ0dWFsU2Nyb2xsPzogYm9vbGVhbjtcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVGFibGUoe1xuICBjb2x1bW5zLFxuICBkYXRhU291cmNlLFxuICBvblJvd0NsaWNrLFxuICBoYXNBcnJvdyxcbiAgb25Mb2FkTW9yZSxcbiAgcGFnZSxcbiAgc2V0UGFnZSxcbiAgcGFnZVNpemUgPSBUYWJsZUNvbmZpZy5QQUdFX1NJWkUsXG4gIHRhYmxlSGVpZ2h0LFxuICBwbGFjZWhvbGRlcixcbiAgcm93SGVpZ2h0ID0gVGFibGVDb25maWcuUk9XX0hFSUdIVCxcbiAgaGVhZGVySGVpZ2h0ID0gVGFibGVDb25maWcuSEVBREVSX0hFSUdIVCxcbiAgZGlzYWJsZUxhenlMb2FkZXIsXG4gIGFjdGl2ZVJvd3MsXG4gIGl0ZW1zQ291bnQsXG4gIGlzSGVhZGVyU3RpY2t5ID0gZmFsc2UsXG4gIGhhc1ZpcnR1YWxTY3JvbGwgPSB0cnVlLFxuICBjbGFzc05hbWUsXG59OiBQcm9wcykge1xuICBjb25zdCBbc2Nyb2xsVG9wLCBzZXRTY3JvbGxUb3BdID0gdXNlU3RhdGUoMCk7XG5cbiAgY29uc3QgcmVuZGVyUm93ID0gdXNlQ2FsbGJhY2soXG4gICAgKHsgZGF0YSwgaW5kZXgsIHN0eWxlIH06IHsgZGF0YTogYW55OyBpbmRleDogbnVtYmVyOyBzdHlsZTogYW55IH0pID0+IHtcbiAgICAgIGNvbnN0IHJvdyA9IGRhdGFbaW5kZXhdO1xuICAgICAgcmV0dXJuIChcbiAgICAgICAgPGRpdiBzdHlsZT17eyAuLi5zdHlsZSwgdG9wOiBzdHlsZS50b3AgfX0+XG4gICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICBkYXRhPXtyb3d9XG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgIGhhc0Fycm93PXtoYXNBcnJvd31cbiAgICAgICAgICAgIHJvd0hlaWdodD17cm93SGVpZ2h0fVxuICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdy5pZF19XG4gICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgICApO1xuICAgIH0sXG4gICAgW2NvbHVtbnMsIGFjdGl2ZVJvd3MsIGhhc0Fycm93LCByb3dIZWlnaHQsIG9uUm93Q2xpY2tdXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlTGlzdFNjcm9sbCA9IHVzZUNhbGxiYWNrKFxuICAgICh7IHNjcm9sbE9mZnNldCB9OiBMaXN0T25TY3JvbGxQcm9wcykgPT4ge1xuICAgICAgc2V0U2Nyb2xsVG9wKHNjcm9sbE9mZnNldCk7XG4gICAgfSxcbiAgICBbXVxuICApO1xuXG4gIGNvbnN0IGxvYWRNb3JlID0gdXNlQ2FsbGJhY2soKCkgPT4ge1xuICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA9PT0gaXRlbXNDb3VudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChkYXRhU291cmNlLmxlbmd0aCA8IHBhZ2VTaXplICogcGFnZSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChzZXRQYWdlICYmIG9uTG9hZE1vcmUpIHtcbiAgICAgIHNldFBhZ2UocGFnZSArIDEpO1xuICAgICAgb25Mb2FkTW9yZShwYWdlICsgMSk7XG4gICAgfVxuICB9LCBbXG4gICAgZGlzYWJsZUxhenlMb2FkZXIsXG4gICAgZGF0YVNvdXJjZS5sZW5ndGgsXG4gICAgaXRlbXNDb3VudCxcbiAgICBwYWdlU2l6ZSxcbiAgICBwYWdlLFxuICAgIHNldFBhZ2UsXG4gICAgb25Mb2FkTW9yZSxcbiAgXSk7XG5cbiAgY29uc3QgaXNJdGVtTG9hZGVkID0gdXNlQ2FsbGJhY2soXG4gICAgKGluZGV4OiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChkaXNhYmxlTGF6eUxvYWRlcikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbmRleCA8IGRhdGFTb3VyY2UubGVuZ3RoIC0gVGFibGVDb25maWcuSVRFTVNfTE9BREVEO1xuICAgIH0sXG4gICAgW2RhdGFTb3VyY2UubGVuZ3RoLCBkaXNhYmxlTGF6eUxvYWRlcl1cbiAgKTtcblxuICByZXR1cm4gKFxuICAgIDw+XG4gICAgICB7aGFzVmlydHVhbFNjcm9sbCA/IChcbiAgICAgICAgPGRpdiBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMuY29udGFpbmVyLCBjbGFzc05hbWVdKX0+XG4gICAgICAgICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy50YWJsZX0+XG4gICAgICAgICAgICA8VGFibGVIZWFkZXJcbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICAgIGhlYWRlckhlaWdodD17aGVhZGVySGVpZ2h0fVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgIHshIXBsYWNlaG9sZGVyICYmICFkYXRhU291cmNlLmxlbmd0aCA/IChcbiAgICAgICAgICAgICAgPGRpdlxuICAgICAgICAgICAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnBsYWNlaG9sZGVyQ29udGFpbmVyfVxuICAgICAgICAgICAgICAgIHN0eWxlPXt7IGhlaWdodDogdGFibGVIZWlnaHQgfX1cbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIHtwbGFjZWhvbGRlcn1cbiAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICApIDogKFxuICAgICAgICAgICAgICA8SW5maW5pdGVMb2FkZXJcbiAgICAgICAgICAgICAgICBpc0l0ZW1Mb2FkZWQ9e2lzSXRlbUxvYWRlZH1cbiAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgIGxvYWRNb3JlSXRlbXM9e2xvYWRNb3JlfVxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgeyh7IG9uSXRlbXNSZW5kZXJlZCwgcmVmIH0pID0+IChcbiAgICAgICAgICAgICAgICAgIDxGaXhlZFNpemVMaXN0XG4gICAgICAgICAgICAgICAgICAgIHJlZj17cmVmfVxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ9e3RhYmxlSGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxuICAgICAgICAgICAgICAgICAgICBpdGVtU2l6ZT17cm93SGVpZ2h0fVxuICAgICAgICAgICAgICAgICAgICBpdGVtQ291bnQ9e2RhdGFTb3VyY2UubGVuZ3RofVxuICAgICAgICAgICAgICAgICAgICBpdGVtRGF0YT17ZGF0YVNvdXJjZX1cbiAgICAgICAgICAgICAgICAgICAgb25TY3JvbGw9e2hhbmRsZUxpc3RTY3JvbGx9XG4gICAgICAgICAgICAgICAgICAgIG9uSXRlbXNSZW5kZXJlZD17b25JdGVtc1JlbmRlcmVkfVxuICAgICAgICAgICAgICAgICAgICBjbGFzc05hbWU9e3N0eWxlcy5zY3JvbGxiYXJDb250YWluZXJ9XG4gICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgIHtyZW5kZXJSb3d9XG4gICAgICAgICAgICAgICAgICA8L0ZpeGVkU2l6ZUxpc3Q+XG4gICAgICAgICAgICAgICAgKX1cbiAgICAgICAgICAgICAgPC9JbmZpbml0ZUxvYWRlcj5cbiAgICAgICAgICAgICl9XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvZGl2PlxuICAgICAgKSA6IChcbiAgICAgICAgPGRpdlxuICAgICAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICAgICAgc3R5bGVzLmNvbnRhaW5lcixcbiAgICAgICAgICAgIHN0eWxlcy5zY3JvbGxiYXJDb250YWluZXIsXG4gICAgICAgICAgICBjbGFzc05hbWUsXG4gICAgICAgICAgXSl9XG4gICAgICAgICAgc3R5bGU9e3sgaGVpZ2h0OiB0YWJsZUhlaWdodCB9fVxuICAgICAgICA+XG4gICAgICAgICAgPFRhYmxlSGVhZGVyXG4gICAgICAgICAgICBjb2x1bW5zPXtjb2x1bW5zfVxuICAgICAgICAgICAgc2Nyb2xsVG9wPXtzY3JvbGxUb3B9XG4gICAgICAgICAgICBpc0hlYWRlclN0aWNreT17aXNIZWFkZXJTdGlja3l9XG4gICAgICAgICAgICBoZWFkZXJIZWlnaHQ9e2hlYWRlckhlaWdodH1cbiAgICAgICAgICAvPlxuICAgICAgICAgIHtkYXRhU291cmNlLm1hcCgocm93LCBpbmRleCkgPT4gKFxuICAgICAgICAgICAgPFRhYmxlUm93XG4gICAgICAgICAgICAgIGtleT17aW5kZXh9XG4gICAgICAgICAgICAgIGRhdGE9e3Jvd31cbiAgICAgICAgICAgICAgY29sdW1ucz17Y29sdW1uc31cbiAgICAgICAgICAgICAgb25Sb3dDbGljaz17b25Sb3dDbGlja31cbiAgICAgICAgICAgICAgaGFzQXJyb3c9e2hhc0Fycm93fVxuICAgICAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgICAgICAgaXNBY3RpdmU9eyEhYWN0aXZlUm93cz8uW3Jvdz8uaWRdfVxuICAgICAgICAgICAgLz5cbiAgICAgICAgICApKX1cbiAgICAgICAgPC9kaXY+XG4gICAgICApfVxuICAgIDwvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZTtcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IFRhYmxlSGVhZGVyQ2VsbCBmcm9tIFwiLi9UYWJsZUhlYWRlckNlbGxcIjtcbmltcG9ydCB7IENvbHVtblR5cGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RhYmxlSGVhZGVyLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uczogQ29sdW1uVHlwZVtdO1xuICBzY3JvbGxUb3A6IG51bWJlcjtcbiAgaXNIZWFkZXJTdGlja3k/OiBib29sZWFuO1xuICBoZWFkZXJIZWlnaHQ/OiBudW1iZXI7XG59O1xuXG5mdW5jdGlvbiBUYWJsZUhlYWRlcih7XG4gIGNvbHVtbnMsXG4gIHNjcm9sbFRvcCxcbiAgaXNIZWFkZXJTdGlja3ksXG4gIGhlYWRlckhlaWdodCxcbn06IFByb3BzKSB7XG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHsgW3N0eWxlcy5ib3JkZXJCb3R0b21dOiAhIXNjcm9sbFRvcCB9LFxuICAgICAgICB7IFtzdHlsZXMuaXNIZWFkZXJTdGlja3ldOiBpc0hlYWRlclN0aWNreSB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyBoZWlnaHQ6IGhlYWRlckhlaWdodCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW5zLm1hcCgoY29sdW1uLCBjb2x1bW5JbmRleCkgPT4gKFxuICAgICAgICA8VGFibGVIZWFkZXJDZWxsXG4gICAgICAgICAga2V5PXtgdGFibGUtaGVhZC1jZWxsLSR7Y29sdW1uSW5kZXh9YH1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZUhlYWRlcjtcbiIsImltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBSZWFjdCwgeyB1c2VDYWxsYmFjaywgdXNlU3RhdGUgfSBmcm9tIFwicmVhY3RcIjtcblxuaW1wb3J0IHsgSWNvbiB9IGZyb20gXCIuLi9JY29uXCI7XG5pbXBvcnQgaWNvbkNhcmV0RG93biBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2NhcmV0LWRvd24uc3ZnXCI7XG5pbXBvcnQgaWNvbkNhcmV0VXAgZnJvbSBcIi4uLy4uLy4uL2Fzc2V0cy9jYXJldC11cC5zdmdcIjtcbmltcG9ydCB7IFNvcnRPcmRlciB9IGZyb20gXCIuLi8uLi90eXBlcy90YWJsZVwiO1xuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVIZWFkZXJDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xufTtcblxuZnVuY3Rpb24gVGFibGVIZWFkZXJDZWxsKHsgY29sdW1uIH06IFByb3BzKSB7XG4gIGNvbnN0IHtcbiAgICBvblNvcnQsXG4gICAgc29ydGFibGUsXG4gICAgc29ydGVkLFxuICAgIGRlZmF1bHRTb3J0T3JkZXIsXG4gICAgdGl0bGUsXG4gICAgd2lkdGgsXG4gICAgY2xhc3NOYW1lLFxuICB9ID0gY29sdW1uO1xuXG4gIGNvbnN0IFtzb3J0T3JkZXIsIHNldFNvcnRPcmRlcl0gPSB1c2VTdGF0ZShcbiAgICAoKSA9PiBkZWZhdWx0U29ydE9yZGVyIHx8IFNvcnRPcmRlci5ERVNDXG4gICk7XG5cbiAgY29uc3QgaGFuZGxlU29ydENvbHVtbiA9IHVzZUNhbGxiYWNrKCgpID0+IHtcbiAgICBpZiAoIXNvcnRlZCkge1xuICAgICAgcmV0dXJuIG9uU29ydChzb3J0T3JkZXIpO1xuICAgIH1cbiAgICBjb25zdCBuZXdTb3J0T3JkZXIgPVxuICAgICAgc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQyA/IFNvcnRPcmRlci5BU0MgOiBTb3J0T3JkZXIuREVTQztcbiAgICBzZXRTb3J0T3JkZXIobmV3U29ydE9yZGVyKTtcbiAgICBvblNvcnQobmV3U29ydE9yZGVyKTtcbiAgfSwgW29uU29ydCwgc29ydE9yZGVyLCBzb3J0ZWRdKTtcblxuICBjb25zdCBjZWxsUHJvcHMgPVxuICAgIG9uU29ydCAmJiBzb3J0YWJsZVxuICAgICAgPyB7XG4gICAgICAgICAgb25DbGljazogaGFuZGxlU29ydENvbHVtbixcbiAgICAgICAgfVxuICAgICAgOiB7fTtcblxuICBjb25zdCBkaXNwbGF5QXJyb3cgPSAoKTogc3RyaW5nID0+IHtcbiAgICBpZiAoc29ydE9yZGVyID09PSBTb3J0T3JkZXIuREVTQykge1xuICAgICAgcmV0dXJuIGljb25DYXJldERvd247XG4gICAgfVxuICAgIHJldHVybiBpY29uQ2FyZXRVcDtcbiAgfTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIHsuLi5jZWxsUHJvcHN9XG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtcbiAgICAgICAgc3R5bGVzLnRhYmxlSGVhZGVyQ2VsbCxcbiAgICAgICAgY2xhc3NOYW1lLFxuICAgICAgICB7XG4gICAgICAgICAgW3N0eWxlcy5zb3J0SWNvblZpc2libGVdOiBzb3J0YWJsZSAmJiBzb3J0ZWQsXG4gICAgICAgICAgW3N0eWxlcy5zb3J0YWJsZV06IHNvcnRhYmxlLFxuICAgICAgICB9LFxuICAgICAgXSl9XG4gICAgICBzdHlsZT17eyB3aWR0aCB9fVxuICAgID5cbiAgICAgIHt0aXRsZX1cbiAgICAgIHtzb3J0YWJsZSA/IChcbiAgICAgICAgPEljb24gYWx0PXtcIlNvcnQgYnV0dG9uXCJ9IHNpemU9XCJzbWFsbFwiIHNyYz17ZGlzcGxheUFycm93KCl9IC8+XG4gICAgICApIDogbnVsbH1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGFibGVIZWFkZXJDZWxsO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCBUYWJsZVJvd0NlbGwgZnJvbSBcIi4vVGFibGVSb3dDZWxsXCI7XG5pbXBvcnQgeyBDb2x1bW5UeXBlIH0gZnJvbSBcIi4vVGFibGVcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9UYWJsZVJvdy5tb2R1bGUuY3NzXCI7XG5cbnR5cGUgUHJvcHMgPSB7XG4gIGRhdGE6IFJlY29yZDxzdHJpbmcsIGFueT4gfCBzdHJpbmc7XG4gIGNvbHVtbnM6IENvbHVtblR5cGVbXTtcbiAgb25Sb3dDbGljaz86IChkYXRhOiBSZWNvcmQ8c3RyaW5nLCBhbnk+KSA9PiB2b2lkO1xuICBoYXNBcnJvdz86IGJvb2xlYW47XG4gIHJvd0hlaWdodDogbnVtYmVyO1xuICBpc0FjdGl2ZT86IGJvb2xlYW47XG59O1xuXG5mdW5jdGlvbiBUYWJsZVJvdyh7XG4gIGRhdGEsXG4gIGNvbHVtbnMsXG4gIG9uUm93Q2xpY2ssXG4gIGhhc0Fycm93LFxuICByb3dIZWlnaHQsXG4gIGlzQWN0aXZlLFxufTogUHJvcHMpIHtcbiAgY29uc3QgaGFuZGxlUm93Q2xpY2sgPSB1c2VDYWxsYmFjaygoKSA9PiB7XG4gICAgaWYgKG9uUm93Q2xpY2sgJiYgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIpIHtcbiAgICAgIG9uUm93Q2xpY2soZGF0YSk7XG4gICAgfVxuICB9LCBbZGF0YSwgb25Sb3dDbGlja10pO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdlxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbXG4gICAgICAgIHN0eWxlcy5jb250YWluZXIsXG4gICAgICAgIHtcbiAgICAgICAgICBbc3R5bGVzLmhhc0Fycm93XTogaGFzQXJyb3csXG4gICAgICAgICAgW3N0eWxlcy5hY3RpdmVdOiBpc0FjdGl2ZSxcbiAgICAgICAgfSxcbiAgICAgIF0pfVxuICAgICAgb25DbGljaz17aGFuZGxlUm93Q2xpY2t9XG4gICAgPlxuICAgICAge2NvbHVtbnMubWFwKChjb2x1bW4sIGNvbHVtbkluZGV4KSA9PiAoXG4gICAgICAgIDxUYWJsZVJvd0NlbGxcbiAgICAgICAgICBrZXk9e2B0YWJsZS1yb3ctY2VsbC0ke2NvbHVtbkluZGV4fWB9XG4gICAgICAgICAgaXRlbT17ZGF0YX1cbiAgICAgICAgICBjb2x1bW49e2NvbHVtbn1cbiAgICAgICAgICByb3dIZWlnaHQ9e3Jvd0hlaWdodH1cbiAgICAgICAgLz5cbiAgICAgICkpfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWJsZVJvdztcbiIsImltcG9ydCBSZWFjdCBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHsgQ29sdW1uVHlwZSB9IGZyb20gXCIuL1RhYmxlXCI7XG5cbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFibGVSb3dDZWxsLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgaXRlbTogUmVjb3JkPHN0cmluZywgYW55PiB8IHN0cmluZztcbiAgY29sdW1uOiBDb2x1bW5UeXBlO1xuICByb3dIZWlnaHQ6IG51bWJlcjtcbn07XG5cbmZ1bmN0aW9uIFRhYmxlUm93Q2VsbCh7IGl0ZW0sIGNvbHVtbiwgcm93SGVpZ2h0IH06IFByb3BzKTogSlNYLkVsZW1lbnQge1xuICBjb25zdCBkYXRhID0gdHlwZW9mIGl0ZW0gPT09IFwic3RyaW5nXCIgPyBpdGVtIDogaXRlbVtjb2x1bW4uZGF0YUluZGV4XTtcblxuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy5jb250YWluZXIsIGNvbHVtbi5jbGFzc05hbWVdKX1cbiAgICAgIHN0eWxlPXt7IGhlaWdodDogcm93SGVpZ2h0LCB3aWR0aDogY29sdW1uPy53aWR0aCB9fVxuICAgID5cbiAgICAgIHtjb2x1bW4ucmVuZGVyID8gY29sdW1uLnJlbmRlcihkYXRhKSA6IGRhdGF9XG4gICAgPC9kaXY+XG4gICk7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFRhYmxlUm93Q2VsbDtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVGFibGUgfSBmcm9tIFwiLi9UYWJsZVwiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBpY29uQ3Jvc3NlZCBmcm9tIFwiLi4vLi4vLi4vYXNzZXRzL2Nyb3NzZWQuc3ZnXCI7XG5pbXBvcnQgeyBJY29uIH0gZnJvbSBcIi4uL0ljb25cIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVGFnLm1vZHVsZS5jc3NcIjtcblxudHlwZSBQcm9wcyA9IHtcbiAgY2hpbGRyZW46IHN0cmluZztcbiAgY2xhc3NOYW1lPzogc3RyaW5nO1xuICBjbG9zYWJsZT86IGJvb2xlYW47XG4gIHZhbHVlPzogc3RyaW5nO1xuICBvbkNsb3NlPzogKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxFbGVtZW50PiwgdmFsdWU6IHN0cmluZykgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRhZyh7IGNoaWxkcmVuLCBjbGFzc05hbWUsIGNsb3NhYmxlLCB2YWx1ZSwgb25DbG9zZSB9OiBQcm9wcykge1xuXG4gIGNvbnN0IGhhbmRsZUNsaWNrID0gdXNlQ2FsbGJhY2soXG4gICAgKGV2ZW50OiBSZWFjdC5Nb3VzZUV2ZW50PEhUTUxTcGFuRWxlbWVudD4pID0+IHtcbiAgICAgIGlmICh0eXBlb2Ygb25DbG9zZSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgICAgIG9uQ2xvc2UoZXZlbnQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LFxuICAgIFtvbkNsb3NlXVxuICApO1xuXG4gIHJldHVybiAoXG4gICAgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5jb250YWluZXJ9PlxuICAgICAgPHNwYW4+e2NoaWxkcmVufTwvc3Bhbj5cbiAgICAgIHtjbG9zYWJsZSAmJiAoXG4gICAgICAgIDxzcGFuIGNsYXNzTmFtZT17c3R5bGVzLmNsb3NlQnV0dG9ufSBvbkNsaWNrPXtoYW5kbGVDbGlja30+XG4gICAgICAgICAgPEljb24gc3JjPXtpY29uQ3Jvc3NlZH0gYWx0PVwiQ2xvc2VcIiBzaXplPVwic21hbGxcIiAvPlxuICAgICAgICA8L3NwYW4+XG4gICAgICApfVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUYWc7XG4iLCJleHBvcnQgeyBkZWZhdWx0IGFzIFRhZyB9IGZyb20gXCIuL1RhZ1wiO1xuIiwiaW1wb3J0IFJlYWN0LCB7IHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgY2xhc3NjYXQgZnJvbSBcImNsYXNzY2F0XCI7XG5cbmltcG9ydCB7IExhYmVsIH0gZnJvbSBcIi4uL0xhYmVsXCI7XG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RleHRJbnB1dC5tb2R1bGUuY3NzXCI7XG5pbXBvcnQgeyBTaXplLCBUZXh0SW5wdXRNb2RlLCBUZXh0SW5wdXRUeXBlIH0gZnJvbSBcIi4uLy4uL3R5cGVzXCI7XG5cbnR5cGUgVGV4dElucHV0UHJvcHMgPSB7XG4gIGxhYmVsPzogc3RyaW5nO1xuICBvbkNoYW5nZT86ICh2YWx1ZTogc3RyaW5nKSA9PiB2b2lkO1xuICBvbkJsdXI/OiAoKSA9PiB2b2lkO1xuICBvbktleURvd24/OiAoZXZlbnQ6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHZvaWQ7XG4gIHBsYWNlaG9sZGVyPzogc3RyaW5nO1xuICB2YWx1ZT86IHN0cmluZztcbiAgbmFtZT86IHN0cmluZztcbiAgcGF0dGVybj86IHN0cmluZztcbiAgdHlwZT86IFRleHRJbnB1dFR5cGU7XG4gIHNpemU/OiBTaXplO1xuICBub0JvcmRlcj86IGJvb2xlYW47XG4gIGF1dG9Gb2N1cz86IGJvb2xlYW47XG4gIGlucHV0UmVmPzogUmVhY3QuUmVmT2JqZWN0PEhUTUxJbnB1dEVsZW1lbnQ+O1xuICBpbnB1dE1vZGU/OiBUZXh0SW5wdXRNb2RlO1xufTtcblxuZnVuY3Rpb24gVGV4dElucHV0KHtcbiAgbGFiZWwsXG4gIG9uQ2hhbmdlLFxuICBvbkJsdXIsXG4gIG9uS2V5RG93bixcbiAgcGxhY2Vob2xkZXIsXG4gIHZhbHVlLFxuICBuYW1lLFxuICBwYXR0ZXJuLFxuICBpbnB1dFJlZixcbiAgc2l6ZSA9IFwibWVkaXVtXCIsXG4gIHR5cGUgPSBcInRleHRcIixcbiAgYXV0b0ZvY3VzID0gZmFsc2UsXG4gIG5vQm9yZGVyID0gZmFsc2UsXG4gIGlucHV0TW9kZSxcbn06IFRleHRJbnB1dFByb3BzKSB7XG4gIGNvbnN0IGhhbmRsZUNoYW5nZSA9IHVzZUNhbGxiYWNrKFxuICAgIChlOiBSZWFjdC5Gb3JtRXZlbnQ8SFRNTElucHV0RWxlbWVudD4pID0+IHtcbiAgICAgIGlmIChvbkNoYW5nZSkge1xuICAgICAgICBvbkNoYW5nZSgoZS50YXJnZXQgYXMgSFRNTElucHV0RWxlbWVudCkudmFsdWUpO1xuICAgICAgfVxuICAgIH0sXG4gICAgW29uQ2hhbmdlXVxuICApO1xuXG4gIGNvbnN0IGlucHV0RWxlbWVudCA9IChcbiAgICA8aW5wdXRcbiAgICAgIGRhdGEtdGVzdGlkPVwiaW5wdXRcIlxuICAgICAgcmVmPXtpbnB1dFJlZn1cbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW1xuICAgICAgICBzdHlsZXMudGV4dElucHV0LFxuICAgICAgICBzdHlsZXNbc2l6ZV0sXG4gICAgICAgIHsgW3N0eWxlcy5ub0JvcmRlcl06IG5vQm9yZGVyIH0sXG4gICAgICBdKX1cbiAgICAgIG9uQ2hhbmdlPXtoYW5kbGVDaGFuZ2V9XG4gICAgICBvbkJsdXI9e29uQmx1cn1cbiAgICAgIG9uS2V5RG93bj17b25LZXlEb3dufVxuICAgICAgcGF0dGVybj17cGF0dGVybn1cbiAgICAgIHBsYWNlaG9sZGVyPXtwbGFjZWhvbGRlcn1cbiAgICAgIG5hbWU9e25hbWV9XG4gICAgICB0eXBlPXt0eXBlfVxuICAgICAgdmFsdWU9e3ZhbHVlfVxuICAgICAgYXV0b0ZvY3VzPXthdXRvRm9jdXN9XG4gICAgICBpbnB1dE1vZGU9e2lucHV0TW9kZX1cbiAgICAvPlxuICApO1xuICBpZiAobGFiZWwpIHtcbiAgICByZXR1cm4gPExhYmVsIHZhbHVlPXtsYWJlbH0+e2lucHV0RWxlbWVudH08L0xhYmVsPjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gPD57aW5wdXRFbGVtZW50fTwvPjtcbiAgfVxufVxuZXhwb3J0IGRlZmF1bHQgVGV4dElucHV0O1xuIiwiZXhwb3J0IHsgZGVmYXVsdCBhcyBUZXh0SW5wdXQgfSBmcm9tIFwiLi9UZXh0SW5wdXRcIjtcbiIsImltcG9ydCBSZWFjdCwgeyBSZWFjdE5vZGUsIFJlZk9iamVjdCB9IGZyb20gXCJyZWFjdFwiO1xuXG5pbXBvcnQgc3R5bGVzIGZyb20gXCIuL1RvYXN0Lm1vZHVsZS5jc3NcIjtcblxudHlwZSBUb2FzdFByb3BzID0ge1xuICBjaGlsZHJlbjogUmVhY3ROb2RlO1xuICBjb250YWluZXJSZWY/OiBSZWZPYmplY3Q8SFRNTERpdkVsZW1lbnQ+O1xuICBvbkNsaWNrPzogKCkgPT4gdm9pZDtcbn07XG5cbmZ1bmN0aW9uIFRvYXN0KHsgY2hpbGRyZW4sIGNvbnRhaW5lclJlZiwgb25DbGljayA9ICgpID0+IHt9IH06IFRvYXN0UHJvcHMpIHtcbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e2NvbnRhaW5lclJlZn1cbiAgICAgIGNsYXNzTmFtZT17c3R5bGVzLnRvYXN0fVxuICAgICAgb25DbGljaz17b25DbGlja31cbiAgICAgIGRhdGEtdGVzdGlkPVwidG9hc3RcIlxuICAgID5cbiAgICAgIHtjaGlsZHJlbn1cbiAgICA8L2Rpdj5cbiAgKTtcbn1cblxuZXhwb3J0IGRlZmF1bHQgVG9hc3Q7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlIH0gZnJvbSBcInJlYWN0XCI7XG5cbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcbmltcG9ydCBzdHlsZXMgZnJvbSBcIi4vVG9hc3RDb250YWluZXIubW9kdWxlLmNzc1wiO1xuXG50eXBlIFRvYXN0Q29udGFpbmVyUHJvcHMgPSB7XG4gIGNoaWxkcmVuPzogUmVhY3ROb2RlO1xuICBiYXNlWkluZGV4PzogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIFRvYXN0Q29udGFpbmVyKHsgY2hpbGRyZW4sIGJhc2VaSW5kZXggfTogVG9hc3RDb250YWluZXJQcm9wcykge1xuICByZXR1cm4gKFxuICAgIDxkaXZcbiAgICAgIGNsYXNzTmFtZT17Y2xhc3NjYXQoW3N0eWxlcy50b2FzdENvbnRhaW5lcl0pfVxuICAgICAgc3R5bGU9e3sgekluZGV4OiBiYXNlWkluZGV4IH19XG4gICAgICBkYXRhLXRlc3RpZD1cInRvYXN0LWNvbnRhaW5lclwiXG4gICAgPlxuICAgICAge2NoaWxkcmVufVxuICAgIDwvZGl2PlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdENvbnRhaW5lcjtcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVG9hc3QgfSBmcm9tIFwiLi9Ub2FzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBUb2FzdENvbnRhaW5lciB9IGZyb20gXCIuL1RvYXN0Q29udGFpbmVyXCI7XG4iLCJpbXBvcnQgUmVhY3QsIHsgUmVhY3ROb2RlLCBSZWZPYmplY3QgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCBjbGFzc2NhdCBmcm9tIFwiY2xhc3NjYXRcIjtcblxuaW1wb3J0IHN0eWxlcyBmcm9tIFwiLi9WaWRlby5tb2R1bGUuY3NzXCI7XG5cbi8qKlxuICogVGhlcmUgaXMgYSBrbm93biBpc3N1ZSBpbiBSZWFjdCBpbiByZWdhcmRzIHRvIHRoZSAnbXV0ZWQnIHByb3BlcnR5IHdoaWNoIGNhdXNlcyB0aGUgd2FybmluZzpcbiAqIFwiV2FybmluZzogdW5zdGFibGVfZmx1c2hEaXNjcmV0ZVVwZGF0ZXM6IENhbm5vdCBmbHVzaCB1cGRhdGVzIHdoZW4gUmVhY3QgaXMgYWxyZWFkeSByZW5kZXJpbmcuXCJcbiAqXG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzEwMzg5XG4gKiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzY1NDRcbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS90ZXN0aW5nLWxpYnJhcnkvcmVhY3QtdGVzdGluZy1saWJyYXJ5L2lzc3Vlcy80NzBcbiAqL1xuXG50eXBlIExheW91dCA9IFwiY292ZXJcIiB8IFwiY29udGFpblwiIHwgXCJzdHJldGNoSG9yaXpvbnRhbGx5XCIgfCBcInN0cmV0Y2hWZXJ0aWNhbGx5XCI7XG5cbmV4cG9ydCB0eXBlIFZpZGVvUHJvcHMgPSB7XG4gIHNyYzogc3RyaW5nO1xuICB0eXBlOiBzdHJpbmc7XG4gIGxheW91dD86IExheW91dDtcbiAgYXV0b1BsYXk/OiBib29sZWFuO1xuICBsb29wPzogYm9vbGVhbjtcbiAgbXV0ZWQ/OiBib29sZWFuO1xuICBjaGlsZHJlbj86IFJlYWN0Tm9kZTtcbiAgY29udGFpbmVyUmVmPzogUmVmT2JqZWN0PEhUTUxEaXZFbGVtZW50PjtcbiAgcG9zdGVyPzogc3RyaW5nO1xufTtcblxuZnVuY3Rpb24gVmlkZW8oe1xuICBzcmMsXG4gIHR5cGUsXG4gIGNoaWxkcmVuLFxuICBjb250YWluZXJSZWYsXG4gIHBvc3RlcixcbiAgbXV0ZWQgPSB0cnVlLFxuICBsb29wID0gdHJ1ZSxcbiAgYXV0b1BsYXkgPSB0cnVlLFxuICBsYXlvdXQgPSBcImNvbnRhaW5cIixcbn06IFZpZGVvUHJvcHMpIHtcbiAgcmV0dXJuIGNoaWxkcmVuID8gKFxuICAgIDxkaXZcbiAgICAgIHJlZj17Y29udGFpbmVyUmVmfVxuICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLmNvbnRhaW5lciwgc3R5bGVzLmhhc092ZXJsYXldKX1cbiAgICA+XG4gICAgICA8dmlkZW9cbiAgICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICAgIGNyb3NzT3JpZ2luPVwiYW5vbnltb3VzXCJcbiAgICAgICAgY2xhc3NOYW1lPXtjbGFzc2NhdChbc3R5bGVzLnZpZGVvLCBzdHlsZXNbbGF5b3V0XV0pfVxuICAgICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICAgIGxvb3A9e2xvb3B9XG4gICAgICAgIGF1dG9QbGF5PXthdXRvUGxheX1cbiAgICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICAgIHBsYXlzSW5saW5lXG4gICAgICA+XG4gICAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICAgIDwvdmlkZW8+XG4gICAgICB7Y2hpbGRyZW4gJiYgPGRpdiBjbGFzc05hbWU9e3N0eWxlcy5vdmVybGF5fT57Y2hpbGRyZW59PC9kaXY+fVxuICAgIDwvZGl2PlxuICApIDogKFxuICAgIDx2aWRlb1xuICAgICAgZGF0YS10ZXN0aWQ9XCJ2aWRlb1wiXG4gICAgICBjcm9zc09yaWdpbj1cImFub255bW91c1wiXG4gICAgICBjbGFzc05hbWU9e2NsYXNzY2F0KFtzdHlsZXMudmlkZW8sIHN0eWxlc1tsYXlvdXRdXSl9XG4gICAgICBtdXRlZD17bXV0ZWR9XG4gICAgICBsb29wPXtsb29wfVxuICAgICAgYXV0b1BsYXk9e2F1dG9QbGF5fVxuICAgICAgcG9zdGVyPXtwb3N0ZXJ9XG4gICAgICBwbGF5c0lubGluZVxuICAgID5cbiAgICAgIDxzb3VyY2UgZGF0YS10ZXN0aWQ9XCJzb3VyY2VcIiBzcmM9e3NyY30gdHlwZT17dHlwZX0gLz5cbiAgICA8L3ZpZGVvPlxuICApO1xufVxuXG5leHBvcnQgZGVmYXVsdCBWaWRlbztcbiIsImV4cG9ydCB7IGRlZmF1bHQgYXMgVmlkZW8sIFZpZGVvUHJvcHMgfSBmcm9tIFwiLi9WaWRlb1wiO1xuIiwiZXhwb3J0IGVudW0gVGFibGVDb25maWcge1xuICBST1dfSEVJR0hUID0gNDgsXG4gIEhFQURFUl9IRUlHSFQ9MzIsXG4gIFBBR0VfU0laRSA9IDEwMCxcbiAgSVRFTVNfTE9BREVEID0gNSxcbn1cbiIsImV4cG9ydCAqIGZyb20gXCIuLi9jb25zdGFudHMvVGFibGVcIjtcbiIsImV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkJhZGdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0J1dHRvbkxpbmtcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ2hlY2tib3hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JQaWNrZXJcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29sb3JTd2F0Y2hcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvQ29uZmlybWF0aW9uTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRHJvcGRvd25cIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvRmlsZUlucHV0XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0Zsb2F0aW5nUGFuZWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvSWNvblwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9JY29uQnV0dG9uXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ljb25CdXR0b25MaW5rXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0ltYWdlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xhYmVsXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL0xpc3RWaWV3XCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL01lbnVcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvTW9kYWxcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvT3ZlcmxheVwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9TZWxlY3RcIjtcbmV4cG9ydCAqIGZyb20gXCIuL2NvbXBvbmVudHMvVGFnXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RhYmxlXCI7XG5leHBvcnQgKiBmcm9tIFwiLi9jb21wb25lbnRzL1RleHRJbnB1dFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9Ub2FzdFwiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9WaWRlb1wiO1xuZXhwb3J0ICogZnJvbSBcIi4vY29tcG9uZW50cy9OdW1wYWRcIjtcbiIsImV4cG9ydCBlbnVtIFNvcnRPcmRlciB7XG4gICAgQVNDID0gXCJhc2NcIixcbiAgICBERVNDID0gXCJkZXNjXCIsXG4gIH1cbiIsImV4cG9ydCBkZWZhdWx0IFwiZGF0YTppbWFnZS9zdmcreG1sLCUzY3N2ZyB3aWR0aD0nNjknIGhlaWdodD0nMjcnIHZpZXdCb3g9JzAgMCA2OSAyNycgZmlsbD0nbm9uZScgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJyUzZSAlM2NwYXRoIGQ9J00xNC4xMzMzIDI2TDEzLjc4ODYgMjYuMzYyMkMxMy44ODE2IDI2LjQ1MDcgMTQuMDA1IDI2LjUgMTQuMTMzMyAyNi41VjI2Wk0xIDEzLjVMMC42NTUyODcgMTMuMTM3OEMwLjU1NjEyNyAxMy4yMzIyIDAuNSAxMy4zNjMxIDAuNSAxMy41QzAuNSAxMy42MzY5IDAuNTU2MTI3IDEzLjc2NzggMC42NTUyODcgMTMuODYyMkwxIDEzLjVaTTE0LjEzMzMgMVYwLjVDMTQuMDA1IDAuNSAxMy44ODE2IDAuNTQ5MzQ1IDEzLjc4ODYgMC42Mzc4MjJMMTQuMTMzMyAxWk02Ny41IDJWMjVINjguNVYySDY3LjVaTTYzLjQ2NjcgMjUuNUgxNC4xMzMzVjI2LjVINjMuNDY2N1YyNS41Wk0xNC40NzggMjUuNjM3OEwxLjM0NDcxIDEzLjEzNzhMMC42NTUyODcgMTMuODYyMkwxMy43ODg2IDI2LjM2MjJMMTQuNDc4IDI1LjYzNzhaTTEuMzQ0NzEgMTMuODYyMkwxNC40NzggMS4zNjIxOEwxMy43ODg2IDAuNjM3ODIyTDAuNjU1Mjg3IDEzLjEzNzhMMS4zNDQ3MSAxMy44NjIyWk0xNC4xMzMzIDEuNUg2My40NjY3VjAuNUgxNC4xMzMzVjEuNVpNNjcgMjUuNUg2My40NjY3VjI2LjVINjdWMjUuNVpNNjcgMC41SDYzLjQ2NjdWMS41SDY3VjAuNVpNNjcuNSAyNUM2Ny41IDI1LjI3NjEgNjcuMjc2MSAyNS41IDY3IDI1LjVWMjYuNUM2Ny44Mjg0IDI2LjUgNjguNSAyNS44Mjg0IDY4LjUgMjVINjcuNVpNNjguNSAyQzY4LjUgMS4xNzE1NyA2Ny44Mjg0IDAuNSA2NyAwLjVWMS41QzY3LjI3NjEgMS41IDY3LjUgMS43MjM4NiA2Ny41IDJINjguNVonIGZpbGw9JyUyMzI2MjYyNicvJTNlICUzY3BhdGggZD0nTTMyLjY0NjQgNi4zNTM1NUw0Ni42NDY0IDIwLjM1MzZMNDcuMzUzNiAxOS42NDY0TDMzLjM1MzYgNS42NDY0NUwzMi42NDY0IDYuMzUzNTVaTTQ2LjY0NjQgNS42NDY0NUwzMi42NDY0IDE5LjY0NjRMMzMuMzUzNiAyMC4zNTM2TDQ3LjM1MzYgNi4zNTM1NUw0Ni42NDY0IDUuNjQ2NDVaJyBmaWxsPSclMjMyNjI2MjYnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQgNUw3LjUgMTJMMSA1JyBzdHJva2U9J2JsYWNrJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiZXhwb3J0IGRlZmF1bHQgXCJkYXRhOmltYWdlL3N2Zyt4bWwsJTNjc3ZnIHdpZHRoPScxNScgaGVpZ2h0PScxNScgdmlld0JveD0nMCAwIDE1IDE1JyBmaWxsPSdub25lJyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnJTNlICUzY3BhdGggZD0nTTEgMTBMNy41IDNMMTQgMTAnIHN0cm9rZT0nYmxhY2snIHN0cm9rZS1saW5lY2FwPSdzcXVhcmUnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE1JyBoZWlnaHQ9JzE1JyB2aWV3Qm94PScwIDAgMTUgMTUnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMS41IDEuNUwxMy41IDEzLjVNMS41IDEzLjVMMTMuNSAxLjUnIHN0cm9rZT0nYmxhY2snLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTUuNDY4NSAxNS40NjY1TDExLjIwMTggMTEuMTk5OU02LjkzNTE2IDEzLjMzMzJDMy40MDA1MyAxMy4zMzMyIDAuNTM1MTU2IDEwLjQ2NzggMC41MzUxNTYgNi45MzMyQzAuNTM1MTU2IDMuMzk4NTggMy40MDA1MyAwLjUzMzIwMyA2LjkzNTE2IDAuNTMzMjAzQzEwLjQ2OTggMC41MzMyMDMgMTMuMzM1MiAzLjM5ODU4IDEzLjMzNTIgNi45MzMyQzEzLjMzNTIgMTAuNDY3OCAxMC40Njk4IDEzLjMzMzIgNi45MzUxNiAxMy4zMzMyWicgc3Ryb2tlPSclMjM4OTg4OTEnLyUzZSAlM2Mvc3ZnJTNlXCIiLCJleHBvcnQgZGVmYXVsdCBcImRhdGE6aW1hZ2Uvc3ZnK3htbCwlM2Nzdmcgd2lkdGg9JzE2JyBoZWlnaHQ9JzE2JyB2aWV3Qm94PScwIDAgMTYgMTYnIGZpbGw9J25vbmUnIHhtbG5zPSdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyclM2UgJTNjcGF0aCBkPSdNMTQuOTMzMSA0LjI2NzU4TDcuOTk5NzQgMTEuNzM0MkwxLjA2NjQxIDQuMjY3NTgnIHN0cm9rZT0nJTIzODk4ODkxJyBzdHJva2UtbGluZWNhcD0nc3F1YXJlJy8lM2UgJTNjL3N2ZyUzZVwiIiwiLyoqXG4gKiBAbGljZW5zZSBSZWFjdFxuICogdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qc1xuICpcbiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZVxuICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuICovXG4ndXNlIHN0cmljdCc7dmFyIGU9cmVxdWlyZShcInJlYWN0XCIpO2Z1bmN0aW9uIGgoYSxiKXtyZXR1cm4gYT09PWImJigwIT09YXx8MS9hPT09MS9iKXx8YSE9PWEmJmIhPT1ifXZhciBrPVwiZnVuY3Rpb25cIj09PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmgsbD1lLnVzZVN0YXRlLG09ZS51c2VFZmZlY3Qsbj1lLnVzZUxheW91dEVmZmVjdCxwPWUudXNlRGVidWdWYWx1ZTtmdW5jdGlvbiBxKGEsYil7dmFyIGQ9YigpLGY9bCh7aW5zdDp7dmFsdWU6ZCxnZXRTbmFwc2hvdDpifX0pLGM9ZlswXS5pbnN0LGc9ZlsxXTtuKGZ1bmN0aW9uKCl7Yy52YWx1ZT1kO2MuZ2V0U25hcHNob3Q9YjtyKGMpJiZnKHtpbnN0OmN9KX0sW2EsZCxiXSk7bShmdW5jdGlvbigpe3IoYykmJmcoe2luc3Q6Y30pO3JldHVybiBhKGZ1bmN0aW9uKCl7cihjKSYmZyh7aW5zdDpjfSl9KX0sW2FdKTtwKGQpO3JldHVybiBkfVxuZnVuY3Rpb24gcihhKXt2YXIgYj1hLmdldFNuYXBzaG90O2E9YS52YWx1ZTt0cnl7dmFyIGQ9YigpO3JldHVybiFrKGEsZCl9Y2F0Y2goZil7cmV0dXJuITB9fWZ1bmN0aW9uIHQoYSxiKXtyZXR1cm4gYigpfXZhciB1PVwidW5kZWZpbmVkXCI9PT10eXBlb2Ygd2luZG93fHxcInVuZGVmaW5lZFwiPT09dHlwZW9mIHdpbmRvdy5kb2N1bWVudHx8XCJ1bmRlZmluZWRcIj09PXR5cGVvZiB3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudD90OnE7ZXhwb3J0cy51c2VTeW5jRXh0ZXJuYWxTdG9yZT12b2lkIDAhPT1lLnVzZVN5bmNFeHRlcm5hbFN0b3JlP2UudXNlU3luY0V4dGVybmFsU3RvcmU6dTtcbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5wcm9kdWN0aW9uLm1pbi5qcycpO1xufSBlbHNlIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuLi9janMvdXNlLXN5bmMtZXh0ZXJuYWwtc3RvcmUtc2hpbS5kZXZlbG9wbWVudC5qcycpO1xufVxuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKFwicmVhY3RcIik7IiwiLy8gVGhlIG1vZHVsZSBjYWNoZVxudmFyIF9fd2VicGFja19tb2R1bGVfY2FjaGVfXyA9IHt9O1xuXG4vLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcblx0dmFyIGNhY2hlZE1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF07XG5cdGlmIChjYWNoZWRNb2R1bGUgIT09IHVuZGVmaW5lZCkge1xuXHRcdHJldHVybiBjYWNoZWRNb2R1bGUuZXhwb3J0cztcblx0fVxuXHQvLyBDcmVhdGUgYSBuZXcgbW9kdWxlIChhbmQgcHV0IGl0IGludG8gdGhlIGNhY2hlKVxuXHR2YXIgbW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXSA9IHtcblx0XHQvLyBubyBtb2R1bGUuaWQgbmVlZGVkXG5cdFx0Ly8gbm8gbW9kdWxlLmxvYWRlZCBuZWVkZWRcblx0XHRleHBvcnRzOiB7fVxuXHR9O1xuXG5cdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuXHRfX3dlYnBhY2tfbW9kdWxlc19fW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuXHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuXHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG59XG5cbiIsIi8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSAobW9kdWxlKSA9PiB7XG5cdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuXHRcdCgpID0+IChtb2R1bGVbJ2RlZmF1bHQnXSkgOlxuXHRcdCgpID0+IChtb2R1bGUpO1xuXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCB7IGE6IGdldHRlciB9KTtcblx0cmV0dXJuIGdldHRlcjtcbn07IiwiLy8gZGVmaW5lIGdldHRlciBmdW5jdGlvbnMgZm9yIGhhcm1vbnkgZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5kID0gKGV4cG9ydHMsIGRlZmluaXRpb24pID0+IHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsIi8vIHN0YXJ0dXBcbi8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuLy8gVGhpcyBlbnRyeSBtb2R1bGUgaXMgcmVmZXJlbmNlZCBieSBvdGhlciBtb2R1bGVzIHNvIGl0IGNhbid0IGJlIGlubGluZWRcbnZhciBfX3dlYnBhY2tfZXhwb3J0c19fID0gX193ZWJwYWNrX3JlcXVpcmVfXygzNjA3KTtcbiJdLCJuYW1lcyI6WyJvcHRpb25zIiwiY2FwdHVyZSIsInVzZU91dHNpZGVDbGljayIsImNhbGxiYWNrIiwicmVmIiwidXNlUmVmIiwidXNlRWZmZWN0IiwiaGFuZGxlQ2xpY2siLCJldmVudCIsImN1cnJlbnQiLCJjb250YWlucyIsInRhcmdldCIsImRvY3VtZW50IiwiYWRkRXZlbnRMaXN0ZW5lciIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJfX3JlYWQiLCJvIiwibiIsIm0iLCJTeW1ib2wiLCJpdGVyYXRvciIsInIiLCJlIiwiaSIsImNhbGwiLCJhciIsIm5leHQiLCJkb25lIiwicHVzaCIsInZhbHVlIiwiZXJyb3IiLCJ1c2VQcm9taXNlIiwiX3RoaXMiLCJ0aGlzIiwiX2EiLCJ1c2VTdGF0ZSIsImRhdGEiLCJ1bmRlZmluZWQiLCJpc1BlbmRpbmciLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsImlzU2V0dGxlZCIsInJlc3VsdCIsInNldFJlc3VsdCIsImhhc1VubW91bnRlZCIsImRpc3BhdGNoIiwidXNlQ2FsbGJhY2siLCJwcm9taXNlIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJnZW5lcmF0b3IiLCJlcnJvcl8xIiwiYm9keSIsImYiLCJ5IiwidCIsImciLCJfIiwibGFiZWwiLCJzZW50IiwidHJ5cyIsIm9wcyIsInZlcmIiLCJ2Iiwib3AiLCJUeXBlRXJyb3IiLCJwb3AiLCJsZW5ndGgiLCJzdGVwIiwiX19nZW5lcmF0b3IiLCJQIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInRoZW4iLCJhcHBseSIsIk9iamVjdCIsImNyZWF0ZSIsIlNXUkdsb2JhbFN0YXRlIiwiV2Vha01hcCIsIkVNUFRZX0NBQ0hFIiwiSU5JVElBTF9DQUNIRSIsIm5vb3AiLCJVTkRFRklORUQiLCJPQkpFQ1QiLCJpc1VuZGVmaW5lZCIsImlzRnVuY3Rpb24iLCJtZXJnZU9iamVjdHMiLCJhIiwiYiIsIlNUUl9VTkRFRklORUQiLCJpc1dpbmRvd0RlZmluZWQiLCJ3aW5kb3ciLCJpc0RvY3VtZW50RGVmaW5lZCIsImNyZWF0ZUNhY2hlSGVscGVyIiwiY2FjaGUiLCJrZXkiLCJzdGF0ZSIsImdldCIsImluZm8iLCJwcmV2IiwidGFibGUiLCJjb3VudGVyIiwic3RhYmxlSGFzaCIsImFyZyIsInR5cGUiLCJjb25zdHJ1Y3RvciIsImlzRGF0ZSIsIkRhdGUiLCJpbmRleCIsIlJlZ0V4cCIsInRvSlNPTiIsInRvU3RyaW5nIiwiSlNPTiIsInN0cmluZ2lmeSIsInNldCIsIkFycmF5Iiwia2V5cyIsInNvcnQiLCJvbmxpbmUiLCJvbldpbmRvd0V2ZW50Iiwib2ZmV2luZG93RXZlbnQiLCJiaW5kIiwicHJlc2V0IiwiaXNPbmxpbmUiLCJpc1Zpc2libGUiLCJ2aXNpYmlsaXR5U3RhdGUiLCJkZWZhdWx0Q29uZmlnT3B0aW9ucyIsImluaXRGb2N1cyIsImluaXRSZWNvbm5lY3QiLCJvbk9ubGluZSIsIm9uT2ZmbGluZSIsIklTX1JFQUNUX0xFR0FDWSIsIklTX1NFUlZFUiIsInVzZUlzb21vcnBoaWNMYXlvdXRFZmZlY3QiLCJ1c2VMYXlvdXRFZmZlY3QiLCJuYXZpZ2F0b3JDb25uZWN0aW9uIiwibmF2aWdhdG9yIiwiY29ubmVjdGlvbiIsInNsb3dDb25uZWN0aW9uIiwiaW5jbHVkZXMiLCJlZmZlY3RpdmVUeXBlIiwic2F2ZURhdGEiLCJlcnIiLCJhcmdzIiwiaXNBcnJheSIsIl9fdGltZXN0YW1wIiwiZ2V0VGltZXN0YW1wIiwiTVVUQVRFX0VWRU5UIiwiY29uc3RhbnRzIiwiYXN5bmMiLCJpbnRlcm5hbE11dGF0ZSIsIl9rZXkiLCJfZGF0YSIsIl9vcHRzIiwicG9wdWxhdGVDYWNoZSIsInRocm93T25FcnJvciIsInJldmFsaWRhdGUiLCJyb2xsYmFja09uRXJyb3JPcHRpb24iLCJyb2xsYmFja09uRXJyb3IiLCJvcHRpbWlzdGljRGF0YSIsImtleUZpbHRlciIsIm1hdGNoZWRLZXlzIiwiaXQiLCJrZXlJdCIsInN0YXJ0c1dpdGgiLCJfayIsImFsbCIsIm1hcCIsIm11dGF0ZUJ5S2V5IiwiRVZFTlRfUkVWQUxJREFUT1JTIiwiTVVUQVRJT04iLCJGRVRDSCIsInJldmFsaWRhdG9ycyIsInN0YXJ0UmV2YWxpZGF0ZSIsImJlZm9yZU11dGF0aW9uVHMiLCJoYXNPcHRpbWlzdGljRGF0YSIsImRpc3BsYXllZERhdGEiLCJjdXJyZW50RGF0YSIsIl9jIiwiY29tbWl0dGVkRGF0YSIsImNhdGNoIiwicmVzIiwicmV2YWxpZGF0ZUFsbEtleXMiLCJpbml0Q2FjaGUiLCJwcm92aWRlciIsImhhcyIsIm9wdHMiLCJtdXRhdGUiLCJ1bm1vdW50Iiwic3Vic2NyaXB0aW9ucyIsInN1YnNjcmliZSIsInN1YnMiLCJzcGxpY2UiLCJpbmRleE9mIiwic2V0dGVyIiwiaW5pdFByb3ZpZGVyIiwicmVsZWFzZUZvY3VzIiwic2V0VGltZW91dCIsInJlbGVhc2VSZWNvbm5lY3QiLCJkZWxldGUiLCJNYXAiLCJkZWZhdWx0Q29uZmlnIiwib25Mb2FkaW5nU2xvdyIsIm9uU3VjY2VzcyIsIm9uRXJyb3IiLCJvbkVycm9yUmV0cnkiLCJfXyIsImNvbmZpZyIsIm1heFJldHJ5Q291bnQiLCJlcnJvclJldHJ5Q291bnQiLCJjdXJyZW50UmV0cnlDb3VudCIsInJldHJ5Q291bnQiLCJ0aW1lb3V0IiwiTWF0aCIsInJhbmRvbSIsImVycm9yUmV0cnlJbnRlcnZhbCIsIm9uRGlzY2FyZGVkIiwicmV2YWxpZGF0ZU9uRm9jdXMiLCJyZXZhbGlkYXRlT25SZWNvbm5lY3QiLCJyZXZhbGlkYXRlSWZTdGFsZSIsInNob3VsZFJldHJ5T25FcnJvciIsImZvY3VzVGhyb3R0bGVJbnRlcnZhbCIsImRlZHVwaW5nSW50ZXJ2YWwiLCJsb2FkaW5nVGltZW91dCIsImNvbXBhcmUiLCJuZXdEYXRhIiwiaXNQYXVzZWQiLCJmYWxsYmFjayIsIlNXUkNvbmZpZ0NvbnRleHQiLCJjcmVhdGVDb250ZXh0IiwiZW5hYmxlRGV2dG9vbHMiLCJfX1NXUl9ERVZUT09MU19VU0VfXyIsInVzZSIsInVzZVNXUkNvbmZpZyIsInVzZUNvbnRleHQiLCJjb25jYXQiLCJ1c2VTV1JOZXh0Iiwia2V5XyIsImZldGNoZXJfIiwiUFJFTE9BRCIsInJlcSIsIl9fU1dSX0RFVlRPT0xTX1JFQUNUX18iLCJXSVRIX0RFRFVQRSIsImRlZHVwZSIsInVzZVNXUkhvb2tzQ29uZmlnIiwic3dyQ29uZmlnIiwidXNlTWVtbyIsInVzZVRvZ2dsZSIsImluaXRpYWxWYWx1ZSIsInNldFZhbHVlIiwibmV3VmFsdWUiLCJwcmV2VmFsdWUiLCJkZWZpbmVQcm9wZXJ0eSIsInByb3BzIiwicGFyZW50Q29uZmlnIiwiaXNGdW5jdGlvbmFsQ29uZmlnIiwiZXh0ZW5kZWRDb25maWciLCJ1MSIsImYxIiwidTIiLCJmMiIsIm1lcmdlQ29uZmlncyIsImNhY2hlQ29udGV4dCIsImNyZWF0ZUVsZW1lbnQiLCJQcm92aWRlciIsImNjIiwib2JqIiwib3V0IiwidG1wIiwiayIsImhhc093blByb3BlcnR5IiwiaXNmZiIsInVzZXJBZ2VudCIsInRvTG93ZXJDYXNlIiwiYWRkRXZlbnQiLCJvYmplY3QiLCJtZXRob2QiLCJ1c2VDYXB0dXJlIiwiYXR0YWNoRXZlbnQiLCJnZXRNb2RzIiwibW9kaWZpZXIiLCJtb2RzIiwic2xpY2UiLCJnZXRLZXlzIiwicmVwbGFjZSIsInNwbGl0IiwibGFzdEluZGV4T2YiLCJfa2V5TWFwIiwiYmFja3NwYWNlIiwidGFiIiwiY2xlYXIiLCJlbnRlciIsInJldHVybiIsImVzYyIsImVzY2FwZSIsInNwYWNlIiwibGVmdCIsInVwIiwicmlnaHQiLCJkb3duIiwiZGVsIiwiaW5zIiwiaW5zZXJ0IiwiaG9tZSIsImVuZCIsInBhZ2V1cCIsInBhZ2Vkb3duIiwiY2Fwc2xvY2siLCJudW1fMCIsIm51bV8xIiwibnVtXzIiLCJudW1fMyIsIm51bV80IiwibnVtXzUiLCJudW1fNiIsIm51bV83IiwibnVtXzgiLCJudW1fOSIsIm51bV9tdWx0aXBseSIsIm51bV9hZGQiLCJudW1fZW50ZXIiLCJudW1fc3VidHJhY3QiLCJudW1fZGVjaW1hbCIsIm51bV9kaXZpZGUiLCJfbW9kaWZpZXIiLCJzaGlmdCIsImFsdCIsIm9wdGlvbiIsImN0cmwiLCJjb250cm9sIiwiY21kIiwiY29tbWFuZCIsIm1vZGlmaWVyTWFwIiwic2hpZnRLZXkiLCJjdHJsS2V5IiwiYWx0S2V5IiwibWV0YUtleSIsIl9tb2RzIiwiX2hhbmRsZXJzIiwiX2Rvd25LZXlzIiwid2luTGlzdGVuZEZvY3VzIiwiX3Njb3BlIiwiZWxlbWVudEhhc0JpbmRFdmVudCIsImNvZGUiLCJ4IiwidG9VcHBlckNhc2UiLCJjaGFyQ29kZUF0Iiwic2V0U2NvcGUiLCJzY29wZSIsImdldFNjb3BlIiwiZWFjaFVuYmluZCIsIl9yZWYiLCJfcmVmJHNwbGl0S2V5Iiwic3BsaXRLZXkiLCJmb3JFYWNoIiwib3JpZ2luS2V5IiwidW5iaW5kS2V5cyIsImxlbiIsImxhc3RLZXkiLCJrZXlDb2RlIiwiZmlsdGVyIiwicmVjb3JkIiwiYTEiLCJhMiIsImFycjEiLCJhcnIyIiwiaXNJbmRleCIsImNvbXBhcmVBcnJheSIsImV2ZW50SGFuZGxlciIsImhhbmRsZXIiLCJlbGVtZW50IiwibW9kaWZpZXJzTWF0Y2giLCJwcm90b3R5cGUiLCJzaG9ydGN1dCIsInByZXZlbnREZWZhdWx0IiwicmV0dXJuVmFsdWUiLCJzdG9wUHJvcGFnYXRpb24iLCJjYW5jZWxCdWJibGUiLCJhc3RlcmlzayIsIndoaWNoIiwiY2hhckNvZGUiLCJob3RrZXlzIiwia2V5TmFtZSIsImtleU51bSIsImdldE1vZGlmaWVyU3RhdGUiLCJrZXlkb3duIiwia2V5dXAiLCJfaSIsImtleVNob3J0Y3V0IiwiX2Rvd25LZXlzQ3VycmVudCIsImpvaW4iLCJpc0VsZW1lbnRCaW5kIiwiY2xlYXJNb2RpZmllciIsIl9hcGkiLCJkZWxldGVTY29wZSIsIm5ld1Njb3BlIiwiaGFuZGxlcnMiLCJnZXRQcmVzc2VkS2V5Q29kZXMiLCJpc1ByZXNzZWQiLCJzcmNFbGVtZW50IiwidGFnTmFtZSIsImZsYWciLCJpc0NvbnRlbnRFZGl0YWJsZSIsInJlYWRPbmx5IiwidHJpZ2dlciIsImFyZ3VtZW50cyIsImZpbmQiLCJpdGVtIiwidW5iaW5kIiwia2V5c0luZm8iLCJfbGVuIiwia2V5TWFwIiwiX2hvdGtleXMiLCJub0NvbmZsaWN0IiwiZGVlcCIsInVzZUlzSG90a2V5UHJlc3NlZCIsInRhZ0ZpbHRlciIsImVuYWJsZU9uVGFncyIsInRhcmdldFRhZ05hbWUiLCJCb29sZWFuIiwiaXNLZXlib2FyZEV2ZW50VHJpZ2dlcmVkQnlJbnB1dCIsImV2IiwidXNlSG90a2V5cyIsImRlcHMiLCJfcmVmMiIsIl9yZWYyJGZpbHRlclByZXZlbnREZSIsImZpbHRlclByZXZlbnREZWZhdWx0IiwiX3JlZjIkZW5hYmxlZCIsImVuYWJsZWQiLCJfcmVmMiRlbmFibGVPbkNvbnRlbnQiLCJlbmFibGVPbkNvbnRlbnRFZGl0YWJsZSIsIm1lbW9pc2VkQ2FsbGJhY2siLCJrZXlib2FyZEV2ZW50IiwiaG90a2V5c0V2ZW50IiwiX2tleWJvYXJkRXZlbnQkdGFyZ2V0IiwiX3JlZiRjdXJyZW50IiwiYWN0aXZlRWxlbWVudCIsImlzSG90a2V5UHJlc3NlZCIsImNsYXNzQ2FsbENoZWNrIiwiaW5zdGFuY2UiLCJDb25zdHJ1Y3RvciIsImNyZWF0ZUNsYXNzIiwiZGVmaW5lUHJvcGVydGllcyIsImRlc2NyaXB0b3IiLCJlbnVtZXJhYmxlIiwiY29uZmlndXJhYmxlIiwid3JpdGFibGUiLCJwcm90b1Byb3BzIiwic3RhdGljUHJvcHMiLCJwb3NzaWJsZUNvbnN0cnVjdG9yUmV0dXJuIiwic2VsZiIsIlJlZmVyZW5jZUVycm9yIiwiSW5maW5pdGVMb2FkZXIiLCJfUHVyZUNvbXBvbmVudCIsIl90ZW1wIiwiX19wcm90b19fIiwiZ2V0UHJvdG90eXBlT2YiLCJfbGFzdFJlbmRlcmVkU3RhcnRJbmRleCIsIl9sYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJfbWVtb2l6ZWRVbmxvYWRlZFJhbmdlcyIsIl9vbkl0ZW1zUmVuZGVyZWQiLCJ2aXNpYmxlU3RhcnRJbmRleCIsInZpc2libGVTdG9wSW5kZXgiLCJfZW5zdXJlUm93c0xvYWRlZCIsIl9zZXRSZWYiLCJsaXN0UmVmIiwiX2xpc3RSZWYiLCJzdWJDbGFzcyIsInN1cGVyQ2xhc3MiLCJzZXRQcm90b3R5cGVPZiIsImluaGVyaXRzIiwiYXV0b1JlbG9hZCIsImNoaWxkcmVuIiwib25JdGVtc1JlbmRlcmVkIiwic3RhcnRJbmRleCIsInN0b3BJbmRleCIsIl9wcm9wcyIsImlzSXRlbUxvYWRlZCIsIml0ZW1Db3VudCIsIl9wcm9wcyRtaW5pbXVtQmF0Y2hTaSIsIm1pbmltdW1CYXRjaFNpemUiLCJfcHJvcHMkdGhyZXNob2xkIiwidGhyZXNob2xkIiwidW5sb2FkZWRSYW5nZXMiLCJyYW5nZVN0YXJ0SW5kZXgiLCJyYW5nZVN0b3BJbmRleCIsIl9pbmRleCIsInBvdGVudGlhbFN0b3BJbmRleCIsIm1pbiIsIm1heCIsIl9pbmRleDIiLCJfaW5kZXgzIiwic2NhbkZvclVubG9hZGVkUmFuZ2VzIiwic29tZSIsInN0YXJ0T3JTdG9wIiwiX2xvYWRVbmxvYWRlZFJhbmdlcyIsIl90aGlzMiIsImxvYWRNb3JlSXRlbXMiLCJsb2FkTW9yZVJvd3MiLCJfbG9vcCIsImxhc3RSZW5kZXJlZFN0YXJ0SW5kZXgiLCJsYXN0UmVuZGVyZWRTdG9wSW5kZXgiLCJyZXNldEFmdGVySW5kZXgiLCJfZ2V0SXRlbVN0eWxlQ2FjaGUiLCJmb3JjZVVwZGF0ZSIsIlB1cmVDb21wb25lbnQiLCJfZXh0ZW5kcyIsImFzc2lnbiIsInNvdXJjZSIsIl9hc3NlcnRUaGlzSW5pdGlhbGl6ZWQiLCJfaW5oZXJpdHNMb29zZSIsInNhZmVJc05hTiIsIk51bWJlciIsImlzTmFOIiwiYXJlSW5wdXRzRXF1YWwiLCJuZXdJbnB1dHMiLCJsYXN0SW5wdXRzIiwiZmlyc3QiLCJzZWNvbmQiLCJyZXN1bHRGbiIsImlzRXF1YWwiLCJsYXN0VGhpcyIsImxhc3RSZXN1bHQiLCJsYXN0QXJncyIsImNhbGxlZE9uY2UiLCJuZXdBcmdzIiwiX29iamVjdFdpdGhvdXRQcm9wZXJ0aWVzTG9vc2UiLCJleGNsdWRlZCIsInNvdXJjZUtleXMiLCJub3ciLCJwZXJmb3JtYW5jZSIsImNhbmNlbFRpbWVvdXQiLCJ0aW1lb3V0SUQiLCJjYW5jZWxBbmltYXRpb25GcmFtZSIsImlkIiwicmVxdWVzdFRpbWVvdXQiLCJkZWxheSIsInN0YXJ0IiwicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwidGljayIsInNpemUiLCJnZXRTY3JvbGxiYXJTaXplIiwicmVjYWxjdWxhdGUiLCJkaXYiLCJzdHlsZSIsIndpZHRoIiwiaGVpZ2h0Iiwib3ZlcmZsb3ciLCJhcHBlbmRDaGlsZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmVDaGlsZCIsImNhY2hlZFJUTFJlc3VsdCIsImdldFJUTE9mZnNldFR5cGUiLCJvdXRlckRpdiIsIm91dGVyU3R5bGUiLCJkaXJlY3Rpb24iLCJpbm5lckRpdiIsImlubmVyU3R5bGUiLCJzY3JvbGxMZWZ0IiwiSVNfU0NST0xMSU5HX0RFQk9VTkNFX0lOVEVSVkFMIiwiZGVmYXVsdEl0ZW1LZXkiLCJjb2x1bW5JbmRleCIsInJvd0luZGV4IiwiY3JlYXRlR3JpZENvbXBvbmVudCIsIl9jbGFzcyIsImdldENvbHVtbk9mZnNldCIsImdldENvbHVtblN0YXJ0SW5kZXhGb3JPZmZzZXQiLCJnZXRDb2x1bW5TdG9wSW5kZXhGb3JTdGFydEluZGV4IiwiZ2V0Q29sdW1uV2lkdGgiLCJnZXRFc3RpbWF0ZWRUb3RhbEhlaWdodCIsImdldEVzdGltYXRlZFRvdGFsV2lkdGgiLCJnZXRPZmZzZXRGb3JDb2x1bW5BbmRBbGlnbm1lbnQiLCJnZXRPZmZzZXRGb3JSb3dBbmRBbGlnbm1lbnQiLCJnZXRSb3dIZWlnaHQiLCJnZXRSb3dPZmZzZXQiLCJnZXRSb3dTdGFydEluZGV4Rm9yT2Zmc2V0IiwiZ2V0Um93U3RvcEluZGV4Rm9yU3RhcnRJbmRleCIsImluaXRJbnN0YW5jZVByb3BzIiwic2hvdWxkUmVzZXRTdHlsZUNhY2hlT25JdGVtU2l6ZUNoYW5nZSIsInZhbGlkYXRlUHJvcHMiLCJHcmlkIiwiX2luc3RhbmNlUHJvcHMiLCJfcmVzZXRJc1Njcm9sbGluZ1RpbWVvdXRJZCIsIl9vdXRlclJlZiIsImlzU2Nyb2xsaW5nIiwiaG9yaXpvbnRhbFNjcm9sbERpcmVjdGlvbiIsImluaXRpYWxTY3JvbGxMZWZ0Iiwic2Nyb2xsVG9wIiwiaW5pdGlhbFNjcm9sbFRvcCIsInNjcm9sbFVwZGF0ZVdhc1JlcXVlc3RlZCIsInZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX2NhbGxPbkl0ZW1zUmVuZGVyZWQiLCJvdmVyc2NhbkNvbHVtblN0YXJ0SW5kZXgiLCJvdmVyc2NhbkNvbHVtblN0b3BJbmRleCIsIm92ZXJzY2FuUm93U3RhcnRJbmRleCIsIm92ZXJzY2FuUm93U3RvcEluZGV4IiwidmlzaWJsZUNvbHVtblN0YXJ0SW5kZXgiLCJ2aXNpYmxlQ29sdW1uU3RvcEluZGV4IiwidmlzaWJsZVJvd1N0YXJ0SW5kZXgiLCJ2aXNpYmxlUm93U3RvcEluZGV4IiwiX2NhbGxPblNjcm9sbCIsIm9uU2Nyb2xsIiwiX2dldEl0ZW1TdHlsZSIsIl90aGlzJHByb3BzIiwiY29sdW1uV2lkdGgiLCJyb3dIZWlnaHQiLCJpdGVtU3R5bGVDYWNoZSIsIl9vZmZzZXQiLCJpc1J0bCIsInBvc2l0aW9uIiwidG9wIiwiX19fIiwiX29uU2Nyb2xsIiwiX2V2ZW50JGN1cnJlbnRUYXJnZXQiLCJjdXJyZW50VGFyZ2V0IiwiY2xpZW50SGVpZ2h0Iiwic2Nyb2xsSGVpZ2h0Iiwic2Nyb2xsV2lkdGgiLCJzZXRTdGF0ZSIsInByZXZTdGF0ZSIsImNhbGN1bGF0ZWRTY3JvbGxMZWZ0IiwiY2FsY3VsYXRlZFNjcm9sbFRvcCIsIl9yZXNldElzU2Nyb2xsaW5nRGVib3VuY2VkIiwiX291dGVyUmVmU2V0dGVyIiwib3V0ZXJSZWYiLCJfcmVzZXRJc1Njcm9sbGluZyIsImdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcyIsIm5leHRQcm9wcyIsInZhbGlkYXRlU2hhcmVkUHJvcHMiLCJfcHJvdG8iLCJzY3JvbGxUbyIsIl9yZWYzIiwic2Nyb2xsVG9JdGVtIiwiX3JlZjQiLCJfcmVmNCRhbGlnbiIsImFsaWduIiwiX3RoaXMkcHJvcHMyIiwiY29sdW1uQ291bnQiLCJyb3dDb3VudCIsIl90aGlzJHN0YXRlIiwic2Nyb2xsYmFyU2l6ZSIsImVzdGltYXRlZFRvdGFsSGVpZ2h0IiwiaG9yaXpvbnRhbFNjcm9sbGJhclNpemUiLCJ2ZXJ0aWNhbFNjcm9sbGJhclNpemUiLCJjb21wb25lbnREaWRNb3VudCIsIl90aGlzJHByb3BzMyIsIl9jYWxsUHJvcHNDYWxsYmFja3MiLCJjb21wb25lbnREaWRVcGRhdGUiLCJfdGhpcyRzdGF0ZTIiLCJjb21wb25lbnRXaWxsVW5tb3VudCIsInJlbmRlciIsIl90aGlzJHByb3BzNCIsImNsYXNzTmFtZSIsImlubmVyUmVmIiwiaW5uZXJFbGVtZW50VHlwZSIsImlubmVyVGFnTmFtZSIsIml0ZW1EYXRhIiwiX3RoaXMkcHJvcHM0JGl0ZW1LZXkiLCJpdGVtS2V5Iiwib3V0ZXJFbGVtZW50VHlwZSIsIm91dGVyVGFnTmFtZSIsInVzZUlzU2Nyb2xsaW5nIiwiX3RoaXMkX2dldEhvcml6b250YWxSIiwiX2dldEhvcml6b250YWxSYW5nZVRvUmVuZGVyIiwiY29sdW1uU3RhcnRJbmRleCIsImNvbHVtblN0b3BJbmRleCIsIl90aGlzJF9nZXRWZXJ0aWNhbFJhbiIsIl9nZXRWZXJ0aWNhbFJhbmdlVG9SZW5kZXIiLCJyb3dTdGFydEluZGV4Iiwicm93U3RvcEluZGV4IiwiaXRlbXMiLCJfcm93SW5kZXgiLCJfY29sdW1uSW5kZXgiLCJlc3RpbWF0ZWRUb3RhbFdpZHRoIiwiV2Via2l0T3ZlcmZsb3dTY3JvbGxpbmciLCJ3aWxsQ2hhbmdlIiwicG9pbnRlckV2ZW50cyIsIl90aGlzJHByb3BzNSIsIl90aGlzJF9nZXRIb3Jpem9udGFsUjIiLCJfb3ZlcnNjYW5Db2x1bW5TdGFydEluZGV4IiwiX292ZXJzY2FuQ29sdW1uU3RvcEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdGFydEluZGV4IiwiX3Zpc2libGVDb2x1bW5TdG9wSW5kZXgiLCJfdGhpcyRfZ2V0VmVydGljYWxSYW4yIiwiX292ZXJzY2FuUm93U3RhcnRJbmRleCIsIl9vdmVyc2NhblJvd1N0b3BJbmRleCIsIl92aXNpYmxlUm93U3RhcnRJbmRleCIsIl92aXNpYmxlUm93U3RvcEluZGV4IiwiX3RoaXMkc3RhdGUzIiwiX2hvcml6b250YWxTY3JvbGxEaXJlY3Rpb24iLCJfc2Nyb2xsTGVmdCIsIl9zY3JvbGxUb3AiLCJfc2Nyb2xsVXBkYXRlV2FzUmVxdWVzdGVkIiwiX3ZlcnRpY2FsU2Nyb2xsRGlyZWN0aW9uIiwiX3RoaXMkcHJvcHM2Iiwib3ZlcnNjYW5Db2x1bW5Db3VudCIsIm92ZXJzY2FuQ29sdW1uc0NvdW50Iiwib3ZlcnNjYW5Db3VudCIsIl90aGlzJHN0YXRlNCIsIm92ZXJzY2FuQ291bnRSZXNvbHZlZCIsIm92ZXJzY2FuQmFja3dhcmQiLCJvdmVyc2NhbkZvcndhcmQiLCJfdGhpcyRwcm9wczciLCJvdmVyc2NhblJvd0NvdW50Iiwib3ZlcnNjYW5Sb3dzQ291bnQiLCJfdGhpcyRzdGF0ZTUiLCJkZWZhdWx0UHJvcHMiLCJfcmVmNSIsIl9yZWY2Iiwicm93TWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRSb3dIZWlnaHQiLCJsYXN0TWVhc3VyZWRSb3dJbmRleCIsInRvdGFsU2l6ZU9mTWVhc3VyZWRSb3dzIiwiaXRlbU1ldGFkYXRhIiwib2Zmc2V0IiwiY29sdW1uTWV0YWRhdGFNYXAiLCJlc3RpbWF0ZWRDb2x1bW5XaWR0aCIsImxhc3RNZWFzdXJlZENvbHVtbkluZGV4IiwiZ2V0SXRlbU1ldGFkYXRhIiwiaXRlbVR5cGUiLCJpbnN0YW5jZVByb3BzIiwiaXRlbU1ldGFkYXRhTWFwIiwiaXRlbVNpemUiLCJsYXN0TWVhc3VyZWRJbmRleCIsImZpbmROZWFyZXN0SXRlbSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCIsImZpbmROZWFyZXN0SXRlbUV4cG9uZW50aWFsU2VhcmNoIiwiaGlnaCIsImxvdyIsIm1pZGRsZSIsImZsb29yIiwiY3VycmVudE9mZnNldCIsImludGVydmFsIiwiZ2V0T2Zmc2V0Rm9ySW5kZXhBbmRBbGlnbm1lbnQiLCJzY3JvbGxPZmZzZXQiLCJlc3RpbWF0ZWRUb3RhbFNpemUiLCJtYXhPZmZzZXQiLCJtaW5PZmZzZXQiLCJyb3VuZCIsIlZhcmlhYmxlU2l6ZUdyaWQiLCJyZXNldEFmdGVyQ29sdW1uSW5kZXgiLCJzaG91bGRGb3JjZVVwZGF0ZSIsInJlc2V0QWZ0ZXJJbmRpY2VzIiwicmVzZXRBZnRlclJvd0luZGV4IiwiX3JlZjYkc2hvdWxkRm9yY2VVcGRhIiwiX3JlZjciLCJJU19TQ1JPTExJTkdfREVCT1VOQ0VfSU5URVJWQUwkMSIsImRlZmF1bHRJdGVtS2V5JDEiLCJjcmVhdGVMaXN0Q29tcG9uZW50IiwiZ2V0SXRlbU9mZnNldCIsImdldEVzdGltYXRlZFRvdGFsU2l6ZSIsImdldEl0ZW1TaXplIiwiZ2V0U3RhcnRJbmRleEZvck9mZnNldCIsImdldFN0b3BJbmRleEZvclN0YXJ0SW5kZXgiLCJMaXN0Iiwic2Nyb2xsRGlyZWN0aW9uIiwiaW5pdGlhbFNjcm9sbE9mZnNldCIsIm92ZXJzY2FuU3RhcnRJbmRleCIsIm92ZXJzY2FuU3RvcEluZGV4IiwibGF5b3V0IiwiaXNIb3Jpem9udGFsIiwib2Zmc2V0SG9yaXpvbnRhbCIsIl9vblNjcm9sbEhvcml6b250YWwiLCJfb25TY3JvbGxWZXJ0aWNhbCIsIl9ldmVudCRjdXJyZW50VGFyZ2V0MiIsInZhbGlkYXRlU2hhcmVkUHJvcHMkMSIsIl90aGlzJHByb3BzNSRpdGVtS2V5IiwiX3RoaXMkX2dldFJhbmdlVG9SZW5kIiwiX2dldFJhbmdlVG9SZW5kZXIiLCJfdGhpcyRfZ2V0UmFuZ2VUb1JlbmQyIiwiX292ZXJzY2FuU3RhcnRJbmRleCIsIl9vdmVyc2NhblN0b3BJbmRleCIsIl92aXNpYmxlU3RhcnRJbmRleCIsIl92aXNpYmxlU3RvcEluZGV4IiwiX3Njcm9sbERpcmVjdGlvbiIsIl9zY3JvbGxPZmZzZXQiLCJnZXRJdGVtTWV0YWRhdGEkMSIsImZpbmROZWFyZXN0SXRlbUJpbmFyeVNlYXJjaCQxIiwiZXN0aW1hdGVkSXRlbVNpemUiLCJ0b3RhbFNpemVPZk1lYXN1cmVkSXRlbXMiLCJWYXJpYWJsZVNpemVMaXN0IiwiZmluZE5lYXJlc3RJdGVtRXhwb25lbnRpYWxTZWFyY2gkMSIsImZpbmROZWFyZXN0SXRlbSQxIiwiRml4ZWRTaXplR3JpZCIsImxhc3RDb2x1bW5PZmZzZXQiLCJtaWRkbGVPZmZzZXQiLCJjZWlsIiwiX3JlZjgiLCJsYXN0Um93T2Zmc2V0IiwiX3JlZjkiLCJfcmVmMTAiLCJudW1WaXNpYmxlQ29sdW1ucyIsIl9yZWYxMSIsIl9yZWYxMiIsIm51bVZpc2libGVSb3dzIiwiX3JlZjEzIiwiRml4ZWRTaXplTGlzdCIsImxhc3RJdGVtT2Zmc2V0IiwibnVtVmlzaWJsZUl0ZW1zIiwic2hhbGxvd0RpZmZlcnMiLCJhdHRyaWJ1dGUiLCJfYXR0cmlidXRlIiwiX2V4Y2x1ZGVkIiwiX2V4Y2x1ZGVkMiIsImFyZUVxdWFsIiwicHJldlByb3BzIiwicHJldlN0eWxlIiwicHJldlJlc3QiLCJuZXh0U3R5bGUiLCJuZXh0UmVzdCIsInNob3VsZENvbXBvbmVudFVwZGF0ZSIsIm5leHRTdGF0ZSIsIm9uQ2xpY2siLCJvblBvaW50ZXJEb3duIiwiY29udGFpbmVyUmVmIiwiZGlzYWJsZWQiLCJpbnZlcnRlZCIsInJvdW5kZWQiLCJub1NoYWRvdyIsIm5vUGFkZGluZyIsIm5vQm9yZGVyIiwidHJhbnNwYXJlbnQiLCJzdHJldGNoSG9yaXpvbnRhbGx5Iiwic3RyZXRjaFZlcnRpY2FsbHkiLCJhdXRvRm9jdXMiLCJvZmZzZXRTaWRlcyIsImNvbnRhaW5lciIsImxlZnRPZmZzZXQiLCJyaWdodE9mZnNldCIsInJvbGUiLCJjb250ZW50IiwiZGVmYXVsdCIsImJ1dHRvbkJhZGdlIiwiQ29tcG9uZW50Iiwib25DaGFuZ2UiLCJwbGFjZWhvbGRlciIsImNoZWNrZWQiLCJuYW1lIiwiaW5kZXRlcm1pbmF0ZSIsImhhbmRsZUNoYW5nZSIsIkxhYmVsIiwiaW5wdXRSZWYiLCJjaGVja2JveCIsImNvbG9ycyIsIm9uU2VsZWN0Iiwic2VsZWN0ZWRDb2xvciIsImNhblRvZ2dsZSIsImNvbG9yUGlja2VyIiwiY29sb3IiLCJDb2xvclN3YXRjaCIsImlzU2VsZWN0ZWQiLCJjb2xvclN3YXRjaCIsInNlbGVjdGVkIiwiYmFja2dyb3VuZENvbG9yIiwiaGV4Q29kZSIsInNyT25seSIsIkNvbmZpcm1hdGlvbk1vZGFsIiwiaGVhZGVyIiwiaXNPcGVuIiwiYnV0dG9uc0xlZnQiLCJidXR0b25zUmlnaHQiLCJvbkNsb3NlIiwibm9PdmVybGF5IiwiYmFzZVpJbmRleCIsIk1vZGFsIiwibW9kYWxIZWFkZXIiLCJtb2RhbENvbnRlbnQiLCJtb2RhbEJ1dHRvbnNDb250YWluZXIiLCJtb2RhbEJ1dHRvbnMiLCJkaXNwbGF5TmFtZSIsImRpc3BsYXkiLCJpc0Rpc2FibGVkIiwiQnV0dG9uIiwiSWNvbiIsInNyYyIsIml0ZW1Cb2R5UmVuZGVyZXIiLCJoYW5kbGVTZWxlY3QiLCJyZW5kZXJDbGlja2FibGUiLCJzZWxlY3RlZEl0ZW0iLCJwbGFjZW1lbnQiLCJ2ZXJ0aWNhbCIsImhvcml6b250YWwiLCJzZXRJc09wZW4iLCJ0b2dnbGVJc09wZW4iLCJNZW51Q29udGFpbmVyIiwiYnV0dG9uIiwiQ2xpY2thYmxlIiwiTWVudSIsIk1lbnVJdGVtIiwiaXNBY3RpdmUiLCJEcm9wZG93biIsImFjY2VwdCIsIm11bHRpcGxlIiwiaW5wdXQiLCJwYXJlbnQiLCJob3Jpem9udGFsUGxhY2VtZW50IiwidmVydGljYWxQbGFjZW1lbnQiLCJmaXhlZCIsImljb24iLCJjcm9zc09yaWdpbiIsInRvcE9mZnNldCIsImJvdHRvbU9mZnNldCIsInNyY1dpZHRoIiwic3JjSGVpZ2h0IiwiZGVjb2RpbmciLCJsb2FkaW5nIiwiaW1hZ2VFbGVtZW50IiwiaW1hZ2UiLCJoYXNPdmVybGF5Iiwib3ZlcmxheSIsImhlYWRlckFjdGlvbnMiLCJoZWFkZXJMYWJlbCIsInRleHQiLCJsaXN0IiwiYWN0aXZlIiwibGlzdFZpZXdJdGVtIiwiQnV0dG9uTGluayIsImFzIiwiZm9vdGVyIiwic21hcnRMYXlvdXQiLCJtZW51UGxhY2VtZW50IiwiUGxhY2VtZW50Q29udGV4dCIsIkVycm9yIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiYm90dG9tIiwiZGlzdGFuY2VUb0VkZ2UiLCJpbm5lckhlaWdodCIsInVsRWwiLCJxdWVyeVNlbGVjdG9yIiwiY2hpbGRFbGVtZW50cyIsInF1ZXJ5U2VsZWN0b3JBbGwiLCJuZXdIZWlnaHQiLCJnZXRDb21wdXRlZFN0eWxlIiwibWluSGVpZ2h0IiwibWF4SGVpZ2h0IiwibWVudSIsIm9wZW4iLCJmb3J3YXJkUmVmIiwibWVudUNvbnRhaW5lciIsIm1lbnVJdGVtIiwibWVudUxpbmtJdGVtIiwiaGFuZGxlT3ZlcmxheUNsaWNrIiwiekluZGV4IiwibW9kYWwiLCJtb2RhbEJ1dHRvbiIsImFwcGVuZERpZ2l0IiwibnVtYmVyIiwiZGlnaXQiLCJwb3BEaWdpdCIsImV2ZW50RGlnaXRLZXlzIiwiTnVtcGFkIiwiY3JlYXRlRW1pdE51bWJlckhhbmRsZXIiLCJuZXdOdW1iZXIiLCJOdW1wYWRLZXlzIiwiZmlsbCIsIm51bXBhZFZhbHVlIiwibnVtcGFkIiwidGFiSW5kZXgiLCJvbktleURvd24iLCJwYXJzZUludCIsIm51bWJlcnMiLCJpc0ZpeGVkIiwiZXhwYW5kZWQiLCJ0b2dnbGVFeHBhbmQiLCJoYW5kbGVHcm91cENsaWNrIiwiSWNvbkJ1dHRvbiIsIk9wdGlvbiIsIlNlbGVjdENvbnRleHQiLCJzZWxlY3RlZE9wdGlvbnMiLCJ1cGRhdGVTZWxlY3RlZE9wdGlvbiIsImlzQ2hlY2tlZCIsImNoZWNrYm94Q29udGFpbmVyIiwiQ2hlY2tib3giLCJpc09wdGlvbiIsIm9uRmlsdGVyIiwic2VsZWN0QWxsQ2hlY2tlZCIsInRvZ2dsZVNlbGVjdEFsbENoZWNrZWQiLCJzZWFyY2hLZXl3b3JkIiwic2VsZWN0QWxsIiwic2V0U2VsZWN0ZWRPcHRpb25zIiwiaGFzR3JvdXBPcHRpb24iLCJmaWx0ZXJPcHRpb25zIiwia2V5d29yZCIsInRyaW0iLCJmaWx0ZXJlZE9wdGlvbnMiLCJyZWR1Y2UiLCJmaWx0ZXJlZCIsImdyb3VwT3B0aW9uIiwiZmlsdGVyZWRHcm91cE9wdGlvbnMiLCJoYW5kbGVTZWxlY3RBbGxDbGljayIsInNlbGVjdEFsbENvbnRhaW5lciIsIkdyb3VwT3B0aW9uIiwic2V0U2VhcmNoS2V5d29yZCIsImhhbmRsZVNlYXJjaEtleXdvcmRDaGFuZ2UiLCJoYW5kbGVTZWFyY2hLZXl3b3JkUmVzZXRDbGljayIsImljb25TZWFyY2hDb250YWluZXIiLCJUZXh0SW5wdXQiLCJyZXNldEJ1dHRvbiIsImRlZmF1bHRWYWx1ZSIsInNob3dTZWxlY3RlZEFzVGFncyIsIm9wZW5lZCIsInRvZ2dsZU9wZW5lZCIsImhhbmRsZU9wZW5TZWxlY3QiLCJ2YWx1ZXMiLCJTZWxlY3RDb250ZXh0UHJvdmlkZXIiLCJTZWxlY3RvciIsImljb25CdXR0b24iLCJzZWFyY2hDb250YWluZXIiLCJTZWFyY2giLCJPcHRpb25MaXN0IiwiaW5pdGlhbFN0YXRlIiwidXBkYXRlZFNlbGVjdGVkT3B0aW9ucyIsImNvbnRleHRWYWx1ZSIsImhhbmRsZVRhZ0NsaWNrIiwiaGFuZGxlVGFnQ2xvc2UiLCJzaG93QXNUYWdzIiwiVGFnIiwiY2xvc2FibGUiLCJzaG93QXNUZXh0IiwiY29sdW1ucyIsImRhdGFTb3VyY2UiLCJvblJvd0NsaWNrIiwiaGFzQXJyb3ciLCJvbkxvYWRNb3JlIiwicGFnZSIsInNldFBhZ2UiLCJwYWdlU2l6ZSIsIlRhYmxlQ29uZmlnIiwiUEFHRV9TSVpFIiwidGFibGVIZWlnaHQiLCJST1dfSEVJR0hUIiwiaGVhZGVySGVpZ2h0IiwiSEVBREVSX0hFSUdIVCIsImRpc2FibGVMYXp5TG9hZGVyIiwiYWN0aXZlUm93cyIsIml0ZW1zQ291bnQiLCJpc0hlYWRlclN0aWNreSIsImhhc1ZpcnR1YWxTY3JvbGwiLCJzZXRTY3JvbGxUb3AiLCJyZW5kZXJSb3ciLCJyb3ciLCJoYW5kbGVMaXN0U2Nyb2xsIiwibG9hZE1vcmUiLCJJVEVNU19MT0FERUQiLCJwbGFjZWhvbGRlckNvbnRhaW5lciIsInNjcm9sbGJhckNvbnRhaW5lciIsImJvcmRlckJvdHRvbSIsImNvbHVtbiIsIm9uU29ydCIsInNvcnRhYmxlIiwic29ydGVkIiwiZGVmYXVsdFNvcnRPcmRlciIsInRpdGxlIiwiU29ydE9yZGVyIiwiREVTQyIsInNvcnRPcmRlciIsInNldFNvcnRPcmRlciIsImhhbmRsZVNvcnRDb2x1bW4iLCJuZXdTb3J0T3JkZXIiLCJBU0MiLCJjZWxsUHJvcHMiLCJ0YWJsZUhlYWRlckNlbGwiLCJzb3J0SWNvblZpc2libGUiLCJoYW5kbGVSb3dDbGljayIsImRhdGFJbmRleCIsImNsb3NlQnV0dG9uIiwib25CbHVyIiwicGF0dGVybiIsImlucHV0TW9kZSIsImlucHV0RWxlbWVudCIsInRleHRJbnB1dCIsInRvYXN0IiwidG9hc3RDb250YWluZXIiLCJwb3N0ZXIiLCJtdXRlZCIsImxvb3AiLCJhdXRvUGxheSIsInZpZGVvIiwicGxheXNJbmxpbmUiLCJpcyIsImwiLCJwIiwidXNlRGVidWdWYWx1ZSIsImdldFNuYXBzaG90IiwiZCIsInUiLCJpbnN0IiwiYyIsImV4cG9ydHMiLCJ1c2VTeW5jRXh0ZXJuYWxTdG9yZSIsIm1vZHVsZSIsInJlcXVpcmUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiZ2V0dGVyIiwiX19lc01vZHVsZSIsImRlZmluaXRpb24iLCJwcm9wIiwidG9TdHJpbmdUYWciLCJfX3dlYnBhY2tfZXhwb3J0c19fIl0sInNvdXJjZVJvb3QiOiIifQ==