Help
RSS
API
Feed
Maltego
Contact
Domain > aron.sdk.paytheorylab.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2021-12-27
54.230.19.6
(
ClassC
)
2025-10-28
3.169.173.103
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: CloudFrontDate: Tue, 28 Oct 2025 07:07:07 GMTContent-Type: text/htmlContent-Length: 167Connection: keep-aliveLocation: https://aron.sdk.paytheorylab.com/X-Cache: Redirect from cloudfrontVia: 1.1 3caf9df4ca497afd40efb87f8957a7fa.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4X-Amz-Cf-Id: _-p9TYkoTklnNzJzMfKlvC5ZCd8HUleKpgaW0Fn0HzYcZSiukOldqA html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>CloudFront/center>/body>/html>
Port 443
HTTP/1.1 200 OKContent-Type: application/javascriptContent-Length: 1239493Connection: keep-aliveDate: Tue, 28 Oct 2025 07:07:09 GMTLast-Modified: Fri, 23 Sep 2022 13:19:14 GMTETag: c7134230f9231f6d015d0847ebe0f28bServer: AmazonS3X-Cache: Miss from cloudfrontVia: 1.1 0a9acaac1641579d63bb7e6410165540.cloudfront.net (CloudFront)X-Amz-Cf-Pop: HIO52-P4X-Amz-Cf-Id: GE8TZ0qafJ2gNfPzLxvoER0A8hD2vwp5h5P3BLzNXxdsM7CwKZhywA /*! For license information please see index.js.LICENSE.txt */!function(){var t{2002:function(t,e,r){use strict;Object.defineProperty(e,__esModule,{value:!0}),e.setTransactingElemente.setStagee.setReadye.setInitializee.setEnvironmente.setAutofille.removeTransactingElemente.removeReadye.removeInitializee.removeAutofille.removeAlle.isFieldTypee.isCashFielde.isCardFielde.isAutofille.isACHFielde.initialStatee.hostedFieldMape.getTransactingElemente.getStagee.getReadye.getInitializee.getFinixEnve.getEnvironmente.fieldse.fieldTypese.defaultStylese.defaultFeeModee.combinedCardTypese.cashFieldse.cashFieldTypese.achFieldse.achFieldTypese.TRANSACTINGe.SURCHARGEe.STAGEe.SERVICE_FEEe.READYe.INTERCHANGEe.INITIALIZEe.ENVIRONMENTe.CASH_IFRAMEe.CARD_IFRAMEe.AUTOFILLe.ACH_IFRAMEvoid 0,r(6755);var npt-autofill;e.AUTOFILLpt-autofill;var opt-ready;e.READYpt-ready;var ipt-transacting;e.TRANSACTINGpt-transacting;var apt-environment;e.ENVIRONMENTpt-environment;var cpt-stage;e.STAGEpt-stage;var upt-initialize;e.INITIALIZEpt-initialize,e.defaultStyles{default:{},success:{},error:{}},e.SURCHARGEinterchange,e.INTERCHANGEinterchange,e.SERVICE_FEEservice_fee,e.defaultFeeModeinterchange,e.initialState{isDirty:!1,isFocused:!1,errorMessages:},e.fields{CREDIT_CARD:pay-theory-credit-card,CREDIT_CARD_NUMBER:pay-theory-credit-card-number,CREDIT_CARD_EXP:pay-theory-credit-card-exp,CREDIT_CARD_CVV:pay-theory-credit-card-cvv,CREDIT_CARD_NAME:pay-theory-credit-card-account-name,CREDIT_CARD_ADDRESS1:pay-theory-credit-card-address-1,CREDIT_CARD_ADDRESS2:pay-theory-credit-card-address-2,CREDIT_CARD_CITY:pay-theory-credit-card-city,CREDIT_CARD_STATE:pay-theory-credit-card-state,CREDIT_CARD_ZIP:pay-theory-credit-card-zip},e.achFields{ACCOUNT_NUMBER:pay-theory-ach-account-number,ACCOUNT_TYPE:pay-theory-ach-account-type,ACCOUNT_NAME:pay-theory-ach-account-name,BANK_CODE:pay-theory-ach-routing-number},e.cashFields{NAME:pay-theory-cash-name,CONTACT:pay-theory-cash-contact},e.achFieldTypesaccount-name,account-type,account-number,routing-number,e.cashFieldTypescash-name,cash-contact,e.fieldTypescredit-card,card-number,card-cvv,card-exp,card-name,billing-line1,billing-line2,billing-city,billing-state,billing-zip,e.ACH_IFRAMEaccount-number-iframe,e.CARD_IFRAMEcard-number-iframe,e.CASH_IFRAMEcash-name-iframe,e.hostedFieldMap{pay-theory-ach-account-number-tag-frame:account-number-iframe,pay-theory-cash-name-tag-frame:cash-name-iframe,pay-theory-credit-card-tag-frame:card-number-iframe,pay-theory-credit-card-number-tag-frame:card-number-iframe,cash:cash-name-iframe,card:card-number-iframe,ach:account-number-iframe};var ffunction(t){return t.startsWith(card)||t.startsWith(billing)};e.isCardFieldf;var sfunction(t){return t.startsWith(cash)};e.isCashFields;var lfunction(t){return t.startsWith(account)||t.startsWith(routing)};e.isACHFieldl,e.isFieldTypefunction(t){return f(t)?card:s(t)?cash:!!l(t)&&ach},e.combinedCardTypescard-number,card-cvv,card-exp,e.isAutofillfunction(){return localStorage.getItem(n)},e.setAutofillfunction(t){return localStorage.setItem(n,t)};var pfunction(){return localStorage.removeItem(n)};e.removeAutofillp,e.getTransactingElementfunction(){return localStorage.getItem(i)},e.setTransactingElementfunction(t){return localStorage.setItem(i,t.id)};var dfunction(){return localStorage.removeItem(i)};e.removeTransactingElementd,e.getEnvironmentfunction(){return localStorage.getItem(a)},e.setEnvironmentfunction(t){return localStorage.setItem(a,t)},e.getStagefunction(){return localStorage.getItem(c)},e.getFinixEnvfunction(){returnpaytheorylocalStorage.getItem(c)?live:sandbox},e.setStagefunction(t){return localStorage.setItem(c,t)},e.getReadyfunction(){return localStorage.getItem(o)},e.setReadyfunction(t){return localStorage.setItem(o,t)},e.removeReadyfunction(){return localStorage.removeItem(o)},e.getInitializefunction(){return localStorage.getItem(u)},e.setInitializefunction(t){return localStorage.setItem(u,t)};var yfunction(){return localStorage.removeItem(u)};e.removeInitializey,e.removeAllfunction(t){p(),d(),t&&y()}},4355:function(t,e,r){use strict;function n(t){return(nfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}r(6992),r(8783),r(4129),r(3948),r(5003),r(2526),r(1817),r(2165),Object.defineProperty(e,__esModule,{value:!0}),e.processElementse.isHiddene.findZipe.findTransactingElemente.findFielde.findExpe.findCVVe.findBankCodee.findAccountTypee.findAccountNumbere.findAccountNamee.addFramevoid 0,r(2222),r(1539),r(4747);var oc(r(8870)),ic(r(2002));function a(t){if(function!typeof WeakMap)return null;var enew WeakMap,rnew WeakMap;return(afunction(t){return t?r:e})(t)}function c(t,e){if(!e&&t&&t.__esModule)return t;if(nullt||object!n(t)&&function!typeof t)return{default:t};var ra(e);if(r&&r.has(t))return r.get(t);var o{},iObject.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if(default!c&&Object.prototype.hasOwnProperty.call(t,c)){var ui?Object.getOwnPropertyDescriptor(t,c):null;u&&(u.get||u.set)?Object.defineProperty(o,c,u):octc}return o.defaultt,r&&r.set(t,o),o}e.findTransactingElementfunction(t,e){return!1t?!(credit-card!e.type&&card-number!e.type)&&e.frame:t};var ufunction(t){return function(e,r){return!1e?!(r.type!t)&&r.frame:e}};e.findFieldu;var fu(card-cvv);e.findCVVf;var su(card-exp);e.findExps;var lu(account-number);e.findAccountNumberl;var pu(routing-number);e.findBankCodep;var du(account-type);e.findAccountTyped;var yu(account-name);e.findAccountNamey;var hu(billing-zip);e.findZiph;var vfunction(t,e){var r2arguments.length&&void 0!arguments2?arguments2:pay-theory-credit-card-tag-frame,n3arguments.length?arguments3:void 0,odocument.createElement(r);return o.envn,o.ready!0,o.setAttribute(id,.concat(e,-tag-frame)),t.appendChild(o),o};e.addFramev,e.processElementsfunction(t,e,r,n){var a;return r.forEach((function(r){var cfunction(t,e){var rte;return void 0r?unknown type .concat(e):string!typeof r&&invalid element}(t,r),udocument.getElementById(tr);return u&&!1c&&(cfunction(t,e,r,n,o){var i!1;if(nulldocument.getElementById(.concat(en,-tag-frame))){var av(t,en,credit-cardn?pay-theory-credit-card-tag-frame:pay-theory-.concat(o?.concat(o,-):).concat(n,-tag-frame));r.push({type:n,frame:a})}else i.concat(en, is already mounted);return i}(u,t,a,r,n)),c?o.handleError(FIELD_ERROR: .concat(c)):void(eri.initialState)})),a},e.isHiddenfunction(t){if(!1t)return!0;for(var et,re;e&&e!document;ee.parentNode)r.push(e);return r.reduce((function(t,e){var rnonewindow.getComputedStyle(e).display;return t||r}),!1)}},6590:function(t,e,r){use strict;function n(t){return(nfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}r(7941),r(2526),r(7327),r(1539),r(5003),r(4747),r(9337),r(6992),r(8783),r(4129),r(3948),r(1817),r(2165),Object.defineProperty(e,__esModule,{value:!0}),e.defaultvoid 0;var os(r(2002)),is(r(4355)),as(r(8870)),cs(r(3163)),us(r(4834));function f(t){if(function!typeof WeakMap)return null;var enew WeakMap,rnew WeakMap;return(ffunction(t){return t?r:e})(t)}function s(t,e){if(!e&&t&&t.__esModule)return t;if(nullt||object!n(t)&&function!typeof t)return{default:t};var rf(e);if(r&&r.has(t))return r.get(t);var o{},iObject.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if(default!a&&Object.prototype.hasOwnProperty.call(t,a)){var ci?Object.getOwnPropertyDescriptor(t,a):null;c&&(c.get||c.set)?Object.defineProperty(o,a,c):oata}return o.defaultt,r&&r.set(t,o),o}function l(t,e){var rObject.keys(t);if(Object.getOwnPropertySymbols){var nObject.getOwnPropertySymbols(t);e&&(nn.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function p(t){for(var e,r1;rarguments.length;r++)enullargumentsr?{}:argumentsr,r%2?l(Object(e),!0).forEach((function(r){d(t,r,er)})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):l(Object(e)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))}));return t}function d(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):ter,t}var yp(p(p(p(p({},o),i),a),c),u);e.defaulty},8870:function(t,e,r){use strict;Object.defineProperty(e,__esModule,{value:!0}),e.stateTypeMessagee.socketErrorTypeMessagee.siblingTypeMessagee.relayTypeMessagee.readyTypeMessagee.postMessageToHostedFielde.hostedReadyTypeMessagee.handleMessagee.handleHostedFieldMessagee.handleErrore.errorTypeMessagee.confirmationCompleteTypeMessagee.confirmTypeMessagee.completeTypeMessagee.cashCompleteTypeMessagevoid 0,r(6699),r(2023),r(7852),r(6755);var nr(3163),ofunction(t,e,r){var nstringtypeof r.data?JSON.parse(r.data):r.data;t(n)&&e(n)};e.handleMessagefunction(t,e){var rfunction(t,e){return function(r){window.location.origin.includes(r.origin)&&o(t,e,r)}}(t,e);return window.addEventListener(message,r),function(){window.removeEventListener(message,r)}},e.handleHostedFieldMessagefunction(t,e){var rfunction(t,e){return function(r){r.origin(0,n.hostedFieldsEndpoint)()&&o(t,e,r)}}(t,e);return window.addEventListener(message,r),function(){window.removeEventListener(message,r)}},e.errorTypeMessagefunction(t){returnstringtypeof t.type&&pt:errort.type},e.readyTypeMessagefunction(t){returnstringtypeof t.type&&t.type.endsWith(:ready)},e.hostedReadyTypeMessagefunction(t){returnstringtypeof t.type&&t.type.endsWith(:ready)&&t.type.startsWith(pt-static:)},e.stateTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:statet.type},e.relayTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:relayt.type},e.confirmTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:confirmt.type},e.completeTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:completet.type},e.confirmationCompleteTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:confirmation-completet.type},e.socketErrorTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:errort.type},e.siblingTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:siblingst.type},e.cashCompleteTypeMessagefunction(t){returnstringtypeof t.type&&pt-static:cash-completet.type},e.postMessageToHostedFieldfunction(t,e){return document.getElementsByName(t)?document.getElementsByName(t)0.contentWindow.postMessage(e,(0,n.hostedFieldsEndpoint)()):console.log(field is no longer available)},e.handleErrorfunction(t){window.postMessage({type:pt:error,throws:!0,error:t},window.location.origin)}},3163:function(t,e,r){use strict;function n(t){return(nfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}r(2526),r(1817),r(2165),r(8783),r(3948),r(2443),r(3680),r(3706),r(2703),r(489),r(8309),r(7042),r(4129),r(5003),Object.defineProperty(e,__esModule,{value:!0}),e.transactionEndpointe.hostedFieldsEndpointe.getDatae.generateTokenizee.generateTokenizatione.generateInitializatione.generateCompletionResponsee.defaultEnvironmentvoid 0,r(1539),r(8674),r(2222),r(8145),r(6992),r(2472),r(2990),r(8927),r(3105),r(5035),r(4345),r(7174),r(2846),r(4731),r(7209),r(6319),r(8867),r(7789),r(3739),r(9368),r(4483),r(2056),r(3462),r(678),r(7462),r(3824),r(5021),r(2974),r(5016),r(4916),r(7601),r(6699),r(2023),r(4747);var oc(r(2002)),ic(r(8870));function a(t){if(function!typeof WeakMap)return null;var enew WeakMap,rnew WeakMap;return(afunction(t){return t?r:e})(t)}function c(t,e){if(!e&&t&&t.__esModule)return t;if(nullt||object!n(t)&&function!typeof t)return{default:t};var ra(e);if(r&&r.has(t))return r.get(t);var o{},iObject.defineProperty&&Object.getOwnPropertyDescriptor;for(var c in t)if(default!c&&Object.prototype.hasOwnProperty.call(t,c)){var ui?Object.getOwnPropertyDescriptor(t,c):null;u&&(u.get||u.set)?Object.defineProperty(o,c,u):octc}return o.defaultt,r&&r.set(t,o),o}function u(){function t(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),te}function e(t,e,n,i){var ae&&e.prototype instanceof o?e:o,cObject.create(a.prototype),unew d(i||);return c._invokefunction(t,e,n){var osuspendedStart;return function(i,a){if(executingo)throw new Error(Generator is already running);if(completedo){if(throwi)throw a;return{value:void 0,done:!0}}for(n.methodi,n.arga;;){var cn.delegate;if(c){var us(c,n);if(u){if(uO)continue;return u}}if(nextn.method)n.sentn._sentn.arg;else if(thrown.method){if(suspendedStarto)throw ocompleted,n.arg;n.dispatchException(n.arg)}elsereturnn.method&&n.abrupt(return,n.arg);oexecuting;var fr(t,e,n);if(normalf.type){if(on.done?completed:suspendedYield,f.argO)continue;return{value:f.arg,done:n.done}}throwf.type&&(ocompleted,n.methodthrow,n.argf.arg)}}}(t,n,u),c}function r(t,e,r){try{return{type:normal,arg:t.call(e,r)}}catch(t){return{type:throw,arg:t}}}function o(){}function i(){}function a(){}function c(e){next,throw,return.forEach((function(r){t(e,r,(function(t){return this._invoke(r,t)}))}))}function f(t,e){function o(i,a,c,u){var fr(ti,t,a);if(throw!f.type){var sf.arg,ls.value;return l&&objectn(l)&&b.call(l,__await)?e.resolve(l.__await).then((function(t){o(next,t,c,u)}),(function(t){o(throw,t,c,u)})):e.resolve(l).then((function(t){s.valuet,c(s)}),(function(t){return o(throw,t,c,u)}))}u(f.arg)}var i;this._invokefunction(t,r){function n(){return new e((function(e,n){o(t,r,e,n)}))}return ii?i.then(n,n):n()}}function s(t,e){var nt.iteratore.method;if(void 0n){if(e.delegatenull,throwe.method){if(t.iterator.return&&(e.methodreturn,e.argvoid 0,s(t,e),throwe.method))return O;e.methodthrow,e.argnew TypeError(The iterator does not provide a throw method)}return O}var or(n,t.iterator,e.arg);if(throwo.type)return e.methodthrow,e.argo.arg,e.delegatenull,O;var io.arg;return i?i.done?(et.resultNamei.value,e.nextt.nextLoc,return!e.method&&(e.methodnext,e.argvoid 0),e.delegatenull,O):i:(e.methodthrow,e.argnew TypeError(iterator result is not an object),e.delegatenull,O)}function l(t){var e{tryLoc:t0};1 in t&&(e.catchLoct1),2 in t&&(e.finallyLoct2,e.afterLoct3),this.tryEntries.push(e)}function p(t){var et.completion||{};e.typenormal,delete e.arg,t.completione}function d(t){this.tryEntries{tryLoc:root},t.forEach(l,this),this.reset(!0)}function y(t){if(t){var etw;if(e)return e.call(t);if(functiontypeof t.next)return t;if(!isNaN(t.length)){var r-1,nfunction e(){for(;++rt.length;)if(b.call(t,r))return e.valuetr,e.done!1,e;return e.valuevoid 0,e.done!0,e};return n.nextn}}return{next:h}}function h(){return{value:void 0,done:!0}}ufunction(){return v};var v{},mObject.prototype,bm.hasOwnProperty,gfunctiontypeof Symbol?Symbol:{},wg.iterator||@@iterator,Eg.asyncIterator||@@asyncIterator,xg.toStringTag||@@toStringTag;try{t({},)}catch(e){tfunction(t,e,r){return ter}}v.wrape;var O{},A{};t(A,w,(function(){return this}));var TObject.getPrototypeOf,_T&&T(T(y()));_&&_!m&&b.call(_,w)&&(A_);var Sa.prototypeo.prototypeObject.create(A);return i.prototypea,t(S,constructor,a),t(a,constructor,i),i.displayNamet(a,x,GeneratorFunction),v.isGeneratorFunctionfunction(t){var efunctiontypeof t&&t.constructor;return!!e&&(ei||GeneratorFunction(e.displayName||e.name))},v.markfunction(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,a):(e.__proto__a,t(e,x,GeneratorFunction)),e.prototypeObject.create(S),e},v.awrapfunction(t){return{__await:t}},c(f.prototype),t(f.prototype,E,(function(){return this})),v.AsyncIteratorf,v.asyncfunction(t,r,n,o,i){void 0i&&(iPromise);var anew f(e(t,r,n,o),i);return v.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},c(S),t(S,x,Generator),t(S,w,(function(){return this})),t(S,toString,(function(){returnobject Generator})),v.keysfunction(t){var e;for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var ne.pop();if(n in t)return r.valuen,r.done!1,r}return r.done!0,r}},v.valuesy,d.prototype{constructor:d,reset:function(t){if(this.prev0,this.next0,this.sentthis._sentvoid 0,this.done!1,this.delegatenull,this.methodnext,this.argvoid 0,this.tryEntries.forEach(p),!t)for(var e in this)te.charAt(0)&&b.call(this,e)&&!isNaN(+e.slice(1))&&(thisevoid 0)},stop:function(){this.done!0;var tthis.tryEntries0.completion;if(throwt.type)throw t.arg;return this.rval},dispatchException:function(t){function e(e,n){return i.typethrow,i.argt,r.nexte,n&&(r.methodnext,r.argvoid 0),!!n}if(this.done)throw t;for(var rthis,nthis.tryEntries.length-1;0n;--n){var othis.tryEntriesn,io.completion;if(rooto.tryLoc)return e(end);if(o.tryLocthis.prev){var ab.call(o,catchLoc),cb.call(o,finallyLoc);if(a&&c){if(this.prevo.catchLoc)return e(o.catchLoc,!0);if(this.prevo.finallyLoc)return e(o.finallyLoc)}else if(a){if(this.prevo.catchLoc)return e(o.catchLoc,!0)}else{if(!c)throw new Error(try statement without catch or finally);if(this.prevo.finallyLoc)return e(o.finallyLoc)}}}},abrupt:function(t,e){for(var r,nthis.tryEntries.length-1;0n;--n)if((rthis.tryEntriesn).tryLocthis.prev&&b.call(r,finallyLoc)&&this.prevr.finallyLoc){var or;break}o&&(breakt||continuet)&&o.tryLoce&&eo.finallyLoc&&(onull);var io?o.completion:{};return i.typet,i.arge,o?(this.methodnext,this.nexto.finallyLoc,O):this.complete(i)},complete:function(t,e){if(throwt.type)throw t.arg;returnbreakt.type||continuet.type?this.nextt.arg:returnt.type?(this.rvalthis.argt.arg,this.methodreturn,this.nextend):normalt.type&&e&&(this.nexte),O},finish:function(t){for(var e,rthis.tryEntries.length-1;0r;--r)if((ethis.tryEntriesr).finallyLoct)return this.complete(e.completion,e.afterLoc),p(e),O},catch:function(t){for(var e,rthis.tryEntries.length-1;0r;--r)if((ethis.tryEntriesr).tryLoct){var ne.completion;if(thrown.type){var on.arg;p(e)}return o}throw new Error(illegal catch attempt)},delegateYield:function(t,e,r){return this.delegate{iterator:y(t),resultName:e,nextLoc:r},nextthis.method&&(this.argvoid 0),O}},v}function f(t,e,r,n,o,i,a){try{var cti(a),uc.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function s(t){return function(){var ethis,rarguments;return new Promise((function(n,o){function i(t){f(c,n,o,i,a,next,t)}function a(t){f(c,n,o,i,a,throw,t)}var ct.apply(e,r);i(void 0)}))}}var lfunction(){var ts(u().mark((function t(e,r){var n,o;return u().wrap((function(t){for(;;)switch(t.prevt.next){case 0:return n{method:GET,mode:cors,cache:no-cache,headers:{x-api-key:r}},t.next3,fetch(e,n);case 3:return ot.sent,t.next6,o.json();case 6:return t.abrupt(return,t.sent);case 7:caseend:return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}();e.getDatal;var pstringtypeof o.getEnvironment()?o.getEnvironment():dev;e.defaultEnvironmentp,e.transactionEndpointfunction(){returnhttps://.concat(o.getEnvironment(),.).concat(o.getStage(),.com/pt-token-service/)},e.hostedFieldsEndpointfunction(){returnhttps://.concat(o.getEnvironment(),.tags.static.).concat(o.getStage(),.com)},e.generateTokenizefunction(t){return function(){var es(u().mark((function e(r){var n,i;return u().wrap((function(e){for(;;)switch(e.preve.next){case 0:nr.payment.fee_modeo.SERVICE_FEE?r.payment.fee:0,i{first_six:r.payment.first_six,last_four:r.payment.last_four,brand:r.payment.brand,receipt_number:r.payment.idempotency,amount:r.payment.amount,service_fee:n},t(i);case 3:caseend:return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()},e.generateCompletionResponsefunction(t){return function(){var es(u().mark((function e(r){var n,i;return u().wrap((function(e){for(;;)switch(e.preve.next){case 0:nr.paymentType,itokenizen?r.body:FAILUREr.body.state?{receipt_number:r.body.receipt_number,last_four:r.body.last_four,brand:r.body.brand,state:r.body.state,type:r.body.type,payor_id:r.body.payor_id}:{receipt_number:r.body.receipt_number,last_four:r.body.last_four,brand:r.body.brand,created_at:r.body.created_at,amount:r.body.amount,service_fee:r.body.service_fee,state:r.body.state,tags:r.body.metadata,metadata:r.body.metadata,payor_id:r.body.payor_id,payment_method_id:r.body.payment_method_id},t(i),o.removeAll();case 4:caseend:return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()};var dfunction(){var ts(u().mark((function t(e,r){return u().wrap((function(t){for(;;)switch(t.prevt.next){case 0:if(!e){t.next12;break}return r.challengeUint8Array.from(r.challenge,(function(t){return t.charCodeAt(0)})),r.user.idUint8Array.from(r.user.id,(function(t){return t.charCodeAt(0)})),t.prev3,t.next6,navigator.credentials.create({publicKey:r});case 6:return t.abrupt(return,t.sent);case 9:return t.prev9,t.t0t.catch(3),t.abrupt(return,{type:failed to create credentials});case 12:return t.abrupt(return,{type:unavailable});case 13:caseend:return t.stop()}}),t,null,3,9)})));return function(e,r){return t.apply(this,arguments)}}(),yfunction(){var ts(u().mark((function t(e){var r;return u().wrap((function(t){for(;;)switch(t.prevt.next){case 0:if(!o.isAutofill()){t.next2;break}return t.abrupt(return,{type:autofill});case 2:if(!/^((?!chrome|android).)*safari/i.test(navigator.userAgent)){t.next4;break}return t.abrupt(return,{type:safari-bypass});case 4:if(!navigator.credentials||!navigator.credentials.preventSilentAccess){t.next17;break}return t.prev5,t.next8,window.PublicKeyCredential.isUserVerifyingPlatformAuthenticatorAvailable();case 8:return rt.sent,t.next11,d(r,e);case 11:return t.abrupt(return,t.sent);case 14:return t.prev14,t.t0t.catch(5),t.abrupt(return,{type:prevented});case 17:return t.abrupt(return,{type:failed attestation});case 18:caseend:return t.stop()}}),t,null,5,14)})));return function(e){return t.apply(this,arguments)}}(),hfunction(){var to.getTransactingElement();(t.includes(-card-)?o.fieldTypes:t.includes(-ach-)?o.achFieldTypes:o.cashFieldTypes).forEach((function(t){document.getElementsByName(.concat(t,-iframe))0&&i.postMessageToHostedField(.concat(t,-iframe),{type:pt-static:transact,element:t})}))},vfunction(){var ts(u().mark((function t(e){var r,n,a,c;return u().wrap((function(t){for(;;)switch(t.prevt.next){case 0:return t.next2,y(e);case 2:(rt.sent).response&&(no.getTransactingElement(),a{clientDataJSON:r.response.clientDataJSON,attestationObject:r.response.attestationObject},c{response:a,id:r.id,type:r.type},i.postMessageToHostedField(o.hostedFieldMapn,{type:pt-static:attestation,attestation:c}));case 4:caseend:return t.stop()}}),t)})));return function(e){return t.apply(this,arguments)}}(),mfunction(t){var et.payorId,rt.invoiceId,nt.recurringId,ot.fee,it.metadata,avoid 0i?{}:i,c{account_code:t.accountCode||apay-theory-account-code,reference:t.reference||apay-theory-reference,payment_parameters:t.paymentParameters||apayment-parameters-name,payor_id:e,send_receipt:t.sendReceipt||apay-theory-receipt,receipt_description:t.receiptDescription||apay-theory-receipt-description,invoice_id:r,recurring_id:n,timezone:Intl.DateTimeFormat().resolvedOptions().timeZone,fee:o};return t.payTheoryDatac,t};e.generateInitializationfunction(t,e){return function(){var rs(u().mark((function r(n){var i,a,c,f,s,l,p,d,y,b,g;return u().wrap((function(r){for(;;)switch(r.prevr.next){case 0:if(im(n),ai.amount,ci.payorInfo,fi.payTheoryData,si.shippingDetails,li.customerInfo,pi.metadata,dvoid 0p?{}:p,yi.feeMode,bi.confirmation,gvoid 0!b&&b,cc||l||s||{},inito.getInitialize()){r.next12;break}return o.setInitialize(init),r.next7,t(a,c,f,d,y,g);case 7:if(!r.sent){r.next12;break}return r.next11,v(e);case 11:h();case 12:caseend:return r.stop()}}),r)})));return function(t){return r.apply(this,arguments)}}()},e.generateTokenizationfunction(t,e){return function(){var rs(u().mark((function r(n){var i,a,c,f,s;return u().wrap((function(r){for(;;)switch(r.prevr.next){case 0:if(in.payorInfo,avoid 0i?{}:i,cn.payorId,fn.metadata,svoid 0f?{}:f,inito.getInitialize()){r.next11;break}return o.setInitialize(init),r.next6,t(a,c,s);case 6:if(!r.sent){r.next11;break}return r.next10,v(e);case 10:h();case 11:caseend:return r.stop()}}),r)})));return function(t){return r.apply(this,arguments)}}()}},4834:function(t,e,r){use strict;function n(t){return(nfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}r(6992),r(1539),r(8783),r(4129),r(3948),r(5003),r(2526),r(1817),r(2165),Object.defineProperty(e,__esModule,{value:!0}),e.transactedObservere.tokenizeObservere.generateReturne.errorObservere.captureObservervoid 0;var ou(r(8870)),iu(r(3163)),au(r(2002));function c(t){if(function!typeof WeakMap)return null;var enew WeakMap,rnew WeakMap;return(cfunction(t){return t?r:e})(t)}function u(t,e){if(!e&&t&&t.__esModule)return t;if(nullt||object!n(t)&&function!typeof t)return{default:t};var rc(e);if(r&&r.has(t))return r.get(t);var o{},iObject.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if(default!a&&Object.prototype.hasOwnProperty.call(t,a)){var ui?Object.getOwnPropertyDescriptor(t,a):null;u&&(u.get||u.set)?Object.defineProperty(o,a,u):oata}return o.defaultt,r&&r.set(t,o),o}var ffunction(t){return o.handleMessage(o.errorTypeMessage,(function(e){if(t(e.error),a.removeInitialize(),e.throws)throw new Error(e.error)}))};e.errorObserverf;var sfunction(t){return o.handleHostedFieldMessage(o.confirmTypeMessage,i.generateTokenize(t))};e.tokenizeObservers;var lfunction(t){return o.handleHostedFieldMessage(o.confirmationCompleteTypeMessage,i.generateCompletionResponse(t))};e.captureObserverl;var pfunction(t){return o.handleHostedFieldMessage(o.completeTypeMessage,i.generateCompletionResponse(t))};e.transactedObserverp,e.generateReturnfunction(t,e,r,n,o,i,a,c,u,d){return Object.create({mount:t,initTransaction:e,transact:r,tokenizePaymentMethod:n,confirm:o,cancel:i,readyObserver:a,errorObserver:f,validObserver:c,cashObserver:u,captureObserver:l,tokenizeObserver:s,transactedObserver:p,stateObserver:d})}},5695:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:account-name,label:Name on Account}),t.setFieldName(account-name),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-ach-account-name-tag-frame,f)},781:function(t,e,r){use strict;var n,o(nr(9746))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:account-number,label:Account Number}),t.setFieldName(account-number),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-ach-account-number-tag-frame,f)},7576:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:account-type,label:Account Type}),t.setFieldName(account-type),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-ach-account-type-tag-frame,f)},9473:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:routing-number,label:Routing Number}),t.setFieldName(routing-number),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-ach-routing-number-tag-frame,f)},3870:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:cash-contact,label:Phone or Email,validations:null,autoComplete:}),t.setFieldName(cash-contact),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-cash-contact-tag-frame,f)},2214:function(t,e,r){use strict;var n,o(nr(9746))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:cash-name,label:Full Name,validations:null,autoComplete:name}),t.setFieldName(cash-name),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-cash-name-tag-frame,f)},909:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:card-name,label:Name on card,validations:null,autoComplete:cc-name}),t.setFieldName(card-name),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-card-name-tag-frame,f)},4205:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:billing-line1,label:Billing Address,validations:null,autoComplete:address-line1}),t.setFieldName(billing-line1),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-billing-line1-tag-frame,f)},7064:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:billing-line2,label:Billing Address Contd,validations:null,autoComplete:address-line2}),t.setFieldName(billing-line2),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-billing-line2-tag-frame,f)},4920:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:billing-city,label:Billing City,validations:null,autoComplete:locality}),t.setFieldName(billing-city),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-billing-city-tag-frame,f)},323:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:card-cvv,label:CVV,validations:required,autoComplete:cc-csc}),t.setFieldName(card-cvv),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-card-cvv-tag-frame,f)},7115:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:card-exp,label:MM/YY,validations:required,autoComplete:cc-exp}),t.setFieldName(card-exp),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-card-exp-tag-frame,f)},6467:function(t,e,r){use strict;var n,o(nr(9746))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:card-number,label:Card Number,validations:required,autoComplete:cc-number}),t.setFieldName(card-number),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.get(pay-theory-credit-card-card-number-tag-frame)||window.customElements.define(pay-theory-credit-card-card-number-tag-frame,f)},4900:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:billing-state,label:Billing State,validations:null,autoComplete:region}),t.setFieldName(billing-state),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-billing-state-tag-frame,f)},8824:function(t,e,r){use strict;var n,o(nr(1267))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:billing-zip,label:Billing Zip,validations:null,autoComplete:postal-code}),t.setFieldName(billing-zip),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.define(pay-theory-credit-card-billing-zip-tag-frame,f)},9408:function(t,e,r){use strict;var n,o(nr(9746))&&n.__esModule?n:{default:n};function i(t){return(ifunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function a(t,e){return(aObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function c(t,e){if(e&&(objecti(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function u(t){return(uObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}r(1539),r(2419),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(489);var ffunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).setFields({name:card-number,label:Card Number,validations:required,autoComplete:cc-number},{name:card-exp,label:MM/YY,validations:required,autoComplete:cc-exp},{name:card-cvv,label:CVC,validations:required,autoComplete:cc-csc}),t.setFieldName(credit-card),t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&a(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,nu(t);if(e){var ou(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return c(this,r)}}(e);return function(t,e,r){return Object.defineProperty(t,prototype,{writable:!1}),t}(e)}(o.default);window.customElements.get(pay-theory-credit-card-tag-frame)||window.customElements.define(pay-theory-credit-card-tag-frame,f)},9746:function(t,e,r){use strict;function n(t){return(nfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}r(1539),r(2419),r(4819),r(5003),r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),Object.defineProperty(e,__esModule,{value:!0}),e.defaultvoid 0,r(489);var oi(r(1267));function i(t){return t&&t.__esModule?t:{default:t}}function a(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}function c(t,e){for(var r,n0;ne.length;n++)(ren).enumerabler.enumerable||!1,r.configurable!0,valuein r&&(r.writable!0),Object.defineProperty(t,r.key,r)}function u(){return(uundefined!typeof Reflect&&Reflect.get?Reflect.get.bind():function(t,e,r){var nf(t,e);if(n){var oObject.getOwnPropertyDescriptor(n,e);return o.get?o.get.call(3>arguments.length?t:r):o.value}}).apply(this,arguments)}function f(t,e){for(;!Object.prototype.hasOwnProperty.call(t,e)&&null!(tp(t)););return t}function s(t,e){return(sObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function l(t,e){if(e&&(objectn(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return function(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}(t)}function p(t){return(pObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}i(r(6590));var dfunction(t){function e(){return a(this,e),r.apply(this,arguments)}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&s(t,e)}(e,t);var rfunction(t){var efunction(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}();return function(){var r,np(t);if(e){var op(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return l(this,r)}}(e);return function(t,e,r){e&&c(t.prototype,e),Object.defineProperty(t,prototype,{writable:!1})}(e,{key:defineFields,value:function(t,r){u(p(e.prototype),defineFields,this).call(this,t,r);var ndocument.createElement(span);n.setAttribute(id,pay-theory-badge-wrapper),this.appendElement(n)}},{key:generateTokenizeCallback,value:function(t,e){window.postMessage({type:pt:tokenize,tokenize:{amount:t,currency:USD,pt-instrument:e}},window.location.origin)}},{key:generateTransactCallback,value:function(t,e){window.postMessage({type:pt:transact,transact:{amount:t,currency:USD,pt-instrument:e}},window.location.origin)}},{key:instrumentResponse,value:function(t,e,r){switch(t){casetokenize:this.generateTokenizeCallback(e,r);break;casetransact:this.generateTransactCallback(e,r)}}},{key:instrument,get:function(){return this.instrumented},set:function(t){this.instrumented||(this.instrumentedt,this.instrumentResponse(this.actioned,this.amounting,t)),cancelt&&(this.instrumented!1)}},{key:amount,get:function(){return this.amounting},set:function(t){this.amounting!t&&(this.amountingt)}}),e}(o.default);e.defaultd},1267:function(t,e,r){use strict;r(2419),r(6992),r(1532),r(8783),r(3948),r(2526),r(1817),r(2165),Object.defineProperty(e,__esModule,{value:!0}),e.defaultvoid 0,r(1539),r(4747),r(4916),r(5306),r(8309),r(2222),r(9714),r(489);var ni(r(6590)),oi(r(7856));function i(t){return t&&t.__esModule?t:{default:t}}function a(t){return(afunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}function c(t,e){for(var r,n0;ne.length;n++)(ren).enumerabler.enumerable||!1,r.configurable!0,valuein r&&(r.writable!0),Object.defineProperty(t,r.key,r)}function u(t,e){if(e&&(objecta(e)||functiontypeof e))return e;if(void 0!e)throw new TypeError(Derived constructors may only return object or undefined);return f(t)}function f(t){if(void 0t)throw new ReferenceError(this hasnt been initialised - super() hasnt been called);return t}function s(t){var efunctiontypeof Map?new Map:void 0;return(sfunction(t){function r(){return l(t,arguments,y(this).constructor)}if(nullt||!function(t){return-1!Function.toString.call(t).indexOf(native code)}(t))return t;if(function!typeof t)throw new TypeError(Super expression must either be null or a function);if(void 0!e){if(e.has(t))return e.get(t);e.set(t,r)}return r.prototypeObject.create(t.prototype,{constructor:{value:r,enumerable:!1,writable:!0,configurable:!0}}),d(r,t)})(t)}function l(){return(lp()?Reflect.construct.bind():function(t,e,r){var nnull;n.push.apply(n,e);var onew(Function.bind.apply(t,n));return r&&d(o,r.prototype),o}).apply(null,arguments)}function p(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}function d(t,e){return(dObject.setPrototypeOf?Object.setPrototypeOf.bind():function(t,e){return t.__proto__e,t})(t,e)}function y(t){return(yObject.setPrototypeOf?Object.getPrototypeOf.bind():function(t){return t.__proto__||Object.getPrototypeOf(t)})(t)}var hfunction(t){function e(){var t;return function(t,e){if(!(t instanceof e))throw new TypeError(Cannot call a class as a function)}(this,e),(tr.call(this)).defineFieldst.defineFields.bind(f(t)),t.isValidFramet.isValidFrame.bind(f(t)),t.appendElementt.appendElement.bind(f(t)),t.setFieldst.setFields.bind(f(t)),t.defaultStyles{default:{},success:{},error:{}},t.applicationAPrPDbJxbZuiRuwN3NjfajpH,t.fields,t.wrappers,t.validated{},t.field,t.connectionSet!1,t}!function(t,e){if(function!typeof e&&null!e)throw new TypeError(Super expression must either be null or a function);t.prototypeObject.create(e&&e.prototype,{constructor:{value:t,writable:!0,configurable:!0}}),Object.defineProperty(t,prototype,{writable:!1}),e&&d(t,e)}(e,t);var rfunction(t){var ep();return function(){var r,ny(t);if(e){var oy(this).constructor;rReflect.construct(n,arguments,o)}else rn.apply(this,arguments);return u(this,r)}}(e);return function(t,e,r){e&&c(t.prototype,e),Object.defineProperty(t,prototype,{writable:!1})}(e,{key:setFields,value:function(t){this.fieldst}},{key:setFieldName,value:function(t){this.fieldt}},{key:defineFields,value:function(){var tthis;this.fields.forEach((function(e){var rfield-wrapper-.concat(e.name.replace(/\./,-)),odocument.createElement(div);o.setAttribute(id,r),o.setAttribute(class,field-wrapper);var idocument.createElement(iframe);i.setAttribute(src,.concat(n.default.hostedFieldsEndpoint(),/).concat(e.name,?token).concat(t.tokened)),i.setAttribute(frameBorder,0),i.setAttribute(name,.concat(e.name,-iframe)),o.appendChild(i),t.appendElement(o)}))}},{key:appendElement,value:function(t){document.getElementById(pay-theory-.concat(this.field,-hosted-field-container)).appendChild(t)}},{key:isValidFrame,value:function(t){return void 0t?t:!t}},{key:findEventMessage,value:function(t){returnobjecta(t.data)?t.data:{type:unknown}}},{key:connectedCallback,value:function(){this.innerHTMLo.default.sanitize(div classframed>\n div idpay-theory-.concat(this.field,-hosted-field-container classpay-theory-field>\n /div>\n /div>))}},{key:adoptedCallback,value:function(){}},{key:disconnectedCallback,value:function(){}},{key:attributeChangedCallback,value:function(t,e,r){r!e&&(thist.toString()this.hasAttribute(t))}},{key:connected,get:function(){return this.connectionSet},set:function(t){this.connectionSett}},{key:application,get:function(){return this.applicationId},set:function(t){this.applicationIdt}},{key:field,get:function(){return this.fielded},set:function(t){this.fieldedt}},{key:loaded,get:function(){return this.isLoaded},set:function(t){this.isLoadedt}},{key:token,get:function(){return this.tokened},set:function(t){this.tokenedt,this.defineFields()}},{key:env,get:function(){return void 0this.environment?n.default.defaultEnvironment:this.environment},set:function(t){this.environmentt}},{key:ready,get:function(){return this.isReady},set:function(t){t!this.isReady&&(this.isReadyt,window.postMessage({type:pt:.concat(this.field,:ready),ready:this.isReady},window.location.origin))}},{key:styles,get:function(){return this.styling},set:function(t){this.stylingt||this.defaultStyles}},{key:state,get:function(){return this.stated},set:function(t){this.statedt;var e0t.errorMessages.length;this.validthis.isValidFrame(e),t.isDirty&&e?this.errort.errorMessages0:t.isDirty&&(this.error!1),t.isConnected&&(this.connectedt.isConnected,window.postMessage({type:pay-theory:ready,ready:!0},window.location.origin))}},{key:error,get:function(){return this.errored},set:function(t){this.errored!t&&(this.erroredt,window.postMessage({type:pt:error,error:t},window.location.origin))}},{key:valid,get:function(){return this.validated},set:function(t){if(t!this.validatedthis.stated.element){var ethis.stated.element;this.validatedet,window.postMessage({type:pt:.concat(e,:valid),valid:t,hosted:!0},window.location.origin)}}}),e}(s(HTMLElement));e.defaulth},7892:function(t,e,r){use strict;var n,o(nr(6590))&&n.__esModule?n:{default:n};Object.defineProperty(e,__esModule,{value:!0}),e.stateUpdatere.siblingHandlere.setupHandlere.relayHandlere.hostedErrorHandlervoid 0,r(1539),r(4747),r(7852),r(8862),r(6699),r(2023);var ifunction(t,e){t.forEach((function(t){document.getElementsByName(t)0&&o.default.postMessageToHostedField(t,e)}))};e.relayHandlerfunction(){return function(t){if(t.element.endsWith(autofill))o.default.setAutofill(!0),function(t){card-autofillt.element?i(card-name-iframe,card-cvv-iframe,card-exp-iframe,t):address-autofillt.element&&i(billing-line2-iframe,billing-city-iframe,billing-state-iframe,billing-zip-iframe,t)}(t);else{var eo.default.isFieldType(t.element);o.default.postMessageToHostedField(o.default.hostedFieldMape,t)}}},e.setupHandlerfunction(t,e){return function(r){o.default.postMessageToHostedField(.concat(r.element,-iframe),{type:pt:setup,style:t.default?t:o.default.defaultStyles}),er.element&&o.default.postMessageToHostedField(.concat(r.element,-iframe),{type:pt-static:elements,elements:JSON.parse(JSON.stringify(er.element))})}};var afunction(t,e){o.default.postMessageToHostedField(.concat(e,-iframe),{type:pt-static:connected,hostToken:t.hostToken,sessionKey:t.sessionKey,publicKey:t.publicKey})};e.siblingHandlerfunction(t){return function(e){card-numbere.field?t.card.forEach((function(t){credit-cardt.type?(a(e,card-cvv),a(e,card-exp)):a(e,t.type)})):account-numbere.field?t.ach.forEach((function(t){a(e,t.type)})):cash-namee.field&&t.cash.forEach((function(t){a(e,t.type)}))}},e.stateUpdaterfunction(t){return function(e){var r{};if(o.default.combinedCardTypes.includes(e.element))rfunction(t,e){var re.reduce(o.default.findTransactingElement,!1);returncredit-cardr.field?r:e.reduce(o.default.findField(t),!1)}(e.element,t.card);else{var nt.ach.reduce(o.default.findField(e.element),!1),it.card.reduce(o.default.findField(e.element),!1),at.cash.reduce(o.default.findField(e.element),!1);rn||i||a}var ce.state;c.elemente.element,r.statec}},e.hostedErrorHandlerfunction(t){o.default.removeInitialize(),o.default.handleError(t.error)}},2836:function(t,e,r){use strict;function n(t){return(nfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}r(2526),r(1817),r(2165),r(2443),r(3680),r(3706),r(2703),r(489),r(7042),r(1038),r(7601),r(7941),r(7327),r(5003),r(9337),r(4129),Object.defineProperty(e,__esModule,{value:!0}),e.defaultvoid 0,r(4916),r(3123),r(6699),r(2222),r(8783),r(6992),r(3948),r(1539),r(4747),r(8862),r(2023),r(8309),r(9600),r(8674);var o,i(or(6590))&&o.__esModule?o:{default:o},af(r(7244)),cf(r(7892));function u(t){if(function!typeof WeakMap)return null;var enew WeakMap,rnew WeakMap;return(ufunction(t){return t?r:e})(t)}function f(t,e){if(!e&&t&&t.__esModule)return t;if(nullt||object!n(t)&&function!typeof t)return{default:t};var ru(e);if(r&&r.has(t))return r.get(t);var o{},iObject.defineProperty&&Object.getOwnPropertyDescriptor;for(var a in t)if(default!a&&Object.prototype.hasOwnProperty.call(t,a)){var ci?Object.getOwnPropertyDescriptor(t,a):null;c&&(c.get||c.set)?Object.defineProperty(o,a,c):oata}return o.defaultt,r&&r.set(t,o),o}function s(t,e){var rObject.keys(t);if(Object.getOwnPropertySymbols){var nObject.getOwnPropertySymbols(t);e&&(nn.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function l(t){for(var e,r1;rarguments.length;r++)enullargumentsr?{}:argumentsr,r%2?s(Object(e),!0).forEach((function(r){p(t,r,er)})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(e)):s(Object(e)).forEach((function(r){Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r))}));return t}function p(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):ter,t}function d(t,e){var rundefined!typeof Symbol&&tSymbol.iterator||t@@iterator;if(!r){if(Array.isArray(t)||(rfunction(t,e){if(t){if(stringtypeof t)return y(t,e);var rObject.prototype.toString.call(t).slice(8,-1);returnObjectr&&t.constructor&&(rt.constructor.name),Mapr||Setr?Array.from(t):Argumentsr||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?y(t,e):void 0}}(t))||e&&t&&numbertypeof t.length){r&&(tr);var n0,ofunction(){};return{s:o,n:function(){return n>t.length?{done:!0}:{done:!1,value:tn++}},e:function(t){throw t},f:o}}throw new TypeError(Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a Symbol.iterator() method.)}var i!0,a!1;return{s:function(){rr.call(t)},n:function(){var tr.next();return it.done,t},e:function(t){a!0},f:function t(){try{i||nullr.return||r.return()}finally{if(a)throw t}}}}function y(t,e){(nulle||e>t.length)&&(et.length);for(var r0,nArray(e);re;r++)nrtr;return n}function h(){function t(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),te}function e(t,e,n,i){var ae&&e.prototype instanceof o?e:o,cObject.create(a.prototype),unew p(i||);return c._invokefunction(t,e,n){var osuspendedStart;return function(i,a){if(executingo)throw new Error(Generator is already running);if(completedo){if(throwi)throw a;return{value:void 0,done:!0}}for(n.methodi,n.arga;;){var cn.delegate;if(c){var uf(c,n);if(u){if(uO)continue;return u}}if(nextn.method)n.sentn._sentn.arg;else if(thrown.method){if(suspendedStarto)throw ocompleted,n.arg;n.dispatchException(n.arg)}elsereturnn.method&&n.abrupt(return,n.arg);oexecuting;var sr(t,e,n);if(normals.type){if(on.done?completed:suspendedYield,s.argO)continue;return{value:s.arg,done:n.done}}throws.type&&(ocompleted,n.methodthrow,n.args.arg)}}}(t,n,u),c}function r(t,e,r){try{return{type:normal,arg:t.call(e,r)}}catch(t){return{type:throw,arg:t}}}function o(){}function i(){}function a(){}function c(e){next,throw,return.forEach((function(r){t(e,r,(function(t){return this._invoke(r,t)}))}))}function u(t,e){function o(i,a,c,u){var fr(ti,t,a);if(throw!f.type){var sf.arg,ls.value;return l&&objectn(l)&&b.call(l,__await)?e.resolve(l.__await).then((function(t){o(next,t,c,u)}),(function(t){o(throw,t,c,u)})):e.resolve(l).then((function(t){s.valuet,c(s)}),(function(t){return o(throw,t,c,u)}))}u(f.arg)}var i;this._invokefunction(t,r){function n(){return new e((function(e,n){o(t,r,e,n)}))}return ii?i.then(n,n):n()}}function f(t,e){var nt.iteratore.method;if(void 0n){if(e.delegatenull,throwe.method){if(t.iterator.return&&(e.methodreturn,e.argvoid 0,f(t,e),throwe.method))return O;e.methodthrow,e.argnew TypeError(The iterator does not provide a throw method)}return O}var or(n,t.iterator,e.arg);if(throwo.type)return e.methodthrow,e.argo.arg,e.delegatenull,O;var io.arg;return i?i.done?(et.resultNamei.value,e.nextt.nextLoc,return!e.method&&(e.methodnext,e.argvoid 0),e.delegatenull,O):i:(e.methodthrow,e.argnew TypeError(iterator result is not an object),e.delegatenull,O)}function s(t){var e{tryLoc:t0};1 in t&&(e.catchLoct1),2 in t&&(e.finallyLoct2,e.afterLoct3),this.tryEntries.push(e)}function l(t){var et.completion||{};e.typenormal,delete e.arg,t.completione}function p(t){this.tryEntries{tryLoc:root},t.forEach(s,this),this.reset(!0)}function d(t){if(t){var etw;if(e)return e.call(t);if(functiontypeof t.next)return t;if(!isNaN(t.length)){var r-1,nfunction e(){for(;++rt.length;)if(b.call(t,r))return e.valuetr,e.done!1,e;return e.valuevoid 0,e.done!0,e};return n.nextn}}return{next:y}}function y(){return{value:void 0,done:!0}}hfunction(){return v};var v{},mObject.prototype,bm.hasOwnProperty,gfunctiontypeof Symbol?Symbol:{},wg.iterator||@@iterator,Eg.asyncIterator||@@asyncIterator,xg.toStringTag||@@toStringTag;try{t({},)}catch(e){tfunction(t,e,r){return ter}}v.wrape;var O{},A{};t(A,w,(function(){return this}));var TObject.getPrototypeOf,_T&&T(T(d()));_&&_!m&&b.call(_,w)&&(A_);var Sa.prototypeo.prototypeObject.create(A);return i.prototypea,t(S,constructor,a),t(a,constructor,i),i.displayNamet(a,x,GeneratorFunction),v.isGeneratorFunctionfunction(t){var efunctiontypeof t&&t.constructor;return!!e&&(ei||GeneratorFunction(e.displayName||e.name))},v.markfunction(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,a):(e.__proto__a,t(e,x,GeneratorFunction)),e.prototypeObject.create(S),e},v.awrapfunction(t){return{__await:t}},c(u.prototype),t(u.prototype,E,(function(){return this})),v.AsyncIteratoru,v.asyncfunction(t,r,n,o,i){void 0i&&(iPromise);var anew u(e(t,r,n,o),i);return v.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},c(S),t(S,x,Generator),t(S,w,(function(){return this})),t(S,toString,(function(){returnobject Generator})),v.keysfunction(t){var e;for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var ne.pop();if(n in t)return r.valuen,r.done!1,r}return r.done!0,r}},v.valuesd,p.prototype{constructor:p,reset:function(t){if(this.prev0,this.next0,this.sentthis._sentvoid 0,this.done!1,this.delegatenull,this.methodnext,this.argvoid 0,this.tryEntries.forEach(l),!t)for(var e in this)te.charAt(0)&&b.call(this,e)&&!isNaN(+e.slice(1))&&(thisevoid 0)},stop:function(){this.done!0;var tthis.tryEntries0.completion;if(throwt.type)throw t.arg;return this.rval},dispatchException:function(t){function e(e,n){return i.typethrow,i.argt,r.nexte,n&&(r.methodnext,r.argvoid 0),!!n}if(this.done)throw t;for(var rthis,nthis.tryEntries.length-1;0n;--n){var othis.tryEntriesn,io.completion;if(rooto.tryLoc)return e(end);if(o.tryLocthis.prev){var ab.call(o,catchLoc),cb.call(o,finallyLoc);if(a&&c){if(this.prevo.catchLoc)return e(o.catchLoc,!0);if(this.prevo.finallyLoc)return e(o.finallyLoc)}else if(a){if(this.prevo.catchLoc)return e(o.catchLoc,!0)}else{if(!c)throw new Error(try statement without catch or finally);if(this.prevo.finallyLoc)return e(o.finallyLoc)}}}},abrupt:function(t,e){for(var r,nthis.tryEntries.length-1;0n;--n)if((rthis.tryEntriesn).tryLocthis.prev&&b.call(r,finallyLoc)&&this.prevr.finallyLoc){var or;break}o&&(breakt||continuet)&&o.tryLoce&&eo.finallyLoc&&(onull);var io?o.completion:{};return i.typet,i.arge,o?(this.methodnext,this.nexto.finallyLoc,O):this.complete(i)},complete:function(t,e){if(throwt.type)throw t.arg;returnbreakt.type||continuet.type?this.nextt.arg:returnt.type?(this.rvalthis.argt.arg,this.methodreturn,this.nextend):normalt.type&&e&&(this.nexte),O},finish:function(t){for(var e,rthis.tryEntries.length-1;0r;--r)if((ethis.tryEntriesr).finallyLoct)return this.complete(e.completion,e.afterLoc),l(e),O},catch:function(t){for(var e,rthis.tryEntries.length-1;0r;--r)if((ethis.tryEntriesr).tryLoct){var ne.completion;if(thrown.type){var on.arg;l(e)}return o}throw new Error(illegal catch attempt)},delegateYield:function(t,e,r){return this.delegate{iterator:d(t),resultName:e,nextLoc:r},nextthis.method&&(this.argvoid 0),O}},v}function v(t,e,r,n,o,i,a){try{var cti(a),uc.value}catch(t){return void r(t)}c.done?e(u):Promise.resolve(u).then(n,o)}function m(t){return function(){var ethis,rarguments;return new Promise((function(n,o){function i(t){v(c,n,o,i,a,next,t)}function a(t){v(c,n,o,i,a,throw,t)}var ct.apply(e,r);i(void 0)}))}}var bfunction(){var tm(h().mark((function t(e){var r,n,o,u,f,s,p,y,v,b,g,w,E,x,O,A,T,_,S,j,R,C,P,I,M,k,N,F,L,D,B,U,z,Harguments;return h().wrap((function(t){for(;;)switch(t.prevt.next){case 0:return r2H.length&&void 0!H2?H2:i.default.defaultStyles,n3H.length&&void 0!H3?H3:{},o4H.length&&void 0!H4?H4:i.default.defaultFeeMode,ue.split(-),fu0,su1,p,new,old.includes(s)&&(ps,su2),a.checkCreateParams(e,o,n,r,f,s,p),i.default.removeAll(!0),yp?.concat(f):.concat(f,-).concat(p),i.default.setEnvironment(y),i.default.setStage(s),v{card-number:!1,card-exp:!1,card-cvv:!1,card-name:!0,billing-line1:!0,billing-line2:!0,billing-city:!0,billing-state:!0,billing-zip:!1,account-number:!1,routing-number:!1,account-name:!1,account-type:!1,cash-name:!1,cash-contact:!1},b{credit-card:i.default.fields.CREDIT_CARD,number:i.default.fields.CREDIT_CARD_NUMBER,exp:i.default.fields.CREDIT_CARD_EXP,cvv:i.default.fields.CREDIT_CARD_CVV,account-name:i.default.fields.CREDIT_CARD_NAME,address-1:i.default.fields.CREDIT_CARD_ADDRESS1,address-2:i.default.fields.CREDIT_CARD_ADDRESS2,city:i.default.fields.CREDIT_CARD_CITY,state:i.default.fields.CREDIT_CARD_STATE,zip:i.default.fields.CREDIT_CARD_ZIP,account-number:i.default.achFields.ACCOUNT_NUMBER,ach-name:i.default.achFields.ACCOUNT_NAME,routing-number:i.default.achFields.BANK_CODE,account-type:i.default.achFields.ACCOUNT_TYPE,cash-name:i.default.cashFields.NAME,cash-contact:i.default.cashFields.CONTACT},g!1,w{card:,ach:,cash:},E{},x{},O!1,Afunction(){var tm(h().mark((function t(){var r,n;return h().wrap((function(t){for(;;)switch(t.prevt.next){case 0:r0;case 1:if(!(5>r)){t.next10;break}return t.next4,i.default.getData(.concat(i.default.transactionEndpoint()),e);case 4:if(!(nt.sent)pt-token){t.next7;break}return t.abrupt(return,n);case 7:r++,t.next1;break;case 10:return t.abrupt(return,{});case 11:caseend:return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),T{},t.next24,A();case 24:return T.tokent.sent,T.isUsed!1,_function(){var tm(h().mark((function t(){var e,r;return h().wrap((function(t){for(;;)switch(t.prevt.next){case 0:return ei.default.getTransactingElement(),t.next3,A();case 3:rt.sent,i.default.postMessageToHostedField(i.default.hostedFieldMape,{type:pt-static:reset_host,token:rpt-token});case 5:caseend:return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),window.addEventListener(beforeunload,(function(){i.default.removeReady()})),Sfunction(){var tm(h().mark((function t(n){var o,a,c;return h().wrap((function(t){for(;;)switch(t.prevt.next){case 0:od(n),t.prev1,o.s();case 3:if((ao.n()).done){t.next9;break}if(!(0(ca.value).elements.length)){t.next7;break}return t.delegateYield(h().mark((function t(){var n,o;return h().wrap((function(t){for(;;)switch(t.prevt.next){case 0:if((nc.errorCheck(c.elements,xc.type))&&i.default.handleError(FIELD_ERROR: .concat(n)),ovoid 0,!T.isUsed){t.next9;break}return t.next6,A();case 6:ot.sent,t.next11;break;case 9:T.isUsed!0,oT.token;case 11:c.elements.forEach((function(t){if(!opt-token)return i.default.handleError(NO_TOKEN: No pt-token found);var nJSON.stringify({token:opt-token,origin:o.origin,styles:r,apiKey:e}),awindow.btoa(n);t.frame.tokenencodeURI(a)}));case 12:caseend:return t.stop()}}),t)}))(),t0,7);case 7:t.next3;break;case 9:t.next14;break;case 11:t.prev11,t.t1t.catch(1),o.e(t.t1);case 14:return t.prev14,o.f(),t.finish(14);case 17:caseend:return t.stop()}}),t,null,1,11,14,17)})));return function(e){return t.apply(this,arguments)}}(),jfunction(){var tm(h().mark((function t(){var e,n,o,u,f,s,l,p,d,y,v,marguments;return h().wrap((function(t){for(;;)switch(t.prevt.next){case 0:if(e0m.length&&void 0!m0?m0:b,i.default.removeInitialize(),n{account-number:eaccount-number,account-name:each-name,routing-number:erouting-number,account-type:eaccount-type},o{credit-card:ecredit-card,card-number:e.number,card-exp:e.exp,card-cvv:e.cvv,card-name:eaccount-name,billing-line1:eaddress-1,billing-line2:eaddress-2,billing-city:e.city,billing-state:e.state,billing-zip:e.zip},u{cash-name:ecash-name,cash-contact:ecash-contact},w.cardi.default.processElements(o,E,i.default.fieldTypes,credit-card),w.achi.default.processElements(n,E,i.default.achFieldTypes,ach),w.cashi.default.processElements(u,E,i.default.cashFieldTypes),x.cardw.card.reduce(i.default.findTransactingElement,!1),x.achw.ach.reduce(i.default.findAccountNumber,!1),x.cashw.cash.reduce(i.default.findField(cash-name),!1),fi.default.handleHostedFieldMessage(i.default.relayTypeMessage,c.relayHandler()),s{account-number:w.ach,card-number:w.card,cash-name:w.cash},li.default.handleHostedFieldMessage(i.default.hostedReadyTypeMessage,c.setupHandler(r,s)),pi.default.handleHostedFieldMessage(i.default.siblingTypeMessage,c.siblingHandler(w)),di.default.handleHostedFieldMessage(i.default.stateTypeMessage,c.stateUpdater(w)),yi.default.handleHostedFieldMessage(i.default.socketErrorTypeMessage,c.hostedErrorHandler),0!w.ach.length||0!w.card.length||0!w.cash.length){t.next19;break}return t.abrupt(return,i.default.handleError(NO_FIELDS: There are no PayTheory fields));case 19:return v{type:card,elements:w.card,errorCheck:a.findCardError},{type:ach,elements:w.ach,errorCheck:a.findAchError},{type:cash,elements:w.cash,errorCheck:a.findCashError},t.next22,S(v);case 22:return t.abrupt(return,(function(){f(),l(),p(),d(),y()}));case 23:caseend:return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),Rfunction(t,e){var r!1;returncard,cash,ach.forEach((function(n){if(!1i.default.isHidden(xn)&&g.includes(n)){r!0;var oxn;i.default.setTransactingElement(o),o.resetToken_,i.default.postMessageToHostedField(i.default.hostedFieldMapo.id,{type:t,data:e})}})),!!r||(i.default.handleError(NOT_VALID: Fields displayed are not valid.),i.default.removeInitialize(),!1)},Cfunction(t,e,r,n,i,c){return!!a.isvalidTransactParams(t,e,n)&&!!a.isValidAmount(t)&&!!a.isValidPayorInfo(e)&&!!a.isValidPayorDetails(e,r.payorId)&&!!a.isValidFeeMode(i||o)&&!!a.isValidInvoiceAndRecurringId(r)&&!!a.isValidFeeAmount(r.fee)&&R(pt-static:payment-detail,{amount:t,payorInfo:e,payTheoryData:r,metadata:n,fee_mode:i||o,confirmation:c})},Pi.default.generateInitialization(C,T.token.challengeOptions),Ifunction(t,e,r){console.warn(initTransaction is deprecated. Please use transact instead.),P({amount:t,payorInfo:e,metadata:n,confirmation:r})},Mfunction(t,e,r){return!!a.isValidTokenizeParams(t,r)&&!!a.isValidPayorInfo(t)&&!!a.isValidPayorDetails(t,e)&&R(pt-static:tokenize-detail,{payorInfo:t,metadata:r,payorId:e})},ki.default.generateTokenization(M,T.token.challengeOptions),Nfunction(){var ti.default.getTransactingElement();t&&i.default.postMessageToHostedField(i.default.hostedFieldMapt,{type:pt-static:confirm,capture:!0})},Ffunction(){var tm(h().mark((function t(){var e;return h().wrap((function(t){for(;;)switch(t.prevt.next){case 0:if(!(ei.default.getTransactingElement())){t.next5;break}return i.default.postMessageToHostedField(i.default.hostedFieldMape,{type:pt-static:cancel}),t.next5,_();case 5:i.default.removeInitialize(),i.default.removeTransactingElement();case 7:caseend:return t.stop()}}),t)})));return function(){return t.apply(this,arguments)}}(),Lfunction(){return!!isNaN(parseInt(i.default.getReady()))||1e4Math.round(Date.now())-parseInt(i.default.getReady())},Dfunction(t){return i.default.handleMessage(i.default.readyTypeMessage,(function(e){pay-theory:readye.type&&!O&&L()&&(i.default.setReady(Math.round(Date.now())),Oe.ready,t(e.ready))}))},Bfunction(t){return i.default.handleMessage(a.validTypeMessage(w),(function(e){var re.type.split(:)1,n!1;if(void 0!vr){vre.valid;var oa.hasValidCard(v),ia.hasValidAccount(v);n{isValid:o,name:card},{isValid:a.hasValidCash(v),name:cash},{isValid:i,name:ach}.reduce((function(t,e){return e.isValid&&t.push(e.name),t}),).join(-),g!n&&t(gn)}}))},Ufunction(t){return i.default.handleHostedFieldMessage(i.default.stateTypeMessage,(function(e){var rl({},e.state);delete r.element,Ee.elementr,t(E)}))},zfunction(t){return i.default.handleHostedFieldMessage(i.default.cashCompleteTypeMessage,(function(e){navigator.geolocation.getCurrentPosition((function(r){var nr.coords,oe.barcode;o.mapUrlhttps://map.payithere.com/biller/4b8033458847fec15b9c840c5b574584/?lat.concat(n.latitude,&lng).concat(n.longitude),t(o),i.default.removeAll()}),(function(){var re.barcode;t(r),i.default.removeAll(!0)}),{timeout:5e3,maximumAge:0})}))},t.abrupt(return,i.default.generateReturn(j,I,P,k,N,F,D,B,z,U));case 45:caseend:return t.stop()}}),t)})));return function(e,r){return t.apply(this,arguments)}}();e.defaultb},7244:function(t,e,r){use strict;r(2526),r(1817),r(2165),r(6992),r(8783),r(3948),r(4129),r(5003),Object.defineProperty(e,__esModule,{value:!0}),e.validatee.validTypeMessagee.isvalidTransactParamse.isValidTokenizeParamse.isValidPayorInfoe.isValidPayorDetailse.isValidInvoiceAndRecurringIde.isValidFeeModee.isValidFeeAmounte.isValidAmounte.hasValidCashe.hasValidCarde.hasValidAccounte.findCombinedCardErrore.findCashErrore.findCardNumberErrore.findCardErrore.findAchErrore.checkCreateParamsvoid 0,r(4916),r(3123),r(6699),r(2023),r(1539),r(4747),r(7941),r(9600),r(2222),r(1249),r(7852);var n,o(nr(6590))&&n.__esModule?n:{default:n},ifunction(t,e){if(t&&t.__esModule)return t;if(nullt||object!c(t)&&function!typeof t)return{default:t};var ra(e);if(r&&r.has(t))return r.get(t);var n{},oObject.defineProperty&&Object.getOwnPropertyDescriptor;for(var i in t)if(default!i&&Object.prototype.hasOwnProperty.call(t,i)){var uo?Object.getOwnPropertyDescriptor(t,i):null;u&&(u.get||u.set)?Object.defineProperty(n,i,u):niti}return n.defaultt,r&&r.set(t,n),n}(r(8870));function a(t){if(function!typeof WeakMap)return null;var enew WeakMap,rnew WeakMap;return(afunction(t){return t?r:e})(t)}function c(t){return(cfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}var ufunction(t,e){return c(t)e&&t};e.validateu;var fpaytheory,paytheorylab,paytheorystudy;e.checkCreateParamsfunction(t,e,r,n,i,a,c){(function(t,e){var re?2:1,ne?4:3;if(string!typeof t)throw Error(Api key should be a string);if(t.split(-).length!n)throw Error(Api key should be a string formatted in .concat(n, sections));if(!t.split(-)r.includes(paytheory))throw Error(Api key has invalid stage .concat(t.split(-)r))})(t,c),function(t){u(t,string)&&o.default.INTERCHANGE,o.default.SERVICE_FEE.includes(t)||console.error(Fee Mode should be either interchange or service_fee which are also available as constants at window.paytheory.INTERCHANGE and window.paytheory.SERVICE_FEE)}(e),function(t){if(!u(t,object))throw Error(Metadata should be a JSON Object)}(r),function(t){if(!u(t,object))throw Error(Styles should be a JSON Object. An example of the object is at https://github.com/pay-theory/payment-components)}(n),function(t){if(!u(t,string))throw Error(Environment not found in api key)}(i),function(t){if(!f.includes(t))throw Error(Stage variable not found in api key)}(a)},e.hasValidCardfunction(t){return function(t){return tcard-number&&tcard-cvv&&tcard-exp&&tbilling-zip}(t)},e.hasValidAccountfunction(t){return taccount-number&&taccount-type&&taccount-name&&trouting-number},e.hasValidCashfunction(t){return tcash-name&&tcash-contact};var sfunction(t){var e!1;return!1t.reduce(o.default.findExp,!1)&&(emissing credit card expiration field required for payments),!1t.reduce(o.default.findCVV,!1)&&(emissing credit card CVV field required for payments),!1t.reduce(o.default.findZip,!1)&&(emissing billing zip field required for payments),document.getElementById(pay-theory-credit-card)&&(ecredit card element is not allowed when using credit card number),e};e.findCardNumberErrors;var lfunction(t){var e!1;return t.reduce(o.default.findExp,!1)&&(eexpiration is not allowed when using combined credit card),t.reduce(o.default.findCVV,!1)&&(ecvv is not allowed when using combined credit card),!1t.reduce(o.default.findZip,!1)&&(emissing billing zip field required for payments),document.getElementById(pay-theory-credit-card-number)&&(ecredit card number is not allowed when using combined credit card),e};e.findCombinedCardErrorl;var p{check:o.default.findAccountName,error:missing ACH account name field required for payments},{check:o.default.findAccountNumber,error:missing ACH account number field required for payments},{check:o.default.findAccountType,error:missing ACH account type field required for payments},{check:o.default.findBankCode,error:missing ACH routing number field required for payments};e.findAchErrorfunction(t){return 0!t.length&&(p.forEach((function(e){if(!1t.reduce(e.check,!1))return e.error})),!1)},e.findCardErrorfunction(t,e){var r!1;return 0t.length||(r!1e?missing credit card entry field required for payments:pay-theory-credit-card-number-tag-framee.id?s(t):l(t)),r},e.findCashErrorfunction(t){var e!1;return 0t.length||(!1t.reduce(o.default.findField(cash-name),!1)&&(emissing Cash name field required for payments),!1t.reduce(o.default.findField(cash-contact),!1)&&(emissing Cash Contact info field required for payments)),e},e.isValidPayorInfofunction(t){if(!u(t,object))return i.handleError(INVALID_PARAM: payor_info is not an object),!1;if(!0t.same_as_billing)for(var e,rsame_as_billing,email,phone,n0,oObject.keys(t);no.length;n++)if(eon,!r.includes(e))return i.handleError(INVALID_PARAM: if payor_info is same_as_billing, only the following keys are allowed: .concat(r.join(, ))),!1;return!0},e.validTypeMessagefunction(t){return function(e){if(stringtypeof e.type){var re.type.split(:)1,n;return t.card.forEach((function(t){credit-cardt.type?nn.concat(o.default.combinedCardTypes):n.push(t.type)})),n(nn.concat(t.ach.map((function(t){return t.type})))).concat(t.cash.map((function(t){return t.type}))),e.type.endsWith(:valid)&&n.includes(.concat(r))}return!1}},e.isvalidTransactParamsfunction(t,e,r){if(!u(t,number)||!u(r,object)||!u(e,object)){var n.concat(u(t,number)?:amount ).concat(u(r,object)?:metadata ).concat(u(e,object)?:payorInfo );return i.handleError(INVALID_PARAM: Some required fields are missing or invalid: +n),!1}return!0},e.isValidTokenizeParamsfunction(t,e){if(!u(e,object)||!u(t,object)){var r.concat(u(e,object)?:metadata ).concat(u(t,object)?:payorInfo );return i.handleError(INVALID_PARAM: Some required fields are missing or invalid: +r),!1}return!0},e.isValidAmountfunction(t){return!!u(t,number)||(i.handleError(INVALID_PARAM: amount must be a positive integer),!1)},e.isValidPayorDetailsfunction(t,e){var rObject.keys(t);return e&&0r.length?(i.handleError(INVALID_PARAM: Unable to process when both payorId and payorInfo are provided),!1):!e||u(e,string)||(i.handleError(INVALID_PARAM: payorId must be a string),!1)},e.isValidInvoiceAndRecurringIdfunction(t){var et.invoiceId,rt.recurringId;return e&&!u(e,string)?(i.handleError(INVALID_PARAM: invoiceId must be a string),!1):r&&!u(r,string)?(i.handleError(INVALID_PARAM: recurringId must be a string),!1):!(e&&r&&(i.handleError(INVALID_PARAM: invoiceId and recurringId cannot both be present),1))},e.isValidFeeModefunction(t){return!!o.default.INTERCHANGE,o.default.SERVICE_FEE.includes(t)||(i.handleError(INVALID_PARAM: feeMode must be either INTERCHANGE or SERVICE_FEE),!1)},e.isValidFeeAmountfunction(t){return!t&&number!typeof t||u(t,number)||(i.handleError(INVALID_PARAM: fee must be a positive integer),!1)}},8214:function(t,e,r){use strict;var nvoid 0;function o(t){return(ofunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(t)}Object.defineProperty(e,__esModule,{value:!0}),e.DOMExceptionvoid 0,e.Headersv,e.RequestT,e.ResponseI,e.fetchN,r(7852),r(1539),r(9714),r(5837),r(2165),r(6992),r(8783),r(3948),r(2526),r(1817),r(8264),r(4916),r(7601),r(1249),r(4747),r(6210),r(8674),r(2472),r(2990),r(8927),r(3105),r(5035),r(4345),r(7174),r(2846),r(4731),r(7209),r(6319),r(8867),r(7789),r(3739),r(9368),r(4483),r(2056),r(3462),r(678),r(7462),r(3824),r(5021),r(2974),r(5016),r(9600),r(7042),r(1637),r(5306),r(2222),r(3123),r(3210),r(8309),String.prototype.endsWith||(String.prototype.endsWithfunction(t,e){var rthis.toString();return function(t,e){returnnumber!typeof e||!isFinite(e)||Math.floor(e)!e||e>t.length}(r,e)&&(er.length),e-t.length,function(t,e){return-1!t&&te}(r.indexOf(t,e),e)});var iundefined!typeof globalThis&&globalThis||void 0!window.self&&window.self||void 0!i&&i,aURLSearchParamsin i,cSymbolin i&&iteratorin Symbol,uFileReaderin i&&Blobin i&&function(){try{return new Blob}catch(t){return!1}}(),fFormDatain i,sArrayBufferin i;if(s)var lobject Int8Array,object Uint8Array,object Uint8ClampedArray,object Int16Array,object Uint16Array,object Int32Array,object Uint32Array,object Float32Array,object Float64Array,pArrayBuffer.isView||function(t){return t&&-1l.indexOf(Object.prototype.toString.call(t))};function d(t){if(string!typeof t&&(t+),/^a-z0-9\-#$%&*+.^_`|~!/i.test(t)||t)throw new TypeError(Invalid character in header field name: +t+);return t.toLowerCase()}function y(t){returnstring!typeof t&&(t+),t}function h(t){var e{next:function(){var et.shift();return{done:void 0e,value:e}}};return c&&(eSymbol.iteratorfunction(){return e}),e}function v(t){this.map{},t instanceof v?t.forEach((function(t,e){this.append(e,t)}),this):Array.isArray(t)?t.forEach((function(t){this.append(t0,t1)}),this):t&&Object.getOwnPropertyNames(t).forEach((function(e){this.append(e,te)}),this)}function m(t){return t.bodyUsed?Promise.reject(new TypeError(Already read)):void(t.bodyUsed!0)}function b(t){return new Promise((function(e,r){t.onloadfunction(){e(t.result)},t.onerrorfunction(){r(t.error)}}))}function g(t){var enew FileReader,rb(e);return e.readAsArrayBuffer(t),r}function w(t){if(t.slice)return t.slice(0);var enew Uint8Array(t.byteLength);return e.set(new Uint8Array(t)),e.buffer}v.prototype.appendfunction(t,e){td(t),ey(e);var rthis.mapt;this.maptr?r+, +e:e},v.prototype.deletefunction(t){delete this.mapd(t)},v.prototype.getfunction(t){return td(t),this.has(t)?this.mapt:null},v.prototype.hasfunction(t){return this.map.hasOwnProperty(d(t))},v.prototype.setfunction(t,e){this.mapd(t)y(e)},v.prototype.forEachfunction(t,e){for(var r in this.map)this.map.hasOwnProperty(r)&&t.call(e,this.mapr,r,this)},v.prototype.keysfunction(){var t;return this.forEach((function(e,r){t.push(r)})),h(t)},v.prototype.valuesfunction(){var t;return this.forEach((function(e){t.push(e)})),h(t)},v.prototype.entriesfunction(){var t;return this.forEach((function(e,r){t.push(r,e)})),h(t)},c&&(v.prototypeSymbol.iteratorv.prototype.entries);var Efunction(t,e){(function(t,e){u&&Blob.prototype.isPrototypeOf(e)&&(t._bodyBlobe)})(t,e),function(t,e){f&&FormData.prototype.isPrototypeOf(e)&&(t._bodyFormDatae)}(t,e),function(t,e){s&&u&&function(t){return t&&DataView.prototype.isPrototypeOf(t)}(e)?(n._bodyArrayBufferw(e.buffer),n._bodyInitnew Blob(n._bodyArrayBuffer)):s&&(ArrayBuffer.prototype.isPrototypeOf(e)||p(e))&&(n._bodyArrayBufferw(e))}(0,e),t._bodyTexte?stringtypeof e?e:a&&URLSearchParams.prototype.isPrototypeOf(e)?e.toString():eObject.prototype.toString.call(e):};function x(){return this.bodyUsed!1,this._initBodyfunction(t){this.bodyUsedthis.bodyUsed,this._bodyInitt,E(this,t),this.headers.get(content-type)||function(t,e){stringtypeof e?t.headers.set(content-type,text/plain;charsetUTF-8):t._bodyBlob&&t._bodyBlob.type?t.headers.set(content-type,t._bodyBlob.type):a&&URLSearchParams.prototype.isPrototypeOf(e)&&t.headers.set(content-type,application/x-www-form-urlencoded;charsetUTF-8)}(this,t)},u&&(this.blobfunction(){var tm(this);if(t)return t;if(this._bodyBlob)return Promise.resolve(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(new Blob(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error(could not read FormData body as blob);return Promise.resolve(new Blob(this._bodyText))},this.arrayBufferfunction(){return this._bodyArrayBuffer?m(this)||(ArrayBuffer.isView(this._bodyArrayBuffer)?Promise.resolve(this._bodyArrayBuffer.buffer.slice(this._bodyArrayBuffer.byteOffset,this._bodyArrayBuffer.byteOffset+this._bodyArrayBuffer.byteLength)):Promise.resolve(this._bodyArrayBuffer)):this.blob().then(g)}),this.textfunction(){var tm(this);if(t)return t;if(this._bodyBlob)return function(t){var enew FileReader,rb(e);return e.readAsText(t),r}(this._bodyBlob);if(this._bodyArrayBuffer)return Promise.resolve(function(t){for(var enew Uint8Array(t),rArray(e.length),n0;ne.length;n++)rnString.fromCharCode(en);return r.join()}(this._bodyArrayBuffer));if(this._bodyFormData)throw new Error(could not read FormData body as text);return Promise.resolve(this._bodyText)},f&&(this.formDatafunction(){return this.text().then(_)}),this.jsonfunction(){return this.text().then(JSON.parse)},this}var ODELETE,GET,HEAD,OPTIONS,POST,PUT,Afunction(t,e){return t.headers?void 0:new v(e.headers)};function T(t,e){if(!(this instanceof T))throw new TypeError(Please use the new operator, this DOM object constructor cannot be called as a function.);var r(ee||{}).body;(function(t,e,r){r instanceof T?function(t,e,r){if(r.bodyUsed)throw new TypeError(Already read);t.urlr.url,t.credentialsr.credentials,t.headersA(t,e),t.methodr.method,t.moder.mode,t.signalr.signal,body||nullr._bodyInit||(bodyr._bodyInit,r.bodyUsed!0)}(t,e,r):t.urlr+})(this,e,t),this.credentialsfunction(t,e){return e.credentials||t.credentials||same-origin}(this,e),this.headersA(e,t),this.methodfunction(t,e){return function(t){var et.toUpperCase();return-1O.indexOf(e)?e:t}(e.method||t.method||GET)}(this,e),this.modefunction(t,e){return e.mode||t.mode||null}(this,e),this.signalfunction(t,e){return e.signal||t.signal}(this,e),this.referrernull,function(t,e){if((GETt.method||HEADt.method)&&e)throw new TypeError(Body not allowed for GET or HEAD requests)}(this,r),this._initBody(r),function(t){(GETt.method||HEADt.method)&&function(t,e){(no-storee.cache||no-cachee.cache)&&(t.urlfunction(t){var e/(?&)_^&*/;return e.test(t.url)?t.url.replace(e,$1_+(new Date).getTime()):.concat(t.url).concat((/\?/.test(t.url)?&:?)+_+(new Date).getTime())}(t))}(t,options)}(this)}function _(t){var enew FormData;return t.trim().split(&).forEach((function(t){if(t){var rt.split(),nr.shift().replace(/\+/g, ),or.join().replace(/\+/g, );e.append(decodeURIComponent(n),decodeURIComponent(o))}})),e}function S(t){var enew v;return t.replace(/\r?\n\t +/g, ).split(\r).map((function(t){return 0t.indexOf(\n)?t.substr(1,t.length):t})).forEach((function(t){var rt.split(:),nr.shift().trim();if(n){var or.join(:).trim();e.append(n,o)}})),e}T.prototype.clonefunction(){return new T(this,{body:this._bodyInit})},x.call(T.prototype);var jfunction(t){return void 0t.status?200:t.status},Rfunction(t){return void 0t.statusText?:+t.statusText},Cfunction(t){return 200t.status&&300>t.status},Pfunction(t){return t.url||};function I(t){var e1arguments.length&&void 0!arguments1?arguments1:{};if(this instanceof I)return this.typedefault,this.statusj(e),this.okC(this),this.statusTextR(e),this.headersnew v(e.headers),this.urlP(e),void this._initBody(t);throw new TypeError(Please use the new operator, this DOM object constructor cannot be called as a function.)}x.call(I.prototype),I.prototype.clonefunction(){return new I(this._bodyInit,{status:this.status,statusText:this.statusText,headers:new v(this.headers),url:this.url})},I.errorfunction(){var tnew I(null,{status:0,statusText:});return t.typeerror,t};var M301,302,303,307,308;I.redirectfunction(t,e){if(-1M.indexOf(e))throw new RangeError(Invalid status code);return new I(null,{status:e,headers:{location:t}})};var ki.DOMException;e.DOMExceptionk;try{new k}catch(t){e.DOMExceptionkfunction(t,e){this.messaget,this.namee;var rError(t);this.stackr.stack},k.prototypeObject.create(Error.prototype),k.prototype.constructork}function N(t,e){return new Promise((function(r,n){function a(){f.abort()}var cnew T(t,e);!function(t,e){t.signal&&t.signal.aborted&&e(new k(Aborted,AbortError))}(c,n);var fnew XMLHttpRequest;f.onloadfunction(t,e){return function(){var r{status:t.status,statusText:t.statusText,headers:S(t.getAllResponseHeaders()||)};r.urlresponseURLin t?t.responseURL:r.headers.get(X-Request-URL);var nresponsein t?t.response:t.responseText;setTimeout((function(){e(new I(n,r))}),0)}}(f,r),f.onerrorfunction(t){return function(){setTimeout((function(){t(new TypeError(Network request failed))}),0)}}(n),f.ontimeoutfunction(t){return function(){setTimeout((function(){t(new TypeError(Network request failed))}),0)}}(n),f.onabortfunction(t){return function(){setTimeout((function(){t(new k(Aborted,AbortError))}),0)}}(n),f.open(c.method,function(t){try{returnt&&i.location.href?i.location.href:t}catch(e){return t}}(c.url),!0),f.withCredentialsfunction(t){returnincludet.credentials||omit!t.credentials&&void 0}(c),f.responseTypefunction(t,e){if(responseTypein void 0){if(u)returnblob;if(s&&t.headers.get(Content-Type)&&-1!t.headers.get(Content-Type).indexOf(application/octet-stream))returnarraybuffer}}(),function(t,e,r){!t||object!o(t.headers)||t.headers instanceof v?e.headers.forEach((function(t,e){r.setRequestHeader(e,t)})):Object.getOwnPropertyNames(t.headers).forEach((function(e){r.setRequestHeader(e,y(t.headerse))}))}(e,c,f),c.signal&&(c.signal.addEventListener(abort,a),f.onreadystatechangefunction(t,e,r){return function(){4r&&t.signal.removeEventListener(abort,e)}}(c,a,f.readyState)),f.send(void 0c._bodyInit?null:c._bodyInit)}))}N.polyfill!0,i.fetch||(i.fetchN,i.Headersv,i.RequestT,i.ResponseI)},9662:function(t,e,r){var nr(614),or(6330),iTypeError;t.exportsfunction(t){if(n(t))return t;throw i(o(t)+ is not a function)}},9483:function(t,e,r){var nr(4411),or(6330),iTypeError;t.exportsfunction(t){if(n(t))return t;throw i(o(t)+ is not a constructor)}},6077:function(t,e,r){var nr(614),oString,iTypeError;t.exportsfunction(t){if(objecttypeof t||n(t))return t;throw i(Cant set +o(t)+ as a prototype)}},1223:function(t,e,r){var nr(5112),or(30),ir(3070).f,an(unscopables),cArray.prototype;nullca&&i(c,a,{configurable:!0,value:o(null)}),t.exportsfunction(t){cat!0}},1530:function(t,e,r){use strict;var nr(8710).charAt;t.exportsfunction(t,e,r){return e+(r?n(t,e).length:1)}},5787:function(t,e,r){var nr(7976),oTypeError;t.exportsfunction(t,e){if(n(e,t))return t;throw o(Incorrect invocation)}},9670:function(t,e,r){var nr(111),oString,iTypeError;t.exportsfunction(t){if(n(t))return t;throw i(o(t)+ is not an object)}},4019:function(t){t.exportsundefined!typeof ArrayBuffer&&undefined!typeof DataView},7556:function(t,e,r){var nr(7293);t.exportsn((function(){if(functiontypeof ArrayBuffer){var tnew ArrayBuffer(8);Object.isExtensible(t)&&Object.defineProperty(t,a,{value:8})}}))},260:function(t,e,r){use strict;var n,o,i,ar(4019),cr(9781),ur(7854),fr(614),sr(111),lr(2597),pr(648),dr(6330),yr(8880),hr(8052),vr(3070).f,mr(7976),br(9518),gr(7674),wr(5112),Er(9711),xr(9909),Ox.enforce,Ax.get,Tu.Int8Array,_T&&T.prototype,Su.Uint8ClampedArray,jS&&S.prototype,RT&&b(T),C_&&b(_),PObject.prototype,Iu.TypeError,Mw(toStringTag),kE(TYPED_ARRAY_TAG),Na&&!!g&&Opera!p(u.opera),F!1,L{Int8Array:1,Uint8Array:1,Uint8ClampedArray:1,Int16Array:2,Uint16Array:2,Int32Array:4,Uint32Array:4,Float32Array:4,Float64Array:8},D{BigInt64Array:8,BigUint64Array:8},Bfunction(t){var eb(t);if(s(e)){var rA(e);return r&&l(r,TypedArrayConstructor)?r.TypedArrayConstructor:B(e)}},Ufunction(t){if(!s(t))return!1;var ep(t);return l(L,e)||l(D,e)};for(n in L)(i(oun)&&o.prototype)?O(i).TypedArrayConstructoro:N!1;for(n in D)(i(oun)&&o.prototype)&&(O(i).TypedArrayConstructoro);if((!N||!f(R)||RFunction.prototype)&&(Rfunction(){throw I(Incorrect invocation)},N))for(n in L)un&&g(un,R);if((!N||!C||CP)&&(CR.prototype,N))for(n in L)un&&g(un.prototype,C);if(N&&b(j)!C&&g(j,C),c&&!l(C,M))for(n in F!0,v(C,M,{get:function(){return s(this)?thisk:void 0}}),L)un&&y(un,k,n);t.exports{NATIVE_ARRAY_BUFFER_VIEWS:N,TYPED_ARRAY_TAG:F&&k,aTypedArray:function(t){if(U(t))return t;throw I(Target is not a typed array)},aTypedArrayConstructor:function(t){if(f(t)&&(!g||m(R,t)))return t;throw I(d(t)+ is not a typed array constructor)},exportTypedArrayMethod:function(t,e,r,n){if(c){if(r)for(var o in L){var iuo;if(i&&l(i.prototype,t))try{delete i.prototypet}catch(r){try{i.prototypete}catch(t){}}}Ct&&!r||h(C,t,r?e:N&&_t||e,n)}},exportTypedArrayStaticMethod:function(t,e,r){var n,o;if(c){if(g){if(r)for(n in L)if((oun)&&l(o,t))try{delete ot}catch(t){}if(Rt&&!r)return;try{return h(R,t,r?e:N&&Rt||e)}catch(t){}}for(n in L)!(oun)||ot&&!r||h(o,t,e)}},getTypedArrayConstructor:B,isView:function(t){if(!s(t))return!1;var ep(t);returnDataViewe||l(L,e)||l(D,e)},isTypedArray:U,TypedArray:R,TypedArrayPrototype:C}},3331:function(t,e,r){use strict;var nr(7854),or(1702),ir(9781),ar(4019),cr(6530),ur(8880),fr(9190),sr(7293),lr(5787),pr(9303),dr(7466),yr(7067),hr(1179),vr(9518),mr(7674),br(8006).f,gr(3070).f,wr(1285),Er(1589),xr(8003),Or(9909),Ac.PROPER,Tc.CONFIGURABLE,_O.get,SO.set,jArrayBuffer,RWrong index,Cn.ArrayBuffer,PC,IP&&P.prototype,Mn.DataView,kM&&M.prototype,NObject.prototype,Fn.Array,Ln.RangeError,Do(w),Bo(.reverse),Uh.pack,zh.unpack,Hfunction(t){return255&t},Vfunction(t){return255&t,t>>8&255},Gfunction(t){return255&t,t>>8&255,t>>16&255,t>>24&255},Wfunction(t){return t324|t216|t18|t0},Yfunction(t){return U(t,23,4)},qfunction(t){return U(t,52,8)},$function(t,e){g(t.prototype,e,{get:function(){return _(this)e}})},Kfunction(t,e,r,n){var oy(r),i_(t);if(o+e>i.byteLength)throw L(R);var a_(i.buffer).bytes,co+i.byteOffset,uE(a,c,c+e);return n?u:B(u)},Jfunction(t,e,r,n,o,i){var ay(r),c_(t);if(a+e>c.byteLength)throw L(R);for(var u_(c.buffer).bytes,fa+c.byteOffset,sn(+o),l0;le;l++)uf+lsi?l:e-l-1};if(a){var ZA&&C.name!j;if(s((function(){C(1)}))&&s((function(){new C(-1)}))&&!s((function(){return new C,new C(1.5),new C(NaN),Z&&!T})))Z&&T&&u(C,name,j);else{(Pfunction(t){return l(this,I),new C(y(t))}).prototypeI;for(var X,Qb(C),tt0;Q.length>tt;)(XQtt++)in P||u(P,X,CX);I.constructorP}m&&v(k)!N&&m(k,N);var etnew M(new P(2)),rto(k.setInt8);et.setInt8(0,2147483648),et.setInt8(1,2147483649),!et.getInt8(0)&&et.getInt8(1)||f(k,{setInt8:function(t,e){rt(this,t,e24>>24)},setUint8:function(t,e){rt(this,t,e24>>24)}},{unsafe:!0})}else I(Pfunction(t){l(this,I);var ey(t);S(this,{bytes:D(F(e),0),byteLength:e}),i||(this.byteLengthe)}).prototype,k(Mfunction(t,e,r){l(this,k),l(t,I);var n_(t).byteLength,op(e);if(o0||o>n)throw L(Wrong offset);if(o+(rvoid 0r?n-o:d(r))>n)throw L(Wrong length);S(this,{buffer:t,byteLength:r,byteOffset:o}),i||(this.buffert,this.byteLengthr,this.byteOffseto)}).prototype,i&&($(P,byteLength),$(M,buffer),$(M,byteLength),$(M,byteOffset)),f(k,{getInt8:function(t){return K(this,1,t)024>>24},getUint8:function(t){return K(this,1,t)0},getInt16:function(t){var eK(this,2,t,arguments.length>1?arguments1:void 0);return(e18|e0)16>>16},getUint16:function(t){var eK(this,2,t,arguments.length>1?arguments1:void 0);return e18|e0},getInt32:function(t){return W(K(this,4,t,arguments.length>1?arguments1:void 0))},getUint32:function(t){return W(K(this,4,t,arguments.length>1?arguments1:void 0))>>>0},getFloat32:function(t){return z(K(this,4,t,arguments.length>1?arguments1:void 0),23)},getFloat64:function(t){return z(K(this,8,t,arguments.length>1?arguments1:void 0),52)},setInt8:function(t,e){J(this,1,t,H,e)},setUint8:function(t,e){J(this,1,t,H,e)},setInt16:function(t,e){J(this,2,t,V,e,arguments.length>2?arguments2:void 0)},setUint16:function(t,e){J(this,2,t,V,e,arguments.length>2?arguments2:void 0)},setInt32:function(t,e){J(this,4,t,G,e,arguments.length>2?arguments2:void 0)},setUint32:function(t,e){J(this,4,t,G,e,arguments.length>2?arguments2:void 0)},setFloat32:function(t,e){J(this,4,t,Y,e,arguments.length>2?arguments2:void 0)},setFloat64:function(t,e){J(this,8,t,q,e,arguments.length>2?arguments2:void 0)}});x(P,j),x(M,DataView),t.exports{ArrayBuffer:P,DataView:M}},1048:function(t,e,r){use strict;var nr(7908),or(1400),ir(6244),ar(5117),cMath.min;t.exports.copyWithin||function(t,e){var rn(this),ui(r),fo(t,u),so(e,u),larguments.length>2?arguments2:void 0,pc((void 0l?u:o(l,u))-s,u-f),d1;for(sf&&fs+p&&(d-1,s+p-1,f+p-1);p-- >0;)s in r?rfrs:a(r,f),f+d,s+d;return r}},1285:function(t,e,r){use strict;var nr(7908),or(1400),ir(6244);t.exportsfunction(t){for(var en(this),ri(e),aarguments.length,co(a>1?arguments1:void 0,r),ua>2?arguments2:void 0,fvoid 0u?r:o(u,r);f>c;)ec++t;return e}},8533:function(t,e,r){use strict;var nr(2092).forEach,or(9341)(forEach);t.exportso?.forEach:function(t){return n(this,t,arguments.length>1?arguments1:void 0)}},7745:function(t,e,r){var nr(6244);t.exportsfunction(t,e){for(var r0,on(e),inew t(o);o>r;)irer++;return i}},8457:function(t,e,r){use strict;var nr(9974),or(6916),ir(7908),ar(3411),cr(7659),ur(4411),fr(6244),sr(6135),lr(8554),pr(1246),dArray;t.exportsfunction(t){var ei(t),ru(this),yarguments.length,hy>1?arguments1:void 0,vvoid 0!h;v&&(hn(h,y>2?arguments2:void 0));var m,b,g,w,E,x,Op(e),A0;if(!O||thisd&&c(O))for(mf(e),br?new this(m):d(m);m>A;A++)xv?h(eA,A):eA,s(b,A,x);else for(E(wl(e,O)).next,br?new this:;!(go(E,w)).done;A++)xv?a(w,h,g.value,A,!0):g.value,s(b,A,x);return b.lengthA,b}},1318:function(t,e,r){var nr(5656),or(1400),ir(6244),afunction(t){return function(e,r,a){var c,un(e),fi(u),so(a,f);if(t&&r!r){for(;f>s;)if((cus++)!c)return!0}else for(;f>s;s++)if((t||s in u)&&usr)return t||s||0;return!t&&-1}};t.exports{includes:a(!0),indexOf:a(!1)}},2092:function(t,e,r){var nr(9974),or(1702),ir(8361),ar(7908),cr(6244),ur(5417),fo(.push),sfunction(t){var e1t,r2t,o3t,s4t,l6t,p7t,d5t||l;return function(y,h,v,m){for(var b,g,wa(y),Ei(w),xn(h,v),Oc(E),A0,Tm||u,_e?T(y,O):r||p?T(y,0):void 0;O>A;A++)if((d||A in E)&&(gx(bEA,A,w),t))if(e)_Ag;else if(g)switch(t){case 3:return!0;case 5:return b;case 6:return A;case 2:f(_,b)}else switch(t){case 4:return!1;case 7:f(_,b)}return l?-1:o||s?s:_}};t.exports{forEach:s(0),map:s(1),filter:s(2),some:s(3),every:s(4),find:s(5),findIndex:s(6),filterReject:s(7)}},6583:function(t,e,r){use strict;var nr(2104),or(5656),ir(9303),ar(6244),cr(9341),uMath.min,f.lastIndexOf,s!!f&&1/1.lastIndexOf(1,-0)0,lc(lastIndexOf),ps||!l;t.exportsp?function(t){if(s)return n(f,this,arguments)||0;var eo(this),ra(e),cr-1;for(arguments.length>1&&(cu(c,i(arguments1))),c0&&(cr+c);c>0;c--)if(c in e&&ect)return c||0;return-1}:f},1194:function(t,e,r){var nr(7293),or(5112),ir(7392),ao(species);t.exportsfunction(t){return i>51||!n((function(){var e;return(e.constructor{})afunction(){return{foo:1}},1!et(Boolean).foo}))}},9341:function(t,e,r){use strict;var nr(7293);t.exportsfunction(t,e){var rt;return!!r&&n((function(){r.call(null,e||function(){return 1},1)}))}},3671:function(t,e,r){var nr(9662),or(7908),ir(8361),ar(6244),cTypeError,ufunction(t){return function(e,r,u,f){n(r);var so(e),li(s),pa(s),dt?p-1:0,yt?-1:1;if(u2)for(;;){if(d in l){fld,d+y;break}if(d+y,t?d0:pd)throw c(Reduce of empty array with no initial value)}for(;t?d>0:p>d;d+y)d in l&&(fr(f,ld,d,s));return f}};t.exports{left:u(!1),right:u(!0)}},1589:function(t,e,r){var nr(1400),or(6244),ir(6135),aArray,cMath.max;t.exportsfunction(t,e,r){for(var uo(t),fn(e,u),sn(void 0r?u:r,u),la(c(s-f,0)),p0;fs;f++,p++)i(l,p,tf);return l.lengthp,l}},206:function(t,e,r){var nr(1702);t.exportsn(.slice)},4362:function(t,e,r){var nr(1589),oMath.floor,ifunction(t,e){var rt.length,uo(r/2);return r8?a(t,e):c(t,i(n(t,0,u),e),i(n(t,u),e),e)},afunction(t,e){for(var r,n,ot.length,i1;io;){for(ni,rti;n&&e(tn-1,r)>0;)tnt--n;n!i++&&(tnr)}return t},cfunction(t,e,r,n){for(var oe.length,ir.length,a0,c0;ao||ci;)ta+cao&&ci?n(ea,rc)0?ea++:rc++:ao?ea++:rc++;return t};t.exportsi},7475:function(t,e,r){var nr(3157),or(4411),ir(111),ar(5112)(species),cArray;t.exportsfunction(t){var e;return n(t)&&(et.constructor,(o(e)&&(ec||n(e.prototype))||i(e)&&null(eea))&&(evoid 0)),void 0e?c:e}},5417:function(t,e,r){var nr(7475);t.exportsfunction(t,e){return new(n(t))(0e?0:e)}},3411:function(t,e,r){var nr(9670),or(9212);t.exportsfunction(t,e,r,i){try{return i?e(n(r)0,r1):e(r)}catch(e){o(t,throw,e)}}},7072:function(t,e,r){var nr(5112)(iterator),o!1;try{var i0,a{next:function(){return{done:!!i++}},return:function(){o!0}};anfunction(){return this},Array.from(a,(function(){throw 2}))}catch(t){}t.exportsfunction(t,e){if(!e&&!o)return!1;var r!1;try{var i{};infunction(){return{next:function(){return{done:r!0}}}},t(i)}catch(t){}return r}},4326:function(t,e,r){var nr(1702),on({}.toString),in(.slice);t.exportsfunction(t){return i(o(t),8,-1)}},648:function(t,e,r){var nr(1694),or(614),ir(4326),ar(5112)(toStringTag),cObject,uArgumentsi(function(){return arguments}());t.exportsn?i:function(t){var e,r,n;return void 0t?Undefined:nullt?Null:stringtypeof(rfunction(t,e){try{return te}catch(t){}}(ec(t),a))?r:u?i(e):Object(ni(e))&&o(e.callee)?Arguments:n}},5631:function(t,e,r){use strict;var nr(3070).f,or(30),ir(9190),ar(9974),cr(5787),ur(408),fr(654),sr(6340),lr(9781),pr(2423).fastKey,dr(9909),yd.set,hd.getterFor;t.exports{getConstructor:function(t,e,r,f){var st((function(t,n){c(t,d),y(t,{type:e,index:o(null),first:void 0,last:void 0,size:0}),l||(t.size0),null!n&&u(n,tf,{that:t,AS_ENTRIES:r})})),ds.prototype,vh(e),mfunction(t,e,r){var n,o,iv(t),ab(t,e);return a?a.valuer:(i.lasta{index:op(e,!0),key:e,value:r,previous:ni.last,next:void 0,removed:!1},i.first||(i.firsta),n&&(n.nexta),l?i.size++:t.size++,F!o&&(i.indexoa)),t},bfunction(t,e){var r,nv(t),op(e);if(F!o)return n.indexo;for(rn.first;r;rr.next)if(r.keye)return r};return i(d,{clear:function(){for(var tv(this),et.index,rt.first;r;)r.removed!0,r.previous&&(r.previousr.previous.nextvoid 0),delete er.index,rr.next;t.firstt.lastvoid 0,l?t.size0:this.size0},delete:function(t){var ethis,rv(e),nb(e,t);if(n){var on.next,in.previous;delete r.indexn.index,n.removed!0,i&&(i.nexto),o&&(o.previousi),r.firstn&&(r.firsto),r.lastn&&(r.lasti),l?r.size--:e.size--}return!!n},forEach:function(t){for(var e,rv(this),na(t,arguments.length>1?arguments1:void 0);ee?e.next:r.first;)for(n(e.value,e.key,this);e&&e.removed;)ee.previous},has:function(t){return!!b(this,t)}}),i(d,r?{get:function(t){var eb(this,t);return e&&e.value},set:function(t,e){return m(this,0t?0:t,e)}}:{add:function(t){return m(this,t0t?0:t,t)}}),l&&n(d,size,{get:function(){return v(this).size}}),s},setStrong:function(t,e,r){var ne+ Iterator,oh(e),ih(n);f(t,e,(function(t,e){y(this,{type:n,target:t,state:o(t),kind:e,last:void 0})}),(function(){for(var ti(this),et.kind,rt.last;r&&r.removed;)rr.previous;return t.target&&(t.lastrr?r.next:t.state.first)?keyse?{value:r.key,done:!1}:valuese?{value:r.value,done:!1}:{value:r.key,r.value,done:!1}:(t.targetvoid 0,{value:void 0,done:!0})}),r?entries:values,!r,!0),s(e)}}},9320:function(t,e,r){use strict;var nr(1702),or(9190),ir(2423).getWeakData,ar(9670),cr(111),ur(5787),fr(408),sr(2092),lr(2597),pr(9909),dp.set,yp.getterFor,hs.find,vs.findIndex,mn(.splice),b0,gfunction(t){return t.frozen||(t.frozennew w)},wfunction(){this.entries},Efunction(t,e){return h(t.entries,(function(t){return t0e}))};w.prototype{get:function(t){var eE(this,t);if(e)return e1},has:function(t){return!!E(this,t)},set:function(t,e){var rE(this,t);r?r1e:this.entries.push(t,e)},delete:function(t){var ev(this.entries,(function(e){return e0t}));return~e&&m(this.entries,e,1),!!~e}},t.exports{getConstructor:function(t,e,r,n){var st((function(t,o){u(t,p),d(t,{type:e,id:b++,frozen:void 0}),null!o&&f(o,tn,{that:t,AS_ENTRIES:r})})),ps.prototype,hy(e),vfunction(t,e,r){var nh(t),oi(a(e),!0);return!0o?g(n).set(e,r):on.idr,t};return o(p,{delete:function(t){var eh(this);if(!c(t))return!1;var ri(t);return!0r?g(e).delete(t):r&&l(r,e.id)&&delete re.id},has:function(t){var eh(this);if(!c(t))return!1;var ri(t);return!0r?g(e).has(t):r&&l(r,e.id)}}),o(p,r?{get:function(t){var eh(this);if(c(t)){var ri(t);return!0r?g(e).get(t):r?re.id:void 0}},set:function(t,e){return v(this,t,e)}}:{add:function(t){return v(this,t,!0)}}),s}}},7710:function(t,e,r){use strict;var nr(2109),or(7854),ir(1702),ar(4705),cr(8052),ur(2423),fr(408),sr(5787),lr(614),pr(111),dr(7293),yr(7072),hr(8003),vr(9587);t.exportsfunction(t,e,r){var m-1!t.indexOf(Map),b-1!t.indexOf(Weak),gm?set:add,wot,Ew&&w.prototype,xw,O{},Afunction(t){var ei(Et);c(E,t,addt?function(t){return e(this,0t?0:t),this}:deletet?function(t){return!(b&&!p(t))&&e(this,0t?0:t)}:gett?function(t){return b&&!p(t)?void 0:e(this,0t?0:t)}:hast?function(t){return!(b&&!p(t))&&e(this,0t?0:t)}:function(t,r){return e(this,0t?0:t,r),this})};if(a(t,!l(w)||!(b||E.forEach&&!d((function(){(new w).entries().next()})))))xr.getConstructor(e,t,m,g),u.enable();else if(a(t,!0)){var Tnew x,_Tg(b?{}:-0,1)!T,Sd((function(){T.has(1)})),jy((function(t){new w(t)})),R!b&&d((function(){for(var tnew w,e5;e--;)tg(e,e);return!t.has(-0)}));j||((xe((function(t,e){s(t,E);var rv(new w,t,x);return null!e&&f(e,rg,{that:r,AS_ENTRIES:m}),r}))).prototypeE,E.constructorx),(S||R)&&(A(delete),A(has),m&&A(get)),(R||_)&&A(g),b&&E.clear&&delete E.clear}return Otx,n({global:!0,constructor:!0,forced:x!w},O),h(x,t),b||r.setStrong(x,t,m),x}},9920:function(t,e,r){var nr(2597),or(3887),ir(1236),ar(3070);t.exportsfunction(t,e,r){for(var co(e),ua.f,fi.f,s0;sc.length;s++){var lcs;n(t,l)||r&&n(r,l)||u(t,l,f(e,l))}}},4964:function(t,e,r){var nr(5112)(match);t.exportsfunction(t){var e/./;try{/./t(e)}catch(r){try{return en!1,/./t(e)}catch(t){}}return!1}},8544:function(t,e,r){var nr(7293);t.exports!n((function(){function t(){}return t.prototype.constructornull,Object.getPrototypeOf(new t)!t.prototype}))},4994:function(t,e,r){use strict;var nr(3383).IteratorPrototype,or(30),ir(9114),ar(8003),cr(7497),ufunction(){return this};t.exportsfunction(t,e,r,f){var se+ Iterator;return t.prototypeo(n,{next:i(+!f,r)}),a(t,s,!1,!0),csu,t}},8880:function(t,e,r){var nr(9781),or(3070),ir(9114);t.exportsn?function(t,e,r){return o.f(t,e,i(1,r))}:function(t,e,r){return ter,t}},9114:function(t){t.exportsfunction(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},6135:function(t,e,r){use strict;var nr(4948),or(3070),ir(9114);t.exportsfunction(t,e,r){var an(e);a in t?o.f(t,a,i(0,r)):tar}},8052:function(t,e,r){var nr(614),or(3070),ir(6339),ar(3072);t.exportsfunction(t,e,r,c){c||(c{});var uc.enumerable,fvoid 0!c.name?c.name:e;if(n(r)&&i(r,f,c),c.global)u?ter:a(e,r);else{try{c.unsafe?te&&(u!0):delete te}catch(t){}u?ter:o.f(t,e,{value:r,enumerable:!1,configurable:!c.nonConfigurable,writable:!c.nonWritable})}return t}},9190:function(t,e,r){var nr(8052);t.exportsfunction(t,e,r){for(var o in e)n(t,o,eo,r);return t}},3072:function(t,e,r){var nr(7854),oObject.defineProperty;t.exportsfunction(t,e){try{o(n,t,{value:e,configurable:!0,writable:!0})}catch(r){nte}return e}},654:function(t,e,r){use strict;var nr(2109),or(6916),ir(1913),ar(6530),cr(614),ur(4994),fr(9518),sr(7674),lr(8003),pr(8880),dr(8052),yr(5112),hr(7497),vr(3383),ma.PROPER,ba.CONFIGURABLE,gv.IteratorPrototype,wv.BUGGY_SAFARI_ITERATORS,Ey(iterator),xkeys,Ovalues,Aentries,Tfunction(){return this};t.exportsfunction(t,e,r,a,y,v,_){u(r,e,a);var S,j,R,Cfunction(t){if(ty&&N)return N;if(!w&&t in M)return Mt;switch(t){case x:case O:case A:return function(){return new r(this,t)}}return function(){return new r(this)}},Pe+ Iterator,I!1,Mt.prototype,kME||M@@iterator||y&&My,N!w&&k||C(y),FArraye&&M.entries||k;if(F&&(Sf(F.call(new t)))!Object.prototype&&S.next&&(i||f(S)g||(s?s(S,g):c(SE)||d(S,E,T)),l(S,P,!0,!0),i&&(hPT)),m&&yO&&k&&k.name!O&&(!i&&b?p(M,name,O):(I!0,Nfunction(){return o(k,this)})),y)if(j{values:C(O),keys:v?N:C(x),entries:C(A)},_)for(R in j)(w||I||!(R in M))&&d(M,R,jR);else n({target:e,proto:!0,forced:w||I},j);return i&&!_||MEN||d(M,E,N,{name:y}),heN,j}},7235:function(t,e,r){var nr(857),or(2597),ir(6061),ar(3070).f;t.exportsfunction(t){var en.Symbol||(n.Symbol{});o(e,t)||a(e,t,{value:i.f(t)})}},5117:function(t,e,r){use strict;var nr(6330),oTypeError;t.exportsfunction(t,e){if(!delete te)throw o(Cannot delete property +n(e)+ of +n(t))}},9781:function(t,e,r){var nr(7293);t.exports!n((function(){return 7!Object.defineProperty({},1,{get:function(){return 7}})1}))},317:function(t,e,r){var nr(7854),or(111),in.document,ao(i)&&o(i.createElement);t.exportsfunction(t){return a?i.createElement(t):{}}},7207:function(t){var eTypeError;t.exportsfunction(t){if(t>9007199254740991)throw e(Maximum allowed index exceeded);return t}},8324:function(t){t.exports{CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}},8509:function(t,e,r){var nr(317)(span).classList,on&&n.constructor&&n.constructor.prototype;t.exportsoObject.prototype?void 0:o},8886:function(t,e,r){var nr(8113).match(/firefox\/(\d+)/i);t.exports!!n&&+n1},7871:function(t){t.exportsobject!typeof Deno},256:function(t,e,r){var nr(8113);t.exports/MSIE|Trident/.test(n)},1528:function(t,e,r){var nr(8113),or(7854);t.exports/ipad|iphone|ipod/i.test(n)&&void 0!o.Pebble},6833:function(t,e,r){var nr(8113);t.exports/(?:ipad|iphone|ipod).*applewebkit/i.test(n)},5268:function(t,e,r){var nr(4326),or(7854);t.exportsprocessn(o.process)},1036:function(t,e,r){var nr(8113);t.exports/web0s(?!.*chrome)/i.test(n)},8113:function(t,e,r){var nr(5005);t.exportsn(navigator,userAgent)||},7392:function(t,e,r){var n,o,ir(7854),ar(8113),ci.process,ui.Deno,fc&&c.versions||u&&u.version,sf&&f.v8;s&&(o(ns.split(.))0>0&&n04?1:+(n0+n1)),!o&&a&&(!(na.match(/Edge\/(\d+)/))||n1>74)&&(na.match(/Chrome\/(\d+)/))&&(o+n1),t.exportso},8008:function(t,e,r){var nr(8113).match(/AppleWebKit\/(\d+)\./);t.exports!!n&&+n1},748:function(t){t.exportsconstructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf},2109:function(t,e,r){var nr(7854),or(1236).f,ir(8880),ar(8052),cr(3072),ur(9920),fr(4705);t.exportsfunction(t,e){var r,s,l,p,d,yt.target,ht.global,vt.stat;if(rh?n:v?ny||c(y,{}):(ny||{}).prototype)for(s in e){if(pes,lt.dontCallGetSet?(do(r,s))&&d.value:rs,!f(h?s:y+(v?.:#)+s,t.forced)&&void 0!l){if(typeof ptypeof l)continue;u(p,l)}(t.sham||l&&l.sham)&&i(p,sham,!0),a(r,s,p,t)}}},7293:function(t){t.exportsfunction(t){try{return!!t()}catch(t){return!0}}},7007:function(t,e,r){use strict;r(4916);var nr(1702),or(8052),ir(2261),ar(7293),cr(5112),ur(8880),fc(species),sRegExp.prototype;t.exportsfunction(t,e,r,l){var pc(t),d!a((function(){var e{};return epfunction(){return 7},7!t(e)})),yd&&!a((function(){var e!1,r/a/;returnsplitt&&((r{}).constructor{},r.constructorffunction(){return r},r.flags,rp/./p),r.execfunction(){return e!0,null},rp(),!e}));if(!d||!y||r){var hn(/./p),ve(p,t,(function(t,e,r,o,a){var cn(t),ue.exec;return ui||us.exec?d&&!a?{done:!0,value:h(e,r,o)}:{done:!0,value:c(r,e,o)}:{done:!1}}));o(String.prototype,t,v0),o(s,p,v1)}l&&u(sp,sham,!0)}},6677:function(t,e,r){var nr(7293);t.exports!n((function(){return Object.isExtensible(Object.preventExtensions({}))}))},2104:function(t,e,r){var nr(4374),oFunction.prototype,io.apply,ao.call;t.exportsobjecttypeof Reflect&&Reflect.apply||(n?a.bind(i):function(){return a.apply(i,arguments)})},9974:function(t,e,r){var nr(1702),or(9662),ir(4374),an(n.bind);t.exportsfunction(t,e){return o(t),void 0e?t:i?a(t,e):function(){return t.apply(e,arguments)}}},4374:function(t,e,r){var nr(7293);t.exports!n((function(){var tfunction(){}.bind();returnfunction!typeof t||t.hasOwnProperty(prototype)}))},7065:function(t,e,r){use strict;var nr(1702),or(9662),ir(111),ar(2597),cr(206),ur(4374),fFunction,sn(.concat),ln(.join),p{},dfunction(t,e,r){if(!a(p,e)){for(var n,o0;oe;o++)noa+o+;pef(C,a,return new C(+l(n,,)+))}return pe(t,r)};t.exportsu?f.bind:function(t){var eo(this),re.prototype,nc(arguments,1),afunction(){var rs(n,c(arguments));return this instanceof a?d(e,r.length,r):e.apply(t,r)};return i(r)&&(a.prototyper),a}},6916:function(t,e,r){var nr(4374),oFunction.prototype.call;t.exportsn?o.bind(o):function(){return o.apply(o,arguments)}},6530:function(t,e,r){var nr(9781),or(2597),iFunction.prototype,an&&Object.getOwnPropertyDescriptor,co(i,name),uc&&somethingfunction(){}.name,fc&&(!n||n&&a(i,name).configurable);t.exports{EXISTS:c,PROPER:u,CONFIGURABLE:f}},1702:function(t,e,r){var nr(4374),oFunction.prototype,io.bind,ao.call,cn&&i.bind(a,a);t.exportsn?function(t){return t&&c(t)}:function(t){return t&&function(){return a.apply(t,arguments)}}},5005:function(t,e,r){var nr(7854),or(614),ifunction(t){return o(t)?t:void 0};t.exportsfunction(t,e){return arguments.length2?i(nt):nt&&nte}},1246:function(t,e,r){var nr(648),or(8173),ir(7497),ar(5112)(iterator);t.exportsfunction(t){if(null!t)return o(t,a)||o(t,@@iterator)||in(t)}},8554:function(t,e,r){var nr(6916),or(9662),ir(9670),ar(6330),cr(1246),uTypeError;t.exportsfunction(t,e){var rarguments.length2?c(t):e;if(o(r))return i(n(r,t));throw u(a(t)+ is not iterable)}},8173:function(t,e,r){var nr(9662);t.exportsfunction(t,e){var rte;return nullr?void 0:n(r)}},647:function(t,e,r){var nr(1702),or(7908),iMath.floor,an(.charAt),cn(.replace),un(.slice),f/\$($&`|\d{1,2}|^>*>)/g,s/\$($&`|\d{1,2})/g;t.exportsfunction(t,e,r,n,l,p){var dr+t.length,yn.length,hs;return void 0!l&&(lo(l),hf),c(p,h,(function(o,c){var f;switch(a(c,0)){case$:return$;case&:return t;case`:return u(e,0,r);case:return u(e,d);case:flu(c,1,-1);break;default:var s+c;if(0s)return o;if(s>y){var pi(s/10);return 0p?o:py?void 0np-1?a(c,1):np-1+a(c,1):o}fns-1}return void 0f?:f}))}},7854:function(t,e,r){var nfunction(t){return t&&t.MathMath&&t};t.exportsn(objecttypeof globalThis&&globalThis)||n(window)||n(objecttypeof self&&self)||n(objecttypeof r.g&&r.g)||function(){return this}()||Function(return this)()},2597:function(t,e,r){var nr(1702),or(7908),in({}.hasOwnProperty);t.exportsObject.hasOwn||function(t,e){return i(o(t),e)}},3501:function(t){t.exports{}},842:function(t,e,r){var nr(7854);t.exportsfunction(t,e){var rn.console;r&&r.error&&(1arguments.length?r.error(t):r.error(t,e))}},490:function(t,e,r){var nr(5005);t.exportsn(document,documentElement)},4664:function(t,e,r){var nr(9781),or(7293),ir(317);t.exports!n&&!o((function(){return 7!Object.defineProperty(i(div),a,{get:function(){return 7}}).a}))},1179:function(t){var eArray,rMath.abs,nMath.pow,oMath.floor,iMath.log,aMath.LN2;t.exports{pack:function(t,c,u){var f,s,l,pe(u),d8*u-c-1,y(1d)-1,hy>>1,v23c?n(2,-24)-n(2,-77):0,mt0||0t&&1/t0?1:0,b0;for((tr(t))!t||t1/0?(st!t?1:0,fy):(fo(i(t)/a),t*(ln(2,-f))1&&(f--,l*2),(t+f+h>1?v/l:v*n(2,1-h))*l>2&&(f++,l/2),f+h>y?(s0,fy):f+h>1?(s(t*l-1)*n(2,c),f+h):(st*n(2,h-1)*n(2,c),f0));c>8;)pb++255&s,s/256,c-8;for(ffc|s,d+c;d>0;)pb++255&f,f/256,d-8;return p--b|128*m,p},unpack:function(t,e){var r,ot.length,i8*o-e-1,a(1i)-1,ca>>1,ui-7,fo-1,stf--,l127&s;for(s>>7;u>0;)l256*l+tf--,u-8;for(rl&(1-u)-1,l>>-u,u+e;u>0;)r256*r+tf--,u-8;if(0l)l1-c;else{if(la)return r?NaN:s?-1/0:1/0;r+n(2,e),l-c}return(s?-1:1)*r*n(2,l-e)}}},8361:function(t,e,r){var nr(1702),or(7293),ir(4326),aObject,cn(.split);t.exportso((function(){return!a(z).propertyIsEnumerable(0)}))?function(t){returnStringi(t)?c(t,):a(t)}:a},9587:function(t,e,r){var nr(614),or(111),ir(7674);t.exportsfunction(t,e,r){var a,c;return i&&n(ae.constructor)&&a!r&&o(ca.prototype)&&c!r.prototype&&i(t,c),t}},2788:function(t,e,r){var nr(1702),or(614),ir(5465),an(Function.toString);o(i.inspectSource)||(i.inspectSourcefunction(t){return a(t)}),t.exportsi.inspectSource},2423:function(t,e,r){var nr(2109),or(1702),ir(3501),ar(111),cr(2597),ur(3070).f,fr(8006),sr(1156),lr(2050),pr(9711),dr(6677),y!1,hp(meta),v0,mfunction(t){u(t,h,{value:{objectID:O+v++,weakData:{}}})},bt.exports{enable:function(){b.enablefunction(){},y!0;var tf.f,eo(.splice),r{};rh1,t(r).length&&(f.ffunction(r){for(var nt(r),o0,in.length;oi;o++)if(noh){e(n,o,1);break}return n},n({target:Object,stat:!0,forced:!0},{getOwnPropertyNames:s.f}))},fastKey:function(t,e){if(!a(t))returnsymboltypeof t?t:(stringtypeof t?S:P)+t;if(!c(t,h)){if(!l(t))returnF;if(!e)returnE;m(t)}return th.objectID},getWeakData:function(t,e){if(!c(t,h)){if(!l(t))return!0;if(!e)return!1;m(t)}return th.weakData},onFreeze:function(t){return d&&y&&l(t)&&!c(t,h)&&m(t),t}};ih!0},9909:function(t,e,r){var n,o,i,ar(8536),cr(7854),ur(1702),fr(111),sr(8880),lr(2597),pr(5465),dr(6200),yr(3501),hObject already initialized,vc.TypeError,mc.WeakMap;if(a||p.state){var bp.state||(p.statenew m),gu(b.get),wu(b.has),Eu(b.set);nfunction(t,e){if(w(b,t))throw new v(h);return e.facadet,E(b,t,e),e},ofunction(t){return g(b,t)||{}},ifunction(t){return w(b,t)}}else{var xd(state);yx!0,nfunction(t,e){if(l(t,x))throw new v(h);return e.facadet,s(t,x,e),e},ofunction(t){return l(t,x)?tx:{}},ifunction(t){return l(t,x)}}t.exports{set:n,get:o,has:i,enforce:function(t){return i(t)?o(t):n(t,{})},getterFor:function(t){return function(e){var r;if(!f(e)||(ro(e)).type!t)throw v(Incompatible receiver, +t+ required);return r}}}},7659:function(t,e,r){var nr(5112),or(7497),in(iterator),aArray.prototype;t.exportsfunction(t){return void 0!t&&(o.Arrayt||ait)}},3157:function(t,e,r){var nr(4326);t.exportsArray.isArray||function(t){returnArrayn(t)}},614:function(t){t.exportsfunction(t){returnfunctiontypeof t}},4411:function(t,e,r){var nr(1702),or(7293),ir(614),ar(648),cr(5005),ur(2788),ffunction(){},s,lc(Reflect,construct),p/^\s*(?:class|function)\b/,dn(p.exec),y!p.exec(f),hfunction(t){if(!i(t))return!1;try{return l(f,s,t),!0}catch(t){return!1}},vfunction(t){if(!i(t))return!1;switch(a(t)){caseAsyncFunction:caseGeneratorFunction:caseAsyncGeneratorFunction:return!1}try{return y||!!d(p,u(t))}catch(t){return!0}};v.sham!0,t.exports!l||o((function(){var t;return h(h.call)||!h(Object)||!h((function(){t!0}))||t}))?v:h},5032:function(t,e,r){var nr(2597);t.exportsfunction(t){return void 0!t&&(n(t,value)||n(t,writable))}},4705:function(t,e,r){var nr(7293),or(614),i/#|\.prototype\./,afunction(t,e){var ruc(t);return rs||r!f&&(o(e)?n(e):!!e)},ca.normalizefunction(t){return String(t).replace(i,.).toLowerCase()},ua.data{},fa.NATIVEN,sa.POLYFILLP;t.exportsa},5988:function(t,e,r){var nr(111),oMath.floor;t.exportsNumber.isInteger||function(t){return!n(t)&&isFinite(t)&&o(t)t}},111:function(t,e,r){var nr(614);t.exportsfunction(t){returnobjecttypeof t?null!t:n(t)}},1913:function(t){t.exports!1},7850:function(t,e,r){var nr(111),or(4326),ir(5112)(match);t.exportsfunction(t){var e;return n(t)&&(void 0!(eti)?!!e:RegExpo(t))}},2190:function(t,e,r){var nr(5005),or(614),ir(7976),ar(3307),cObject;t.exportsa?function(t){returnsymboltypeof t}:function(t){var en(Symbol);return o(e)&&i(e.prototype,c(t))}},408:function(t,e,r){var nr(9974),or(6916),ir(9670),ar(6330),cr(7659),ur(6244),fr(7976),sr(8554),lr(1246),pr(9212),dTypeError,yfunction(t,e){this.stoppedt,this.resulte},hy.prototype;t.exportsfunction(t,e,r){var v,m,b,g,w,E,x,Or&&r.that,A!(!r||!r.AS_ENTRIES),T!(!r||!r.IS_ITERATOR),_!(!r||!r.INTERRUPTED),Sn(e,O),jfunction(t){return v&&p(v,normal,t),new y(!0,t)},Rfunction(t){return A?(i(t),_?S(t0,t1,j):S(t0,t1)):_?S(t,j):S(t)};if(T)vt;else{if(!(ml(t)))throw d(a(t)+ is not iterable);if(c(m)){for(b0,gu(t);g>b;b++)if((wR(tb))&&f(h,w))return w;return new y(!1)}vs(t,m)}for(Ev.next;!(xo(E,v)).done;){try{wR(x.value)}catch(t){p(v,throw,t)}if(objecttypeof w&&w&&f(h,w))return w}return new y(!1)}},9212:function(t,e,r){var nr(6916),or(9670),ir(8173);t.exportsfunction(t,e,r){var a,c;o(t);try{if(!(ai(t,return))){if(throwe)throw r;return r}an(a,t)}catch(t){c!0,at}if(throwe)throw r;if(c)throw a;return o(a),r}},3383:function(t,e,r){use strict;var n,o,i,ar(7293),cr(614),ur(30),fr(9518),sr(8052),lr(5112),pr(1913),dl(iterator),y!1;.keys&&(nextin(i.keys())?(of(f(i)))!Object.prototype&&(no):y!0),nulln||a((function(){var t{};return nd.call(t)!t}))?n{}:p&&(nu(n)),c(nd)||s(n,d,(function(){return this})),t.exports{IteratorPrototype:n,BUGGY_SAFARI_ITERATORS:y}},7497:function(t){t.exports{}},6244:function(t,e,r){var nr(7466);t.exportsfunction(t){return n(t.length)}},6339:function(t,e,r){var nr(7293),or(614),ir(2597),ar(9781),cr(6530).CONFIGURABLE,ur(2788),fr(9909),sf.enforce,lf.get,pObject.defineProperty,da&&!n((function(){return 8!p((function(){}),length,{value:8}).length})),yString(String).split(String),ht.exportsfunction(t,e,r){Symbol(String(e).slice(0,7)&&(e+String(e).replace(/^Symbol\((^)*)\)/,$1)+),r&&r.getter&&(eget +e),r&&r.setter&&(eset +e),(!i(t,name)||c&&t.name!e)&&(a?p(t,name,{value:e,configurable:!0}):t.namee),d&&r&&i(r,arity)&&t.length!r.arity&&p(t,length,{value:r.arity});try{r&&i(r,constructor)&&r.constructor?a&&p(t,prototype,{writable:!1}):t.prototype&&(t.prototypevoid 0)}catch(t){}var ns(t);return i(n,source)||(n.sourcey.join(stringtypeof e?e:)),t};Function.prototype.toStringh((function(){return o(this)&&l(this).source||u(this)}),toString)},4758:function(t){var eMath.ceil,rMath.floor;t.exportsMath.trunc||function(t){var n+t;return(n>0?r:e)(n)}},5948:function(t,e,r){var n,o,i,a,c,u,f,s,lr(7854),pr(9974),dr(1236).f,yr(261).set,hr(6833),vr(1528),mr(1036),br(5268),gl.MutationObserver||l.WebKitMutationObserver,wl.document,El.process,xl.Promise,Od(l,queueMicrotask),AO&&O.value;A||(nfunction(){var t,e;for(b&&(tE.domain)&&t.exit();o;){eo.fn,oo.next;try{e()}catch(t){throw o?a():ivoid 0,t}}ivoid 0,t&&t.enter()},h||b||m||!g||!w?!v&&x&&x.resolve?((fx.resolve(void 0)).constructorx,sp(f.then,f),afunction(){s(n)}):b?afunction(){E.nextTick(n)}:(yp(y,l),afunction(){y(n)}):(c!0,uw.createTextNode(),new g(n).observe(u,{characterData:!0}),afunction(){u.datac!c})),t.exportsA||function(t){var e{fn:t,next:void 0};i&&(i.nexte),o||(oe,a()),ie}},735:function(t,e,r){var nr(133);t.exportsn&&!!Symbol.for&&!!Symbol.keyFor},133:function(t,e,r){var nr(7392),or(7293);t.exports!!Object.getOwnPropertySymbols&&!o((function(){var tSymbol();return!String(t)||!(Object(t)instanceof Symbol)||!Symbol.sham&&n&&n41}))},590:function(t,e,r){var nr(7293),or(5112),ir(1913),ao(iterator);t.exports!n((function(){var tnew URL(b?a1&b2&c3,http://a),et.searchParams,r;return t.pathnamec%20d,e.forEach((function(t,n){e.delete(b),r+n+t})),i&&!t.toJSON||!e.sort||http://a/c%20d?a1&c3!t.href||3!e.get(c)||a1!String(new URLSearchParams(?a1))||!ea||a!new URL(https://a@b).username||b!new URLSearchParams(new URLSearchParams(ab)).get(a)||xn--e1aybc!new URL(http://тест).host||#%D0%B1!new URL(http://a#б).hash||a1c3!r||x!new URL(http://x,void 0).host}))},8536:function(t,e,r){var nr(7854),or(614),ir(2788),an.WeakMap;t.exportso(a)&&/native code/.test(i(a))},8523:function(t,e,r){use strict;var nr(9662),ofunction(t){var e,r;this.promisenew t((function(t,n){if(void 0!e||void 0!r)throw TypeError(Bad Promise constructor);et,rn})),this.resolven(e),this.rejectn(r)};t.exports.ffunction(t){return new o(t)}},3929:function(t,e,r){var nr(7850),oTypeError;t.exportsfunction(t){if(n(t))throw o(The method doesnt accept regular expressions);return t}},30:function(t,e,r){var n,or(9670),ir(6048),ar(748),cr(3501),ur(490),fr(317),sr(6200)(IE_PROTO),lfunction(){},pfunction(t){returnscript>+t+\/script>},dfunction(t){t.write(p()),t.close();var et.parentWindow.Object;return tnull,e},yfunction(){try{nnew ActiveXObject(htmlfile)}catch(t){}var t,e;yundefined!typeof document?document.domain&&n?d(n):((ef(iframe)).style.displaynone,u.appendChild(e),e.srcString(javascript:),(te.contentWindow.document).open(),t.write(p(document.FObject)),t.close(),t.F):d(n);for(var ra.length;r--;)delete y.prototypear;return y()};cs!0,t.exportsObject.create||function(t,e){var r;return null!t?(l.prototypeo(t),rnew l,l.prototypenull,rst):ry(),void 0e?r:i.f(r,e)}},6048:function(t,e,r){var nr(9781),or(3353),ir(3070),ar(9670),cr(5656),ur(1956);e.fn&&!o?Object.defineProperties:function(t,e){a(t);for(var r,nc(e),ou(e),fo.length,s0;f>s;)i.f(t,ros++,nr);return t}},3070:function(t,e,r){var nr(9781),or(4664),ir(3353),ar(9670),cr(4948),uTypeError,fObject.defineProperty,sObject.getOwnPropertyDescriptor;e.fn?i?function(t,e,r){if(a(t),ec(e),a(r),functiontypeof t&&prototypee&&valuein r&&writablein r&&!r.writable){var ns(t,e);n&&n.writable&&(ter.value,r{configurable:configurablein r?r.configurable:n.configurable,enumerable:enumerablein r?r.enumerable:n.enumerable,writable:!1})}return f(t,e,r)}:f:function(t,e,r){if(a(t),ec(e),a(r),o)try{return f(t,e,r)}catch(t){}if(getin r||setin r)throw u(Accessors not supported);returnvaluein r&&(ter.value),t}},1236:function(t,e,r){var nr(9781),or(6916),ir(5296),ar(9114),cr(5656),ur(4948),fr(2597),sr(4664),lObject.getOwnPropertyDescriptor;e.fn?l:function(t,e){if(tc(t),eu(e),s)try{return l(t,e)}catch(t){}if(f(t,e))return a(!o(i.f,t,e),te)}},1156:function(t,e,r){var nr(4326),or(5656),ir(8006).f,ar(1589),cwindow&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):;t.exports.ffunction(t){return c&&Windown(t)?function(t){try{return i(t)}catch(t){return a(c)}}(t):i(o(t))}},8006:function(t,e,r){var nr(6324),or(748).concat(length,prototype);e.fObject.getOwnPropertyNames||function(t){return n(t,o)}},5181:function(t,e){e.fObject.getOwnPropertySymbols},9518:function(t,e,r){var nr(2597),or(614),ir(7908),ar(6200),cr(8544),ua(IE_PROTO),fObject,sf.prototype;t.exportsc?f.getPrototypeOf:function(t){var ei(t);if(n(e,u))return eu;var re.constructor;return o(r)&&e instanceof r?r.prototype:e instanceof f?s:null}},2050:function(t,e,r){var nr(7293),or(111),ir(4326),ar(7556),cObject.isExtensible,un((function(){c(1)}));t.exportsu||a?function(t){return!!o(t)&&(!a||ArrayBuffer!i(t))&&(!c||c(t))}:c},7976:function(t,e,r){var nr(1702);t.exportsn({}.isPrototypeOf)},6324:function(t,e,r){var nr(1702),or(2597),ir(5656),ar(1318).indexOf,cr(3501),un(.push);t.exportsfunction(t,e){var r,ni(t),f0,s;for(r in n)!o(c,r)&&o(n,r)&&u(s,r);for(;e.length>f;)o(n,ref++)&&(~a(s,r)||u(s,r));return s}},1956:function(t,e,r){var nr(6324),or(748);t.exportsObject.keys||function(t){return n(t,o)}},5296:function(t,e){use strict;var r{}.propertyIsEnumerable,nObject.getOwnPropertyDescriptor,on&&!r.call({1:2},1);e.fo?function(t){var en(this,t);return!!e&&e.enumerable}:r},7674:function(t,e,r){var nr(1702),or(9670),ir(6077);t.exportsObject.setPrototypeOf||(__proto__in{}?function(){var t,e!1,r{};try{(tn(Object.getOwnPropertyDescriptor(Object.prototype,__proto__).set))(r,),er instanceof Array}catch(t){}return function(r,n){return o(r),i(n),e?t(r,n):r.__proto__n,r}}():void 0)},288:function(t,e,r){use strict;var nr(1694),or(648);t.exportsn?{}.toString:function(){returnobject +o(this)+}},2140:function(t,e,r){var nr(6916),or(614),ir(111),aTypeError;t.exportsfunction(t,e){var r,c;if(stringe&&o(rt.toString)&&!i(cn(r,t)))return c;if(o(rt.valueOf)&&!i(cn(r,t)))return c;if(string!e&&o(rt.toString)&&!i(cn(r,t)))return c;throw a(Cant convert object to primitive value)}},3887:function(t,e,r){var nr(5005),or(1702),ir(8006),ar(5181),cr(9670),uo(.concat);t.exportsn(Reflect,ownKeys)||function(t){var ei.f(c(t)),ra.f;return r?u(e,r(t)):e}},857:function(t,e,r){var nr(7854);t.exportsn},2534:function(t){t.exportsfunction(t){try{return{error:!1,value:t()}}catch(t){return{error:!0,value:t}}}},3702:function(t,e,r){var nr(7854),or(2492),ir(614),ar(4705),cr(2788),ur(5112),fr(7871),sr(1913),lr(7392),po&&o.prototype,du(species),y!1,hi(n.PromiseRejectionEvent),va(Promise,(function(){var tc(o),et!String(o);if(!e&&66l)return!0;if(s&&(!p.catch||!p.finally))return!0;if(l>51&&/native code/.test(t))return!1;var rnew o((function(t){t(1)})),nfunction(t){t((function(){}),(function(){}))};return(r.constructor{})dn,!(yr.then((function(){}))instanceof n)||!e&&f&&!h}));t.exports{CONSTRUCTOR:v,REJECTION_EVENT:h,SUBCLASSING:y}},2492:function(t,e,r){var nr(7854);t.exportsn.Promise},9478:function(t,e,r){var nr(9670),or(111),ir(8523);t.exportsfunction(t,e){if(n(t),o(e)&&e.constructort)return e;var ri.f(t);return(0,r.resolve)(e),r.promise}},612:function(t,e,r){var nr(2492),or(7072),ir(3702).CONSTRUCTOR;t.exportsi||!o((function(t){n.all(t).then(void 0,(function(){}))}))},8572:function(t){var efunction(){this.headnull,this.tailnull};e.prototype{add:function(t){var e{item:t,next:null};this.head?this.tail.nexte:this.heade,this.taile},get:function(){var tthis.head;if(t)return this.headt.next,this.tailt&&(this.tailnull),t.item}},t.exportse},7651:function(t,e,r){var nr(6916),or(9670),ir(614),ar(4326),cr(2261),uTypeError;t.exportsfunction(t,e){var rt.exec;if(i(r)){var fn(r,t,e);return null!f&&o(f),f}if(RegExpa(t))return n(c,t,e);throw u(RegExp#exec called on incompatible receiver)}},2261:function(t,e,r){use strict;var n,o,ir(6916),ar(1702),cr(1340),ur(7066),fr(2999),sr(2309),lr(30),pr(9909).get,dr(9441),yr(7168),hs(native-string-replace,String.prototype.replace),vRegExp.prototype.exec,mv,ba(.charAt),ga(.indexOf),wa(.replace),Ea(.slice),x(o/b*/g,i(v,n/a/,a),i(v,o,a),0!n.lastIndex||0!o.lastIndex),Of.BROKEN_CARET,Avoid 0!/()??/.exec()1;(x||A||O||d||y)&&(mfunction(t){var e,r,n,o,a,f,s,dthis,yp(d),Tc(t),_y.raw;if(_)return _.lastIndexd.lastIndex,ei(m,_,T),d.lastIndex_.lastIndex,e;var Sy.groups,jO&&d.sticky,Ri(u,d),Cd.source,P0,IT;if(j&&(Rw(R,y,),-1g(R,g)&&(R+g),IE(T,d.lastIndex),d.lastIndex>0&&(!d.multiline||d.multiline&&\n!b(T,d.lastIndex-1))&&(C(?: +C+),I +I,P++),rnew RegExp(^(?:+C+),R)),A&&(rnew RegExp(^+C+$(?!\\s),R)),x&&(nd.lastIndex),oi(v,j?r:d,I),j?o?(o.inputE(o.input,P),o0E(o0,P),o.indexd.lastIndex,d.lastIndex+o0.length):d.lastIndex0:x&&o&&(d.lastIndexd.global?o.index+o0.length:n),A&&o&&o.length>1&&i(h,o0,r,(function(){for(a1;aarguments.length-2;a++)void 0argumentsa&&(oavoid 0)})),o&&S)for(o.groupsfl(null),a0;aS.length;a++)f(sSa)0os1;return o}),t.exportsm},7066:function(t,e,r){use strict;var nr(9670);t.exportsfunction(){var tn(this),e;return t.hasIndices&&(e+d),t.global&&(e+g),t.ignoreCase&&(e+i),t.multiline&&(e+m),t.dotAll&&(e+s),t.unicode&&(e+u),t.unicodeSets&&(e+v),t.sticky&&(e+y),e}},4706:function(t,e,r){var nr(6916),or(2597),ir(7976),ar(7066),cRegExp.prototype;t.exportsfunction(t){var et.flags;return void 0!e||flagsin c||o(t,flags)||!i(c,t)?e:n(a,t)}},2999:function(t,e,r){var nr(7293),or(7854).RegExp,in((function(){var to(a,y);return t.lastIndex2,null!t.exec(abcd)})),ai||n((function(){return!o(a,y).sticky})),ci||n((function(){var to(^r,gy);return t.lastIndex2,null!t.exec(str)}));t.exports{BROKEN_CARET:c,MISSED_STICKY:a,UNSUPPORTED_Y:i}},9441:function(t,e,r){var nr(7293),or(7854).RegExp;t.exportsn((function(){var to(.,s);return!(t.dotAll&&t.exec(\n)&&st.flags)}))},7168:function(t,e,r){var nr(7293),or(7854).RegExp;t.exportsn((function(){var to((?a>b),g);returnb!t.exec(b).groups.a||bc!b.replace(t,$a>c)}))},4488:function(t){var eTypeError;t.exportsfunction(t){if(nullt)throw e(Cant call method on +t);return t}},6340:function(t,e,r){use strict;var nr(5005),or(3070),ir(5112),ar(9781),ci(species);t.exportsfunction(t){var en(t),ro.f;a&&e&&!ec&&r(e,c,{configurable:!0,get:function(){return this}})}},8003:function(t,e,r){var nr(3070).f,or(2597),ir(5112)(toStringTag);t.exportsfunction(t,e,r){t&&!r&&(tt.prototype),t&&!o(t,i)&&n(t,i,{configurable:!0,value:e})}},6200:function(t,e,r){var nr(2309),or(9711),in(keys);t.exportsfunction(t){return it||(ito(t))}},5465:function(t,e,r){var nr(7854),or(3072),i__core-js_shared__,ani||o(i,{});t.exportsa},2309:function(t,e,r){var nr(1913),or(5465);(t.exportsfunction(t,e){return ot||(otvoid 0!e?e:{})})(versions,).push({version:3.23.3,mode:n?pure:global,copyright:© 2014-2022 Denis Pushkarev (zloirock.ru),license:https://github.com/zloirock/core-js/blob/v3.23.3/LICENSE,source:https://github.com/zloirock/core-js})},6707:function(t,e,r){var nr(9670),or(9483),ir(5112)(species);t.exportsfunction(t,e){var r,an(t).constructor;return void 0a||null(rn(a)i)?e:o(r)}},8710:function(t,e,r){var nr(1702),or(9303),ir(1340),ar(4488),cn(.charAt),un(.charCodeAt),fn(.slice),sfunction(t){return function(e,r){var n,s,li(a(e)),po(r),dl.length;return p0||p>d?t?:void 0:(nu(l,p))55296||n>56319||p+1d||(su(l,p+1))56320||s>57343?t?c(l,p):n:t?f(l,p,p+2):s-56320+(n-5529610)+65536}};t.exports{codeAt:s(!1),charAt:s(!0)}},6091:function(t,e,r){var nr(6530).PROPER,or(7293),ir(1361);t.exportsfunction(t){return o((function(){return!!it()|| ! t()||n&&it.name!t}))}},3111:function(t,e,r){var nr(1702),or(4488),ir(1340),ar(1361),cn(.replace),u+a+,fRegExp(^+u+u+*),sRegExp(u+u+*$),lfunction(t){return function(e){var ri(o(e));return 1&t&&(rc(r,f,)),2&t&&(rc(r,s,)),r}};t.exports{start:l(1),end:l(2),trim:l(3)}},6532:function(t,e,r){var nr(6916),or(5005),ir(5112),ar(8052);t.exportsfunction(){var to(Symbol),et&&t.prototype,re&&e.valueOf,ci(toPrimitive);e&&!ec&&a(e,c,(function(t){return n(r,this)}),{arity:1})}},261:function(t,e,r){var n,o,i,a,cr(7854),ur(2104),fr(9974),sr(614),lr(2597),pr(7293),dr(490),yr(206),hr(317),vr(8053),mr(6833),br(5268),gc.setImmediate,wc.clearImmediate,Ec.process,xc.Dispatch,Oc.Function,Ac.MessageChannel,Tc.String,_0,S{};try{nc.location}catch(t){}var jfunction(t){if(l(S,t)){var eSt;delete St,e()}},Rfunction(t){return function(){j(t)}},Cfunction(t){j(t.data)},Pfunction(t){c.postMessage(T(t),n.protocol+//+n.host)};g&&w||(gfunction(t){v(arguments.length,1);var es(t)?t:O(t),ry(arguments,1);return S++_function(){u(e,void 0,r)},o(_),_},wfunction(t){delete St},b?ofunction(t){E.nextTick(R(t))}:x&&x.now?ofunction(t){x.now(R(t))}:A&&!m?(a(inew A).port2,i.port1.onmessageC,of(a.postMessage,a)):c.addEventListener&&s(c.postMessage)&&!c.importScripts&&n&&file:!n.protocol&&!p(P)?(oP,c.addEventListener(message,C,!1)):oonreadystatechangein h(script)?function(t){d.appendChild(h(script)).onreadystatechangefunction(){d.removeChild(this),j(t)}}:function(t){setTimeout(R(t),0)}),t.exports{set:g,clear:w}},1400:function(t,e,r){var nr(9303),oMath.max,iMath.min;t.exportsfunction(t,e){var rn(t);return r0?o(r+e,0):i(r,e)}},4599:function(t,e,r){var nr(7593),oTypeError;t.exportsfunction(t){var en(t,number);if(numbertypeof e)throw o(Cant convert number to bigint);return BigInt(e)}},7067:function(t,e,r){var nr(9303),or(7466),iRangeError;t.exportsfunction(t){if(void 0t)return 0;var en(t),ro(e);if(e!r)throw i(Wrong length or index);return r}},5656:function(t,e,r){var nr(8361),or(4488);t.exportsfunction(t){return n(o(t))}},9303:function(t,e,r){var nr(4758);t.exportsfunction(t){var e+t;return e!e||0e?0:n(e)}},7466:function(t,e,r){var nr(9303),oMath.min;t.exportsfunction(t){return t>0?o(n(t),9007199254740991):0}},7908:function(t,e,r){var nr(4488),oObject;t.exportsfunction(t){return o(n(t))}},4590:function(t,e,r){var nr(3002),oRangeError;t.exportsfunction(t,e){var rn(t);if(r%e)throw o(Wrong offset);return r}},3002:function(t,e,r){var nr(9303),oRangeError;t.exportsfunction(t){var en(t);if(e0)throw o(The argument cant be less than 0);return e}},7593:function(t,e,r){var nr(6916),or(111),ir(2190),ar(8173),cr(2140),ur(5112),fTypeError,su(toPrimitive);t.exportsfunction(t,e){if(!o(t)||i(t))return t;var r,ua(t,s);if(u){if(void 0e&&(edefault),rn(u,t,e),!o(r)||i(r))return r;throw f(Cant convert object to primitive value)}return void 0e&&(enumber),c(t,e)}},4948:function(t,e,r){var nr(7593),or(2190);t.exportsfunction(t){var en(t,string);return o(e)?e:e+}},1694:function(t,e,r){var n{};nr(5112)(toStringTag)z,t.exportsobject zString(n)},1340:function(t,e,r){var nr(648),oString;t.exportsfunction(t){if(Symboln(t))throw TypeError(Cannot convert a Symbol value to a string);return o(t)}},6330:function(t){var eString;t.exportsfunction(t){try{return e(t)}catch(t){returnObject}}},9843:function(t,e,r){use strict;var nr(2109),or(7854),ir(6916),ar(9781),cr(3832),ur(260),fr(3331),sr(5787),lr(9114),pr(8880),dr(5988),yr(7466),hr(7067),vr(4590),mr(4948),br(2597),gr(648),wr(111),Er(2190),xr(30),Or(7976),Ar(7674),Tr(8006).f,_r(7321),Sr(2092).forEach,jr(6340),Rr(3070),Cr(1236),Pr(9909),Ir(9587),MP.get,kP.set,NP.enforce,FR.f,LC.f,DMath.round,Bo.RangeError,Uf.ArrayBuffer,zU.prototype,Hf.DataView,Vu.NATIVE_ARRAY_BUFFER_VIEWS,Gu.TYPED_ARRAY_TAG,Wu.TypedArray,Yu.TypedArrayPrototype,qu.aTypedArrayConstructor,$u.isTypedArray,KBYTES_PER_ELEMENT,JWrong length,Zfunction(t,e){q(t);for(var r0,ne.length,onew t(n);n>r;)orer++;return o},Xfunction(t,e){F(t,e,{get:function(){return M(this)e}})},Qfunction(t){var e;return O(z,t)||ArrayBuffer(eg(t))||SharedArrayBuffere},ttfunction(t,e){return $(t)&&!E(e)&&e in t&&d(+e)&&e>0},etfunction(t,e){return em(e),tt(t,e)?l(2,te):L(t,e)},rtfunction(t,e,r){return em(e),!(tt(t,e)&&w(r)&&b(r,value))||b(r,get)||b(r,set)||r.configurable||b(r,writable)&&!r.writable||b(r,enumerable)&&!r.enumerable?F(t,e,r):(ter.value,t)};a?(V||(C.fet,R.frt,X(Y,buffer),X(Y,byteOffset),X(Y,byteLength),X(Y,length)),n({target:Object,stat:!0,forced:!V},{getOwnPropertyDescriptor:et,defineProperty:rt}),t.exportsfunction(t,e,r){var at.match(/\d+$/)0/8,ut+(r?Clamped:)+Array,fget+t,lset+t,dou,md,bm&&m.prototype,g{},Efunction(t,e){F(t,e,{get:function(){return function(t,e){var rM(t);return r.viewf(e*a+r.byteOffset,!0)}(this,e)},set:function(t){return function(t,e,n){var oM(t);r&&(n(nD(n))0?0:n>255?255:255&n),o.viewl(e*a+o.byteOffset,n,!0)}(this,e,t)},enumerable:!0})};V?c&&(me((function(t,e,r,n){return s(t,b),I(w(e)?Q(e)?void 0!n?new d(e,v(r,a),n):void 0!r?new d(e,v(r,a)):new d(e):$(e)?Z(m,e):i(_,m,e):new d(h(e)),t,m)})),A&&A(m,W),S(T(d),(function(t){t in m||p(m,t,dt)})),m.prototypeb):(me((function(t,e,r,n){s(t,b);var o,c,u,f0,l0;if(w(e)){if(!Q(e))return $(e)?Z(m,e):i(_,m,e);oe,lv(r,a);var pe.byteLength;if(void 0n){if(p%a)throw B(J);if((cp-l)0)throw B(J)}else if((cy(n)*a)+l>p)throw B(J);uc/a}else uh(e),onew U(cu*a);for(k(t,{buffer:o,byteOffset:l,byteLength:c,length:u,view:new H(o)});fu;)E(t,f++)})),A&&A(m,W),bm.prototypex(Y)),b.constructor!m&&p(b,constructor,m),N(b).TypedArrayConstructorm,G&&p(b,G,u);var Om!d;gum,n({global:!0,constructor:!0,forced:O,sham:!V},g),K in m||p(m,K,a),K in b||p(b,K,a),j(u)}):t.exportsfunction(){}},3832:function(t,e,r){var nr(7854),or(7293),ir(7072),ar(260).NATIVE_ARRAY_BUFFER_VIEWS,cn.ArrayBuffer,un.Int8Array;t.exports!a||!o((function(){u(1)}))||!o((function(){new u(-1)}))||!i((function(t){new u,new u(null),new u(1.5),new u(t)}),!0)||o((function(){return 1!new u(new c(2),1,void 0).length}))},3074:function(t,e,r){var nr(7745),or(6304);t.exportsfunction(t,e){return n(o(t),e)}},7321:function(t,e,r){var nr(9974),or(6916),ir(9483),ar(7908),cr(6244),ur(8554),fr(1246),sr(7659),lr(260).aTypedArrayConstructor;t.exportsfunction(t){var e,r,p,d,y,h,vi(this),ma(t),barguments.length,gb>1?arguments1:void 0,wvoid 0!g,Ef(m);if(E&&!s(E))for(h(yu(m,E)).next,m;!(do(h,y)).done;)m.push(d.value);for(w&&b>2&&(gn(g,arguments2)),rc(m),pnew(l(v))(r),e0;r>e;e++)pew?g(me,e):me;return p}},6304:function(t,e,r){var nr(260),or(6707),in.aTypedArrayConstructor,an.getTypedArrayConstructor;t.exportsfunction(t){return i(o(t,a(t)))}},9711:function(t,e,r){var nr(1702),o0,iMath.random(),an(1..toString);t.exportsfunction(t){returnSymbol(+(void 0t?:t)+)_+a(++o+i,36)}},3307:function(t,e,r){var nr(133);t.exportsn&&!Symbol.sham&&symboltypeof Symbol.iterator},3353:function(t,e,r){var nr(9781),or(7293);t.exportsn&&o((function(){return 42!Object.defineProperty((function(){}),prototype,{value:42,writable:!1}).prototype}))},8053:function(t){var eTypeError;t.exportsfunction(t,r){if(tr)throw e(Not enough arguments);return t}},6061:function(t,e,r){var nr(5112);e.fn},5112:function(t,e,r){var nr(7854),or(2309),ir(2597),ar(9711),cr(133),ur(3307),fo(wks),sn.Symbol,ls&&s.for,pu?s:s&&s.withoutSetter||a;t.exportsfunction(t){if(!i(f,t)||!c&&string!typeof ft){var eSymbol.+t;c&&i(s,t)?ftst:ftu&&l?l(e):p(e)}return ft}},1361:function(t){t.exports\t\n\v\f\r \u2028\u2029\ufeff},8264:function(t,e,r){use strict;var nr(2109),or(7854),ir(3331),ar(6340),ci.ArrayBuffer;n({global:!0,constructor:!0,forced:o.ArrayBuffer!c},{ArrayBuffer:c}),a(ArrayBuffer)},2222:function(t,e,r){use strict;var nr(2109),or(7293),ir(3157),ar(111),cr(7908),ur(6244),fr(7207),sr(6135),lr(5417),pr(1194),dr(5112),yr(7392),hd(isConcatSpreadable),vy>51||!o((function(){var t;return th!1,t.concat()0!t})),mp(concat),bfunction(t){if(!a(t))return!1;var eth;return void 0!e?!!e:i(t)};n({target:Array,proto:!0,arity:1,forced:!v||!m},{concat:function(t){var e,r,n,o,i,ac(this),pl(a,0),d0;for(e-1,narguments.length;en;e++)if(b(i-1e?a:argumentse))for(ou(i),f(d+o),r0;ro;r++,d++)r in i&&s(p,d,ir);else f(d+1),s(p,d++,i);return p.lengthd,p}})},7327:function(t,e,r){use strict;var nr(2109),or(2092).filter;n({target:Array,proto:!0,forced:!r(1194)(filter)},{filter:function(t){return o(this,t,arguments.length>1?arguments1:void 0)}})},1038:function(t,e,r){var nr(2109),or(8457);n({target:Array,stat:!0,forced:!r(7072)((function(t){Array.from(t)}))},{from:o})},6699:function(t,e,r){use strict;var nr(2109),or(1318).includes,ir(7293),ar(1223);n({target:Array,proto:!0,forced:i((function(){return!Array(1).includes()}))},{includes:function(t){return o(this,t,arguments.length>1?arguments1:void 0)}}),a(includes)},6992:function(t,e,r){use strict;var nr(5656),or(1223),ir(7497),ar(9909),cr(3070).f,ur(654),fr(1913),sr(9781),lArray Iterator,pa.set,da.getterFor(l);t.exportsu(Array,Array,(function(t,e){p(this,{type:l,target:n(t),index:0,kind:e})}),(function(){var td(this),et.target,rt.kind,nt.index++;return!e||n>e.length?(t.targetvoid 0,{value:void 0,done:!0}):keysr?{value:n,done:!1}:valuesr?{value:en,done:!1}:{value:n,en,done:!1}}),values);var yi.Argumentsi.Array;if(o(keys),o(values),o(entries),!f&&s&&values!y.name)try{c(y,name,{value:values})}catch(t){}},9600:function(t,e,r){use strict;var nr(2109),or(1702),ir(8361),ar(5656),cr(9341),uo(.join),fi!Object,sc(join,,);n({target:Array,proto:!0,forced:f||!s},{join:function(t){return u(a(this),void 0t?,:t)}})},1249:function(t,e,r){use strict;var nr(2109),or(2092).map;n({target:Array,proto:!0,forced:!r(1194)(map)},{map:function(t){return o(this,t,arguments.length>1?arguments1:void 0)}})},7042:function(t,e,r){use strict;var nr(2109),or(3157),ir(4411),ar(111),cr(1400),ur(6244),fr(5656),sr(6135),lr(5112),pr(1194),dr(206),yp(slice),hl(species),vArray,mMath.max;n({target:Array,proto:!0,forced:!y},{slice:function(t,e){var r,n,l,pf(this),yu(p),bc(t,y),gc(void 0e?y:e,y);if(o(p)&&(rp.constructor,(i(r)&&(rv||o(r.prototype))||a(r)&&null(rrh))&&(rvoid 0),rv||void 0r))return d(p,b,g);for(nnew(void 0r?v:r)(m(g-b,0)),l0;bg;b++,l++)b in p&&s(n,l,pb);return n.lengthl,n}})},8309:function(t,e,r){var nr(9781),or(6530).EXISTS,ir(1702),ar(3070).f,cFunction.prototype,ui(c.toString),f/function\b(?:\s|\/\*\S\s*?\*\/|\/\/^\n\r*\n\r+)*(^\s(/*)/,si(f.exec);n&&!o&&a(c,name,{configurable:!0,get:function(){try{return s(f,u(this))1}catch(t){return}}})},5837:function(t,e,r){r(2109)({global:!0},{globalThis:r(7854)})},8862:function(t,e,r){var nr(2109),or(5005),ir(2104),ar(6916),cr(1702),ur(7293),fr(3157),sr(614),lr(111),pr(2190),dr(206),yr(133),ho(JSON,stringify),vc(/./.exec),mc(.charAt),bc(.charCodeAt),gc(.replace),wc(1..toString),E/\uD800-\uDFFF/g,x/^\uD800-\uDBFF$/,O/^\uDC00-\uDFFF$/,A!y||u((function(){var to(Symbol)();returnnull!h(t)||{}!h({a:t})||{}!h(Object(t))})),Tu((function(){return\\udf06\\ud834!h(\udf06\ud834)||\\udead!h(\udead)})),_function(t,e){var rd(arguments),ne;if((l(e)||void 0!t)&&!p(t))return f(e)||(efunction(t,e){if(s(n)&&(ea(n,this,t,e)),!p(e))return e}),r1e,i(h,null,r)},Sfunction(t,e,r){var nm(r,e-1),om(r,e+1);return v(x,t)&&!v(O,o)||v(O,t)&&!v(x,n)?\\u+w(b(t,0),16):t};h&&n({target:JSON,stat:!0,arity:3,forced:A||T},{stringify:function(t,e,r){var nd(arguments),oi(A?_:h,null,n);return T&&stringtypeof o?g(o,E,S):o}})},3706:function(t,e,r){var nr(7854);r(8003)(n.JSON,JSON,!0)},9098:function(t,e,r){use strict;r(7710)(Map,(function(t){return function(){return t(this,arguments.length?arguments0:void 0)}}),r(5631))},1532:function(t,e,r){r(9098)},2703:function(t,e,r){r(8003)(Math,Math,!0)},5003:function(t,e,r){var nr(2109),or(7293),ir(5656),ar(1236).f,cr(9781),uo((function(){a(1)}));n({target:Object,stat:!0,forced:!c||u,sham:!c},{getOwnPropertyDescriptor:function(t,e){return a(i(t),e)}})},9337:function(t,e,r){var nr(2109),or(9781),ir(3887),ar(5656),cr(1236),ur(6135);n({target:Object,stat:!0,sham:!o},{getOwnPropertyDescriptors:function(t){for(var e,r,na(t),oc.f,fi(n),s{},l0;f.length>l;)void 0!(ro(n,efl++))&&u(s,e,r);return s}})},6210:function(t,e,r){var nr(2109),or(7293),ir(1156).f;n({target:Object,stat:!0,forced:o((function(){return!Object.getOwnPropertyNames(1)}))},{getOwnPropertyNames:i})},9660:function(t,e,r){var nr(2109),or(133),ir(7293),ar(5181),cr(7908);n({target:Object,stat:!0,forced:!o||i((function(){a.f(1)}))},{getOwnPropertySymbols:function(t){var ea.f;return e?e(c(t)):}})},489:function(t,e,r){var nr(2109),or(7293),ir(7908),ar(9518),cr(8544);n({target:Object,stat:!0,forced:o((function(){a(1)})),sham:!c},{getPrototypeOf:function(t){return a(i(t))}})},7941:function(t,e,r){var nr(2109),or(7908),ir(1956);n({target:Object,stat:!0,forced:r(7293)((function(){i(1)}))},{keys:function(t){return i(o(t))}})},1539:function(t,e,r){var nr(1694),or(8052),ir(288);n||o(Object.prototype,toString,i,{unsafe:!0})},821:function(t,e,r){use strict;var nr(2109),or(6916),ir(9662),ar(8523),cr(2534),ur(408);n({target:Promise,stat:!0,forced:r(612)},{all:function(t){var ethis,ra.f(e),nr.resolve,fr.reject,sc((function(){var ri(e.resolve),a,c0,s1;u(t,(function(t){var ic++,u!1;s++,o(r,e,t).then((function(t){u||(u!0,ait,--s||n(a))}),f)})),--s||n(a)}));return s.error&&f(s.value),r.promise}})},4164:function(t,e,r){use strict;var nr(2109),or(1913),ir(3702).CONSTRUCTOR,ar(2492),cr(5005),ur(614),fr(8052),sa&&a.prototype;if(n({target:Promise,proto:!0,forced:i,real:!0},{catch:function(t){return this.then(void 0,t)}}),!o&&u(a)){var lc(Promise).prototype.catch;s.catch!l&&f(s,catch,l,{unsafe:!0})}},3401:function(t,e,r){use strict;var n,o,i,ar(2109),cr(1913),ur(5268),fr(7854),sr(6916),lr(8052),pr(7674),dr(8003),yr(6340),hr(9662),vr(614),mr(111),br(5787),gr(6707),wr(261).set,Er(5948),xr(842),Or(2534),Ar(8572),Tr(9909),_r(2492),Sr(3702),jr(8523),RPromise,CS.CONSTRUCTOR,PS.REJECTION_EVENT,IS.SUBCLASSING,MT.getterFor(R),kT.set,N_&&_.prototype,F_,LN,Df.TypeError,Bf.document,Uf.process,zj.f,Hz,V!!(B&&B.createEvent&&f.dispatchEvent),Gunhandledrejection,Wfunction(t){var e;return!(!m(t)||!v(et.then))&&e},Yfunction(t,e){var r,n,o,ie.value,a1e.state,ca?t.ok:t.fail,ut.resolve,ft.reject,lt.domain;try{c?(a||(2e.rejection&&Z(e),e.rejection1),!0c?ri:(l&&l.enter(),rc(i),l&&(l.exit(),o!0)),rt.promise?f(D(Promise-chain cycle)):(nW(r))?s(n,r,u,f):u(r)):f(i)}catch(t){l&&!o&&l.exit(),f(t)}},qfunction(t,e){t.notified||(t.notified!0,E((function(){for(var r,nt.reactions;rn.get();)Y(r,t);t.notified!1,e&&!t.rejection&&K(t)})))},$function(t,e,r){var n,o;V?((nB.createEvent(Event)).promisee,n.reasonr,n.initEvent(t,!1,!0),f.dispatchEvent(n)):n{promise:e,reason:r},!P&&(ofon+t)?o(n):tG&&x(Unhandled promise rejection,r)},Kfunction(t){s(w,f,(function(){var e,rt.facade,nt.value;if(J(t)&&(eO((function(){u?U.emit(unhandledRejection,n,r):$(G,r,n)})),t.rejectionu||J(t)?2:1,e.error))throw e.value}))},Jfunction(t){return 1!t.rejection&&!t.parent},Zfunction(t){s(w,f,(function(){var et.facade;u?U.emit(rejectionHandled,e):$(rejectionhandled,e,t.value)}))},Xfunction(t,e,r){return function(n){t(e,n,r)}},Qfunction(t,e,r){t.done||(t.done!0,r&&(tr),t.valuee,t.state2,q(t,!0))},ttfunction(t,e,r){if(!t.done){t.done!0,r&&(tr);try{if(t.facadee)throw D(Promise cant be resolved itself);var nW(e);n?E((function(){var r{done:!1};try{s(n,e,X(tt,r,t),X(Q,r,t))}catch(e){Q(r,e,t)}})):(t.valuee,t.state1,q(t,!1))}catch(e){Q({done:!1},e,t)}}};if(C&&(L(Ffunction(t){b(this,L),h(t),s(n,this);var eM(this);try{t(X(tt,e),X(Q,e))}catch(t){Q(e,t)}}).prototype,(nfunction(t){k(this,{type:R,done:!1,notified:!1,parent:!1,reactions:new A,rejection:!1,state:0,value:void 0})}).prototypel(L,then,(function(t,e){var rM(this),nz(g(this,F));return r.parent!0,n.ok!v(t)||t,n.failv(e)&&e,n.domainu?U.domain:void 0,0r.state?r.reactions.add(n):E((function(){Y(n,r)})),n.promise})),ofunction(){var tnew n,eM(t);this.promiset,this.resolveX(tt,e),this.rejectX(Q,e)},j.fzfunction(t){return tF||void 0t?new o(t):H(t)},!c&&v(_)&&N!Object.prototype)){iN.then,I||l(N,then,(function(t,e){var rthis;return new F((function(t,e){s(i,r,t,e)})).then(t,e)}),{unsafe:!0});try{delete N.constructor}catch(t){}p&&p(N,L)}a({global:!0,constructor:!0,wrap:!0,forced:C},{Promise:F}),d(F,R,!1,!0),y(R)},8674:function(t,e,r){r(3401),r(821),r(4164),r(6027),r(683),r(6294)},6027:function(t,e,r){use strict;var nr(2109),or(6916),ir(9662),ar(8523),cr(2534),ur(408);n({target:Promise,stat:!0,forced:r(612)},{race:function(t){var ethis,ra.f(e),nr.reject,fc((function(){var ai(e.resolve);u(t,(function(t){o(a,e,t).then(r.resolve,n)}))}));return f.error&&n(f.value),r.promise}})},683:function(t,e,r){use strict;var nr(2109),or(6916),ir(8523);n({target:Promise,stat:!0,forced:r(3702).CONSTRUCTOR},{reject:function(t){var ei.f(this);return o(e.reject,void 0,t),e.promise}})},6294:function(t,e,r){use strict;var nr(2109),or(5005),ir(1913),ar(2492),cr(3702).CONSTRUCTOR,ur(9478),fo(Promise),si&&!c;n({target:Promise,stat:!0,forced:i||c},{resolve:function(t){return u(s&&thisf?a:this,t)}})},2419:function(t,e,r){var nr(2109),or(5005),ir(2104),ar(7065),cr(9483),ur(9670),fr(111),sr(30),lr(7293),po(Reflect,construct),dObject.prototype,y.push,hl((function(){function t(){}return!(p((function(){}),,t)instanceof t)})),v!l((function(){p((function(){}))})),mh||v;n({target:Reflect,stat:!0,forced:m,sham:m},{construct:function(t,e){c(t),u(e);var rarguments.length3?t:c(arguments2);if(v&&!h)return p(t,e,r);if(tr){switch(e.length){case 0:return new t;case 1:return new t(e0);case 2:return new t(e0,e1);case 3:return new t(e0,e1,e2);case 4:return new t(e0,e1,e2,e3)}var nnull;return i(y,n,e),new(i(a,t,n))}var or.prototype,ls(f(o)?o:d),mi(t,l,e);return f(m)?m:l}})},4819:function(t,e,r){var nr(2109),or(6916),ir(111),ar(9670),cr(5032),ur(1236),fr(9518);n({target:Reflect,stat:!0},{get:function t(e,r){var n,s,larguments.length3?e:arguments2;return a(e)l?er:(nu.f(e,r))?c(n)?n.value:void 0n.get?void 0:o(n.get,l):i(sf(e))?t(s,r,l):void 0}})},4916:function(t,e,r){use strict;var nr(2109),or(2261);n({target:RegExp,proto:!0,forced:/./.exec!o},{exec:o})},7601:function(t,e,r){use strict;r(4916);var n,o,ir(2109),ar(6916),cr(1702),ur(614),fr(111),s(n!1,(o/ac/).execfunction(){return n!0,/./.exec.apply(this,arguments)},!0o.test(abc)&&n),lTypeError,pc(/./.test);i({target:RegExp,proto:!0,forced:!s},{test:function(t){var ethis.exec;if(!u(e))return p(this,t);var ra(e,this,t);if(null!r&&!f(r))throw new l(RegExp exec method returned something other than an Object or null);return!!r}})},9714:function(t,e,r){use strict;var nr(6530).PROPER,or(8052),ir(9670),ar(1340),cr(7293),ur(4706),ftoString,sRegExp.prototype.toString,lc((function(){return/a/b!s.call({source:a,flags:b})})),pn&&s.name!f;(l||p)&&o(RegExp.prototype,f,(function(){var ti(this);return/+a(t.source)+/+a(u(t))}),{unsafe:!0})},7852:function(t,e,r){use strict;var n,or(2109),ir(1702),ar(1236).f,cr(7466),ur(1340),fr(3929),sr(4488),lr(4964),pr(1913),di(.endsWith),yi(.slice),hMath.min,vl(endsWith);o({target:String,proto:!0,forced:!(!p&&!v&&(na(String.prototype,endsWith),n&&!n.writable)||v)},{endsWith:function(t){var eu(s(this));f(t);var rarguments.length>1?arguments1:void 0,ne.length,ovoid 0r?n:h(c(r),n),iu(t);return d?d(e,i,o):y(e,o-i.length,o)i}})},2023:function(t,e,r){use strict;var nr(2109),or(1702),ir(3929),ar(4488),cr(1340),ur(4964),fo(.indexOf);n({target:String,proto:!0,forced:!u(includes)},{includes:function(t){return!!~f(c(a(this)),c(i(t)),arguments.length>1?arguments1:void 0)}})},8783:function(t,e,r){use strict;var nr(8710).charAt,or(1340),ir(9909),ar(654),cString Iterator,ui.set,fi.getterFor(c);a(String,String,(function(t){u(this,{type:c,string:o(t),index:0})}),(function(){var t,ef(this),re.string,oe.index;return o>r.length?{value:void 0,done:!0}:(tn(r,o),e.index+t.length,{value:t,done:!1})}))},5306:function(t,e,r){use strict;var nr(2104),or(6916),ir(1702),ar(7007),cr(7293),ur(9670),fr(614),sr(9303),lr(7466),pr(1340),dr(4488),yr(1530),hr(8173),vr(647),mr(7651),br(5112)(replace),gMath.max,wMath.min,Ei(.concat),xi(.push),Oi(.indexOf),Ai(.slice),T$0a.replace(/./,$0),_!!/./b&&/./b(a,$0);a(replace,(function(t,e,r){var i_?$:$0;returnfunction(t,r){var nd(this),inullt?void 0:h(t,b);return i?o(i,t,n,r):o(e,p(n),t,r)},function(t,o){var au(this),cp(t);if(stringtypeof o&&-1O(o,i)&&-1O(o,$)){var dr(e,a,c,o);if(d.done)return d.value}var hf(o);h||(op(o));var ba.global;if(b){var Ta.unicode;a.lastIndex0}for(var _;;){var Sm(a,c);if(nullS)break;if(x(_,S),!b)break;p(S0)&&(a.lastIndexy(c,l(a.lastIndex),T))}for(var j,R,C0,P0;P_.length;P++){for(var Ip((S_P)0),Mg(w(s(S.index),c.length),0),k,N1;NS.length;N++)x(k,void 0(jSN)?j:String(j));var FS.groups;if(h){var LE(I,k,M,c);void 0!F&&x(L,F);var Dp(n(o,void 0,L))}else Dv(I,c,M,k,F,o);M>C&&(R+A(c,C,M)+D,CM+I.length)}return R+A(c,C)}}),!!c((function(){var t/./;return t.execfunction(){var t;return t.groups{a:7},t},7!.replace(t,$a>)}))||!T||_)},3123:function(t,e,r){use strict;var nr(2104),or(6916),ir(1702),ar(7007),cr(7850),ur(9670),fr(4488),sr(6707),lr(1530),pr(7466),dr(1340),yr(8173),hr(1589),vr(7651),mr(2261),br(2999),gr(7293),wb.UNSUPPORTED_Y,E4294967295,xMath.min,O.push,Ai(/./.exec),Ti(O),_i(.slice);a(split,(function(t,e,r){var i;return icabbc.split(/(b)*/)1||4!test.split(/(?:)/,-1).length||2!ab.split(/(?:ab)*/).length||4!..split(/(.?)(.?)/).length||..split(/()()/).length>1||.split(/.?/).length?function(t,r){var id(f(this)),avoid 0r?E:r>>>0;if(0a)return;if(void 0t)returni;if(!c(t))return o(e,i,t,a);for(var u,s,l,p,y(t.ignoreCase?i:)+(t.multiline?m:)+(t.unicode?u:)+(t.sticky?y:),v0,bnew RegExp(t.source,y+g);(uo(m,b,i))&&!((sb.lastIndex)>v&&(T(p,_(i,v,u.index)),u.length>1&&u.indexi.length&&n(O,p,h(u,1)),lu0.length,vs,p.length>a));)b.lastIndexu.index&&b.lastIndex++;return vi.length?!l&&A(b,)||T(p,):T(p,_(i,v)),p.length>a?h(p,0,a):p}:0.split(void 0,0).length?function(t,r){return void 0t&&0r?:o(e,this,t,r)}:e,function(e,r){var nf(this),anulle?void 0:y(e,t);return a?o(a,e,n,r):o(i,d(n),e,r)},function(t,n){var ou(this),ad(t),cr(i,o,a,n,i!e);if(c.done)return c.value;var fs(o,RegExp),yo.unicode,h(o.ignoreCase?i:)+(o.multiline?m:)+(o.unicode?u:)+(w?g:y),mnew f(w?^(?:+o.source+):o,h),bvoid 0n?E:n>>>0;if(0b)return;if(0a.length)return nullv(m,a)?a:;for(var g0,O0,A;Oa.length;){m.lastIndexw?0:O;var S,jv(m,w?_(a,O):a);if(nullj||(Sx(p(m.lastIndex+(w?O:0)),a.length))g)Ol(a,O,y);else{if(T(A,_(a,g,O)),A.lengthb)return A;for(var R1;Rj.length-1;R++)if(T(A,jR),A.lengthb)return A;OgS}}return T(A,_(a,g)),A}}),!!g((function(){var t/(?:)/,et.exec;t.execfunction(){return e.apply(this,arguments)};var rab.split(t);return 2!r.length||a!r0||b!r1})),w)},6755:function(t,e,r){use strict;var n,or(2109),ir(1702),ar(1236).f,cr(7466),ur(1340),fr(3929),sr(4488),lr(4964),pr(1913),di(.startsWith),yi(.slice),hMath.min,vl(startsWith);o({target:String,proto:!0,forced:!(!p&&!v&&(na(String.prototype,startsWith),n&&!n.writable)||v)},{startsWith:function(t){var eu(s(this));f(t);var rc(h(arguments.length>1?arguments1:void 0,e.length)),nu(t);return d?d(e,n,r):y(e,r,r+n.length)n}})},3210:function(t,e,r){use strict;var nr(2109),or(3111).trim;n({target:String,proto:!0,forced:r(6091)(trim)},{trim:function(){return o(this)}})},2443:function(t,e,r){r(7235)(asyncIterator)},4032:function(t,e,r){use strict;var nr(2109),or(7854),ir(6916),ar(1702),cr(1913),ur(9781),fr(133),sr(7293),lr(2597),pr(7976),dr(9670),yr(5656),hr(4948),vr(1340),mr(9114),br(30),gr(1956),wr(8006),Er(1156),xr(5181),Or(1236),Ar(3070),Tr(6048),_r(5296),Sr(8052),jr(2309),Rr(6200),Cr(3501),Pr(9711),Ir(5112),Mr(6061),kr(7235),Nr(6532),Fr(8003),Lr(9909),Dr(2092).forEach,BR(hidden),USymbol,zL.set,HL.getterFor(U),VObject.prototype,Go.Symbol,WG&&G.prototype,Yo.TypeError,qo.QObject,$O.f,KA.f,JE.f,Z_.f,Xa(.push),Qj(symbols),ttj(op-symbols),etj(wks),rt!q||!q.prototype||!q.prototype.findChild,ntu&&s((function(){return 7!b(K({},a,{get:function(){return K(this,a,{value:7}).a}})).a}))?function(t,e,r){var n$(V,e);n&&delete Ve,K(t,e,r),n&&t!V&&K(V,e,n)}:K,otfunction(t,e){var rQtb(W);return z(r,{type:U,tag:t,description:e}),u||(r.descriptione),r},itfunction(t,e,r){tV&&it(tt,e,r),d(t);var nh(e);return d(r),l(Q,n)?(r.enumerable?(l(t,B)&&tBn&&(tBn!1),rb(r,{enumerable:m(0,!1)})):(l(t,B)||K(t,B,m(1,{})),tBn!0),nt(t,n,r)):K(t,n,r)},atfunction(t,e){d(t);var ry(e),ng(r).concat(st(r));return D(n,(function(e){u&&!i(ct,r,e)||it(t,e,re)})),t},ctfunction(t){var eh(t),ri(Z,this,e);return!(thisV&&l(Q,e)&&!l(tt,e))&&(!(r||!l(this,e)||!l(Q,e)||l(this,B)&&thisBe)||r)},utfunction(t,e){var ry(t),nh(e);if(r!V||!l(Q,n)||l(tt,n)){var o$(r,n);return!o||!l(Q,n)||l(r,B)&&rBn||(o.enumerable!0),o}},ftfunction(t){var eJ(y(t)),r;return D(e,(function(t){l(Q,t)||l(C,t)||X(r,t)})),r},stfunction(t){var etV,rJ(e?tt:y(t)),n;return D(r,(function(t){!l(Q,t)||e&&!l(V,t)||X(n,Qt)})),n};f||(S(W(Gfunction(){if(p(W,this))throw Y(Symbol is not a constructor);var targuments.length&&void 0!arguments0?v(arguments0):void 0,eP(t),rfunction(t){thisV&&i(r,tt,t),l(this,B)&&l(thisB,e)&&(thisBe!1),nt(this,e,m(1,t))};return u&&rt&&nt(V,e,{configurable:!0,set:r}),ot(e,t)}).prototype,toString,(function(){return H(this).tag})),S(G,withoutSetter,(function(t){return ot(P(t),t)})),_.fct,A.fit,T.fat,O.fut,w.fE.fft,x.fst,M.ffunction(t){return ot(I(t),t)},u&&(K(W,description,{configurable:!0,get:function(){return H(this).description}}),c||S(V,propertyIsEnumerable,ct,{unsafe:!0}))),n({global:!0,constructor:!0,wrap:!0,forced:!f,sham:!f},{Symbol:G}),D(g(et),(function(t){k(t)})),n({target:U,stat:!0,forced:!f},{useSetter:function(){rt!0},useSimple:function(){rt!1}}),n({target:Object,stat:!0,forced:!f,sham:!u},{create:function(t,e){return void 0e?b(t):at(b(t),e)},defineProperty:it,defineProperties:at,getOwnPropertyDescriptor:ut}),n({target:Object,stat:!0,forced:!f},{getOwnPropertyNames:ft}),N(),F(G,U),CB!0},1817:function(t,e,r){use strict;var nr(2109),or(9781),ir(7854),ar(1702),cr(2597),ur(614),fr(7976),sr(1340),lr(3070).f,pr(9920),di.Symbol,yd&&d.prototype;if(o&&u(d)&&(!(descriptionin y)||void 0!d().description)){var h{},vfunction(){var targuments.length1||void 0arguments0?void 0:s(arguments0),ef(y,this)?new d(t):void 0t?d():d(t);returnt&&(he!0),e};p(v,d),v.prototypey,y.constructorv;var mSymbol(test)String(d(test)),ba(y.toString),ga(y.valueOf),w/^Symbol\((.*)\)^)+$/,Ea(.replace),xa(.slice);l(y,description,{configurable:!0,get:function(){var tg(this),eb(t);if(c(h,t))return;var rm?x(e,7,-1):E(e,w,$1);returnr?void 0:r}}),n({global:!0,constructor:!0,forced:!0},{Symbol:v})}},763:function(t,e,r){var nr(2109),or(5005),ir(2597),ar(1340),cr(2309),ur(735),fc(string-to-symbol-registry),sc(symbol-to-string-registry);n({target:Symbol,stat:!0,forced:!u},{for:function(t){var ea(t);if(i(f,e))return fe;var ro(Symbol)(e);return fer,sre,r}})},2165:function(t,e,r){r(7235)(iterator)},2526:function(t,e,r){r(4032),r(763),r(6620),r(8862),r(9660)},6620:function(t,e,r){var nr(2109),or(2597),ir(2190),ar(6330),cr(2309),ur(735),fc(symbol-to-string-registry);n({target:Symbol,stat:!0,forced:!u},{keyFor:function(t){if(!i(t))throw TypeError(a(t)+ is not a symbol);if(o(f,t))return ft}})},3680:function(t,e,r){var nr(5005),or(7235),ir(8003);o(toStringTag),i(n(Symbol),Symbol)},2990:function(t,e,r){use strict;var nr(1702),or(260),in(r(1048)),ao.aTypedArray;(0,o.exportTypedArrayMethod)(copyWithin,(function(t,e){return i(a(this),t,e,arguments.length>2?arguments2:void 0)}))},8927:function(t,e,r){use strict;var nr(260),or(2092).every,in.aTypedArray;(0,n.exportTypedArrayMethod)(every,(function(t){return o(i(this),t,arguments.length>1?arguments1:void 0)}))},3105:function(t,e,r){use strict;var nr(260),or(1285),ir(4599),ar(648),cr(6916),ur(1702),fr(7293),sn.aTypedArray,ln.exportTypedArrayMethod,pu(.slice);l(fill,(function(t){var earguments.length;s(this);var rBigp(a(this),0,3)?i(t):+t;return c(o,this,r,e>1?arguments1:void 0,e>2?arguments2:void 0)}),f((function(){var t0;return new Int8Array(2).fill({valueOf:function(){return t++}}),1!t})))},5035:function(t,e,r){use strict;var nr(260),or(2092).filter,ir(3074),an.aTypedArray;(0,n.exportTypedArrayMethod)(filter,(function(t){var eo(a(this),t,arguments.length>1?arguments1:void 0);return i(this,e)}))},7174:function(t,e,r){use strict;var nr(260),or(2092).findIndex,in.aTypedArray;(0,n.exportTypedArrayMethod)(findIndex,(function(t){return o(i(this),t,arguments.length>1?arguments1:void 0)}))},4345:function(t,e,r){use strict;var nr(260),or(2092).find,in.aTypedArray;(0,n.exportTypedArrayMethod)(find,(function(t){return o(i(this),t,arguments.length>1?arguments1:void 0)}))},2846:function(t,e,r){use strict;var nr(260),or(2092).forEach,in.aTypedArray;(0,n.exportTypedArrayMethod)(forEach,(function(t){o(i(this),t,arguments.length>1?arguments1:void 0)}))},8145:function(t,e,r){use strict;var nr(3832);(0,r(260).exportTypedArrayStaticMethod)(from,r(7321),n)},4731:function(t,e,r){use strict;var nr(260),or(1318).includes,in.aTypedArray;(0,n.exportTypedArrayMethod)(includes,(function(t){return o(i(this),t,arguments.length>1?arguments1:void 0)}))},7209:function(t,e,r){use strict;var nr(260),or(1318).indexOf,in.aTypedArray;(0,n.exportTypedArrayMethod)(indexOf,(function(t){return o(i(this),t,arguments.length>1?arguments1:void 0)}))},6319:function(t,e,r){use strict;var nr(7854),or(7293),ir(1702),ar(260),cr(6992),ur(5112)(iterator),fn.Uint8Array,si(c.values),li(c.keys),pi(c.entries),da.aTypedArray,ya.exportTypedArrayMethod,hf&&f.prototype,v!o((function(){hu.call(1)})),m!!h&&h.values&&huh.values&&valuesh.values.name,bfunction(){return s(d(this))};y(entries,(function(){return p(d(this))}),v),y(keys,(function(){return l(d(this))}),v),y(values,b,v||!m,{name:values}),y(u,b,v||!m,{name:values})},8867:function(t,e,r){use strict;var nr(260),or(1702),in.aTypedArray,an.exportTypedArrayMethod,co(.join);a(join,(function(t){return c(i(this),t)}))},7789:function(t,e,r){use strict;var nr(260),or(2104),ir(6583),an.aTypedArray;(0,n.exportTypedArrayMethod)(lastIndexOf,(function(t){var earguments.length;return o(i,a(this),e>1?t,arguments1:t)}))},3739:function(t,e,r){use strict;var nr(260),or(2092).map,ir(6304),an.aTypedArray;(0,n.exportTypedArrayMethod)(map,(function(t){return o(a(this),t,arguments.length>1?arguments1:void 0,(function(t,e){return new(i(t))(e)}))}))},4483:function(t,e,r){use strict;var nr(260),or(3671).right,in.aTypedArray;(0,n.exportTypedArrayMethod)(reduceRight,(function(t){var earguments.length;return o(i(this),t,e,e>1?arguments1:void 0)}))},9368:function(t,e,r){use strict;var nr(260),or(3671).left,in.aTypedArray;(0,n.exportTypedArrayMethod)(reduce,(function(t){var earguments.length;return o(i(this),t,e,e>1?arguments1:void 0)}))},2056:function(t,e,r){use strict;var nr(260),on.aTypedArray,in.exportTypedArrayMethod,aMath.floor;i(reverse,(function(){for(var t,ethis,ro(e).length,na(r/2),i0;in;)tei,ei++e--r,ert;return e}))},3462:function(t,e,r){use strict;var nr(7854),or(6916),ir(260),ar(6244),cr(4590),ur(7908),fr(7293),sn.RangeError,ln.Int8Array,pl&&l.prototype,dp&&p.set,yi.aTypedArray,hi.exportTypedArrayMethod,v!f((function(){var tnew Uint8ClampedArray(2);return o(d,t,{length:1,0:3},1),3!t1})),mv&&i.NATIVE_ARRAY_BUFFER_VIEWS&&f((function(){var tnew l(2);return t.set(1),t.set(2,1),0!t0||2!t1}));h(set,(function(t){y(this);var ec(arguments.length>1?arguments1:void 0,1),ru(t);if(v)return o(d,this,r,e);var nthis.length,ia(r),f0;if(i+e>n)throw s(Wrong length);for(;fi;)thise+frf++}),!v||m)},678:function(t,e,r){use strict;var nr(260),or(6304),ir(7293),ar(206),cn.aTypedArray;(0,n.exportTypedArrayMethod)(slice,(function(t,e){for(var ra(c(this),t,e),no(this),i0,ur.length,fnew n(u);u>i;)firi++;return f}),i((function(){new Int8Array(1).slice()})))},7462:function(t,e,r){use strict;var nr(260),or(2092).some,in.aTypedArray;(0,n.exportTypedArrayMethod)(some,(function(t){return o(i(this),t,arguments.length>1?arguments1:void 0)}))},3824:function(t,e,r){use strict;var nr(7854),or(1702),ir(7293),ar(9662),cr(4362),ur(260),fr(8886),sr(256),lr(7392),pr(8008),du.aTypedArray,yu.exportTypedArrayMethod,hn.Uint16Array,vh&&o(h.prototype.sort),m!(!v||i((function(){v(new h(2),null)}))&&i((function(){v(new h(2),{})}))),b!!v&&!i((function(){if(l)return l74;if(f)return f67;if(s)return!0;if(p)return p602;var t,e,rnew h(516),nArray(516);for(t0;t516;t++)et%4,rt515-t,ntt-2*e+3;for(v(r,(function(t,e){return(t/4|0)-(e/4|0)})),t0;t516;t++)if(rt!nt)return!0}));y(sort,(function(t){return void 0!t&&a(t),b?v(this,t):c(d(this),function(t){return function(e,r){return void 0!t?+t(e,r)||0:r!r?-1:e!e?1:0e&&0r?1/e>0&&1/r0?1:-1:e>r}}(t))}),!b||m)},5021:function(t,e,r){use strict;var nr(260),or(7466),ir(1400),ar(6304),cn.aTypedArray;(0,n.exportTypedArrayMethod)(subarray,(function(t,e){var rc(this),nr.length,ui(t,n);return new(a(r))(r.buffer,r.byteOffset+u*r.BYTES_PER_ELEMENT,o((void 0e?n:i(e,n))-u))}))},2974:function(t,e,r){use strict;var nr(7854),or(2104),ir(260),ar(7293),cr(206),un.Int8Array,fi.aTypedArray,si.exportTypedArrayMethod,l.toLocaleString,p!!u&&a((function(){l.call(new u(1))}));s(toLocaleString,(function(){return o(l,p?c(f(this)):f(this),c(arguments))}),a((function(){return1,2.toLocaleString()!new u(1,2).toLocaleString()}))||!a((function(){u.prototype.toLocaleString.call(1,2)})))},5016:function(t,e,r){use strict;var nr(260).exportTypedArrayMethod,or(7293),ir(7854),ar(1702),ci.Uint8Array,uc&&c.prototype||{},f.toString,sa(.join);o((function(){f.call({})}))&&(ffunction(){return s(this)});var lu.toString!f;n(toString,f,l)},2472:function(t,e,r){r(9843)(Uint8,(function(t){return function(e,r,n){return t(this,e,r,n)}}))},1202:function(t,e,r){use strict;var n,or(7854),ir(1702),ar(9190),cr(2423),ur(7710),fr(9320),sr(111),lr(2050),pr(9909).enforce,dr(8536),y!o.ActiveXObject&&ActiveXObjectin o,hfunction(t){return function(){return t(this,arguments.length?arguments0:void 0)}},vu(WeakMap,h,f);if(d&&y){nf.getConstructor(h,WeakMap,!0),c.enable();var mv.prototype,bi(m.delete),gi(m.has),wi(m.get),Ei(m.set);a(m,{delete:function(t){if(s(t)&&!l(t)){var ep(this);return e.frozen||(e.frozennew n),b(this,t)||e.frozen.delete(t)}return b(this,t)},has:function(t){if(s(t)&&!l(t)){var ep(this);return e.frozen||(e.frozennew n),g(this,t)||e.frozen.has(t)}return g(this,t)},get:function(t){if(s(t)&&!l(t)){var ep(this);return e.frozen||(e.frozennew n),g(this,t)?w(this,t):e.frozen.get(t)}return w(this,t)},set:function(t,e){if(s(t)&&!l(t)){var rp(this);r.frozen||(r.frozennew n),g(this,t)?E(this,t,e):r.frozen.set(t,e)}else E(this,t,e);return this}})}},4129:function(t,e,r){r(1202)},4747:function(t,e,r){var nr(7854),or(8324),ir(8509),ar(8533),cr(8880),ufunction(t){if(t&&t.forEach!a)try{c(t,forEach,a)}catch(e){t.forEacha}};for(var f in o)of&&u(nf&&nf.prototype);u(i)},3948:function(t,e,r){var nr(7854),or(8324),ir(8509),ar(6992),cr(8880),ur(5112),fu(iterator),su(toStringTag),la.values,pfunction(t,e){if(t){if(tf!l)try{c(t,f,l)}catch(e){tfl}if(ts||c(t,s,e),oe)for(var r in a)if(tr!ar)try{c(t,r,ar)}catch(e){trar}}};for(var d in o)p(nd&&nd.prototype,d);p(i,DOMTokenList)},5556:function(t,e,r){use strict;r(6992);var nr(2109),or(7854),ir(6916),ar(1702),cr(9781),ur(590),fr(8052),sr(9190),lr(8003),pr(4994),dr(9909),yr(5787),hr(614),vr(2597),mr(9974),br(648),gr(9670),wr(111),Er(1340),xr(30),Or(9114),Ar(8554),Tr(1246),_r(8053),Sr(5112),jr(4362),RS(iterator),CURLSearchParams,PURLSearchParamsIterator,Id.set,Md.getterFor(C),kd.getterFor(P),NObject.getOwnPropertyDescriptor,Ffunction(t){if(!c)return ot;var eN(o,t);return e&&e.value},LF(fetch),DF(Request),BF(Headers),UD&&D.prototype,zB&&B.prototype,Ho.RegExp,Vo.TypeError,Go.decodeURIComponent,Wo.encodeURIComponent,Ya(.charAt),qa(.join),$a(.push),Ka(.replace),Ja(.shift),Za(.splice),Xa(.split),Qa(.slice),tt/\+/g,etArray(4),rtfunction(t){return ett-1||(ett-1H(((?:%\\da-f{2}){+t+}),gi))},ntfunction(t){try{return G(t)}catch(e){return t}},otfunction(t){var eK(t,tt, ),r4;try{return G(e)}catch(t){for(;r;)eK(e,rt(r--),nt);return e}},it/!()~|%20/g,at{!:%21,:%27,(:%28,):%29,~:%7E,%20:+},ctfunction(t){return att},utfunction(t){return K(W(t),it,ct)},ftp((function(t,e){I(this,{type:P,iterator:A(M(t).entries),kind:e})}),Iterator,(function(){var tk(this),et.kind,rt.iterator.next(),nr.value;return r.done||(r.valuekeyse?n.key:valuese?n.value:n.key,n.value),r}),!0),stfunction(t){this.entries,this.urlnull,void 0!t&&(w(t)?this.parseObject(t):this.parseQuery(stringtypeof t??Y(t,0)?Q(t,1):t:E(t)))};st.prototype{type:C,bindURL:function(t){this.urlt,this.update()},parseObject:function(t){var e,r,n,o,a,c,u,fT(t);if(f)for(r(eA(t,f)).next;!(ni(r,e)).done;){if(a(oA(g(n.value))).next,(ci(a,o)).done||(ui(a,o)).done||!i(a,o).done)throw V(Expected sequence with length 2);$(this.entries,{key:E(c.value),value:E(u.value)})}else for(var s in t)v(t,s)&&$(this.entries,{key:s,value:E(ts)})},parseQuery:function(t){if(t)for(var e,r,nX(t,&),o0;on.length;)(eno++).length&&(rX(e,),$(this.entries,{key:ot(J(r)),value:ot(q(r,))}))},serialize:function(){for(var t,ethis.entries,r,n0;ne.length;)ten++,$(r,ut(t.key)++ut(t.value));return q(r,&)},update:function(){this.entries.length0,this.parseQuery(this.url.query)},updateURL:function(){this.url&&this.url.update()}};var ltfunction(){y(this,pt);var targuments.length>0?arguments0:void 0;I(this,new st(t))},ptlt.prototype;if(s(pt,{append:function(t,e){_(arguments.length,2);var rM(this);$(r.entries,{key:E(t),value:E(e)}),r.updateURL()},delete:function(t){_(arguments.length,1);for(var eM(this),re.entries,nE(t),o0;or.length;)ro.keyn?Z(r,o,1):o++;e.updateURL()},get:function(t){_(arguments.length,1);for(var eM(this).entries,rE(t),n0;ne.length;n++)if(en.keyr)return en.value;return null},getAll:function(t){_(arguments.length,1);for(var eM(this).entries,rE(t),n,o0;oe.length;o++)eo.keyr&&$(n,eo.value);return n},has:function(t){_(arguments.length,1);for(var eM(this).entries,rE(t),n0;ne.length;)if(en++.keyr)return!0;return!1},set:function(t,e){_(arguments.length,1);for(var r,nM(this),on.entries,i!1,aE(t),cE(e),u0;uo.length;u++)(rou).keya&&(i?Z(o,u--,1):(i!0,r.valuec));i||$(o,{key:a,value:c}),n.updateURL()},sort:function(){var tM(this);j(t.entries,(function(t,e){return t.key>e.key?1:-1})),t.updateURL()},forEach:function(t){for(var e,rM(this).entries,nm(t,arguments.length>1?arguments1:void 0),o0;or.length;)n((ero++).value,e.key,this)},keys:function(){return new ft(this,keys)},values:function(){return new ft(this,values)},entries:function(){return new ft(this,entries)}},{enumerable:!0}),f(pt,R,pt.entries,{name:entries}),f(pt,toString,(function(){return M(this).serialize()}),{enumerable:!0}),l(lt,C),n({global:!0,constructor:!0,forced:!u},{URLSearchParams:lt}),!u&&h(B)){var dta(z.has),yta(z.set),htfunction(t){if(w(t)){var e,rt.body;if(b(r)C)return et.headers?new B(t.headers):new B,dt(e,content-type)||yt(e,content-type,application/x-www-form-urlencoded;charsetUTF-8),x(t,{body:O(0,E(r)),headers:O(0,e)})}return t};if(h(L)&&n({global:!0,enumerable:!0,dontCallGetSet:!0,forced:!0},{fetch:function(t){return L(t,arguments.length>1?ht(arguments1):{})}}),h(D)){var vtfunction(t){return y(this,U),new D(t,arguments.length>1?ht(arguments1):{})};U.constructorvt,vt.prototypeU,n({global:!0,constructor:!0,dontCallGetSet:!0,forced:!0},{Request:vt})}}t.exports{URLSearchParams:lt,getState:M}},1637:function(t,e,r){r(5556)},5426:function(t,e,r){use strict;var nr(7537),or.n(n),ir(3645),ar.n(i)()(o());a.push(t.id,#pay-theory-badge-wrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-content: center;\n\tjustify-content: center;\n}\n\n.combined {\n\tjustify-content: flex-start;\n\talign-items: center;\n}\n\n#field-wrapper-card-number {\n\tmin-width: 213px;\n\tflex-grow: 1;\n}\n\n#field-wrapper-card-exp {\n\tmin-width: 75px;\n}\n\n#field-wrapper-card-cvv {\n\tmin-width: 75px;\n}\n\n#field-wrapper-address-postal_code {\n\tmin-width: 75px;\n}\n\n.field-wrapper {\n\tdisplay: flex;\n\tjustify-content: center;\n\tflex-direction: column;\n}\n\n.field-wrapper iframe {\n\twidth: 100%;\n\tdisplay: inline-block;\n\tborder: none;\n\tmax-height: 72px;\n\tmin-height: 18px;\n\theight: auto;\n}\n\n.pay-theory-field {\n\tdisplay: flex;\n\tflex-direction: row;\n\twidth: auto;\n\theight: 100%;\n}\n\n#pay-theory-credit-card {\n\twidth: 400px;\n}\n\n#pay-theory-credit-card-number {\n\twidth: 340px;\n}\n\n.pay-theory-field div {\n\tdisplay: flex;\n\tflex-grow: 1;\n}\n\n.framed {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n}\n,,{version:3,sources:webpack://./src/style.css,names:,mappings:AAAA;CACC,aAAa;CACb,sBAAsB;CACtB,qBAAqB;CACrB,uBAAuB;AACxB;;AAEA;CACC,2BAA2B;CAC3B,mBAAmB;AACpB;;AAEA;CACC,gBAAgB;CAChB,YAAY;AACb;;AAEA;CACC,eAAe;AAChB;;AAEA;CACC,eAAe;AAChB;;AAEA;CACC,eAAe;AAChB;;AAEA;CACC,aAAa;CACb,uBAAuB;CACvB,sBAAsB;AACvB;;AAEA;CACC,WAAW;CACX,qBAAqB;CACrB,YAAY;CACZ,gBAAgB;CAChB,gBAAgB;CAChB,YAAY;AACb;;AAEA;CACC,aAAa;CACb,mBAAmB;CACnB,WAAW;CACX,YAAY;AACb;;AAEA;CACC,YAAY;AACb;;AAEA;CACC,YAAY;AACb;;AAEA;CACC,aAAa;CACb,YAAY;AACb;;AAEA;CACC,aAAa;CACb,sBAAsB;CACtB,YAAY;AACb,sourcesContent:#pay-theory-badge-wrapper {\n\tdisplay: flex;\n\tflex-direction: column;\n\talign-content: center;\n\tjustify-content: center;\n}\n\n.combined {\n\tjustify-content: flex-start;\n\talign-items: center;\n}\n\n#field-wrapper-card-number {\n\tmin-width: 213px;\n\tflex-grow: 1;\n}\n\n#field-wrapper-card-exp {\n\tmin-width: 75px;\n}\n\n#field-wrapper-card-cvv {\n\tmin-width: 75px;\n}\n\n#field-wrapper-address-postal_code {\n\tmin-width: 75px;\n}\n\n.field-wrapper {\n\tdisplay: flex;\n\tjustify-content: center;\n\tflex-direction: column;\n}\n\n.field-wrapper iframe {\n\twidth: 100%;\n\tdisplay: inline-block;\n\tborder: none;\n\tmax-height: 72px;\n\tmin-height: 18px;\n\theight: auto;\n}\n\n.pay-theory-field {\n\tdisplay: flex;\n\tflex-direction: row;\n\twidth: auto;\n\theight: 100%;\n}\n\n#pay-theory-credit-card {\n\twidth: 400px;\n}\n\n#pay-theory-credit-card-number {\n\twidth: 340px;\n}\n\n.pay-theory-field div {\n\tdisplay: flex;\n\tflex-grow: 1;\n}\n\n.framed {\n\tdisplay: flex;\n\tflex-direction: column;\n\theight: 100%;\n}\n,sourceRoot:}),e.Za},3645:function(t){use strict;t.exportsfunction(t){var e;return e.toStringfunction(){return this.map((function(e){var r,nvoid 0!e5;return e4&&(r+@supports (.concat(e4,) {)),e2&&(r+@media .concat(e2, {)),n&&(r+@layer.concat(e5.length>0? .concat(e5):, {)),r+t(e),n&&(r+}),e2&&(r+}),e4&&(r+}),r})).join()},e.ifunction(t,r,n,o,i){stringtypeof t&&(tnull,t,void 0);var a{};if(n)for(var c0;cthis.length;c++){var uthisc0;null!u&&(au!0)}for(var f0;ft.length;f++){var s.concat(tf);n&&as0||(void 0!i&&(void 0s5||(s1@layer.concat(s5.length>0? .concat(s5):, {).concat(s1,})),s5i),r&&(s2?(s1@media .concat(s2, {).concat(s1,}),s2r):s2r),o&&(s4?(s1@supports (.concat(s4,) {).concat(s1,}),s4o):s4.concat(o)),e.push(s))}},e}},7537:function(t){use strict;t.exportsfunction(t){var et1,rt3;if(!r)return e;if(functiontypeof btoa){var nbtoa(unescape(encodeURIComponent(JSON.stringify(r)))),osourceMappingURLdata:application/json;charsetutf-8;base64,.concat(n),i/*# .concat(o, */),ar.sources.map((function(t){return/*# sourceURL.concat(r.sourceRoot||).concat(t, */)}));returne.concat(a).concat(i).join(\n)}returne.join(\n)}},7856:function(t){t.exportsfunction(){use strict;function t(e){return(tfunctiontypeof Symbol&&symboltypeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&functiontypeof Symbol&&t.constructorSymbol&&t!Symbol.prototype?symbol:typeof t})(e)}function e(t,r){return(eObject.setPrototypeOf||function(t,e){return t.__proto__e,t})(t,r)}function r(){if(undefinedtypeof Reflect||!Reflect.construct)return!1;if(Reflect.construct.sham)return!1;if(functiontypeof Proxy)return!0;try{return Boolean.prototype.valueOf.call(Reflect.construct(Boolean,,(function(){}))),!0}catch(t){return!1}}function n(t,o,i){return(nr()?Reflect.construct:function(t,r,n){var onull;o.push.apply(o,r);var inew(Function.bind.apply(t,o));return n&&e(i,n.prototype),i}).apply(null,arguments)}function o(t){return function(t){if(Array.isArray(t))return i(t)}(t)||function(t){if(undefined!typeof Symbol&&null!tSymbol.iterator||null!t@@iterator)return Array.from(t)}(t)||function(t,e){if(t){if(stringtypeof t)return i(t,e);var rObject.prototype.toString.call(t).slice(8,-1);returnObjectr&&t.constructor&&(rt.constructor.name),Mapr||Setr?Array.from(t):Argumentsr||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?i(t,e):void 0}}(t)||function(){throw new TypeError(Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a Symbol.iterator() method.)}()}function i(t,e){(nulle||e>t.length)&&(et.length);for(var r0,nnew Array(e);re;r++)nrtr;return n}var aObject.hasOwnProperty,cObject.setPrototypeOf,uObject.isFrozen,fObject.getPrototypeOf,sObject.getOwnPropertyDescriptor,lObject.freeze,pObject.seal,dObject.create,yundefined!typeof Reflect&&Reflect,hy.apply,vy.construct;h||(hfunction(t,e,r){return t.apply(e,r)}),l||(lfunction(t){return t}),p||(pfunction(t){return t}),v||(vfunction(t,e){return n(t,o(e))});var m,bj(Array.prototype.forEach),gj(Array.prototype.pop),wj(Array.prototype.push),Ej(String.prototype.toLowerCase),xj(String.prototype.match),Oj(String.prototype.replace),Aj(String.prototype.indexOf),Tj(String.prototype.trim),_j(RegExp.prototype.test),S(mTypeError,function(){for(var targuments.length,enew Array(t),r0;rt;r++)erargumentsr;return v(m,e)});function j(t){return function(e){for(var rarguments.length,nnew Array(r>1?r-1:0),o1;or;o++)no-1argumentso;return h(t,e,n)}}function R(t,e){c&&c(t,null);for(var re.length;r--;){var ner;if(stringtypeof n){var oE(n);o!n&&(u(e)||(ero),no)}tn!0}return t}function C(t){var e,rd(null);for(e in t)h(a,t,e)&&(rete);return r}function P(t,e){for(;null!t;){var rs(t,e);if(r){if(r.get)return j(r.get);if(functiontypeof r.value)return j(r.value)}tf(t)}return function(t){return console.warn(fallback value for,t),null}}var Il(a,abbr,acronym,address,area,article,aside,audio,b,bdi,bdo,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,content,data,datalist,dd,decorator,del,details,dfn,dialog,dir,div,dl,dt,element,em,fieldset,figcaption,figure,font,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,img,input,ins,kbd,label,legend,li,main,map,mark,marquee,menu,menuitem,meter,nav,nobr,ol,optgroup,option,output,p,picture,pre,progress,q,rp,rt,ruby,s,samp,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,tr,track,tt,u,ul,var,video,wbr),Ml(svg,a,altglyph,altglyphdef,altglyphitem,animatecolor,animatemotion,animatetransform,circle,clippath,defs,desc,ellipse,filter,font,g,glyph,glyphref,hkern,image,line,lineargradient,marker,mask,metadata,mpath,path,pattern,polygon,polyline,radialgradient,rect,stop,style,switch,symbol,text,textpath,title,tref,tspan,view,vkern),kl(feBlend,feColorMatrix,feComponentTransfer,feComposite,feConvolveMatrix,feDiffuseLighting,feDisplacementMap,feDistantLight,feFlood,feFuncA,feFuncB,feFuncG,feFuncR,feGaussianBlur,feImage,feMerge,feMergeNode,feMorphology,feOffset,fePointLight,feSpecularLighting,feSpotLight,feTile,feTurbulence),Nl(animate,color-profile,cursor,discard,fedropshadow,font-face,font-face-format,font-face-name,font-face-src,font-face-uri,foreignobject,hatch,hatchpath,mesh,meshgradient,meshpatch,meshrow,missing-glyph,script,set,solidcolor,unknown,use),Fl(math,menclose,merror,mfenced,mfrac,mglyph,mi,mlabeledtr,mmultiscripts,mn,mo,mover,mpadded,mphantom,mroot,mrow,ms,mspace,msqrt,mstyle,msub,msup,msubsup,mtable,mtd,mtext,mtr,munder,munderover),Ll(maction,maligngroup,malignmark,mlongdiv,mscarries,mscarry,msgroup,mstack,msline,msrow,semantics,annotation,annotation-xml,mprescripts,none),Dl(#text),Bl(accept,action,align,alt,autocapitalize,autocomplete,autopictureinpicture,autoplay,background,bgcolor,border,capture,cellpadding,cellspacing,checked,cite,class,clear,color,cols,colspan,controls,controlslist,coords,crossorigin,datetime,decoding,default,dir,disabled,disablepictureinpicture,disableremoteplayback,download,draggable,enctype,enterkeyhint,face,for,headers,height,hidden,high,href,hreflang,id,inputmode,integrity,ismap,kind,label,lang,list,loading,loop,low,max,maxlength,media,method,min,minlength,multiple,muted,name,nonce,noshade,novalidate,nowrap,open,optimum,pattern,placeholder,playsinline,poster,preload,pubdate,radiogroup,readonly,rel,required,rev,reversed,role,rows,rowspan,spellcheck,scope,selected,shape,size,sizes,span,srclang,start,src,srcset,step,style,summary,tabindex,title,translate,type,usemap,valign,value,width,xmlns,slot),Ul(accent-height,accumulate,additive,alignment-baseline,ascent,attributename,attributetype,azimuth,basefrequency,baseline-shift,begin,bias,by,class,clip,clippathunits,clip-path,clip-rule,color,color-interpolation,color-interpolation-filters,color-profile,color-rendering,cx,cy,d,dx,dy,diffuseconstant,direction,display,divisor,dur,edgemode,elevation,end,fill,fill-opacity,fill-rule,filter,filterunits,flood-color,flood-opacity,font-family,font-size,font-size-adjust,font-stretch,font-style,font-variant,font-weight,fx,fy,g1,g2,glyph-name,glyphref,gradientunits,gradienttransform,height,href,id,image-rendering,in,in2,k,k1,k2,k3,k4,kerning,keypoints,keysplines,keytimes,lang,lengthadjust,letter-spacing,kernelmatrix,kernelunitlength,lighting-color,local,marker-end,marker-mid,marker-start,markerheight,markerunits,markerwidth,maskcontentunits,maskunits,max,mask,media,method,mode,min,name,numoctaves,offset,operator,opacity,order,orient,orientation,origin,overflow,paint-order,path,pathlength,patterncontentunits,patterntransform,patternunits,points,preservealpha,preserveaspectratio,primitiveunits,r,rx,ry,radius,refx,refy,repeatcount,repeatdur,restart,result,rotate,scale,seed,shape-rendering,specularconstant,specularexponent,spreadmethod,startoffset,stddeviation,stitchtiles,stop-color,stop-opacity,stroke-dasharray,stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,stroke,stroke-width,style,surfacescale,systemlanguage,tabindex,targetx,targety,transform,transform-origin,text-anchor,text-decoration,text-rendering,textlength,type,u1,u2,unicode,values,viewbox,visibility,version,vert-adv-y,vert-origin-x,vert-origin-y,width,word-spacing,wrap,writing-mode,xchannelselector,ychannelselector,x,x1,x2,xmlns,y,y1,y2,z,zoomandpan),zl(accent,accentunder,align,bevelled,close,columnsalign,columnlines,columnspan,denomalign,depth,dir,display,displaystyle,encoding,fence,frame,height,href,id,largeop,length,linethickness,lspace,lquote,mathbackground,mathcolor,mathsize,mathvariant,maxsize,minsize,movablelimits,notation,numalign,open,rowalign,rowlines,rowspacing,rowspan,rspace,rquote,scriptlevel,scriptminsize,scriptsizemultiplier,selection,separator,separators,stretchy,subscriptshift,supscriptshift,symmetric,voffset,width,xmlns),Hl(xlink:href,xml:id,xlink:title,xml:space,xmlns:xlink),Vp(/\{\{\w\W*|\w\W*\}\}/gm),Gp(/%\w\W*|\w\W*%>/gm),Wp(/^data-\-\w.\u00B7-\uFFFF/),Yp(/^aria-\-\w+$/),qp(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|^a-z|a-z+.\-+(?:^a-z+.\-:|$))/i),$p(/^(?:\w+script|data):/i),Kp(/\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000/g),Jp(/^html$/i),Zfunction(){return window},Xfunction(e,r){if(object!t(e)||function!typeof e.createPolicy)return null;var nnull,odata-tt-policy-suffix;r.currentScript&&r.currentScript.hasAttribute(o)&&(nr.currentScript.getAttribute(o));var idompurify+(n?#+n:);try{return e.createPolicy(i,{createHTML:function(t){return t}})}catch(t){return console.warn(TrustedTypes policy +i+ could not be created.),null}};return function e(){var rarguments.length>0&&void 0!arguments0?arguments0:Z(),nfunction(t){return e(t)};if(n.version2.3.8,n.removed,!r||!r.document||9!r.document.nodeType)return n.isSupported!1,n;var ir.document,ar.document,cr.DocumentFragment,ur.HTMLTemplateElement,fr.Node,sr.Element,pr.NodeFilter,dr.NamedNodeMap,yvoid 0d?r.NamedNodeMap||r.MozNamedAttrMap:d,hr.HTMLFormElement,vr.DOMParser,mr.trustedTypes,js.prototype,QP(j,cloneNode),ttP(j,nextSibling),etP(j,childNodes),rtP(j,parentNode);if(functiontypeof u){var nta.createElement(template);nt.content&&nt.content.ownerDocument&&(ant.content.ownerDocument)}var otX(m,i),itot?ot.createHTML():,ata,ctat.implementation,utat.createNodeIterator,ftat.createDocumentFragment,stat.getElementsByTagName,lti.importNode,pt{};try{ptC(a).documentMode?a.documentMode:{}}catch(t){}var dt{};n.isSupportedfunctiontypeof rt&&ct&&void 0!ct.createHTMLDocument&&9!pt;var yt,ht,vtV,mtG,btW,gtY,wt$,EtK,xtq,Otnull,AtR({},.concat(o(I),o(M),o(k),o(F),o(D))),Ttnull,_tR({},.concat(o(B),o(U),o(z),o(H))),StObject.seal(Object.create(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),jtnull,Rtnull,Ct!0,Pt!0,It!1,Mt!1,kt!1,Nt!1,Ft!1,Lt!1,Dt!1,Bt!1,Ut!0,zt!0,Ht!1,Vt{},Gtnull,WtR({},annotation-xml,audio,colgroup,desc,foreignobject,head,iframe,math,mi,mn,mo,ms,mtext,noembed,noframes,noscript,plaintext,script,style,svg,template,thead,title,video,xmp),Ytnull,qtR({},audio,video,img,source,image,track),$tnull,KtR({},alt,class,for,id,label,name,pattern,placeholder,role,summary,title,value,style,xmlns),Jthttp://www.w3.org/1998/Math/MathML,Zthttp://www.w3.org/2000/svg,Xthttp://www.w3.org/1999/xhtml,QtXt,te!1,eeapplication/xhtml+xml,text/html,retext/html,nenull,oea.createElement(form),iefunction(t){return t instanceof RegExp||t instanceof Function},aefunction(e){ne&&nee||(e&&objectt(e)||(e{}),eC(e),OtALLOWED_TAGSin e?R({},e.ALLOWED_TAGS):At,TtALLOWED_ATTRin e?R({},e.ALLOWED_ATTR):_t,$tADD_URI_SAFE_ATTRin e?R(C(Kt),e.ADD_URI_SAFE_ATTR):Kt,YtADD_DATA_URI_TAGSin e?R(C(qt),e.ADD_DATA_URI_TAGS):qt,GtFORBID_CONTENTSin e?R({},e.FORBID_CONTENTS):Wt,jtFORBID_TAGSin e?R({},e.FORBID_TAGS):{},RtFORBID_ATTRin e?R({},e.FORBID_ATTR):{},VtUSE_PROFILESin e&&e.USE_PROFILES,Ct!1!e.ALLOW_ARIA_ATTR,Pt!1!e.ALLOW_DATA_ATTR,Ite.ALLOW_UNKNOWN_PROTOCOLS||!1,Mte.SAFE_FOR_TEMPLATES||!1,kte.WHOLE_DOCUMENT||!1,Lte.RETURN_DOM||!1,Dte.RETURN_DOM_FRAGMENT||!1,Bte.RETURN_TRUSTED_TYPE||!1,Fte.FORCE_BODY||!1,Ut!1!e.SANITIZE_DOM,zt!1!e.KEEP_CONTENT,Hte.IN_PLACE||!1,xte.ALLOWED_URI_REGEXP||xt,Qte.NAMESPACE||Xt,e.CUSTOM_ELEMENT_HANDLING&&ie(e.CUSTOM_ELEMENT_HANDLING.tagNameCheck)&&(St.tagNameChecke.CUSTOM_ELEMENT_HANDLING.tagNameCheck),e.CUSTOM_ELEMENT_HANDLING&&ie(e.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)&&(St.attributeNameChecke.CUSTOM_ELEMENT_HANDLING.attributeNameCheck),e.CUSTOM_ELEMENT_HANDLING&&booleantypeof e.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements&&(St.allowCustomizedBuiltInElementse.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements),ytyt-1ee.indexOf(e.PARSER_MEDIA_TYPE)?re:e.PARSER_MEDIA_TYPE,htapplication/xhtml+xmlyt?function(t){return t}:E,Mt&&(Pt!1),Dt&&(Lt!0),Vt&&(OtR({},o(D)),Tt,!0Vt.html&&(R(Ot,I),R(Tt,B)),!0Vt.svg&&(R(Ot,M),R(Tt,U),R(Tt,H)),!0Vt.svgFilters&&(R(Ot,k),R(Tt,U),R(Tt,H)),!0Vt.mathMl&&(R(Ot,F),R(Tt,z),R(Tt,H))),e.ADD_TAGS&&(OtAt&&(OtC(Ot)),R(Ot,e.ADD_TAGS)),e.ADD_ATTR&&(Tt_t&&(TtC(Tt)),R(Tt,e.ADD_ATTR)),e.ADD_URI_SAFE_ATTR&&R($t,e.ADD_URI_SAFE_ATTR),e.FORBID_CONTENTS&&(GtWt&&(GtC(Gt)),R(Gt,e.FORBID_CONTENTS)),zt&&(Ot#text!0),kt&&R(Ot,html,head,body),Ot.table&&(R(Ot,tbody),delete jt.tbody),l&&l(e),nee)},ceR({},mi,mo,mn,ms,mtext),ueR({},foreignobject,desc,title,annotation-xml),feR({},title,style,font,a,script),seR({},M);R(se,k),R(se,N);var leR({},F);R(le,L);var pefunction(t){var ert(t);e&&e.tagName||(e{namespaceURI:Xt,tagName:template});var rE(t.tagName),nE(e.tagName);return t.namespaceURIZt?e.namespaceURIXt?svgr:e.namespaceURIJt?svgr&&(annotation-xmln||cen):Boolean(ser):t.namespaceURIJt?e.namespaceURIXt?mathr:e.namespaceURIZt?mathr&&uen:Boolean(ler):t.namespaceURIXt&&!(e.namespaceURIZt&&!uen)&&!(e.namespaceURIJt&&!cen)&&!ler&&(fer||!ser)},defunction(t){w(n.removed,{element:t});try{t.parentNode.removeChild(t)}catch(e){try{t.outerHTMLit}catch(e){t.remove()}}},yefunction(t,e){try{w(n.removed,{attribute:e.getAttributeNode(t),from:e})}catch(t){w(n.removed,{attribute:null,from:e})}if(e.removeAttribute(t),ist&&!Ttt)if(Lt||Dt)try{de(e)}catch(t){}else try{e.setAttribute(t,)}catch(t){}},hefunction(t){var e,r;if(Ft)tremove>/remove>+t;else{var nx(t,/^\r\n\t +/);rn&&n0}application/xhtml+xmlyt&&(thtml xmlnshttp://www.w3.org/1999/xhtml>head>/head>body>+t+/body>/html>);var oot?ot.createHTML(t):t;if(QtXt)try{e(new v).parseFromString(o,yt)}catch(t){}if(!e||!e.documentElement){ect.createDocument(Qt,template,null);try{e.documentElement.innerHTMLte?:o}catch(t){}}var ie.body||e.documentElement;return t&&r&&i.insertBefore(a.createTextNode(r),i.childNodes0||null),QtXt?st.call(e,kt?html:body)0:kt?e.documentElement:i},vefunction(t){return ut.call(t.ownerDocument||t,t,p.SHOW_ELEMENT|p.SHOW_COMMENT|p.SHOW_TEXT,null,!1)},mefunction(t){return t instanceof h&&(string!typeof t.nodeName||string!typeof t.textContent||function!typeof t.removeChild||!(t.attributes instanceof y)||function!typeof t.removeAttribute||function!typeof t.setAttribute||string!typeof t.namespaceURI||function!typeof t.insertBefore)},befunction(e){returnobjectt(f)?e instanceof f:e&&objectt(e)&&numbertypeof e.nodeType&&stringtypeof e.nodeName},gefunction(t,e,r){dtt&&b(dtt,(function(t){t.call(n,e,r,ne)}))},wefunction(t){var e;if(ge(beforeSanitizeElements,t,null),me(t))return de(t),!0;if(_(/\u0080-\uFFFF/,t.nodeName))return de(t),!0;var rht(t.nodeName);if(ge(uponSanitizeElement,t,{tagName:r,allowedTags:Ot}),t.hasChildNodes()&&!be(t.firstElementChild)&&(!be(t.content)||!be(t.content.firstElementChild))&&_(//\w/g,t.innerHTML)&&_(//\w/g,t.textContent))return de(t),!0;if(selectr&&_(/template/i,t.innerHTML))return de(t),!0;if(!Otr||jtr){if(!jtr&&xe(r)){if(St.tagNameCheck instanceof RegExp&&_(St.tagNameCheck,r))return!1;if(St.tagNameCheck instanceof Function&&St.tagNameCheck(r))return!1}if(zt&&!Gtr){var ort(t)||t.parentNode,iet(t)||t.childNodes;if(i&&o)for(var ai.length-1;a>0;--a)o.insertBefore(Q(ia,!0),tt(t))}return de(t),!0}return t instanceof s&&!pe(t)?(de(t),!0):noscript!r&&noembed!r||!_(/\/no(script|embed)/i,t.innerHTML)?(Mt&&3t.nodeType&&(et.textContent,eO(e,vt, ),eO(e,mt, ),t.textContent!e&&(w(n.removed,{element:t.cloneNode()}),t.textContente)),ge(afterSanitizeElements,t,null),!1):(de(t),!0)},Eefunction(t,e,r){if(Ut&&(ide||namee)&&(r in a||r in oe))return!1;if(Pt&&!Rte&&_(bt,e));else if(Ct&&_(gt,e));else if(!Tte||Rte){if(!(xe(t)&&(St.tagNameCheck instanceof RegExp&&_(St.tagNameCheck,t)||St.tagNameCheck instanceof Function&&St.tagNameCheck(t))&&(St.attributeNameCheck instanceof RegExp&&_(St.attributeNameCheck,e)||St.attributeNameCheck instanceof Function&&St.attributeNameCheck(e))||ise&&St.allowCustomizedBuiltInElements&&(St.tagNameCheck instanceof RegExp&&_(St.tagNameCheck,r)||St.tagNameCheck instanceof Function&&St.tagNameCheck(r))))return!1}else if($te);else if(_(xt,O(r,Et,)));else if(src!e&&xlink:href!e&&href!e||scriptt||0!A(r,data:)||!Ytt)if(It&&!_(wt,O(r,Et,)));else if(r)return!1;return!0},xefunction(t){return t.indexOf(-)>0},Oefunction(t){var e,r,o,i;ge(beforeSanitizeAttributes,t,null);var at.attributes;if(a){var c{attrName:,attrValue:,keepAttr:!0,allowedAttributes:Tt};for(ia.length;i--;){var ueai,fu.name,su.namespaceURI;if(rvaluef?e.value:T(e.value),oht(f),c.attrNameo,c.attrValuer,c.keepAttr!0,c.forceKeepAttrvoid 0,ge(uponSanitizeAttribute,t,c),rc.attrValue,!c.forceKeepAttr&&(ye(f,t),c.keepAttr))if(_(/\/>/i,r))ye(f,t);else{Mt&&(rO(r,vt, ),rO(r,mt, ));var lht(t.nodeName);if(Ee(l,o,r))try{s?t.setAttributeNS(s,f,r):t.setAttribute(f,r),g(n.removed)}catch(t){}}}ge(afterSanitizeAttributes,t,null)}},Aefunction t(e){var r,nve(e);for(ge(beforeSanitizeShadowDOM,e,null);rn.nextNode();)ge(uponSanitizeShadowNode,r,null),we(r)||(r.content instanceof c&&t(r.content),Oe(r));ge(afterSanitizeShadowDOM,e,null)};return n.sanitizefunction(e,o){var a,u,s,l,p;if((te!e)&&(e\x3c!--\x3e),string!typeof e&&!be(e)){if(function!typeof e.toString)throw S(toString is not a function);if(string!typeof(ee.toString()))throw S(dirty is not a string, aborting)}if(!n.isSupported){if(objectt(r.toStaticHTML)||functiontypeof r.toStaticHTML){if(stringtypeof e)return r.toStaticHTML(e);if(be(e))return r.toStaticHTML(e.outerHTML)}return e}if(Nt||ae(o),n.removed,stringtypeof e&&(Ht!1),Ht){if(e.nodeName){var dht(e.nodeName);if(!Otd||jtd)throw S(root node is forbidden and cannot be sanitized in-place)}}else if(e instanceof f)1(u(ahe(\x3c!----\x3e)).ownerDocument.importNode(e,!0)).nodeType&&BODYu.nodeName||HTMLu.nodeName?au:a.appendChild(u);else{if(!Lt&&!Mt&&!kt&&-1e.indexOf())return ot&&Bt?ot.createHTML(e):e;if(!(ahe(e)))return Lt?null:Bt?it:}a&&Ft&&de(a.firstChild);for(var yve(Ht?e:a);sy.nextNode();)3s.nodeType&&sl||we(s)||(s.content instanceof c&&Ae(s.content),Oe(s),ls);if(lnull,Ht)return e;if(Lt){if(Dt)for(pft.call(a.ownerDocument);a.firstChild;)p.appendChild(a.firstChild);else pa;return Tt.shadowroot&&(plt.call(i,p,!0)),p}var hkt?a.outerHTML:a.innerHTML;return kt&&Ot!doctype&&a.ownerDocument&&a.ownerDocument.doctype&&a.ownerDocument.doctype.name&&_(J,a.ownerDocument.doctype.name)&&(h!DOCTYPE +a.ownerDocument.doctype.name+>\n+h),Mt&&(hO(h,vt, ),hO(h,mt, )),ot&&Bt?ot.createHTML(h):h},n.setConfigfunction(t){ae(t),Nt!0},n.clearConfigfunction(){nenull,Nt!1},n.isValidAttributefunction(t,e,r){ne||ae({});var nht(t),oht(e);return Ee(n,o,r)},n.addHookfunction(t,e){functiontypeof e&&(dttdtt||,w(dtt,e))},n.removeHookfunction(t){if(dtt)return g(dtt)},n.removeHooksfunction(t){dtt&&(dtt)},n.removeAllHooksfunction(){dt{}},n}()}()},5666:function(t){var efunction(t){use strict;var e,rObject.prototype,nr.hasOwnProperty,ofunctiontypeof Symbol?Symbol:{},io.iterator||@@iterator,ao.asyncIterator||@@asyncIterator,co.toStringTag||@@toStringTag;function u(t,e,r){return Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}),te}try{u({},)}catch(t){ufunction(t,e,r){return ter}}function f(t,e,r,n){var oe&&e.prototype instanceof v?e:v,iObject.create(o.prototype),anew j(n||);return i._invokefunction(t,e,r){var nl;return function(o,i){if(nd)throw new Error(Generator is already running);if(ny){if(throwo)throw i;return C()}for(r.methodo,r.argi;;){var ar.delegate;if(a){var cT(a,r);if(c){if(ch)continue;return c}}if(nextr.method)r.sentr._sentr.arg;else if(throwr.method){if(nl)throw ny,r.arg;r.dispatchException(r.arg)}elsereturnr.method&&r.abrupt(return,r.arg);nd;var us(t,e,r);if(normalu.type){if(nr.done?y:p,u.argh)continue;return{value:u.arg,done:r.done}}throwu.type&&(ny,r.methodthrow,r.argu.arg)}}}(t,r,a),i}function s(t,e,r){try{return{type:normal,arg:t.call(e,r)}}catch(t){return{type:throw,arg:t}}}t.wrapf;var lsuspendedStart,psuspendedYield,dexecuting,ycompleted,h{};function v(){}function m(){}function b(){}var g{};u(g,i,(function(){return this}));var wObject.getPrototypeOf,Ew&&w(w(R()));E&&E!r&&n.call(E,i)&&(gE);var xb.prototypev.prototypeObject.create(g);function O(t){next,throw,return.forEach((function(e){u(t,e,(function(t){return this._invoke(e,t)}))}))}function A(t,e){function r(o,i,a,c){var us(to,t,i);if(throw!u.type){var fu.arg,lf.value;return l&&objecttypeof l&&n.call(l,__await)?e.resolve(l.__await).then((function(t){r(next,t,a,c)}),(function(t){r(throw,t,a,c)})):e.resolve(l).then((function(t){f.valuet,a(f)}),(function(t){return r(throw,t,a,c)}))}c(u.arg)}var o;this._invokefunction(t,n){function i(){return new e((function(e,o){r(t,n,e,o)}))}return oo?o.then(i,i):i()}}function T(t,r){var nt.iteratorr.method;if(ne){if(r.delegatenull,throwr.method){if(t.iterator.return&&(r.methodreturn,r.arge,T(t,r),throwr.method))return h;r.methodthrow,r.argnew TypeError(The iterator does not provide a throw method)}return h}var os(n,t.iterator,r.arg);if(throwo.type)return r.methodthrow,r.argo.arg,r.delegatenull,h;var io.arg;return i?i.done?(rt.resultNamei.value,r.nextt.nextLoc,return!r.method&&(r.methodnext,r.arge),r.delegatenull,h):i:(r.methodthrow,r.argnew TypeError(iterator result is not an object),r.delegatenull,h)}function _(t){var e{tryLoc:t0};1 in t&&(e.catchLoct1),2 in t&&(e.finallyLoct2,e.afterLoct3),this.tryEntries.push(e)}function S(t){var et.completion||{};e.typenormal,delete e.arg,t.completione}function j(t){this.tryEntries{tryLoc:root},t.forEach(_,this),this.reset(!0)}function R(t){if(t){var rti;if(r)return r.call(t);if(functiontypeof t.next)return t;if(!isNaN(t.length)){var o-1,afunction r(){for(;++ot.length;)if(n.call(t,o))return r.valueto,r.done!1,r;return r.valuee,r.done!0,r};return a.nexta}}return{next:C}}function C(){return{value:e,done:!0}}return m.prototypeb,u(x,constructor,b),u(b,constructor,m),m.displayNameu(b,c,GeneratorFunction),t.isGeneratorFunctionfunction(t){var efunctiontypeof t&&t.constructor;return!!e&&(em||GeneratorFunction(e.displayName||e.name))},t.markfunction(t){return Object.setPrototypeOf?Object.setPrototypeOf(t,b):(t.__proto__b,u(t,c,GeneratorFunction)),t.prototypeObject.create(x),t},t.awrapfunction(t){return{__await:t}},O(A.prototype),u(A.prototype,a,(function(){return this})),t.AsyncIteratorA,t.asyncfunction(e,r,n,o,i){void 0i&&(iPromise);var anew A(f(e,r,n,o),i);return t.isGeneratorFunction(r)?a:a.next().then((function(t){return t.done?t.value:a.next()}))},O(x),u(x,c,Generator),u(x,i,(function(){return this})),u(x,toString,(function(){returnobject Generator})),t.keysfunction(t){var e;for(var r in t)e.push(r);return e.reverse(),function r(){for(;e.length;){var ne.pop();if(n in t)return r.valuen,r.done!1,r}return r.done!0,r}},t.valuesR,j.prototype{constructor:j,reset:function(t){if(this.prev0,this.next0,this.sentthis._sente,this.done!1,this.delegatenull,this.methodnext,this.arge,this.tryEntries.forEach(S),!t)for(var r in this)tr.charAt(0)&&n.call(this,r)&&!isNaN(+r.slice(1))&&(thisre)},stop:function(){this.done!0;var tthis.tryEntries0.completion;if(throwt.type)throw t.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var rthis;function o(n,o){return c.typethrow,c.argt,r.nextn,o&&(r.methodnext,r.arge),!!o}for(var ithis.tryEntries.length-1;i>0;--i){var athis.tryEntriesi,ca.completion;if(roota.tryLoc)return o(end);if(a.tryLocthis.prev){var un.call(a,catchLoc),fn.call(a,finallyLoc);if(u&&f){if(this.preva.catchLoc)return o(a.catchLoc,!0);if(this.preva.finallyLoc)return o(a.finallyLoc)}else if(u){if(this.preva.catchLoc)return o(a.catchLoc,!0)}else{if(!f)throw new Error(try statement without catch or finally);if(this.preva.finallyLoc)return o(a.finallyLoc)}}}},abrupt:function(t,e){for(var rthis.tryEntries.length-1;r>0;--r){var othis.tryEntriesr;if(o.tryLocthis.prev&&n.call(o,finallyLoc)&&this.prevo.finallyLoc){var io;break}}i&&(breakt||continuet)&&i.tryLoce&&ei.finallyLoc&&(inull);var ai?i.completion:{};return a.typet,a.arge,i?(this.methodnext,this.nexti.finallyLoc,h):this.complete(a)},complete:function(t,e){if(throwt.type)throw t.arg;returnbreakt.type||continuet.type?this.nextt.arg:returnt.type?(this.rvalthis.argt.arg,this.methodreturn,this.nextend):normalt.type&&e&&(this.nexte),h},finish:function(t){for(var ethis.tryEntries.length-1;e>0;--e){var rthis.tryEntriese;if(r.finallyLoct)return this.complete(r.completion,r.afterLoc),S(r),h}},catch:function(t){for(var ethis.tryEntries.length-1;e>0;--e){var rthis.tryEntriese;if(r.tryLoct){var nr.completion;if(thrown.type){var on.arg;S(r)}return o}}throw new Error(illegal catch attempt)},delegateYield:function(t,r,n){return this.delegate{iterator:R(t),resultName:r,nextLoc:n},nextthis.method&&(this.arge),h}},t}(t.exports);try{regeneratorRuntimee}catch(t){objecttypeof globalThis?globalThis.regeneratorRuntimee:Function(r,regeneratorRuntime r)(e)}},7654:function(t,e,r){use strict;r.r(e);var nr(3379),or.n(n),ir(7795),ar.n(i),cr(569),ur.n(c),fr(3565),sr.n(f),lr(9216),pr.n(l),dr(4589),yr.n(d),hr(5426),v{};v.styleTagTransformy(),v.setAttributess(),v.insertu().bind(null,head),v.domAPIa(),v.insertStyleElementp(),o()(h.Z,v),e.defaulth.Z&&h.Z.locals?h.Z.locals:void 0},3379:function(t){use strict;var e;function r(t){for(var r-1,n0;ne.length;n++)if(en.identifiert){rn;break}return r}function n(t,n){for(var i{},a,c0;ct.length;c++){var utc,fn.base?u0+n.base:u0,sif||0,l.concat(f, ).concat(s);ifs+1;var pr(l),d{css:u1,media:u2,sourceMap:u3,supports:u4,layer:u5};if(-1!p)ep.references++,ep.updater(d);else{var yo(d,n);n.byIndexc,e.splice(c,0,{identifier:l,updater:y,references:1})}a.push(l)}return a}function o(t,e){var re.domAPI(e);return r.update(t),function(e){if(e){if(e.csst.css&&e.mediat.media&&e.sourceMapt.sourceMap&&e.supportst.supports&&e.layert.layer)return;r.update(te)}else r.remove()}}t.exportsfunction(t,o){var in(tt||,oo||{});return function(t){tt||;for(var a0;ai.length;a++){var cr(ia);ec.references--}for(var un(t,o),f0;fi.length;f++){var sr(if);0es.references&&(es.updater(),e.splice(s,1))}iu}}},569:function(t){use strict;var e{};t.exportsfunction(t,r){var nfunction(t){if(void 0et){var rdocument.querySelector(t);if(window.HTMLIFrameElement&&r instanceof window.HTMLIFrameElement)try{rr.contentDocument.head}catch(t){rnull}etr}return et}(t);if(!n)throw new Error(Couldnt find a style target. This probably means that the value for the insert parameter is invalid.);n.appendChild(r)}},9216:function(t){use strict;t.exportsfunction(t){var edocument.createElement(style);return t.setAttributes(e,t.attributes),t.insert(e,t.options),e}},3565:function(t,e,r){use strict;t.exportsfunction(t){var er.nc;e&&t.setAttribute(nonce,e)}},7795:function(t){use strict;t.exportsfunction(t){var et.insertStyleElement(t);return{update:function(r){!function(t,e,r){var n;r.supports&&(n+@supports (.concat(r.supports,) {)),r.media&&(n+@media .concat(r.media, {));var ovoid 0!r.layer;o&&(n+@layer.concat(r.layer.length>0? .concat(r.layer):, {)),n+r.css,o&&(n+}),r.media&&(n+}),r.supports&&(n+});var ir.sourceMap;i&&undefined!typeof btoa&&(n+\n/*# sourceMappingURLdata:application/json;base64,.concat(btoa(unescape(encodeURIComponent(JSON.stringify(i)))), */)),e.styleTagTransform(n,t,e.options)}(e,t,r)},remove:function(){!function(t){if(nullt.parentNode)return!1;t.parentNode.removeChild(t)}(e)}}}},4589:function(t){use strict;t.exportsfunction(t,e){if(e.styleSheet)e.styleSheet.cssTextt;else{for(;e.firstChild;)e.removeChild(e.firstChild);e.appendChild(document.createTextNode(t))}}}},e{};function r(n){var oen;if(void 0!o)return o.exports;var ien{id:n,exports:{}};return tn.call(i.exports,i,i.exports,r),i.exports}r.nfunction(t){var et&&t.__esModule?function(){return t.default}:function(){return t};return r.d(e,{a:e}),e},r.dfunction(t,e){for(var n in e)r.o(e,n)&&!r.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:en})},r.gfunction(){if(objecttypeof globalThis)return globalThis;try{return this||new Function(return this)()}catch(t){if(objecttypeof window)return window}}(),r.ofunction(t,e){return Object.prototype.hasOwnProperty.call(t,e)},r.rfunction(t){undefined!typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:Module}),Object.defineProperty(t,__esModule,{value:!0})},r.ncvoid 0,function(){use strict;r(8214),r(9408),r(6467),r(323),r(7115),r(909),r(4205),r(7064),r(4920),r(4900),r(8824),r(5695),r(781),r(7576),r(9473),r(3870),r(2214),r(5666),r(7654);var t,e(tr(2836))&&t.__esModule?t:{default:t},nr(2002);window.paytheory{createPaymentFields:function(t,r,o,i){return console.warn(createPaymentFields has been deprecated),(0,e.default)(t,r,o,i,n.INTERCHANGE)},create:function(t,r,n,o){return(0,e.default)(t,,r,n,o)},SURCHARGE:n.SURCHARGE,SERVICE_FEE:n.SERVICE_FEE,INTERCHANGE:n.INTERCHANGE},window.paytheory}()}();//# sourceMappingURLdata:application/json;charsetutf-8;base64,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Tzg2QyxhQUMxQ3JyRCxPQUFPK2EsZUFBZUwsRUFBU25LLE9BQU84NkMsWUFBYSxDQUFFdjlDLE1BQU8sV0FFN0Q5TixPQUFPK2EsZUFBZUwsRUFBUyxhQUFjLENBQUU1TSxPQUFPLEtDTHZEc2tELEVBQW9CTyxRQUFLejNDLHlPQzhCekIxa0IsT0FBT284RCxVQUFZLENBQ2ZDLG9CQU53QixTQUFDcjZELEVBQVFzNkQsRUFBVWp4RCxFQUFReEgsR0FFbkQsT0FEQW5DLFFBQVFzVCxLQUFLLDRDQUNOLEVBQUF1bkQsRUFBQUEsU0FBMEJ2NkQsRUFBUXM2RCxFQUFVanhELEVBQVF4SCxFQUFVK1QsRUFBQUEsY0FLckVsVCxPQVJXLFNBQUMxQyxFQUFRcUosRUFBUXhILEVBQVUrRCxHQUEzQixPQUF1QyxFQUFBMjBELEVBQUFBLFNBQTBCdjZELEVBQVEsR0FBSXFKLEVBQVF4SCxFQUFVK0QsSUFTMUc0MEQsVUFBQUEsRUFBQUEsVUFDQXg1RCxZQUFBQSxFQUFBQSxZQUNBNFUsWUFBQUEsRUFBQUEsYUFHVzVYLE9BQU9vOEQiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21tb24vZGF0YS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21tb24vZG9tLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbW1vbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21tb24vbWVzc2FnZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21tb24vbmV0d29yay5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21tb24vb2JzZXJ2ZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL2FjaC1hY2NvdW50LW5hbWUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9zcmMvY29tcG9uZW50cy9hY2gtYWNjb3VudC1udW1iZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9zcmMvY29tcG9uZW50cy9hY2gtYWNjb3VudC10eXBlL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvYWNoLXJvdXRpbmctbnVtYmVyL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvY2FzaC1jb250YWN0L2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvY2FzaC1uYW1lL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtYWNjb3VudC1uYW1lL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtYWRkcmVzcy0xL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtYWRkcmVzcy0yL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtY2l0eS9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkLWN2di9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkLWV4cC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkLW51bWJlci9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkLXJlZ2lvbi9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkLXppcC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL2NyZWRpdC1jYXJkL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2NvbXBvbmVudHMvcGF5LXRoZW9yeS1ob3N0ZWQtZmllbGQtdHJhbnNhY3Rpb25hbC9pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9jb21wb25lbnRzL3BheS10aGVvcnktaG9zdGVkLWZpZWxkL2luZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2ZpZWxkLXNldC9oYW5kbGVyLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2ZpZWxkLXNldC9wYXltZW50LWZpZWxkcy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9maWVsZC1zZXQvdmFsaWRhdGlvbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL3NyYy9wb2x5ZmlsbC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hLWNhbGxhYmxlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2EtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYS1wb3NzaWJsZS1wcm90b3R5cGUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLWluc3RhbmNlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FuLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItbmF0aXZlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1jb3B5LXdpdGhpbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1maWxsLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZvci1lYWNoLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LWZyb20tY29uc3RydWN0b3ItYW5kLWxpc3QuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktZnJvbS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktbGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXJlZHVjZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zbGljZS1zaW1wbGUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc2xpY2UuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvYXJyYXktc29ydC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2FycmF5LXNwZWNpZXMtY3JlYXRlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NhbGwtd2l0aC1zYWZlLWl0ZXJhdGlvbi1jbG9zaW5nLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NoZWNrLWNvcnJlY3RuZXNzLW9mLWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLXJhdy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jbGFzc29mLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24tc3Ryb25nLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvbGxlY3Rpb24td2Vhay5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb2xsZWN0aW9uLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jb3JyZWN0LXByb3RvdHlwZS1nZXR0ZXIuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RlbGV0ZS1wcm9wZXJ0eS1vci10aHJvdy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kZXNjcmlwdG9ycy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2N1bWVudC1jcmVhdGUtZWxlbWVudC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9kb2VzLW5vdC1leGNlZWQtc2FmZS1pbnRlZ2VyLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2RvbS1pdGVyYWJsZXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZG9tLXRva2VuLWxpc3QtcHJvdG90eXBlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1mZi12ZXJzaW9uLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1icm93c2VyLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pZS1vci1lZGdlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLW5vZGUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW5naW5lLWlzLXdlYm9zLXdlYmtpdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZW51bS1idWcta2V5cy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9leHBvcnQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZmFpbHMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZml4LXJlZ2V4cC13ZWxsLWtub3duLXN5bWJvbC1sb2dpYy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mcmVlemluZy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1hcHBseS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9mdW5jdGlvbi1jYWxsLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1idWlsdC1pbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtaXRlcmF0b3ItbWV0aG9kLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9nZXQtbWV0aG9kLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvZ2xvYmFsLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaGlkZGVuLWtleXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaG9zdC1yZXBvcnQtZXJyb3JzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2h0bWwuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaWVlZTc1NC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmRleGVkLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLW1ldGFkYXRhLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWFycmF5LWl0ZXJhdG9yLW1ldGhvZC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1hcnJheS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jYWxsYWJsZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1kYXRhLWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtZm9yY2VkLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2lzLWludGVncmFsLW51bWJlci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtcHVyZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9pcy1yZWdleHAuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXMtc3ltYm9sLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2l0ZXJhdGUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLWNvcmUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvaXRlcmF0b3JzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL21ha2UtYnVpbHQtaW4uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbWF0aC10cnVuYy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9taWNyb3Rhc2suanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC1yZWdpc3RyeS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9uYXRpdmUtc3ltYm9sLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25hdGl2ZS11cmwuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvbm90LWEtcmVnZXhwLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1jcmVhdGUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0aWVzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb2JqZWN0LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvb3duLWtleXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcGF0aC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wZXJmb3JtLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtY29uc3RydWN0b3ItZGV0ZWN0aW9uLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3Byb21pc2UtcmVzb2x2ZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9xdWV1ZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy1hYnN0cmFjdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZXhlYy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtZmxhZ3MuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXNwZWNpZXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLWtleS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zaGFyZWQtc3RvcmUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc2hhcmVkLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3NwZWNpZXMtY29uc3RydWN0b3IuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy9zdHJpbmctdHJpbS1mb3JjZWQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3RyaW5nLXRyaW0uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdGFzay5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1iaWctaW50LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tbGVuZ3RoLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLW9iamVjdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1vZmZzZXQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcG9zaXRpdmUtaW50ZWdlci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1wcmltaXRpdmUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3RvLXN0cmluZy10YWctc3VwcG9ydC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90by1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS13cmFwcGVycy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tLXNwZWNpZXMtYW5kLWxpc3QuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvdHlwZWQtYXJyYXktZnJvbS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy90eXBlZC1hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3VpZC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1Zy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9pbnRlcm5hbHMvd2hpdGVzcGFjZXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LWJ1ZmZlci5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuY29uY2F0LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5maWx0ZXIuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmZyb20uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmFycmF5LmluY2x1ZGVzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuYXJyYXkubWFwLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZnVuY3Rpb24ubmFtZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuZ2xvYmFsLXRoaXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLmpzb24uc3RyaW5naWZ5LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5qc29uLnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMubWFwLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5tYXRoLnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3IuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3JzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QuZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMub2JqZWN0LmdldC1wcm90b3R5cGUtb2YuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLm9iamVjdC5rZXlzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5vYmplY3QudG8tc3RyaW5nLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLmFsbC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5jb25zdHJ1Y3Rvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yYWNlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5wcm9taXNlLnJlamVjdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWZsZWN0LmNvbnN0cnVjdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVmbGVjdC5nZXQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnJlZ2V4cC5leGVjLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5yZWdleHAudGVzdC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMucmVnZXhwLnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmVuZHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLmluY2x1ZGVzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuaXRlcmF0b3IuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5yZXBsYWNlLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zdHJpbmcuc3BsaXQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN0cmluZy5zdGFydHMtd2l0aC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3RyaW5nLnRyaW0uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5hc3luYy1pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wuZGVzY3JpcHRpb24uanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5mb3IuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnN5bWJvbC5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy5zeW1ib2wua2V5LWZvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMuc3ltYm9sLnRvLXN0cmluZy10YWcuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmNvcHktd2l0aGluLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5ldmVyeS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmlsbC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZmlsdGVyLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maW5kLWluZGV4LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5maW5kLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuZnJvbS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LmluZGV4LW9mLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuam9pbi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkubGFzdC1pbmRleC1vZi5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkubWFwLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5yZWR1Y2UtcmlnaHQuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnJlZHVjZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkucmV2ZXJzZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc2V0LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy50eXBlZC1hcnJheS5zbGljZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc29tZS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc29ydC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkuc3ViYXJyYXkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnRvLWxvY2FsZS1zdHJpbmcuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLnR5cGVkLWFycmF5LnRvLXN0cmluZy5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvZXMudHlwZWQtYXJyYXkudWludDgtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvY29yZS1qcy9tb2R1bGVzL2VzLndlYWstbWFwLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy9lcy53ZWFrLW1hcC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5mb3ItZWFjaC5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLmRvbS1jb2xsZWN0aW9ucy5pdGVyYXRvci5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jb3JlLWpzL21vZHVsZXMvd2ViLnVybC1zZWFyY2gtcGFyYW1zLmNvbnN0cnVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2NvcmUtanMvbW9kdWxlcy93ZWIudXJsLXNlYXJjaC1wYXJhbXMuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9zcmMvc3R5bGUuY3NzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL2RvbXB1cmlmeS9kaXN0L3B1cmlmeS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy8uL25vZGVfbW9kdWxlcy9yZWdlbmVyYXRvci1ydW50aW1lL3J1bnRpbWUuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9zcmMvc3R5bGUuY3NzPzcxNjMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0U3R5bGVFbGVtZW50LmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc3R5bGVEb21BUEkuanMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qcyIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy93ZWJwYWNrL3J1bnRpbWUvZGVmaW5lIHByb3BlcnR5IGdldHRlcnMiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvd2VicGFjay9ydW50aW1lL2dsb2JhbCIsIndlYnBhY2s6Ly9AcGF5dGhlb3J5L3BheW1lbnQtY29tcG9uZW50cy93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vQHBheXRoZW9yeS9wYXltZW50LWNvbXBvbmVudHMvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL0BwYXl0aGVvcnkvcGF5bWVudC1jb21wb25lbnRzLy4vc3JjL2luZGV4LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qIGdsb2JhbCBsb2NhbFN0b3JhZ2UgKi9cbmV4cG9ydCBjb25zdCBBVVRPRklMTCA9ICdwdC1hdXRvZmlsbCdcbmV4cG9ydCBjb25zdCBSRUFEWSA9ICdwdC1yZWFkeSdcbmV4cG9ydCBjb25zdCBUUkFOU0FDVElORyA9ICdwdC10cmFuc2FjdGluZydcbmV4cG9ydCBjb25zdCBFTlZJUk9OTUVOVCA9ICdwdC1lbnZpcm9ubWVudCdcbmV4cG9ydCBjb25zdCBTVEFHRSA9ICdwdC1zdGFnZSdcbmV4cG9ydCBjb25zdCBJTklUSUFMSVpFID0gJ3B0LWluaXRpYWxpemUnXG5leHBvcnQgY29uc3QgZGVmYXVsdFN0eWxlcyA9IHtcbiAgICBkZWZhdWx0OiB7fSxcbiAgICBzdWNjZXNzOiB7fSxcbiAgICBlcnJvcjoge30sXG59XG5leHBvcnQgY29uc3QgU1VSQ0hBUkdFID0gJ2ludGVyY2hhbmdlJ1xuZXhwb3J0IGNvbnN0IElOVEVSQ0hBTkdFID0gJ2ludGVyY2hhbmdlJ1xuZXhwb3J0IGNvbnN0IFNFUlZJQ0VfRkVFID0gJ3NlcnZpY2VfZmVlJ1xuXG5leHBvcnQgY29uc3QgZGVmYXVsdEZlZU1vZGUgPSBTVVJDSEFSR0VcblxuZXhwb3J0IGNvbnN0IGluaXRpYWxTdGF0ZSA9IHtcbiAgICBpc0RpcnR5OiBmYWxzZSxcbiAgICBpc0ZvY3VzZWQ6IGZhbHNlLFxuICAgIGVycm9yTWVzc2FnZXM6IFtdXG59XG5cbmV4cG9ydCBjb25zdCBmaWVsZHMgPSB7XG4gICAgQ1JFRElUX0NBUkQ6ICdwYXktdGhlb3J5LWNyZWRpdC1jYXJkJyxcbiAgICBDUkVESVRfQ0FSRF9OVU1CRVI6ICdwYXktdGhlb3J5LWNyZWRpdC1jYXJkLW51bWJlcicsXG4gICAgQ1JFRElUX0NBUkRfRVhQOiAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1leHAnLFxuICAgIENSRURJVF9DQVJEX0NWVjogJ3BheS10aGVvcnktY3JlZGl0LWNhcmQtY3Z2JyxcbiAgICBDUkVESVRfQ0FSRF9OQU1FOiAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1hY2NvdW50LW5hbWUnLFxuICAgIENSRURJVF9DQVJEX0FERFJFU1MxOiAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1hZGRyZXNzLTEnLFxuICAgIENSRURJVF9DQVJEX0FERFJFU1MyOiAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1hZGRyZXNzLTInLFxuICAgIENSRURJVF9DQVJEX0NJVFk6ICdwYXktdGhlb3J5LWNyZWRpdC1jYXJkLWNpdHknLFxuICAgIENSRURJVF9DQVJEX1NUQVRFOiAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1zdGF0ZScsXG4gICAgQ1JFRElUX0NBUkRfWklQOiAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC16aXAnLFxufVxuXG5leHBvcnQgY29uc3QgYWNoRmllbGRzID0ge1xuICAgIEFDQ09VTlRfTlVNQkVSOiAncGF5LXRoZW9yeS1hY2gtYWNjb3VudC1udW1iZXInLFxuICAgIEFDQ09VTlRfVFlQRTogJ3BheS10aGVvcnktYWNoLWFjY291bnQtdHlwZScsXG4gICAgQUNDT1VOVF9OQU1FOiAncGF5LXRoZW9yeS1hY2gtYWNjb3VudC1uYW1lJyxcbiAgICBCQU5LX0NPREU6ICdwYXktdGhlb3J5LWFjaC1yb3V0aW5nLW51bWJlcidcbn1cblxuZXhwb3J0IGNvbnN0IGNhc2hGaWVsZHMgPSB7XG4gICAgTkFNRTogJ3BheS10aGVvcnktY2FzaC1uYW1lJyxcbiAgICBDT05UQUNUOiAncGF5LXRoZW9yeS1jYXNoLWNvbnRhY3QnXG59XG5cbmV4cG9ydCBjb25zdCBhY2hGaWVsZFR5cGVzID0gW1xuICAgICdhY2NvdW50LW5hbWUnLFxuICAgICdhY2NvdW50LXR5cGUnLFxuICAgICdhY2NvdW50LW51bWJlcicsXG4gICAgJ3JvdXRpbmctbnVtYmVyJ1xuXVxuXG5leHBvcnQgY29uc3QgY2FzaEZpZWxkVHlwZXMgPSBbXG4gICAgJ2Nhc2gtbmFtZScsXG4gICAgJ2Nhc2gtY29udGFjdCdcbl1cblxuZXhwb3J0IGNvbnN0IGZpZWxkVHlwZXMgPSBbXG4gICAgJ2NyZWRpdC1jYXJkJyxcbiAgICAnY2FyZC1udW1iZXInLFxuICAgICdjYXJkLWN2dicsXG4gICAgJ2NhcmQtZXhwJyxcbiAgICAnY2FyZC1uYW1lJyxcbiAgICAnYmlsbGluZy1saW5lMScsXG4gICAgJ2JpbGxpbmctbGluZTInLFxuICAgICdiaWxsaW5nLWNpdHknLFxuICAgICdiaWxsaW5nLXN0YXRlJyxcbiAgICAnYmlsbGluZy16aXAnXG5dXG5cbmV4cG9ydCBjb25zdCBBQ0hfSUZSQU1FID0gJ2FjY291bnQtbnVtYmVyLWlmcmFtZSdcbmV4cG9ydCBjb25zdCBDQVJEX0lGUkFNRSA9ICdjYXJkLW51bWJlci1pZnJhbWUnXG5leHBvcnQgY29uc3QgQ0FTSF9JRlJBTUUgPSAnY2FzaC1uYW1lLWlmcmFtZSdcblxuZXhwb3J0IGNvbnN0IGhvc3RlZEZpZWxkTWFwID0ge1xuICAgICdwYXktdGhlb3J5LWFjaC1hY2NvdW50LW51bWJlci10YWctZnJhbWUnOiBBQ0hfSUZSQU1FLFxuICAgICdwYXktdGhlb3J5LWNhc2gtbmFtZS10YWctZnJhbWUnOiBDQVNIX0lGUkFNRSxcbiAgICAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC10YWctZnJhbWUnOiBDQVJEX0lGUkFNRSxcbiAgICAncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1udW1iZXItdGFnLWZyYW1lJzogQ0FSRF9JRlJBTUUsXG4gICAgJ2Nhc2gnOiBDQVNIX0lGUkFNRSxcbiAgICAnY2FyZCc6IENBUkRfSUZSQU1FLFxuICAgICdhY2gnOiBBQ0hfSUZSQU1FXG59XG5cbmNvbnN0IGlzQ2FyZEZpZWxkID0gc3RyaW5nID0+IHN0cmluZy5zdGFydHNXaXRoKFwiY2FyZFwiKSB8fCBzdHJpbmcuc3RhcnRzV2l0aCgnYmlsbGluZycpXG5jb25zdCBpc0Nhc2hGaWVsZCA9IHN0cmluZyA9PiBzdHJpbmcuc3RhcnRzV2l0aChcImNhc2hcIilcbmNvbnN0IGlzQUNIRmllbGQgPSBzdHJpbmcgPT4gc3RyaW5nLnN0YXJ0c1dpdGgoXCJhY2NvdW50XCIpIHx8IHN0cmluZy5zdGFydHNXaXRoKCdyb3V0aW5nJylcblxuY29uc3QgaXNGaWVsZFR5cGUgPSB0eXBlID0+IHtcbiAgICBpZiAoaXNDYXJkRmllbGQodHlwZSkpIHJldHVybiAnY2FyZCdcbiAgICBpZiAoaXNDYXNoRmllbGQodHlwZSkpIHJldHVybiAnY2FzaCdcbiAgICBpZiAoaXNBQ0hGaWVsZCh0eXBlKSkgcmV0dXJuICdhY2gnXG4gICAgcmV0dXJuIGZhbHNlXG59XG5cbmNvbnN0IGNvbWJpbmVkQ2FyZFR5cGVzID0gWydjYXJkLW51bWJlcicsICdjYXJkLWN2dicsICdjYXJkLWV4cCddXG5cbmV4cG9ydCB7XG4gICAgaXNDYXJkRmllbGQsXG4gICAgaXNBQ0hGaWVsZCxcbiAgICBpc0Nhc2hGaWVsZCxcbiAgICBpc0ZpZWxkVHlwZSxcbiAgICBjb21iaW5lZENhcmRUeXBlc1xufVxuXG5leHBvcnQgY29uc3QgaXNBdXRvZmlsbCA9ICgpID0+IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQVVUT0ZJTEwpXG59XG5leHBvcnQgY29uc3Qgc2V0QXV0b2ZpbGwgPSBpc0F1dG9maWxsID0+IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oQVVUT0ZJTEwsIGlzQXV0b2ZpbGwpXG59XG5leHBvcnQgY29uc3QgcmVtb3ZlQXV0b2ZpbGwgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKEFVVE9GSUxMKVxufVxuZXhwb3J0IGNvbnN0IGdldFRyYW5zYWN0aW5nRWxlbWVudCA9ICgpID0+IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oVFJBTlNBQ1RJTkcpXG59XG5leHBvcnQgY29uc3Qgc2V0VHJhbnNhY3RpbmdFbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFRSQU5TQUNUSU5HLCBlbGVtZW50LmlkKVxufVxuZXhwb3J0IGNvbnN0IHJlbW92ZVRyYW5zYWN0aW5nRWxlbWVudCA9ICgpID0+IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oVFJBTlNBQ1RJTkcpXG59XG5leHBvcnQgY29uc3QgZ2V0RW52aXJvbm1lbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKEVOVklST05NRU5UKVxufVxuZXhwb3J0IGNvbnN0IHNldEVudmlyb25tZW50ID0gZW52aXJvbm1lbnQgPT4ge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShFTlZJUk9OTUVOVCwgZW52aXJvbm1lbnQpXG59XG5leHBvcnQgY29uc3QgZ2V0U3RhZ2UgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUQUdFKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0RmluaXhFbnYgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUQUdFKSA9PT0gJ3BheXRoZW9yeScgPyAnbGl2ZScgOiAnc2FuZGJveCdcbn1cblxuZXhwb3J0IGNvbnN0IHNldFN0YWdlID0gc3RhZ2UgPT4ge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVEFHRSwgc3RhZ2UpXG59XG5leHBvcnQgY29uc3QgZ2V0UmVhZHkgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKFJFQURZKVxufVxuZXhwb3J0IGNvbnN0IHNldFJlYWR5ID0gcmVhZHkgPT4ge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShSRUFEWSwgcmVhZHkpXG59XG5leHBvcnQgY29uc3QgcmVtb3ZlUmVhZHkgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFJFQURZKVxufVxuXG5leHBvcnQgY29uc3QgZ2V0SW5pdGlhbGl6ZSA9ICgpID0+IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0oSU5JVElBTElaRSlcbn1cblxuZXhwb3J0IGNvbnN0IHNldEluaXRpYWxpemUgPSBpbml0ID0+IHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLnNldEl0ZW0oSU5JVElBTElaRSwgaW5pdClcbn1cblxuZXhwb3J0IGNvbnN0IHJlbW92ZUluaXRpYWxpemUgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKElOSVRJQUxJWkUpXG59XG5cbmV4cG9ydCBjb25zdCByZW1vdmVBbGwgPSAoYWxsb3dSZXRyeSkgPT4ge1xuICAgIHJlbW92ZUF1dG9maWxsKClcbiAgICByZW1vdmVUcmFuc2FjdGluZ0VsZW1lbnQoKVxuICAgIGlmKGFsbG93UmV0cnkpIHJlbW92ZUluaXRpYWxpemUoKVxufSIsImltcG9ydCAqIGFzIG1lc3NhZ2UgZnJvbSAnLi9tZXNzYWdlJ1xuaW1wb3J0ICogYXMgZGF0YSBmcm9tICcuL2RhdGEnXG5leHBvcnQgY29uc3QgZmluZFRyYW5zYWN0aW5nRWxlbWVudCA9IChlbGVtZW50LCBjdikgPT4ge1xuICAgIHJldHVybiBlbGVtZW50ID09PSBmYWxzZSA/XG4gICAgICAgIChjdi50eXBlID09PSAnY3JlZGl0LWNhcmQnIHx8IGN2LnR5cGUgPT09ICdjYXJkLW51bWJlcicpID9cbiAgICAgICAgY3YuZnJhbWUgOlxuICAgICAgICBmYWxzZSA6XG4gICAgICAgIGVsZW1lbnRcbn1cblxuZXhwb3J0IGNvbnN0IGZpbmRGaWVsZCA9ICh0eXBlKSA9PiAoZWxlbWVudCwgY3YpID0+IHtcbiAgICByZXR1cm4gZWxlbWVudCA9PT0gZmFsc2UgP1xuICAgICAgICAoY3YudHlwZSA9PT0gdHlwZSkgP1xuICAgICAgICBjdi5mcmFtZSA6XG4gICAgICAgIGZhbHNlIDpcbiAgICAgICAgZWxlbWVudFxufVxuXG5leHBvcnQgY29uc3QgZmluZENWViA9IGZpbmRGaWVsZCgnY2FyZC1jdnYnKVxuZXhwb3J0IGNvbnN0IGZpbmRFeHAgPSBmaW5kRmllbGQoJ2NhcmQtZXhwJylcbmV4cG9ydCBjb25zdCBmaW5kQWNjb3VudE51bWJlciA9IGZpbmRGaWVsZCgnYWNjb3VudC1udW1iZXInKVxuZXhwb3J0IGNvbnN0IGZpbmRCYW5rQ29kZSA9IGZpbmRGaWVsZCgncm91dGluZy1udW1iZXInKVxuZXhwb3J0IGNvbnN0IGZpbmRBY2NvdW50VHlwZSA9IGZpbmRGaWVsZCgnYWNjb3VudC10eXBlJylcbmV4cG9ydCBjb25zdCBmaW5kQWNjb3VudE5hbWUgPSBmaW5kRmllbGQoJ2FjY291bnQtbmFtZScpXG5leHBvcnQgY29uc3QgZmluZFppcCA9IGZpbmRGaWVsZCgnYmlsbGluZy16aXAnKVxuXG5leHBvcnQgY29uc3QgYWRkRnJhbWUgPSAoXG4gICAgY29udGFpbmVyLFxuICAgIGVsZW1lbnQsXG4gICAgZnJhbWVUeXBlID0gJ3BheS10aGVvcnktY3JlZGl0LWNhcmQtdGFnLWZyYW1lJyxcbiAgICBlbnZcbikgPT4ge1xuICAgIGNvbnN0IHRhZ0ZyYW1lID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChmcmFtZVR5cGUpXG4gICAgdGFnRnJhbWUuZW52ID0gZW52XG4gICAgdGFnRnJhbWUucmVhZHkgPSB0cnVlXG4gICAgdGFnRnJhbWUuc2V0QXR0cmlidXRlKCdpZCcsIGAke2VsZW1lbnR9LXRhZy1mcmFtZWApXG4gICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRhZ0ZyYW1lKVxuICAgIHJldHVybiB0YWdGcmFtZVxufVxuXG5jb25zdCBwcm9jZXNzQ29udGFpbmVyID0gKGNvbnRhaW5lciwgZWxlbWVudHMsIHByb2Nlc3NlZCwgdHlwZSwgdGFnVHlwZSkgPT4ge1xuICAgIGxldCBlcnJvciA9IGZhbHNlXG4gICAgY29uc3QgY29udGFpbmVkID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYCR7ZWxlbWVudHNbdHlwZV19LXRhZy1mcmFtZWApXG4gICAgaWYgKGNvbnRhaW5lZCA9PT0gbnVsbCkge1xuICAgICAgICBjb25zdCBmcmFtZSA9IGFkZEZyYW1lKFxuICAgICAgICAgICAgY29udGFpbmVyLFxuICAgICAgICAgICAgZWxlbWVudHNbdHlwZV0sXG4gICAgICAgICAgICB0eXBlID09PSAnY3JlZGl0LWNhcmQnID9cbiAgICAgICAgICAgIGBwYXktdGhlb3J5LWNyZWRpdC1jYXJkLXRhZy1mcmFtZWAgOlxuICAgICAgICAgICAgYHBheS10aGVvcnktJHt0YWdUeXBlID8gYCR7dGFnVHlwZX0tYCA6ICcnfSR7dHlwZX0tdGFnLWZyYW1lYClcbiAgICAgICAgcHJvY2Vzc2VkLnB1c2goeyB0eXBlLCBmcmFtZSB9KVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBgJHtlbGVtZW50c1t0eXBlXX0gaXMgYWxyZWFkeSBtb3VudGVkYFxuICAgIH1cbiAgICByZXR1cm4gZXJyb3Jcbn1cblxuY29uc3QgZmluZEVsZW1lbnRFcnJvciA9IChlbGVtZW50cywgdHlwZSkgPT4ge1xuICAgIGxldCBlbGVtZW50ID0gZWxlbWVudHNbdHlwZV1cbiAgICByZXR1cm4gdHlwZW9mIGVsZW1lbnQgPT09ICd1bmRlZmluZWQnID8gYHVua25vd24gdHlwZSAke3R5cGV9YCA6IHR5cGVvZiBlbGVtZW50ICE9PSAnc3RyaW5nJyA/ICdpbnZhbGlkIGVsZW1lbnQnIDogZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IHByb2Nlc3NFbGVtZW50cyA9IChlbGVtZW50cywgc3RhdGUsIGZpZWxkVHlwZXMsIHRhZ1R5cGUpID0+IHtcbiAgICBsZXQgcHJvY2Vzc2VkID0gW11cbiAgICBmaWVsZFR5cGVzLmZvckVhY2godHlwZSA9PiB7XG4gICAgICAgIGxldCBlcnJvciA9IGZpbmRFbGVtZW50RXJyb3IoZWxlbWVudHMsIHR5cGUpXG5cbiAgICAgICAgY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoZWxlbWVudHNbdHlwZV0pXG4gICAgICAgIGlmIChjb250YWluZXIgJiYgZXJyb3IgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICBlcnJvciA9IHByb2Nlc3NDb250YWluZXIoY29udGFpbmVyLCBlbGVtZW50cywgcHJvY2Vzc2VkLCB0eXBlLCB0YWdUeXBlKVxuICAgICAgICB9XG4gICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgcmV0dXJuIG1lc3NhZ2UuaGFuZGxlRXJyb3IoYEZJRUxEX0VSUk9SOiAke2Vycm9yfWApXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBzdGF0ZVt0eXBlXSA9IGRhdGEuaW5pdGlhbFN0YXRlXG4gICAgICAgIH1cbiAgICB9KVxuICAgIHJldHVybiBwcm9jZXNzZWRcbn1cblxuZXhwb3J0IGNvbnN0IGlzSGlkZGVuID0gZWxlbWVudCA9PiB7XG4gICAgaWYgKGVsZW1lbnQgPT09IGZhbHNlKSByZXR1cm4gdHJ1ZVxuXG4gICAgbGV0IGVsZW0gPSBlbGVtZW50O1xuICAgIGxldCBlbGVtZW50cyA9IFtlbGVtXVxuXG4gICAgZm9yICg7IGVsZW0gJiYgZWxlbSAhPT0gZG9jdW1lbnQ7IGVsZW0gPSBlbGVtLnBhcmVudE5vZGUpIHtcbiAgICAgICAgZWxlbWVudHMucHVzaChlbGVtKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXNwbGF5Tm9uZSA9IChoaWRkZW4sIGN2KSA9PiB7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY3YpXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0eWxlLmRpc3BsYXkgPT09ICdub25lJ1xuICAgICAgICByZXR1cm4gaGlkZGVuID8gaGlkZGVuIDogcmVzdWx0XG4gICAgfVxuXG4gICAgcmV0dXJuIGVsZW1lbnRzLnJlZHVjZShkaXNwbGF5Tm9uZSwgZmFsc2UpXG59XG4iLCJpbXBvcnQgKiBhcyBkYXRhIGZyb20gJy4vZGF0YSdcbmltcG9ydCAqIGFzIGRvbSBmcm9tICcuL2RvbSdcbmltcG9ydCAqIGFzIG1lc3NhZ2UgZnJvbSAnLi9tZXNzYWdlJ1xuaW1wb3J0ICogYXMgbmV0d29yayBmcm9tICcuL25ldHdvcmsnXG5pbXBvcnQgKiBhcyBvYnNlcnZlIGZyb20gJy4vb2JzZXJ2ZSdcblxuY29uc3QgY29tbW9uID0geyAuLi5kYXRhLCAuLi5kb20sIC4uLm1lc3NhZ2UsIC4uLm5ldHdvcmssIC4uLm9ic2VydmUgfVxuXG5leHBvcnQgZGVmYXVsdCBjb21tb25cbiIsImltcG9ydCB7IGhvc3RlZEZpZWxkc0VuZHBvaW50IH0gZnJvbSAnLi9uZXR3b3JrJ1xuXG5jb25zdCB3aW5kb3dMaXN0ZW5lckhhbmRsZXIgPSAodmFsaWRUYXJnZXQsIGhhbmRsZU1lc3NhZ2UsIGV2ZW50KSA9PiB7XG4gICAgY29uc3QgbWVzc2FnZSA9IHR5cGVvZiBldmVudC5kYXRhID09PSAnc3RyaW5nJyA/IEpTT04ucGFyc2UoZXZlbnQuZGF0YSkgOiBldmVudC5kYXRhXG4gICAgaWYgKHZhbGlkVGFyZ2V0KG1lc3NhZ2UpKSB7XG4gICAgICAgIGhhbmRsZU1lc3NhZ2UobWVzc2FnZSlcbiAgICB9XG59XG5cbmNvbnN0IGdlbmVyYXRlV2luZG93TGlzdGVuZXIgPSAodmFsaWRUYXJnZXQsIGhhbmRsZU1lc3NhZ2UpID0+IHtcbiAgICByZXR1cm4gZXZlbnQgPT4ge1xuICAgICAgICBpZiAoW3dpbmRvdy5sb2NhdGlvbi5vcmlnaW5dLmluY2x1ZGVzKGV2ZW50Lm9yaWdpbikpIHtcbiAgICAgICAgICAgIHdpbmRvd0xpc3RlbmVySGFuZGxlcih2YWxpZFRhcmdldCwgaGFuZGxlTWVzc2FnZSwgZXZlbnQpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbmNvbnN0IGdlbmVyYXRlaUZyYW1lV2luZG93TGlzdGVuZXIgPSAodmFsaWRUYXJnZXQsIGhhbmRsZU1lc3NhZ2UpID0+IHtcbiAgICByZXR1cm4gZXZlbnQgPT4ge1xuICAgICAgICBpZiAoZXZlbnQub3JpZ2luID09PSBob3N0ZWRGaWVsZHNFbmRwb2ludCgpKSB7XG4gICAgICAgICAgICB3aW5kb3dMaXN0ZW5lckhhbmRsZXIodmFsaWRUYXJnZXQsIGhhbmRsZU1lc3NhZ2UsIGV2ZW50KVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlTWVzc2FnZSA9ICh2YWxpZFRhcmdldCwgaGFuZGxlTWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IGZ1bmMgPSBnZW5lcmF0ZVdpbmRvd0xpc3RlbmVyKHZhbGlkVGFyZ2V0LCBoYW5kbGVNZXNzYWdlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuYylcbiAgICByZXR1cm4gKCkgPT4geyB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmMpIH1cbn1cblxuZXhwb3J0IGNvbnN0IGhhbmRsZUhvc3RlZEZpZWxkTWVzc2FnZSA9ICh2YWxpZFRhcmdldCwgaGFuZGxlTWVzc2FnZSkgPT4ge1xuICAgIGNvbnN0IGZ1bmMgPSBnZW5lcmF0ZWlGcmFtZVdpbmRvd0xpc3RlbmVyKHZhbGlkVGFyZ2V0LCBoYW5kbGVNZXNzYWdlKVxuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdtZXNzYWdlJywgZnVuYylcbiAgICByZXR1cm4gKCkgPT4geyB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZ1bmMpIH1cbn1cblxuZXhwb3J0IGNvbnN0IGVycm9yVHlwZU1lc3NhZ2UgPSBtZXNzYWdlID0+IHR5cGVvZiBtZXNzYWdlLnR5cGUgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UudHlwZSA9PT0gJ3B0OmVycm9yJ1xuXG5leHBvcnQgY29uc3QgcmVhZHlUeXBlTWVzc2FnZSA9IG1lc3NhZ2UgPT4gdHlwZW9mIG1lc3NhZ2UudHlwZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS50eXBlLmVuZHNXaXRoKCc6cmVhZHknKVxuXG5leHBvcnQgY29uc3QgaG9zdGVkUmVhZHlUeXBlTWVzc2FnZSA9IG1lc3NhZ2UgPT4gdHlwZW9mIG1lc3NhZ2UudHlwZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS50eXBlLmVuZHNXaXRoKCc6cmVhZHknKSAmJiBtZXNzYWdlLnR5cGUuc3RhcnRzV2l0aCgncHQtc3RhdGljOicpXG5cbmV4cG9ydCBjb25zdCBzdGF0ZVR5cGVNZXNzYWdlID0gbWVzc2FnZSA9PiB0eXBlb2YgbWVzc2FnZS50eXBlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLnR5cGUgPT09ICdwdC1zdGF0aWM6c3RhdGUnXG5cbmV4cG9ydCBjb25zdCByZWxheVR5cGVNZXNzYWdlID0gbWVzc2FnZSA9PiB0eXBlb2YgbWVzc2FnZS50eXBlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLnR5cGUgPT09ICdwdC1zdGF0aWM6cmVsYXknXG5cbi8vcGFzc2VzIGlkZW1wb3RlbmN5IGZyb20gaG9zdGVkIGZpZWxkcyB0byBTREtcbmV4cG9ydCBjb25zdCBjb25maXJtVHlwZU1lc3NhZ2UgPSBtZXNzYWdlID0+IHR5cGVvZiBtZXNzYWdlLnR5cGUgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UudHlwZSA9PT0gJ3B0LXN0YXRpYzpjb25maXJtJ1xuXG4vL3Bhc3NlcyB0cmFuc2Zlci1jb21wbGV0ZSBmcm9tIGhvc3RlZCBmaWVsZHMgdG8gU0RLXG5leHBvcnQgY29uc3QgY29tcGxldGVUeXBlTWVzc2FnZSA9IG1lc3NhZ2UgPT4gdHlwZW9mIG1lc3NhZ2UudHlwZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS50eXBlID09PSAncHQtc3RhdGljOmNvbXBsZXRlJ1xuXG4vL3Bhc3NlcyBjb25maXJtYXRpb24tY29tcGxldGUgZnJvbSBob3N0ZWQgZmllbGRzIHRvIFNES1xuZXhwb3J0IGNvbnN0IGNvbmZpcm1hdGlvbkNvbXBsZXRlVHlwZU1lc3NhZ2UgPSBtZXNzYWdlID0+IHR5cGVvZiBtZXNzYWdlLnR5cGUgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UudHlwZSA9PT0gJ3B0LXN0YXRpYzpjb25maXJtYXRpb24tY29tcGxldGUnXG5cbi8vcGFzc2VzIHNvY2tldCBlcnJvciBmcm9tIHRoZSBob3N0ZWQgZmllbGRzIHRvIFNES1xuZXhwb3J0IGNvbnN0IHNvY2tldEVycm9yVHlwZU1lc3NhZ2UgPSBtZXNzYWdlID0+IHR5cGVvZiBtZXNzYWdlLnR5cGUgPT09ICdzdHJpbmcnICYmIG1lc3NhZ2UudHlwZSA9PT0gJ3B0LXN0YXRpYzplcnJvcidcblxuLy9wYXNzZXMgc2Vzc2lvbiBpbmZvIHRvIHNpYmxpbmcgZmllbGRzXG5leHBvcnQgY29uc3Qgc2libGluZ1R5cGVNZXNzYWdlID0gbWVzc2FnZSA9PiB0eXBlb2YgbWVzc2FnZS50eXBlID09PSAnc3RyaW5nJyAmJiBtZXNzYWdlLnR5cGUgPT09IGBwdC1zdGF0aWM6c2libGluZ3NgXG5cbi8vTWVzc2FnZSBzZW50IGZyb20gaG9zdGVkLWZpZWxkcyB3aXRoIGRhdGEgd2hlbiBhIGNhc2ggYmFyY29kZSBpcyBzZW50IGJhY2tcbmV4cG9ydCBjb25zdCBjYXNoQ29tcGxldGVUeXBlTWVzc2FnZSA9IG1lc3NhZ2UgPT4gdHlwZW9mIG1lc3NhZ2UudHlwZSA9PT0gJ3N0cmluZycgJiYgbWVzc2FnZS50eXBlID09PSBgcHQtc3RhdGljOmNhc2gtY29tcGxldGVgXG5cbmV4cG9ydCBjb25zdCBwb3N0TWVzc2FnZVRvSG9zdGVkRmllbGQgPSAoaWQsIG1lc3NhZ2UpID0+IHtcbiAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoaWQpID8gXG4gICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGlkKVswXVxuICAgICAgICAgICAgLmNvbnRlbnRXaW5kb3cucG9zdE1lc3NhZ2UobWVzc2FnZSwgaG9zdGVkRmllbGRzRW5kcG9pbnQoKSkgOlxuICAgICAgICBjb25zb2xlLmxvZygnZmllbGQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZScpXG4gICAgICAgIFxufVxuXG5leHBvcnQgY29uc3QgaGFuZGxlRXJyb3IgPSBlcnJvciA9PiB7XG4gICAgXG4gICAgd2luZG93LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIHR5cGU6ICdwdDplcnJvcicsXG4gICAgICAgICAgICB0aHJvd3M6IHRydWUsXG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgfSxcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICApO1xufVxuIiwiLyogZ2xvYmFsIG5hdmlnYXRvciAqL1xuaW1wb3J0ICogYXMgZGF0YSBmcm9tICcuL2RhdGEnXG5pbXBvcnQgKiBhcyBtZXNzYWdlIGZyb20gJy4vbWVzc2FnZSdcblxuZXhwb3J0IGNvbnN0IGdldERhdGEgPSBhc3luYyh1cmwsIGFwaUtleSkgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXG4gICAgICAgIG1vZGU6ICdjb3JzJyxcbiAgICAgICAgY2FjaGU6ICduby1jYWNoZScsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAgICd4LWFwaS1rZXknOiBhcGlLZXlcbiAgICAgICAgfVxuICAgIH1cbiAgICAvKiBnbG9iYWwgZmV0Y2ggKi9cbiAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCwgb3B0aW9ucylcbiAgICByZXR1cm4gYXdhaXQgcmVzcG9uc2UuanNvbigpXG59XG5cbi8vIGRlcHJlY2F0ZWQgZW52aXJvbm1lbnQgaXMgYWx3YXlzIGRlcml2ZWQgZnJvbSBBUEkga2V5XG5leHBvcnQgY29uc3QgZGVmYXVsdEVudmlyb25tZW50ID0gKCgpID0+IHtcblxuICAgIHN3aXRjaCAocHJvY2Vzcy5lbnYuQlVJTERfRU5WKSB7XG4gICAgY2FzZSAncHJvZCc6XG4gICAgICAgIHtcbiAgICAgICAgICAgIHJldHVybiAncHJvZCdcbiAgICAgICAgfVxuICAgIGNhc2UgJ3N0YWdlJzpcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuICdkZW1vJ1xuICAgICAgICB9XG4gICAgZGVmYXVsdDpcbiAgICAgICAge1xuICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBkYXRhLmdldEVudmlyb25tZW50KCkgPT09ICdzdHJpbmcnID8gZGF0YS5nZXRFbnZpcm9ubWVudCgpIDogJ2RldidcbiAgICAgICAgfVxuICAgIH1cbn0pKClcblxuZXhwb3J0IGNvbnN0IHRyYW5zYWN0aW9uRW5kcG9pbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7ZGF0YS5nZXRFbnZpcm9ubWVudCgpfS4ke2RhdGEuZ2V0U3RhZ2UoKX0uY29tL3B0LXRva2VuLXNlcnZpY2UvYFxufVxuXG5leHBvcnQgY29uc3QgaG9zdGVkRmllbGRzRW5kcG9pbnQgPSAoKSA9PiB7XG4gICAgcmV0dXJuIGBodHRwczovLyR7ZGF0YS5nZXRFbnZpcm9ubWVudCgpfS50YWdzLnN0YXRpYy4ke2RhdGEuZ2V0U3RhZ2UoKX0uY29tYFxufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVUb2tlbml6ZSA9IChjYikgPT4ge1xuICAgIHJldHVybiBhc3luYyBtZXNzYWdlID0+IHtcbiAgICAgICAgY29uc3QgZmVlID0gbWVzc2FnZS5wYXltZW50LmZlZV9tb2RlID09PSBkYXRhLlNFUlZJQ0VfRkVFID8gbWVzc2FnZS5wYXltZW50LmZlZSA6IDBcbiAgICAgICAgbGV0IGNiVG9rZW4gPSB7XG4gICAgICAgICAgICAgICAgXCJmaXJzdF9zaXhcIjogbWVzc2FnZS5wYXltZW50LmZpcnN0X3NpeCxcbiAgICAgICAgICAgICAgICBcImxhc3RfZm91clwiOiBtZXNzYWdlLnBheW1lbnQubGFzdF9mb3VyLFxuICAgICAgICAgICAgICAgIFwiYnJhbmRcIjogbWVzc2FnZS5wYXltZW50LmJyYW5kLFxuICAgICAgICAgICAgICAgIFwicmVjZWlwdF9udW1iZXJcIjogbWVzc2FnZS5wYXltZW50LmlkZW1wb3RlbmN5LFxuICAgICAgICAgICAgICAgIFwiYW1vdW50XCI6IG1lc3NhZ2UucGF5bWVudC5hbW91bnQsXG4gICAgICAgICAgICAgICAgXCJzZXJ2aWNlX2ZlZVwiOiBmZWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICBjYihjYlRva2VuKVxuICAgIH1cbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlQ29tcGxldGlvblJlc3BvbnNlID0gKGNiKSA9PiB7XG4gICAgcmV0dXJuIGFzeW5jIG1lc3NhZ2UgPT4ge1xuICAgICAgICBsZXQgcGF5bWVudFR5cGUgPSBtZXNzYWdlLnBheW1lbnRUeXBlXG4gICAgICAgIGxldCBjYlRva2VuXG5cbiAgICAgICAgaWYgKHBheW1lbnRUeXBlID09PSAndG9rZW5pemUnKSB7XG4gICAgICAgICAgICBjYlRva2VuID0gbWVzc2FnZS5ib2R5XG4gICAgICAgIH0gZWxzZSBpZihtZXNzYWdlLmJvZHkuc3RhdGUgIT09IFwiRkFJTFVSRVwiKSB7XG4gICAgICAgICAgICBjYlRva2VuID0ge1xuICAgICAgICAgICAgICAgIFwicmVjZWlwdF9udW1iZXJcIjogbWVzc2FnZS5ib2R5LnJlY2VpcHRfbnVtYmVyLFxuICAgICAgICAgICAgICAgIFwibGFzdF9mb3VyXCI6IG1lc3NhZ2UuYm9keS5sYXN0X2ZvdXIsXG4gICAgICAgICAgICAgICAgXCJicmFuZFwiOiBtZXNzYWdlLmJvZHkuYnJhbmQsXG4gICAgICAgICAgICAgICAgXCJjcmVhdGVkX2F0XCI6IG1lc3NhZ2UuYm9keS5jcmVhdGVkX2F0LFxuICAgICAgICAgICAgICAgIFwiYW1vdW50XCI6IG1lc3NhZ2UuYm9keS5hbW91bnQsXG4gICAgICAgICAgICAgICAgXCJzZXJ2aWNlX2ZlZVwiOiBtZXNzYWdlLmJvZHkuc2VydmljZV9mZWUsXG4gICAgICAgICAgICAgICAgXCJzdGF0ZVwiOiBtZXNzYWdlLmJvZHkuc3RhdGUsXG4gICAgICAgICAgICAgICAgLy8gS2VlcGluZyB0YWdzIGluIHRoZSByZXNwb25zZSBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHlcbiAgICAgICAgICAgICAgICBcInRhZ3NcIjogbWVzc2FnZS5ib2R5Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIFwibWV0YWRhdGFcIjogbWVzc2FnZS5ib2R5Lm1ldGFkYXRhLFxuICAgICAgICAgICAgICAgIFwicGF5b3JfaWRcIjogbWVzc2FnZS5ib2R5LnBheW9yX2lkLFxuICAgICAgICAgICAgICAgIFwicGF5bWVudF9tZXRob2RfaWRcIjogbWVzc2FnZS5ib2R5LnBheW1lbnRfbWV0aG9kX2lkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYlRva2VuID0ge1xuICAgICAgICAgICAgICAgIFwicmVjZWlwdF9udW1iZXJcIjogbWVzc2FnZS5ib2R5LnJlY2VpcHRfbnVtYmVyLFxuICAgICAgICAgICAgICAgIFwibGFzdF9mb3VyXCI6IG1lc3NhZ2UuYm9keS5sYXN0X2ZvdXIsXG4gICAgICAgICAgICAgICAgXCJicmFuZFwiOiBtZXNzYWdlLmJvZHkuYnJhbmQsXG4gICAgICAgICAgICAgICAgXCJzdGF0ZVwiOiBtZXNzYWdlLmJvZHkuc3RhdGUsXG4gICAgICAgICAgICAgICAgXCJ0eXBlXCI6IG1lc3NhZ2UuYm9keS50eXBlLFxuICAgICAgICAgICAgICAgIFwicGF5b3JfaWRcIjogbWVzc2FnZS5ib2R5LnBheW9yX2lkLFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNiKGNiVG9rZW4pXG4gICAgICAgIGRhdGEucmVtb3ZlQWxsKClcbiAgICB9XG59XG5cbmNvbnN0IGNyZWF0ZUNyZWRlbnRpYWxzID0gYXN5bmMoYXZhaWxhYmxlLCBvcHRpb25zKSA9PiB7XG4gICAgaWYgKGF2YWlsYWJsZSkge1xuXG4gICAgICAgIG9wdGlvbnMuY2hhbGxlbmdlID0gVWludDhBcnJheS5mcm9tKFxuICAgICAgICAgICAgb3B0aW9ucy5jaGFsbGVuZ2UsXG4gICAgICAgICAgICBjID0+IGMuY2hhckNvZGVBdCgwKSlcblxuICAgICAgICBvcHRpb25zLnVzZXIuaWQgPSBVaW50OEFycmF5LmZyb20oXG4gICAgICAgICAgICBvcHRpb25zLnVzZXIuaWQsXG4gICAgICAgICAgICBjID0+IGMuY2hhckNvZGVBdCgwKSlcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBhd2FpdCBuYXZpZ2F0b3IuY3JlZGVudGlhbHMuY3JlYXRlKHtcbiAgICAgICAgICAgICAgICBwdWJsaWNLZXk6IG9wdGlvbnNcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcImZhaWxlZCB0byBjcmVhdGUgY3JlZGVudGlhbHNcIlxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJ1bmF2YWlsYWJsZVwiXG4gICAgfVxufVxuXG5jb25zdCBhdHRlc3RCcm93c2VyID0gYXN5bmMoY2hhbGxlbmdlT3B0aW9ucykgPT4ge1xuICAgIGlmIChkYXRhLmlzQXV0b2ZpbGwoKSkgcmV0dXJuIHsgdHlwZTogXCJhdXRvZmlsbFwiIH1cblxuICAgIGlmICgvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSByZXR1cm4geyB0eXBlOiBcInNhZmFyaS1ieXBhc3NcIiB9XG5cbiAgICBpZiAobmF2aWdhdG9yLmNyZWRlbnRpYWxzICYmIG5hdmlnYXRvci5jcmVkZW50aWFscy5wcmV2ZW50U2lsZW50QWNjZXNzKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBpc0F2YWlsYWJsZSA9IGF3YWl0IHdpbmRvdy5QdWJsaWNLZXlDcmVkZW50aWFsLmlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSgpXG4gICAgICAgICAgICByZXR1cm4gYXdhaXQgY3JlYXRlQ3JlZGVudGlhbHMoaXNBdmFpbGFibGUsIGNoYWxsZW5nZU9wdGlvbnMpXG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2gge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInByZXZlbnRlZFwiXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImZhaWxlZCBhdHRlc3RhdGlvblwiXG4gICAgfVxufVxuXG5jb25zdCBzZW5kVHJhbnNhY3RpbmdNZXNzYWdlID0gKCkgPT4ge1xuICAgIGNvbnN0IHRyYW5zYWN0aW5nID0gZGF0YS5nZXRUcmFuc2FjdGluZ0VsZW1lbnQoKVxuICAgIGNvbnN0IHR5cGVzID0gdHJhbnNhY3RpbmcuaW5jbHVkZXMoJy1jYXJkLScpID8gZGF0YS5maWVsZFR5cGVzIDogdHJhbnNhY3RpbmcuaW5jbHVkZXMoJy1hY2gtJykgPyBkYXRhLmFjaEZpZWxkVHlwZXMgOiBkYXRhLmNhc2hGaWVsZFR5cGVzXG4gICAgdHlwZXMuZm9yRWFjaChmaWVsZCA9PiB7XG4gICAgICAgIGxldCBpZnJhbWUgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZShgJHtmaWVsZH0taWZyYW1lYClbMF1cbiAgICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICAgICAgbWVzc2FnZS5wb3N0TWVzc2FnZVRvSG9zdGVkRmllbGQoYCR7ZmllbGR9LWlmcmFtZWAsIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBcInB0LXN0YXRpYzp0cmFuc2FjdFwiLFxuICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGZpZWxkXG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfSlcbn1cblxuY29uc3QgaGFuZGxlQXR0ZXN0YXRpb24gPSBhc3luYyBjaGFsbGVuZ2VPcHRpb25zID0+IHtcbiAgICBjb25zdCBhdHRlc3RlZCA9IGF3YWl0IGF0dGVzdEJyb3dzZXIoY2hhbGxlbmdlT3B0aW9ucylcblxuICAgIGlmIChhdHRlc3RlZC5yZXNwb25zZSkge1xuICAgICAgICBjb25zdCB0cmFuc2FjdGluZyA9IGRhdGEuZ2V0VHJhbnNhY3RpbmdFbGVtZW50KClcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSB7IGNsaWVudERhdGFKU09OOiBhdHRlc3RlZC5yZXNwb25zZS5jbGllbnREYXRhSlNPTiwgYXR0ZXN0YXRpb25PYmplY3Q6IGF0dGVzdGVkLnJlc3BvbnNlLmF0dGVzdGF0aW9uT2JqZWN0IH1cbiAgICAgICAgY29uc3QgYXR0ZXN0YXRpb24gPSB7IHJlc3BvbnNlLCBpZDogYXR0ZXN0ZWQuaWQsIHR5cGU6IGF0dGVzdGVkLnR5cGUgfVxuICAgICAgICBtZXNzYWdlLnBvc3RNZXNzYWdlVG9Ib3N0ZWRGaWVsZChkYXRhLmhvc3RlZEZpZWxkTWFwW3RyYW5zYWN0aW5nXSwge1xuICAgICAgICAgICAgdHlwZTogYHB0LXN0YXRpYzphdHRlc3RhdGlvbmAsXG4gICAgICAgICAgICBhdHRlc3RhdGlvblxuICAgICAgICB9KVxuICAgIH1cbn1cblxuY29uc3QgcGFyc2VJbnB1dFBhcmFtcyA9IChpbnB1dFBhcmFtcykgPT4ge1xuICAgIGxldCB7IHBheW9ySWQsIGludm9pY2VJZCwgcmVjdXJyaW5nSWQsIGZlZSwgbWV0YWRhdGEgPSB7fSB9ID0gaW5wdXRQYXJhbXNcbiAgICBsZXQgcGF5VGhlb3J5RGF0YSA9IHtcbiAgICAgICAgYWNjb3VudF9jb2RlOiBpbnB1dFBhcmFtcy5hY2NvdW50Q29kZSB8fCBtZXRhZGF0YVtcInBheS10aGVvcnktYWNjb3VudC1jb2RlXCJdLFxuICAgICAgICByZWZlcmVuY2U6IGlucHV0UGFyYW1zLnJlZmVyZW5jZSB8fCBtZXRhZGF0YVtcInBheS10aGVvcnktcmVmZXJlbmNlXCJdLFxuICAgICAgICBwYXltZW50X3BhcmFtZXRlcnM6IGlucHV0UGFyYW1zLnBheW1lbnRQYXJhbWV0ZXJzIHx8IG1ldGFkYXRhW1wicGF5bWVudC1wYXJhbWV0ZXJzLW5hbWVcIl0sXG4gICAgICAgIHBheW9yX2lkOiBwYXlvcklkLFxuICAgICAgICBzZW5kX3JlY2VpcHQ6IGlucHV0UGFyYW1zLnNlbmRSZWNlaXB0IHx8IG1ldGFkYXRhW1wicGF5LXRoZW9yeS1yZWNlaXB0XCJdLFxuICAgICAgICByZWNlaXB0X2Rlc2NyaXB0aW9uOiBpbnB1dFBhcmFtcy5yZWNlaXB0RGVzY3JpcHRpb24gfHwgbWV0YWRhdGFbXCJwYXktdGhlb3J5LXJlY2VpcHQtZGVzY3JpcHRpb25cIl0sXG4gICAgICAgIGludm9pY2VfaWQ6IGludm9pY2VJZCxcbiAgICAgICAgcmVjdXJyaW5nX2lkOiByZWN1cnJpbmdJZCxcbiAgICAgICAgdGltZXpvbmU6IEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSxcbiAgICAgICAgZmVlOiBmZWVcbiAgICB9XG4gICAgaW5wdXRQYXJhbXMucGF5VGhlb3J5RGF0YSA9IHBheVRoZW9yeURhdGFcbiAgICByZXR1cm4gaW5wdXRQYXJhbXNcbn1cblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlSW5pdGlhbGl6YXRpb24gPSAoaGFuZGxlSW5pdGlhbGl6ZWQsIGNoYWxsZW5nZU9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gYXN5bmMoaW5wdXRQYXJhbWV0ZXJzKSA9PiB7XG4gICAgICAgIGxldCB7YW1vdW50LCBwYXlvckluZm8sIHBheVRoZW9yeURhdGEsIHNoaXBwaW5nRGV0YWlscywgY3VzdG9tZXJJbmZvLCBtZXRhZGF0YSA9IHt9LCBmZWVNb2RlLCBjb25maXJtYXRpb24gPSBmYWxzZX0gPSBwYXJzZUlucHV0UGFyYW1zKGlucHV0UGFyYW1ldGVycylcbiAgICAgICAgLy8gQWRkaW5nIGxpbmUgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgICAgIC8vIFRPRE8gYWRkIHNvbWUgbG9nZ2luZyB0byBTREsgdG8gc2VlIHVzYWdlIG9mIGRlcHJlY2F0ZWQgdmFyaWFibGVzIGFuZCBmdW5jdGlvbnNcbiAgICAgICAgcGF5b3JJbmZvID0gcGF5b3JJbmZvIHx8IGN1c3RvbWVySW5mbyB8fCBzaGlwcGluZ0RldGFpbHMgfHwge31cbiAgICAgICAgbGV0IGluaXRpYWxpemUgPSBkYXRhLmdldEluaXRpYWxpemUoKVxuICAgICAgICBpZiAoaW5pdGlhbGl6ZSAhPT0gJ2luaXQnKSB7XG4gICAgICAgICAgICBkYXRhLnNldEluaXRpYWxpemUoJ2luaXQnKVxuICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGhhbmRsZUluaXRpYWxpemVkKGFtb3VudCwgcGF5b3JJbmZvLCBwYXlUaGVvcnlEYXRhLCBtZXRhZGF0YSwgZmVlTW9kZSwgY29uZmlybWF0aW9uKVxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVBdHRlc3RhdGlvbihjaGFsbGVuZ2VPcHRpb25zKVxuICAgICAgICAgICAgICAgIHNlbmRUcmFuc2FjdGluZ01lc3NhZ2UoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5leHBvcnQgY29uc3QgZ2VuZXJhdGVUb2tlbml6YXRpb24gPSAoaGFuZGxlVG9rZW5pemUsIGNoYWxsZW5nZU9wdGlvbnMpID0+IHtcbiAgICByZXR1cm4gYXN5bmMoaW5wdXRQYXJhbWV0ZXJzKSA9PiB7XG4gICAgICAgIGxldCB7cGF5b3JJbmZvID0ge30sIHBheW9ySWQsIG1ldGFkYXRhID0ge319ID0gaW5wdXRQYXJhbWV0ZXJzXG4gICAgICAgIGxldCBpbml0aWFsaXplID0gZGF0YS5nZXRJbml0aWFsaXplKClcbiAgICAgICAgaWYgKGluaXRpYWxpemUgIT09ICdpbml0Jykge1xuICAgICAgICAgICAgZGF0YS5zZXRJbml0aWFsaXplKCdpbml0JylcbiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBoYW5kbGVUb2tlbml6ZShwYXlvckluZm8sIHBheW9ySWQsIG1ldGFkYXRhKVxuICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCBoYW5kbGVBdHRlc3RhdGlvbihjaGFsbGVuZ2VPcHRpb25zKVxuICAgICAgICAgICAgICAgIHNlbmRUcmFuc2FjdGluZ01lc3NhZ2UoKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufSIsImltcG9ydCAqIGFzIG1lc3NhZ2luZyBmcm9tICcuL21lc3NhZ2UnXG5pbXBvcnQgKiBhcyBuZXR3b3JrIGZyb20gJy4vbmV0d29yaydcbmltcG9ydCAqIGFzIGRhdGEgZnJvbSAnLi9kYXRhJ1xuXG5leHBvcnQgY29uc3QgZXJyb3JPYnNlcnZlciA9IGNiID0+IG1lc3NhZ2luZy5oYW5kbGVNZXNzYWdlKG1lc3NhZ2luZy5lcnJvclR5cGVNZXNzYWdlLCBtZXNzYWdlID0+IHtcbiAgICBjYihtZXNzYWdlLmVycm9yKVxuICAgIGRhdGEucmVtb3ZlSW5pdGlhbGl6ZSgpXG4gICAgaWYgKG1lc3NhZ2UudGhyb3dzKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlLmVycm9yKVxuICAgIH1cbn0pXG5cbmV4cG9ydCBjb25zdCB0b2tlbml6ZU9ic2VydmVyID0gY2IgPT4gbWVzc2FnaW5nLmhhbmRsZUhvc3RlZEZpZWxkTWVzc2FnZShcbiAgICAgICAgbWVzc2FnaW5nLmNvbmZpcm1UeXBlTWVzc2FnZSxcbiAgICAgICAgbmV0d29yay5nZW5lcmF0ZVRva2VuaXplKGNiKSlcblxuZXhwb3J0IGNvbnN0IGNhcHR1cmVPYnNlcnZlciA9IGNiID0+IG1lc3NhZ2luZy5oYW5kbGVIb3N0ZWRGaWVsZE1lc3NhZ2UoXG4gICAgICAgIG1lc3NhZ2luZy5jb25maXJtYXRpb25Db21wbGV0ZVR5cGVNZXNzYWdlLFxuICAgICAgICBuZXR3b3JrLmdlbmVyYXRlQ29tcGxldGlvblJlc3BvbnNlKGNiKSlcblxuZXhwb3J0IGNvbnN0IHRyYW5zYWN0ZWRPYnNlcnZlciA9IGNiID0+IG1lc3NhZ2luZy5oYW5kbGVIb3N0ZWRGaWVsZE1lc3NhZ2UoXG4gICAgICAgIG1lc3NhZ2luZy5jb21wbGV0ZVR5cGVNZXNzYWdlLFxuICAgICAgICBuZXR3b3JrLmdlbmVyYXRlQ29tcGxldGlvblJlc3BvbnNlKGNiKSlcblxuZXhwb3J0IGNvbnN0IGdlbmVyYXRlUmV0dXJuID0gKCBtb3VudCxcbiAgICAgICAgaW5pdFRyYW5zYWN0aW9uLFxuICAgICAgICB0cmFuc2FjdCxcbiAgICAgICAgdG9rZW5pemVQYXltZW50TWV0aG9kLFxuICAgICAgICBjb25maXJtLFxuICAgICAgICBjYW5jZWwsXG4gICAgICAgIHJlYWR5T2JzZXJ2ZXIsXG4gICAgICAgIHZhbGlkT2JzZXJ2ZXIsXG4gICAgICAgIGNhc2hPYnNlcnZlcixcbiAgICAgICAgc3RhdGVPYnNlcnZlcikgPT4gT2JqZWN0LmNyZWF0ZSh7XG4gICAgbW91bnQsXG4gICAgaW5pdFRyYW5zYWN0aW9uLFxuICAgIHRyYW5zYWN0LFxuICAgIHRva2VuaXplUGF5bWVudE1ldGhvZCxcbiAgICBjb25maXJtLFxuICAgIGNhbmNlbCxcbiAgICByZWFkeU9ic2VydmVyLFxuICAgIGVycm9yT2JzZXJ2ZXIsXG4gICAgdmFsaWRPYnNlcnZlcixcbiAgICBjYXNoT2JzZXJ2ZXIsXG4gICAgY2FwdHVyZU9ic2VydmVyLFxuICAgIHRva2VuaXplT2JzZXJ2ZXIsXG4gICAgdHJhbnNhY3RlZE9ic2VydmVyLFxuICAgIHN0YXRlT2JzZXJ2ZXJcbn0pXG4iLCJpbXBvcnQgUGF5VGhlb3J5SG9zdGVkRmllbGQgZnJvbSAnLi4vcGF5LXRoZW9yeS1ob3N0ZWQtZmllbGQnXG5cbmNsYXNzIEFDSEFjY291bnROYW1lRnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0RmllbGRzKFt7IG5hbWU6ICdhY2NvdW50LW5hbWUnLCBsYWJlbDogJ05hbWUgb24gQWNjb3VudCcgfV0pXG4gICAgdGhpcy5zZXRGaWVsZE5hbWUoJ2FjY291bnQtbmFtZScpXG4gIH1cblxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdwYXktdGhlb3J5LWFjaC1hY2NvdW50LW5hbWUtdGFnLWZyYW1lJywgQUNIQWNjb3VudE5hbWVGcmFtZSk7XG4iLCJpbXBvcnQgUGF5VGhlb3J5SG9zdGVkRmllbGRUcmFuc2FjdGlvbmFsIGZyb20gJy4uL3BheS10aGVvcnktaG9zdGVkLWZpZWxkLXRyYW5zYWN0aW9uYWwnXG5jbGFzcyBBQ0hBY2NvdW50TnVtYmVyRnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZFRyYW5zYWN0aW9uYWwge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldEZpZWxkcyhbeyBuYW1lOiAnYWNjb3VudC1udW1iZXInLCBsYWJlbDogJ0FjY291bnQgTnVtYmVyJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnYWNjb3VudC1udW1iZXInKVxuICB9XG5cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1hY2gtYWNjb3VudC1udW1iZXItdGFnLWZyYW1lJywgQUNIQWNjb3VudE51bWJlckZyYW1lKTtcbiIsImltcG9ydCBQYXlUaGVvcnlIb3N0ZWRGaWVsZCBmcm9tICcuLi9wYXktdGhlb3J5LWhvc3RlZC1maWVsZCdcblxuY2xhc3MgQUNIQWNjb3VudFR5cGVGcmFtZSBleHRlbmRzIFBheVRoZW9yeUhvc3RlZEZpZWxkIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zZXRGaWVsZHMoW3sgbmFtZTogJ2FjY291bnQtdHlwZScsIGxhYmVsOiAnQWNjb3VudCBUeXBlJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnYWNjb3VudC10eXBlJylcbiAgfVxuXG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3BheS10aGVvcnktYWNoLWFjY291bnQtdHlwZS10YWctZnJhbWUnLCBBQ0hBY2NvdW50VHlwZUZyYW1lKTtcbiIsImltcG9ydCBQYXlUaGVvcnlIb3N0ZWRGaWVsZCBmcm9tICcuLi9wYXktdGhlb3J5LWhvc3RlZC1maWVsZCdcblxuY2xhc3MgQUNIUm91dGluZ051bWJlckZyYW1lIGV4dGVuZHMgUGF5VGhlb3J5SG9zdGVkRmllbGQge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldEZpZWxkcyhbeyBuYW1lOiAncm91dGluZy1udW1iZXInLCBsYWJlbDogJ1JvdXRpbmcgTnVtYmVyJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgncm91dGluZy1udW1iZXInKVxuICB9XG5cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1hY2gtcm91dGluZy1udW1iZXItdGFnLWZyYW1lJywgQUNIUm91dGluZ051bWJlckZyYW1lKTtcbiIsImltcG9ydCBQYXlUaGVvcnlIb3N0ZWRGaWVsZCBmcm9tICcuLi9wYXktdGhlb3J5LWhvc3RlZC1maWVsZCdcblxuY2xhc3MgQ2FzaENvbnRhY3RGcmFtZSBleHRlbmRzIFBheVRoZW9yeUhvc3RlZEZpZWxkIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zZXRGaWVsZHMoW3sgbmFtZTogJ2Nhc2gtY29udGFjdCcsIGxhYmVsOiAnUGhvbmUgb3IgRW1haWwnLCB2YWxpZGF0aW9uczogbnVsbCwgYXV0b0NvbXBsZXRlOiAnJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnY2FzaC1jb250YWN0JylcbiAgfVxuXG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3BheS10aGVvcnktY2FzaC1jb250YWN0LXRhZy1mcmFtZScsIENhc2hDb250YWN0RnJhbWUpO1xuIiwiaW1wb3J0IFBheVRoZW9yeUhvc3RlZEZpZWxkVHJhbnNhY3Rpb25hbCBmcm9tICcuLi9wYXktdGhlb3J5LWhvc3RlZC1maWVsZC10cmFuc2FjdGlvbmFsJ1xuXG5jbGFzcyBDYXNoTmFtZUZyYW1lIGV4dGVuZHMgUGF5VGhlb3J5SG9zdGVkRmllbGRUcmFuc2FjdGlvbmFsIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zZXRGaWVsZHMoW3sgbmFtZTogJ2Nhc2gtbmFtZScsIGxhYmVsOiAnRnVsbCBOYW1lJywgdmFsaWRhdGlvbnM6IG51bGwsIGF1dG9Db21wbGV0ZTogJ25hbWUnIH1dKVxuICAgIHRoaXMuc2V0RmllbGROYW1lKCdjYXNoLW5hbWUnKVxuICB9XG5cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1jYXNoLW5hbWUtdGFnLWZyYW1lJywgQ2FzaE5hbWVGcmFtZSk7XG4iLCJpbXBvcnQgUGF5VGhlb3J5SG9zdGVkRmllbGQgZnJvbSAnLi4vcGF5LXRoZW9yeS1ob3N0ZWQtZmllbGQnXG5cbmNsYXNzIENyZWRpdENhcmROYW1lRnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0RmllbGRzKFt7IG5hbWU6ICdjYXJkLW5hbWUnLCBsYWJlbDogJ05hbWUgb24gY2FyZCcsIHZhbGlkYXRpb25zOiBudWxsLCBhdXRvQ29tcGxldGU6ICdjYy1uYW1lJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnY2FyZC1uYW1lJylcbiAgfVxuXG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3BheS10aGVvcnktY3JlZGl0LWNhcmQtY2FyZC1uYW1lLXRhZy1mcmFtZScsIENyZWRpdENhcmROYW1lRnJhbWUpO1xuIiwiaW1wb3J0IFBheVRoZW9yeUhvc3RlZEZpZWxkIGZyb20gJy4uL3BheS10aGVvcnktaG9zdGVkLWZpZWxkJ1xuXG5jbGFzcyBDcmVkaXRDYXJkQmlsbGluZ0FkZHJlc3MxRnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0RmllbGRzKFt7IG5hbWU6ICdiaWxsaW5nLWxpbmUxJywgbGFiZWw6ICdCaWxsaW5nIEFkZHJlc3MnLCB2YWxpZGF0aW9uczogbnVsbCwgYXV0b0NvbXBsZXRlOiAnYWRkcmVzcy1saW5lMScgfV0pXG4gICAgdGhpcy5zZXRGaWVsZE5hbWUoJ2JpbGxpbmctbGluZTEnKVxuICB9XG5cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1iaWxsaW5nLWxpbmUxLXRhZy1mcmFtZScsIENyZWRpdENhcmRCaWxsaW5nQWRkcmVzczFGcmFtZSk7XG4iLCJpbXBvcnQgUGF5VGhlb3J5SG9zdGVkRmllbGQgZnJvbSAnLi4vcGF5LXRoZW9yeS1ob3N0ZWQtZmllbGQnXG5cbmNsYXNzIENyZWRpdENhcmRCaWxsaW5nQWRkcmVzczJGcmFtZSBleHRlbmRzIFBheVRoZW9yeUhvc3RlZEZpZWxkIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zZXRGaWVsZHMoW3sgbmFtZTogJ2JpbGxpbmctbGluZTInLCBsYWJlbDogXCJCaWxsaW5nIEFkZHJlc3MgQ29udCdkXCIsIHZhbGlkYXRpb25zOiBudWxsLCBhdXRvQ29tcGxldGU6ICdhZGRyZXNzLWxpbmUyJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnYmlsbGluZy1saW5lMicpXG4gIH1cblxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdwYXktdGhlb3J5LWNyZWRpdC1jYXJkLWJpbGxpbmctbGluZTItdGFnLWZyYW1lJywgQ3JlZGl0Q2FyZEJpbGxpbmdBZGRyZXNzMkZyYW1lKTtcbiIsImltcG9ydCBQYXlUaGVvcnlIb3N0ZWRGaWVsZCBmcm9tICcuLi9wYXktdGhlb3J5LWhvc3RlZC1maWVsZCdcblxuY2xhc3MgQ3JlZGl0Q2FyZEJpbGxpbmdDaXR5RnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0RmllbGRzKFt7IG5hbWU6ICdiaWxsaW5nLWNpdHknLCBsYWJlbDogJ0JpbGxpbmcgQ2l0eScsIHZhbGlkYXRpb25zOiBudWxsLCBhdXRvQ29tcGxldGU6ICdsb2NhbGl0eScgfV0pXG4gICAgdGhpcy5zZXRGaWVsZE5hbWUoJ2JpbGxpbmctY2l0eScpXG4gIH1cblxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdwYXktdGhlb3J5LWNyZWRpdC1jYXJkLWJpbGxpbmctY2l0eS10YWctZnJhbWUnLCBDcmVkaXRDYXJkQmlsbGluZ0NpdHlGcmFtZSk7XG4iLCJpbXBvcnQgUGF5VGhlb3J5SG9zdGVkRmllbGQgZnJvbSAnLi4vcGF5LXRoZW9yeS1ob3N0ZWQtZmllbGQnXG5cbmNsYXNzIENyZWRpdENhcmRDVlZGcmFtZSBleHRlbmRzIFBheVRoZW9yeUhvc3RlZEZpZWxkIHtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5zZXRGaWVsZHMoW3sgbmFtZTogJ2NhcmQtY3Z2JywgbGFiZWw6ICdDVlYnLCB2YWxpZGF0aW9uczogJ3JlcXVpcmVkJywgYXV0b0NvbXBsZXRlOiAnY2MtY3NjJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnY2FyZC1jdnYnKVxuICB9XG5cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1jYXJkLWN2di10YWctZnJhbWUnLCBDcmVkaXRDYXJkQ1ZWRnJhbWUpO1xuIiwiaW1wb3J0IFBheVRoZW9yeUhvc3RlZEZpZWxkIGZyb20gJy4uL3BheS10aGVvcnktaG9zdGVkLWZpZWxkJ1xuXG5jbGFzcyBDcmVkaXRDYXJkRXhwaXJhdGlvbkZyYW1lIGV4dGVuZHMgUGF5VGhlb3J5SG9zdGVkRmllbGQge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldEZpZWxkcyhbeyBuYW1lOiAnY2FyZC1leHAnLCBsYWJlbDogJ01NL1lZJywgdmFsaWRhdGlvbnM6ICdyZXF1aXJlZCcsIGF1dG9Db21wbGV0ZTogJ2NjLWV4cCcgfV0pXG4gICAgdGhpcy5zZXRGaWVsZE5hbWUoJ2NhcmQtZXhwJylcbiAgfVxuXG59XG5cbndpbmRvdy5jdXN0b21FbGVtZW50cy5kZWZpbmUoJ3BheS10aGVvcnktY3JlZGl0LWNhcmQtY2FyZC1leHAtdGFnLWZyYW1lJywgQ3JlZGl0Q2FyZEV4cGlyYXRpb25GcmFtZSk7XG4iLCJpbXBvcnQgUGF5VGhlb3J5SG9zdGVkRmllbGRUcmFuc2FjdGlvbmFsIGZyb20gJy4uL3BheS10aGVvcnktaG9zdGVkLWZpZWxkLXRyYW5zYWN0aW9uYWwnXG5cbmNsYXNzIENyZWRpdENhcmROdW1iZXJGcmFtZSBleHRlbmRzIFBheVRoZW9yeUhvc3RlZEZpZWxkVHJhbnNhY3Rpb25hbCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0RmllbGRzKFt7IG5hbWU6ICdjYXJkLW51bWJlcicsIGxhYmVsOiAnQ2FyZCBOdW1iZXInLCB2YWxpZGF0aW9uczogJ3JlcXVpcmVkJywgYXV0b0NvbXBsZXRlOiAnY2MtbnVtYmVyJyB9XSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnY2FyZC1udW1iZXInKVxuICB9XG5cbn1cblxuXG5pZiAoIXdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQoJ3BheS10aGVvcnktY3JlZGl0LWNhcmQtY2FyZC1udW1iZXItdGFnLWZyYW1lJykpIHtcbiAgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1jYXJkLW51bWJlci10YWctZnJhbWUnLCBDcmVkaXRDYXJkTnVtYmVyRnJhbWUpO1xufVxuIiwiaW1wb3J0IFBheVRoZW9yeUhvc3RlZEZpZWxkIGZyb20gJy4uL3BheS10aGVvcnktaG9zdGVkLWZpZWxkJ1xuXG5jbGFzcyBDcmVkaXRDYXJkQmlsbGluZ1N0YXRlRnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0RmllbGRzKFt7IG5hbWU6ICdiaWxsaW5nLXN0YXRlJywgbGFiZWw6ICdCaWxsaW5nIFN0YXRlJywgdmFsaWRhdGlvbnM6IG51bGwsIGF1dG9Db21wbGV0ZTogJ3JlZ2lvbicgfV0pXG4gICAgdGhpcy5zZXRGaWVsZE5hbWUoJ2JpbGxpbmctc3RhdGUnKVxuICB9XG5cbn1cblxud2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1iaWxsaW5nLXN0YXRlLXRhZy1mcmFtZScsIENyZWRpdENhcmRCaWxsaW5nU3RhdGVGcmFtZSk7XG4iLCJpbXBvcnQgUGF5VGhlb3J5SG9zdGVkRmllbGQgZnJvbSAnLi4vcGF5LXRoZW9yeS1ob3N0ZWQtZmllbGQnXG5cbmNsYXNzIENyZWRpdENhcmRCaWxsaW5nWmlwRnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZCB7XG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuc2V0RmllbGRzKFt7IG5hbWU6ICdiaWxsaW5nLXppcCcsIGxhYmVsOiAnQmlsbGluZyBaaXAnLCB2YWxpZGF0aW9uczogbnVsbCwgYXV0b0NvbXBsZXRlOiAncG9zdGFsLWNvZGUnIH1dKVxuICAgIHRoaXMuc2V0RmllbGROYW1lKCdiaWxsaW5nLXppcCcpXG4gIH1cblxufVxuXG53aW5kb3cuY3VzdG9tRWxlbWVudHMuZGVmaW5lKCdwYXktdGhlb3J5LWNyZWRpdC1jYXJkLWJpbGxpbmctemlwLXRhZy1mcmFtZScsIENyZWRpdENhcmRCaWxsaW5nWmlwRnJhbWUpO1xuIiwiaW1wb3J0IFBheVRoZW9yeUhvc3RlZEZpZWxkVHJhbnNhY3Rpb25hbCBmcm9tICcuLi9wYXktdGhlb3J5LWhvc3RlZC1maWVsZC10cmFuc2FjdGlvbmFsJ1xuXG5jbGFzcyBDcmVkaXRDYXJkRnJhbWUgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZFRyYW5zYWN0aW9uYWwge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLnNldEZpZWxkcyhbXG4gICAgICB7IG5hbWU6ICdjYXJkLW51bWJlcicsIGxhYmVsOiAnQ2FyZCBOdW1iZXInLCB2YWxpZGF0aW9uczogJ3JlcXVpcmVkJywgYXV0b0NvbXBsZXRlOiAnY2MtbnVtYmVyJyB9LFxuICAgICAgeyBuYW1lOiAnY2FyZC1leHAnLCBsYWJlbDogJ01NL1lZJywgdmFsaWRhdGlvbnM6ICdyZXF1aXJlZCcsIGF1dG9Db21wbGV0ZTogJ2NjLWV4cCcgfSxcbiAgICAgIHsgbmFtZTogJ2NhcmQtY3Z2JywgbGFiZWw6ICdDVkMnLCB2YWxpZGF0aW9uczogJ3JlcXVpcmVkJywgYXV0b0NvbXBsZXRlOiAnY2MtY3NjJyB9XG4gICAgXSlcbiAgICB0aGlzLnNldEZpZWxkTmFtZSgnY3JlZGl0LWNhcmQnKVxuICB9XG5cbn1cblxuXG5pZiAoIXdpbmRvdy5jdXN0b21FbGVtZW50cy5nZXQoJ3BheS10aGVvcnktY3JlZGl0LWNhcmQtdGFnLWZyYW1lJykpIHtcbiAgd2luZG93LmN1c3RvbUVsZW1lbnRzLmRlZmluZSgncGF5LXRoZW9yeS1jcmVkaXQtY2FyZC10YWctZnJhbWUnLCBDcmVkaXRDYXJkRnJhbWUpO1xufVxuIiwiaW1wb3J0IFBheVRoZW9yeUhvc3RlZEZpZWxkIGZyb20gJy4uL3BheS10aGVvcnktaG9zdGVkLWZpZWxkJ1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi8uLi9jb21tb24nXG5cblxuXG5jbGFzcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZFRyYW5zYWN0aW9uYWwgZXh0ZW5kcyBQYXlUaGVvcnlIb3N0ZWRGaWVsZCB7XG5cbiAgZGVmaW5lRmllbGRzKGZvcm0sIHN0eWxlcykge1xuICAgIHN1cGVyLmRlZmluZUZpZWxkcyhmb3JtLCBzdHlsZXMpXG4gICAgY29uc3QgYmFkZ2VFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpXG4gICAgYmFkZ2VFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCAncGF5LXRoZW9yeS1iYWRnZS13cmFwcGVyJylcbiAgICB0aGlzLmFwcGVuZEVsZW1lbnQoYmFkZ2VFbGVtZW50KVxuICB9XG5cbiAgZ2VuZXJhdGVUb2tlbml6ZUNhbGxiYWNrKGFtb3VudCwgdG9rZW4pIHtcbiAgICBjb25zdCBtZXNzYWdlID0ge1xuICAgICAgdHlwZTogJ3B0OnRva2VuaXplJyxcbiAgICAgIHRva2VuaXplOiB7IGFtb3VudCwgY3VycmVuY3k6ICdVU0QnLCBcInB0LWluc3RydW1lbnRcIjogdG9rZW4gfVxuICAgIH1cbiAgICBcbiAgICB3aW5kb3cucG9zdE1lc3NhZ2UoXG4gICAgICBtZXNzYWdlLFxuICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpblxuICAgIClcbiAgfVxuXG4gIGdlbmVyYXRlVHJhbnNhY3RDYWxsYmFjayhhbW91bnQsIHRva2VuKSB7XG4gICAgY29uc3QgdHJhbnNhY3QgPSB7IGFtb3VudCwgY3VycmVuY3k6ICdVU0QnLCBcInB0LWluc3RydW1lbnRcIjogdG9rZW4gfVxuICAgIFxuICAgIHdpbmRvdy5wb3N0TWVzc2FnZSh7XG4gICAgICAgIHR5cGU6ICdwdDp0cmFuc2FjdCcsXG4gICAgICAgIHRyYW5zYWN0XG4gICAgICB9LFxuICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICApXG4gIH1cblxuICBpbnN0cnVtZW50UmVzcG9uc2UoYWN0aW9uLCBhbW91bnQsIGluc3RydW1lbnQpIHtcbiAgICBzd2l0Y2ggKGFjdGlvbikge1xuICAgIGNhc2UgKCd0b2tlbml6ZScpOlxuICAgICAge1xuICAgICAgICB0aGlzLmdlbmVyYXRlVG9rZW5pemVDYWxsYmFjayhhbW91bnQsIGluc3RydW1lbnQpXG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgY2FzZSAoJ3RyYW5zYWN0Jyk6XG4gICAgICB7XG4gICAgICAgIHRoaXMuZ2VuZXJhdGVUcmFuc2FjdENhbGxiYWNrKGFtb3VudCwgaW5zdHJ1bWVudClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBnZXQgaW5zdHJ1bWVudCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnN0cnVtZW50ZWRcbiAgfVxuXG4gIHNldCBpbnN0cnVtZW50KF9pbnN0cnVtZW50ZWQpIHtcbiAgICBpZiAoIXRoaXMuaW5zdHJ1bWVudGVkKSB7XG4gICAgICB0aGlzLmluc3RydW1lbnRlZCA9IF9pbnN0cnVtZW50ZWRcbiAgICAgIHRoaXMuaW5zdHJ1bWVudFJlc3BvbnNlKHRoaXMuYWN0aW9uZWQsIHRoaXMuYW1vdW50aW5nLCBfaW5zdHJ1bWVudGVkKVxuICAgIH1cbiAgICBpZiAoX2luc3RydW1lbnRlZCA9PT0gJ2NhbmNlbCcpIHtcbiAgICAgIHRoaXMuaW5zdHJ1bWVudGVkID0gZmFsc2VcbiAgICB9XG4gIH1cblxuICBnZXQgYW1vdW50KCkge1xuICAgIHJldHVybiB0aGlzLmFtb3VudGluZ1xuICB9XG5cbiAgc2V0IGFtb3VudChfYW1vdW50aW5nKSB7XG4gICAgaWYgKHRoaXMuYW1vdW50aW5nICE9PSBfYW1vdW50aW5nKSB7XG4gICAgICB0aGlzLmFtb3VudGluZyA9IF9hbW91bnRpbmdcbiAgICB9XG4gIH1cbn1cblxuXG5leHBvcnQgZGVmYXVsdCBQYXlUaGVvcnlIb3N0ZWRGaWVsZFRyYW5zYWN0aW9uYWxcbiIsIi8qIGdsb2JhbCBIVE1MRWxlbWVudCAqL1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi8uLi9jb21tb24nXG5pbXBvcnQgRE9NUHVyaWZ5IGZyb20gJ2RvbXB1cmlmeSdcbmNsYXNzIFBheVRoZW9yeUhvc3RlZEZpZWxkIGV4dGVuZHMgSFRNTEVsZW1lbnQge1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKClcbiAgICB0aGlzLmRlZmluZUZpZWxkcyA9IHRoaXMuZGVmaW5lRmllbGRzLmJpbmQodGhpcylcbiAgICB0aGlzLmlzVmFsaWRGcmFtZSA9IHRoaXMuaXNWYWxpZEZyYW1lLmJpbmQodGhpcylcbiAgICB0aGlzLmFwcGVuZEVsZW1lbnQgPSB0aGlzLmFwcGVuZEVsZW1lbnQuYmluZCh0aGlzKVxuICAgIHRoaXMuc2V0RmllbGRzID0gdGhpcy5zZXRGaWVsZHMuYmluZCh0aGlzKVxuICAgIHRoaXMuZGVmYXVsdFN0eWxlcyA9IHsgZGVmYXVsdDoge30sIHN1Y2Nlc3M6IHt9LCBlcnJvcjoge30gfVxuICAgIHRoaXMuYXBwbGljYXRpb24gPSBwcm9jZXNzLmVudi5BUFBfSURcbiAgICB0aGlzLmZpZWxkcyA9IFtdXG4gICAgdGhpcy53cmFwcGVycyA9IFtdXG4gICAgdGhpcy52YWxpZGF0ZWQgPSB7fVxuICAgIHRoaXMuZmllbGQgPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvblNldCA9IGZhbHNlXG4gIH1cblxuICBzZXRGaWVsZHMoZmllbGRBcnJheSkge1xuICAgIHRoaXMuZmllbGRzID0gZmllbGRBcnJheVxuICB9XG5cbiAgc2V0RmllbGROYW1lKG5hbWUpIHtcbiAgICB0aGlzLmZpZWxkID0gbmFtZVxuICB9XG5cbiAgZGVmaW5lRmllbGRzKCkge1xuICAgIHRoaXMuZmllbGRzLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgY29uc3Qgd3JhcHBlciA9IGBmaWVsZC13cmFwcGVyLSR7ZmllbGQubmFtZS5yZXBsYWNlKC9cXC4vLCAnLScpfWBcbiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIHdyYXBwZXJFbGVtZW50LnNldEF0dHJpYnV0ZSgnaWQnLCB3cmFwcGVyKVxuICAgICAgd3JhcHBlckVsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsICdmaWVsZC13cmFwcGVyJylcblxuICAgICAgY29uc3QgZiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lmcmFtZScpXG4gICAgICBmLnNldEF0dHJpYnV0ZSgnc3JjJywgYCR7Y29tbW9uLmhvc3RlZEZpZWxkc0VuZHBvaW50KCl9LyR7ZmllbGQubmFtZX0/dG9rZW49JHt0aGlzLnRva2VuZWR9YClcbiAgICAgIGYuc2V0QXR0cmlidXRlKCdmcmFtZUJvcmRlcicsICcwJylcbiAgICAgIGYuc2V0QXR0cmlidXRlKCduYW1lJywgYCR7ZmllbGQubmFtZX0taWZyYW1lYClcblxuICAgICAgd3JhcHBlckVsZW1lbnQuYXBwZW5kQ2hpbGQoZilcblxuICAgICAgdGhpcy5hcHBlbmRFbGVtZW50KHdyYXBwZXJFbGVtZW50KVxuICAgIH0pXG4gIH1cblxuICBhcHBlbmRFbGVtZW50KGVsZW1lbnQpIHtcbiAgICBjb25zdCBjb250YWluZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChgcGF5LXRoZW9yeS0ke3RoaXMuZmllbGR9LWhvc3RlZC1maWVsZC1jb250YWluZXJgKVxuICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChlbGVtZW50KVxuICB9XG5cbiAgaXNWYWxpZEZyYW1lKGludmFsaWRFbGVtZW50KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBpbnZhbGlkRWxlbWVudCA9PT0gJ3VuZGVmaW5lZCcgPyBpbnZhbGlkRWxlbWVudCA6ICFpbnZhbGlkRWxlbWVudFxuICB9XG5cbiAgZmluZEV2ZW50TWVzc2FnZShldmVudCkge1xuICAgIHJldHVybiB0eXBlb2YgZXZlbnQuZGF0YSA9PT0gJ29iamVjdCcgPyBldmVudC5kYXRhIDogeyB0eXBlOiAndW5rbm93bicgfVxuICB9XG5cblxuICBjb25uZWN0ZWRDYWxsYmFjaygpIHtcbiAgICB0aGlzLmlubmVySFRNTCA9IERPTVB1cmlmeS5zYW5pdGl6ZShgPGRpdiBjbGFzcz1cImZyYW1lZFwiPlxuICAgICAgICAgICAgPGRpdiBpZD1cInBheS10aGVvcnktJHt0aGlzLmZpZWxkfS1ob3N0ZWQtZmllbGQtY29udGFpbmVyXCIgY2xhc3M9XCJwYXktdGhlb3J5LWZpZWxkXCI+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+YClcblxuXG4gIH1cblxuICBhZG9wdGVkQ2FsbGJhY2soKSB7XG5cbiAgfVxuXG4gIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkge1xuXG4gIH1cblxuICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2soYXR0ck5hbWUsIG9sZFZhbHVlLCBuZXdWYWx1ZSkge1xuICAgIGlmIChuZXdWYWx1ZSAhPT0gb2xkVmFsdWUpIHtcbiAgICAgIHRoaXNbYXR0ck5hbWUudG9TdHJpbmcoKV0gPSB0aGlzLmhhc0F0dHJpYnV0ZShhdHRyTmFtZSlcbiAgICB9XG4gIH1cblxuICBnZXQgY29ubmVjdGVkKCkge1xuICAgIHJldHVybiB0aGlzLmNvbm5lY3Rpb25TZXRcbiAgfVxuICBcbiAgc2V0IGNvbm5lY3RlZChfY29ubmVjdGVkKSB7XG4gICAgdGhpcy5jb25uZWN0aW9uU2V0ID0gX2Nvbm5lY3RlZFxuICB9ICBcblxuICBnZXQgYXBwbGljYXRpb24oKSB7XG4gICAgcmV0dXJuIHRoaXMuYXBwbGljYXRpb25JZFxuICB9XG5cbiAgc2V0IGFwcGxpY2F0aW9uKF9hcHBsaWNhdGlvbklkKSB7XG4gICAgdGhpcy5hcHBsaWNhdGlvbklkID0gX2FwcGxpY2F0aW9uSWRcbiAgfVxuXG4gIGdldCBmaWVsZCgpIHtcbiAgICByZXR1cm4gdGhpcy5maWVsZGVkXG4gIH1cblxuICBzZXQgZmllbGQoX2ZpZWxkZWQpIHtcbiAgICB0aGlzLmZpZWxkZWQgPSBfZmllbGRlZFxuICB9XG5cbiAgZ2V0IGxvYWRlZCgpIHtcbiAgICByZXR1cm4gdGhpcy5pc0xvYWRlZFxuICB9XG5cbiAgc2V0IGxvYWRlZChfaXNMb2FkZWQpIHtcbiAgICB0aGlzLmlzTG9hZGVkID0gX2lzTG9hZGVkXG4gIH1cblxuICBnZXQgdG9rZW4oKSB7XG4gICAgcmV0dXJuIHRoaXMudG9rZW5lZFxuICB9XG5cbiAgc2V0IHRva2VuKF90b2tlbmVkKSB7XG4gICAgdGhpcy50b2tlbmVkID0gX3Rva2VuZWRcbiAgICB0aGlzLmRlZmluZUZpZWxkcygpXG4gIH1cblxuXG4gIGdldCBlbnYoKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGlzLmVudmlyb25tZW50ID09PSAndW5kZWZpbmVkJyA/IGNvbW1vbi5kZWZhdWx0RW52aXJvbm1lbnQgOiB0aGlzLmVudmlyb25tZW50XG4gIH1cblxuICBzZXQgZW52KF9lbnYpIHtcbiAgICB0aGlzLmVudmlyb25tZW50ID0gX2VudlxuICB9XG5cbiAgZ2V0IHJlYWR5KCkge1xuICAgIHJldHVybiB0aGlzLmlzUmVhZHlcbiAgfVxuXG4gIHNldCByZWFkeShfaXNSZWFkeSkge1xuICAgIGlmIChfaXNSZWFkeSAhPT0gdGhpcy5pc1JlYWR5KSB7XG4gICAgICB0aGlzLmlzUmVhZHkgPSBfaXNSZWFkeVxuICAgICAgXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IGBwdDoke3RoaXMuZmllbGR9OnJlYWR5YCxcbiAgICAgICAgICByZWFkeTogdGhpcy5pc1JlYWR5LFxuICAgICAgICB9LFxuICAgICAgICB3aW5kb3cubG9jYXRpb24ub3JpZ2luLFxuICAgICAgKVxuICAgIH1cbiAgfVxuXG4gIGdldCBzdHlsZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGluZ1xuICB9XG5cbiAgc2V0IHN0eWxlcyhfc3R5bGluZykge1xuICAgIGlmIChfc3R5bGluZykge1xuICAgICAgdGhpcy5zdHlsaW5nID0gX3N0eWxpbmc7XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgdGhpcy5zdHlsaW5nID0gdGhpcy5kZWZhdWx0U3R5bGVzO1xuICAgIH1cbiAgfVxuXG4gIGdldCBzdGF0ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5zdGF0ZWRcbiAgfVxuXG4gIHNldCBzdGF0ZShfc3RhdGVkKSB7XG4gICAgdGhpcy5zdGF0ZWQgPSBfc3RhdGVkXG4gICAgY29uc3QgaW52YWxpZCA9IF9zdGF0ZWQuZXJyb3JNZXNzYWdlcy5sZW5ndGggPiAwXG4gICAgdGhpcy52YWxpZCA9IHRoaXMuaXNWYWxpZEZyYW1lKGludmFsaWQpXG4gICAgaWYgKF9zdGF0ZWQuaXNEaXJ0eSAmJiBpbnZhbGlkKSB7XG4gICAgICB0aGlzLmVycm9yID0gX3N0YXRlZC5lcnJvck1lc3NhZ2VzWzBdXG4gICAgfVxuICAgIGVsc2UgaWYgKF9zdGF0ZWQuaXNEaXJ0eSkge1xuICAgICAgdGhpcy5lcnJvciA9IGZhbHNlXG4gICAgfVxuICAgIGlmIChfc3RhdGVkLmlzQ29ubmVjdGVkKSB7XG4gICAgICB0aGlzLmNvbm5lY3RlZCA9IF9zdGF0ZWQuaXNDb25uZWN0ZWRcbiAgICAgIFxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgICAgdHlwZTogYHBheS10aGVvcnk6cmVhZHlgLFxuICAgICAgICAgICAgICByZWFkeTogdHJ1ZVxuICAgICAgICAgIH0sXG4gICAgICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICkgICAgICBcbiAgICB9XG4gIH1cblxuICBnZXQgZXJyb3IoKSB7XG4gICAgcmV0dXJuIHRoaXMuZXJyb3JlZDtcbiAgfVxuXG4gIHNldCBlcnJvcihfZXJyb3JlZCkge1xuICAgIGlmICh0aGlzLmVycm9yZWQgIT09IF9lcnJvcmVkKSB7XG4gICAgICB0aGlzLmVycm9yZWQgPSBfZXJyb3JlZDtcbiAgICAgIFxuICAgICAgd2luZG93LnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICB0eXBlOiAncHQ6ZXJyb3InLFxuICAgICAgICAgIGVycm9yOiBfZXJyb3JlZCxcbiAgICAgICAgfSxcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgICk7XG4gICAgfVxuICB9XG5cblxuXG4gIGdldCB2YWxpZCgpIHtcbiAgICByZXR1cm4gdGhpcy52YWxpZGF0ZWQ7XG4gIH1cblxuICBzZXQgdmFsaWQoaXNWYWxpZCkge1xuICAgIC8vYnkgc3RvcmluZyB0aGUgdmFsaWQgc3RhdGUgaW4gb2JqZWN0IGl0IGFsbG93cyB1cyB0byB0cmFjayBjaGFuZ2VzIGluIHRoZSBudW1iZXIsIGV4cCwgYW5kIGN2diBmb3IgdGhlIGNyZWRpdC1jYXJkXG4gICAgaWYgKGlzVmFsaWQgIT09IHRoaXMudmFsaWRhdGVkW3RoaXMuc3RhdGVkLmVsZW1lbnRdKSB7XG4gICAgICBsZXQgdHlwZSA9IHRoaXMuc3RhdGVkLmVsZW1lbnRcbiAgICAgIHRoaXMudmFsaWRhdGVkW3R5cGVdID0gaXNWYWxpZFxuICAgICAgXG4gICAgICB3aW5kb3cucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgIHR5cGU6IGBwdDoke3R5cGV9OnZhbGlkYCxcbiAgICAgICAgICB2YWxpZDogaXNWYWxpZCxcbiAgICAgICAgICBob3N0ZWQ6IHRydWVcbiAgICAgICAgfSxcbiAgICAgICAgd2luZG93LmxvY2F0aW9uLm9yaWdpbixcbiAgICAgIClcbiAgICB9XG5cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBQYXlUaGVvcnlIb3N0ZWRGaWVsZFxuIiwiaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb21tb24nXG5cbi8vcmVsYXlzIHN0YXRlIHRvIHRoZSBob3N0ZWQgZmllbGRzIHRvIHRva2VuaXplIHRoZSBpbnN0cnVtZW50XG5jb25zdCB2ZXJpZnlSZWxheSA9IChmaWVsZHMsIG1lc3NhZ2UpID0+IHtcbiAgICBmaWVsZHMuZm9yRWFjaCgoZmllbGQpID0+IHtcbiAgICAgICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lKGZpZWxkKVswXSkge1xuICAgICAgICAgICAgY29tbW9uLnBvc3RNZXNzYWdlVG9Ib3N0ZWRGaWVsZChmaWVsZCwgbWVzc2FnZSlcbiAgICAgICAgfVxuICAgIH0pO1xufTtcblxuY29uc3QgYXV0b2ZpbGxIYW5kbGVyID0gKG1lc3NhZ2UpID0+IHtcbiAgICBpZiAobWVzc2FnZS5lbGVtZW50ID09PSBcImNhcmQtYXV0b2ZpbGxcIikge1xuICAgICAgICBjb25zdCBjYXJkRmllbGRzID0gW1xuICAgICAgICAgICAgXCJjYXJkLW5hbWUtaWZyYW1lXCIsXG4gICAgICAgICAgICBcImNhcmQtY3Z2LWlmcmFtZVwiLFxuICAgICAgICAgICAgXCJjYXJkLWV4cC1pZnJhbWVcIlxuICAgICAgICBdO1xuICAgICAgICB2ZXJpZnlSZWxheShjYXJkRmllbGRzLCBtZXNzYWdlKTtcbiAgICB9XG4gICAgZWxzZSBpZiAobWVzc2FnZS5lbGVtZW50ID09PSBcImFkZHJlc3MtYXV0b2ZpbGxcIikge1xuICAgICAgICBjb25zdCBhZGRyZXNzRmllbGRzID0gW1xuICAgICAgICAgICAgXCJiaWxsaW5nLWxpbmUyLWlmcmFtZVwiLFxuICAgICAgICAgICAgXCJiaWxsaW5nLWNpdHktaWZyYW1lXCIsXG4gICAgICAgICAgICBcImJpbGxpbmctc3RhdGUtaWZyYW1lXCIsXG4gICAgICAgICAgICBcImJpbGxpbmctemlwLWlmcmFtZVwiXG4gICAgICAgIF07XG4gICAgICAgIHZlcmlmeVJlbGF5KGFkZHJlc3NGaWVsZHMsIG1lc3NhZ2UpO1xuICAgIH1cbn1cblxuLy9SZWxheSBtZXNzYWdlcyBmcm9tIGhvc3RlZCBmaWVsZHMgdG8gdGhlIHRyYW5zYWN0aW5nIGVsZW1lbnQgZm9yIGF1dG9maWxsIGFuZCB0cmFuc2FjdGluZ1xuZXhwb3J0IGNvbnN0IHJlbGF5SGFuZGxlciA9ICgpID0+IG1lc3NhZ2UgPT4ge1xuICAgIGlmIChtZXNzYWdlLmVsZW1lbnQuZW5kc1dpdGgoXCJhdXRvZmlsbFwiKSkge1xuICAgICAgICBjb21tb24uc2V0QXV0b2ZpbGwodHJ1ZSlcbiAgICAgICAgYXV0b2ZpbGxIYW5kbGVyKG1lc3NhZ2UpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBjb25zdCBmaWVsZFR5cGUgPSBjb21tb24uaXNGaWVsZFR5cGUobWVzc2FnZS5lbGVtZW50KVxuICAgICAgICBjb21tb24ucG9zdE1lc3NhZ2VUb0hvc3RlZEZpZWxkKGNvbW1vbi5ob3N0ZWRGaWVsZE1hcFtmaWVsZFR5cGVdLCBtZXNzYWdlKVxuICAgIH1cbn07XG5cblxuLy9TZW5kIHN0eWxlcyB0byBob3N0ZWQgZmllbGRzIHdoZW4gdGhleSBhcmUgc2V0IHVwXG5leHBvcnQgY29uc3Qgc2V0dXBIYW5kbGVyID0gKHN0eWxlcywgc2V0dXBUcmFuc2FjdGluZykgPT4gKG1lc3NhZ2UpID0+IHtcbiAgICBjb21tb24ucG9zdE1lc3NhZ2VUb0hvc3RlZEZpZWxkKGAke21lc3NhZ2UuZWxlbWVudH0taWZyYW1lYCwge1xuICAgICAgICB0eXBlOiBcInB0OnNldHVwXCIsXG4gICAgICAgIHN0eWxlOiBzdHlsZXMuZGVmYXVsdCA/IHN0eWxlcyA6IGNvbW1vbi5kZWZhdWx0U3R5bGVzXG4gICAgfSlcblxuICAgIGlmIChzZXR1cFRyYW5zYWN0aW5nW21lc3NhZ2UuZWxlbWVudF0pIHtcbiAgICAgICAgY29tbW9uLnBvc3RNZXNzYWdlVG9Ib3N0ZWRGaWVsZChgJHttZXNzYWdlLmVsZW1lbnR9LWlmcmFtZWAsIHtcbiAgICAgICAgICAgIHR5cGU6IGBwdC1zdGF0aWM6ZWxlbWVudHNgLFxuICAgICAgICAgICAgZWxlbWVudHM6IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc2V0dXBUcmFuc2FjdGluZ1ttZXNzYWdlLmVsZW1lbnRdKSlcbiAgICAgICAgfSlcbiAgICB9XG59XG5cbmNvbnN0IHNlbmRDb25uZWN0ZWRNZXNzYWdlID0gKG1lc3NhZ2UsIGZpZWxkKSA9PiB7XG4gICAgY29tbW9uLnBvc3RNZXNzYWdlVG9Ib3N0ZWRGaWVsZChgJHtmaWVsZH0taWZyYW1lYCwge1xuICAgICAgICB0eXBlOiBgcHQtc3RhdGljOmNvbm5lY3RlZGAsXG4gICAgICAgIGhvc3RUb2tlbjogbWVzc2FnZS5ob3N0VG9rZW4sXG4gICAgICAgIHNlc3Npb25LZXk6IG1lc3NhZ2Uuc2Vzc2lvbktleSxcbiAgICAgICAgcHVibGljS2V5OiBtZXNzYWdlLnB1YmxpY0tleVxuICAgIH0pXG59XG5cbi8vU2VuZHMgYSBtZXNzYWdlIHRvIHRoZSBzaWJsaW5nIGZpZWxkcyBsZXR0aW5nIHRoZW0ga25vdyB0aGF0IHRoZSB0cmFuc2FjdGlvbmFsIGZpZWxkIGhhcyBmZXRjaGVkIHRoZSB0aGUgaG9zdC10b2tlblxuZXhwb3J0IGNvbnN0IHNpYmxpbmdIYW5kbGVyID0gKGVsZW1lbnRzKSA9PiBtZXNzYWdlID0+IHtcbiAgICBpZiAobWVzc2FnZS5maWVsZCA9PT0gJ2NhcmQtbnVtYmVyJykge1xuICAgICAgICBlbGVtZW50cy5jYXJkLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgaWYgKGZpZWxkLnR5cGUgIT09ICdjcmVkaXQtY2FyZCcpIHtcbiAgICAgICAgICAgICAgICBzZW5kQ29ubmVjdGVkTWVzc2FnZShtZXNzYWdlLCBmaWVsZC50eXBlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgc2VuZENvbm5lY3RlZE1lc3NhZ2UobWVzc2FnZSwgJ2NhcmQtY3Z2JylcbiAgICAgICAgICAgICAgICBzZW5kQ29ubmVjdGVkTWVzc2FnZShtZXNzYWdlLCAnY2FyZC1leHAnKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgIH0pXG4gICAgfVxuICAgIGVsc2UgaWYgKG1lc3NhZ2UuZmllbGQgPT09ICdhY2NvdW50LW51bWJlcicpIHtcbiAgICAgICAgZWxlbWVudHMuYWNoLmZvckVhY2goZmllbGQgPT4ge1xuICAgICAgICAgICAgc2VuZENvbm5lY3RlZE1lc3NhZ2UobWVzc2FnZSwgZmllbGQudHlwZSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSBpZiAobWVzc2FnZS5maWVsZCA9PT0gJ2Nhc2gtbmFtZScpIHtcbiAgICAgICAgZWxlbWVudHMuY2FzaC5mb3JFYWNoKGZpZWxkID0+IHtcbiAgICAgICAgICAgIHNlbmRDb25uZWN0ZWRNZXNzYWdlKG1lc3NhZ2UsIGZpZWxkLnR5cGUpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5cbmNvbnN0IGNvbWJpbmVkQ2FyZFN0YXRlVXBkYXRlciA9IChlbGVtZW50LCBlbGVtZW50QXJyYXkpID0+IHtcbiAgICBsZXQgcmVzdWx0ID0gZWxlbWVudEFycmF5LnJlZHVjZShjb21tb24uZmluZFRyYW5zYWN0aW5nRWxlbWVudCwgZmFsc2UpXG4gICAgaWYgKHJlc3VsdC5maWVsZCA9PT0gJ2NyZWRpdC1jYXJkJykge1xuICAgICAgICByZXR1cm4gcmVzdWx0XG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICByZXR1cm4gZWxlbWVudEFycmF5LnJlZHVjZShjb21tb24uZmluZEZpZWxkKGVsZW1lbnQpLCBmYWxzZSlcbiAgICB9XG59XG5cbi8vSGFuZGxlcyBzdGF0ZSBtZXNzYWdlcyBhbmQgc2V0cyBzdGF0ZSBvbiB0aGUgd2ViIGNvbXBvbmVudHNcbmV4cG9ydCBjb25zdCBzdGF0ZVVwZGF0ZXIgPSBlbGVtZW50cyA9PiAobWVzc2FnZSkgPT4ge1xuICAgIGxldCBlbGVtZW50ID0ge31cbiAgICBpZiAoY29tbW9uLmNvbWJpbmVkQ2FyZFR5cGVzLmluY2x1ZGVzKG1lc3NhZ2UuZWxlbWVudCkpIHtcbiAgICAgICAgZWxlbWVudCA9IGNvbWJpbmVkQ2FyZFN0YXRlVXBkYXRlcihtZXNzYWdlLmVsZW1lbnQsIGVsZW1lbnRzLmNhcmQpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBsZXQgYWNoID0gZWxlbWVudHMuYWNoLnJlZHVjZShjb21tb24uZmluZEZpZWxkKG1lc3NhZ2UuZWxlbWVudCksIGZhbHNlKVxuICAgICAgICBsZXQgY2FyZCA9IGVsZW1lbnRzLmNhcmQucmVkdWNlKGNvbW1vbi5maW5kRmllbGQobWVzc2FnZS5lbGVtZW50KSwgZmFsc2UpXG4gICAgICAgIGxldCBjYXNoID0gZWxlbWVudHMuY2FzaC5yZWR1Y2UoY29tbW9uLmZpbmRGaWVsZChtZXNzYWdlLmVsZW1lbnQpLCBmYWxzZSlcbiAgICAgICAgZWxlbWVudCA9IGFjaCA/IGFjaCA6IGNhcmQgPyBjYXJkIDogY2FzaFxuICAgIH1cblxuICAgIGxldCBzdGF0ZSA9IG1lc3NhZ2Uuc3RhdGVcbiAgICBzdGF0ZS5lbGVtZW50ID0gbWVzc2FnZS5lbGVtZW50XG4gICAgZWxlbWVudC5zdGF0ZSA9IHN0YXRlXG59XG5cblxuZXhwb3J0IGNvbnN0IGhvc3RlZEVycm9ySGFuZGxlciA9IG1lc3NhZ2UgPT4ge1xuICAgIGNvbW1vbi5yZW1vdmVJbml0aWFsaXplKClcbiAgICBjb21tb24uaGFuZGxlRXJyb3IobWVzc2FnZS5lcnJvcilcbn1cbiIsIi8qIGVzbGludCBuby1jb25zb2xlOiBbXCJlcnJvclwiLCB7IGFsbG93OiBbXCJ3YXJuXCIsIFwiZXJyb3JcIl0gfV0gKi9cbi8qZ2xvYmFsIG5hdmlnYXRvciovXG5pbXBvcnQgY29tbW9uIGZyb20gJy4uL2NvbW1vbidcbmltcG9ydCAqIGFzIHZhbGlkIGZyb20gJy4vdmFsaWRhdGlvbidcbmltcG9ydCAqIGFzIGhhbmRsZXIgZnJvbSAnLi9oYW5kbGVyJ1xuXG5leHBvcnQgZGVmYXVsdCBhc3luYyhcbiAgICBhcGlLZXksXG4gICAgbGVnYWN5LCAvLyB0aGlzIHVzZWQgdG8gYmUgY2xpZW50IGlkLCBsZWZ0IGluIHBsYWNlIHRvIHByZXNlcnZlIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG4gICAgc3R5bGVzID0gY29tbW9uLmRlZmF1bHRTdHlsZXMsXG4gICAgc2Vzc2lvbk1ldGFkYXRhID0ge30sXG4gICAgZmVlX21vZGUgPSBjb21tb24uZGVmYXVsdEZlZU1vZGVcbikgPT4ge1xuICAgIFxuICAgIGNvbnN0IGtleVBhcnRzID0gYXBpS2V5LnNwbGl0KFwiLVwiKVxuICAgIGxldCBlbnZpcm9ubWVudCA9IGtleVBhcnRzWzBdXG4gICAgbGV0IHN0YWdlID0ga2V5UGFydHNbMV1cbiAgICBsZXQgcGFydG5lck1vZGUgPSBcIlwiXG4gICAgaWYgKFsnbmV3Jywnb2xkJ10uaW5jbHVkZXMoc3RhZ2UpKSB7XG4gICAgICAgIHBhcnRuZXJNb2RlID0gc3RhZ2VcbiAgICAgICAgc3RhZ2UgPSBrZXlQYXJ0c1syXVxuICAgIH1cbiAgICB2YWxpZC5jaGVja0NyZWF0ZVBhcmFtcyhhcGlLZXksIGZlZV9tb2RlLCBzZXNzaW9uTWV0YWRhdGEsIHN0eWxlcywgZW52aXJvbm1lbnQsIHN0YWdlLCBwYXJ0bmVyTW9kZSlcblxuICAgIGNvbW1vbi5yZW1vdmVBbGwodHJ1ZSlcbiAgICBsZXQgcGFydG5lcl9lbnZpcm9ubWVudFxuICAgIGlmIChwYXJ0bmVyTW9kZSA9PT0gXCJcIikge1xuICAgICAgICBwYXJ0bmVyX2Vudmlyb25tZW50ID0gYCR7ZW52aXJvbm1lbnR9YFxuICAgIH0gZWxzZSB7XG4gICAgICAgIHBhcnRuZXJfZW52aXJvbm1lbnQgPSBgJHtlbnZpcm9ubWVudH0tJHtwYXJ0bmVyTW9kZX1gXG4gICAgfVxuICAgIGNvbW1vbi5zZXRFbnZpcm9ubWVudChwYXJ0bmVyX2Vudmlyb25tZW50KVxuICAgIGNvbW1vbi5zZXRTdGFnZShzdGFnZSlcblxuICAgIGNvbnN0IHZhbGlkVHlwZXMgPSB7XG4gICAgICAgICdjYXJkLW51bWJlcic6IGZhbHNlLFxuICAgICAgICAnY2FyZC1leHAnOiBmYWxzZSxcbiAgICAgICAgJ2NhcmQtY3Z2JzogZmFsc2UsXG4gICAgICAgICdjYXJkLW5hbWUnOiB0cnVlLFxuICAgICAgICAnYmlsbGluZy1saW5lMSc6IHRydWUsXG4gICAgICAgICdiaWxsaW5nLWxpbmUyJzogdHJ1ZSxcbiAgICAgICAgJ2JpbGxpbmctY2l0eSc6IHRydWUsXG4gICAgICAgICdiaWxsaW5nLXN0YXRlJzogdHJ1ZSxcbiAgICAgICAgJ2JpbGxpbmctemlwJzogZmFsc2UsXG4gICAgICAgICdhY2NvdW50LW51bWJlcic6IGZhbHNlLFxuICAgICAgICAncm91dGluZy1udW1iZXInOiBmYWxzZSxcbiAgICAgICAgJ2FjY291bnQtbmFtZSc6IGZhbHNlLFxuICAgICAgICAnYWNjb3VudC10eXBlJzogZmFsc2UsXG4gICAgICAgICdjYXNoLW5hbWUnOiBmYWxzZSxcbiAgICAgICAgJ2Nhc2gtY29udGFjdCc6IGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgZGVmYXVsdEVsZW1lbnRJZHMgPSB7XG4gICAgICAgICdjcmVkaXQtY2FyZCc6IGNvbW1vbi5maWVsZHMuQ1JFRElUX0NBUkQsXG4gICAgICAgICdudW1iZXInOiBjb21tb24uZmllbGRzLkNSRURJVF9DQVJEX05VTUJFUixcbiAgICAgICAgJ2V4cCc6IGNvbW1vbi5maWVsZHMuQ1JFRElUX0NBUkRfRVhQLFxuICAgICAgICAnY3Z2JzogY29tbW9uLmZpZWxkcy5DUkVESVRfQ0FSRF9DVlYsXG4gICAgICAgICdhY2NvdW50LW5hbWUnOiBjb21tb24uZmllbGRzLkNSRURJVF9DQVJEX05BTUUsXG4gICAgICAgICdhZGRyZXNzLTEnOiBjb21tb24uZmllbGRzLkNSRURJVF9DQVJEX0FERFJFU1MxLFxuICAgICAgICAnYWRkcmVzcy0yJzogY29tbW9uLmZpZWxkcy5DUkVESVRfQ0FSRF9BRERSRVNTMixcbiAgICAgICAgY2l0eTogY29tbW9uLmZpZWxkcy5DUkVESVRfQ0FSRF9DSVRZLFxuICAgICAgICBzdGF0ZTogY29tbW9uLmZpZWxkcy5DUkVESVRfQ0FSRF9TVEFURSxcbiAgICAgICAgemlwOiBjb21tb24uZmllbGRzLkNSRURJVF9DQVJEX1pJUCxcbiAgICAgICAgJ2FjY291bnQtbnVtYmVyJzogY29tbW9uLmFjaEZpZWxkcy5BQ0NPVU5UX05VTUJFUixcbiAgICAgICAgJ2FjaC1uYW1lJzogY29tbW9uLmFjaEZpZWxkcy5BQ0NPVU5UX05BTUUsXG4gICAgICAgICdyb3V0aW5nLW51bWJlcic6IGNvbW1vbi5hY2hGaWVsZHMuQkFOS19DT0RFLFxuICAgICAgICAnYWNjb3VudC10eXBlJzogY29tbW9uLmFjaEZpZWxkcy5BQ0NPVU5UX1RZUEUsXG4gICAgICAgICdjYXNoLW5hbWUnOiBjb21tb24uY2FzaEZpZWxkcy5OQU1FLFxuICAgICAgICAnY2FzaC1jb250YWN0JzogY29tbW9uLmNhc2hGaWVsZHMuQ09OVEFDVFxuICAgIH1cblxuICAgIGxldCBpc1ZhbGlkID0gZmFsc2VcblxuICAgIGNvbnN0IHByb2Nlc3NlZEVsZW1lbnRzID0ge1xuICAgICAgICBjYXJkOiBbXSxcbiAgICAgICAgYWNoOiBbXSxcbiAgICAgICAgY2FzaDogW11cbiAgICB9XG5cbiAgICBsZXQgZWxlbWVudFN0YXRlcyA9IHt9XG5cbiAgICBsZXQgdHJhbnNhY3RpbmcgPSB7fVxuXG4gICAgbGV0IGlzUmVhZHkgPSBmYWxzZVxuXG4gICAgY29uc3QgZmV0Y2hQdFRva2VuID0gYXN5bmMoKSA9PiB7XG4gICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCA1OyBpKyspIHtcbiAgICAgICAgICAgIGxldCB0b2tlbiA9IGF3YWl0IGNvbW1vbi5nZXREYXRhKGAke2NvbW1vbi50cmFuc2FjdGlvbkVuZHBvaW50KCl9YCwgYXBpS2V5KVxuICAgICAgICAgICAgaWYgKHRva2VuWydwdC10b2tlbiddKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRva2VuXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgbGV0IHB0VG9rZW4gPSB7fVxuICAgIHB0VG9rZW4udG9rZW4gPSBhd2FpdCBmZXRjaFB0VG9rZW4oKVxuICAgIHB0VG9rZW4uaXNVc2VkID0gZmFsc2VcblxuICAgIGNvbnN0IHJlc2V0SG9zdFRva2VuID0gYXN5bmMoKSA9PiB7XG4gICAgICAgIGxldCB0cmFuc2FjdGluZyA9IGNvbW1vbi5nZXRUcmFuc2FjdGluZ0VsZW1lbnQoKVxuICAgICAgICBsZXQgdG9rZW4gPSBhd2FpdCBmZXRjaFB0VG9rZW4oKVxuICAgICAgICBjb21tb24ucG9zdE1lc3NhZ2VUb0hvc3RlZEZpZWxkKGNvbW1vbi5ob3N0ZWRGaWVsZE1hcFt0cmFuc2FjdGluZ10sIHtcbiAgICAgICAgICAgIHR5cGU6IGBwdC1zdGF0aWM6cmVzZXRfaG9zdGAsXG4gICAgICAgICAgICB0b2tlbjogdG9rZW5bJ3B0LXRva2VuJ11cbiAgICAgICAgfSlcbiAgICB9XG4gICAgXG4gICAgY29uc3QgZXhwaXJlSG9zdFRva2VuID0gYXN5bmMoKSA9PiB7ICBcbiAgICAgICAgY29uc29sZS53YXJuKCdleHBpcmluZyBob3N0IHRva2VuJylcbiAgICB9XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcihcImJlZm9yZXVubG9hZFwiLCAoKSA9PiB7IGNvbW1vbi5yZW1vdmVSZWFkeSgpIH0pXG5cbiAgICBjb25zdCBtb3VudFByb2Nlc3NlZEVsZW1lbnRzID0gYXN5bmMocHJvY2Vzc2VkQXJyYXkpID0+IHtcbiAgICAgICAgZm9yIChjb25zdCBwcm9jZXNzZWQgb2YgcHJvY2Vzc2VkQXJyYXkpIHtcbiAgICAgICAgICAgIGlmIChwcm9jZXNzZWQuZWxlbWVudHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIGxldCBlcnJvciA9IHByb2Nlc3NlZC5lcnJvckNoZWNrKHByb2Nlc3NlZC5lbGVtZW50cywgdHJhbnNhY3RpbmdbcHJvY2Vzc2VkLnR5cGVdKVxuICAgICAgICAgICAgICAgIGlmIChlcnJvcikge1xuICAgICAgICAgICAgICAgICAgICBjb21tb24uaGFuZGxlRXJyb3IoYEZJRUxEX0VSUk9SOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgdG9rZW47XG4gICAgICAgICAgICAgICAgaWYgKHB0VG9rZW4uaXNVc2VkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRva2VuID0gYXdhaXQgZmV0Y2hQdFRva2VuKClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHB0VG9rZW4uaXNVc2VkID0gdHJ1ZVxuICAgICAgICAgICAgICAgICAgICB0b2tlbiA9IHB0VG9rZW4udG9rZW5cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBwcm9jZXNzZWQuZWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYoIXRva2VuWydwdC10b2tlbiddKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29tbW9uLmhhbmRsZUVycm9yKGBOT19UT0tFTjogTm8gcHQtdG9rZW4gZm91bmRgKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGpzb24gPSBKU09OLnN0cmluZ2lmeSh7IHRva2VuOiB0b2tlblsncHQtdG9rZW4nXSwgb3JpZ2luOiB0b2tlbi5vcmlnaW4sIHN0eWxlcywgYXBpS2V5fSlcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jb2RlZEpzb24gPSB3aW5kb3cuYnRvYShqc29uKVxuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmZyYW1lLnRva2VuID0gZW5jb2RlVVJJKGVuY29kZWRKc29uKVxuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtb3VudCA9IGFzeW5jKFxuICAgICAgICBlbGVtZW50cyA9IGRlZmF1bHRFbGVtZW50SWRzXG4gICAgKSA9PiB7XG4gICAgICAgIGNvbW1vbi5yZW1vdmVJbml0aWFsaXplKClcblxuICAgICAgICBjb25zdCBhY2hFbGVtZW50cyA9IHtcbiAgICAgICAgICAgICdhY2NvdW50LW51bWJlcic6IGVsZW1lbnRzWydhY2NvdW50LW51bWJlciddLFxuICAgICAgICAgICAgJ2FjY291bnQtbmFtZSc6IGVsZW1lbnRzWydhY2gtbmFtZSddLFxuICAgICAgICAgICAgJ3JvdXRpbmctbnVtYmVyJzogZWxlbWVudHNbJ3JvdXRpbmctbnVtYmVyJ10sXG4gICAgICAgICAgICAnYWNjb3VudC10eXBlJzogZWxlbWVudHNbJ2FjY291bnQtdHlwZSddLFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2FyZEVsZW1lbnRzID0ge1xuICAgICAgICAgICAgJ2NyZWRpdC1jYXJkJzogZWxlbWVudHNbJ2NyZWRpdC1jYXJkJ10sXG4gICAgICAgICAgICAnY2FyZC1udW1iZXInOiBlbGVtZW50cy5udW1iZXIsXG4gICAgICAgICAgICAnY2FyZC1leHAnOiBlbGVtZW50cy5leHAsXG4gICAgICAgICAgICAnY2FyZC1jdnYnOiBlbGVtZW50cy5jdnYsXG4gICAgICAgICAgICAnY2FyZC1uYW1lJzogZWxlbWVudHNbJ2FjY291bnQtbmFtZSddLFxuICAgICAgICAgICAgJ2JpbGxpbmctbGluZTEnOiBlbGVtZW50c1snYWRkcmVzcy0xJ10sXG4gICAgICAgICAgICAnYmlsbGluZy1saW5lMic6IGVsZW1lbnRzWydhZGRyZXNzLTInXSxcbiAgICAgICAgICAgICdiaWxsaW5nLWNpdHknOiBlbGVtZW50cy5jaXR5LFxuICAgICAgICAgICAgJ2JpbGxpbmctc3RhdGUnOiBlbGVtZW50cy5zdGF0ZSxcbiAgICAgICAgICAgICdiaWxsaW5nLXppcCc6IGVsZW1lbnRzLnppcCxcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNhc2hFbGVtZW50cyA9IHtcbiAgICAgICAgICAgICdjYXNoLW5hbWUnOiBlbGVtZW50c1snY2FzaC1uYW1lJ10sXG4gICAgICAgICAgICAnY2FzaC1jb250YWN0JzogZWxlbWVudHNbJ2Nhc2gtY29udGFjdCddXG4gICAgICAgIH1cblxuICAgICAgICBwcm9jZXNzZWRFbGVtZW50cy5jYXJkID0gY29tbW9uLnByb2Nlc3NFbGVtZW50cyhjYXJkRWxlbWVudHMsIGVsZW1lbnRTdGF0ZXMsIGNvbW1vbi5maWVsZFR5cGVzLCAnY3JlZGl0LWNhcmQnKVxuICAgICAgICBwcm9jZXNzZWRFbGVtZW50cy5hY2ggPSBjb21tb24ucHJvY2Vzc0VsZW1lbnRzKGFjaEVsZW1lbnRzLCBlbGVtZW50U3RhdGVzLCBjb21tb24uYWNoRmllbGRUeXBlcywgJ2FjaCcpXG4gICAgICAgIHByb2Nlc3NlZEVsZW1lbnRzLmNhc2ggPSBjb21tb24ucHJvY2Vzc0VsZW1lbnRzKGNhc2hFbGVtZW50cywgZWxlbWVudFN0YXRlcywgY29tbW9uLmNhc2hGaWVsZFR5cGVzKVxuXG4gICAgICAgIHRyYW5zYWN0aW5nLmNhcmQgPSBwcm9jZXNzZWRFbGVtZW50cy5jYXJkLnJlZHVjZShjb21tb24uZmluZFRyYW5zYWN0aW5nRWxlbWVudCwgZmFsc2UpXG4gICAgICAgIHRyYW5zYWN0aW5nLmFjaCA9IHByb2Nlc3NlZEVsZW1lbnRzLmFjaC5yZWR1Y2UoY29tbW9uLmZpbmRBY2NvdW50TnVtYmVyLCBmYWxzZSlcbiAgICAgICAgdHJhbnNhY3RpbmcuY2FzaCA9IHByb2Nlc3NlZEVsZW1lbnRzLmNhc2gucmVkdWNlKGNvbW1vbi5maW5kRmllbGQoJ2Nhc2gtbmFtZScpLCBmYWxzZSlcblxuICAgICAgICBjb25zdCByZW1vdmVSZWxheSA9IGNvbW1vbi5oYW5kbGVIb3N0ZWRGaWVsZE1lc3NhZ2UoY29tbW9uLnJlbGF5VHlwZU1lc3NhZ2UsIGhhbmRsZXIucmVsYXlIYW5kbGVyKCkpXG5cbiAgICAgICAgY29uc3Qgc2V0dXBUcmFuc2FjdGluZyA9IHtcbiAgICAgICAgICAgICdhY2NvdW50LW51bWJlcic6IHByb2Nlc3NlZEVsZW1lbnRzLmFjaCxcbiAgICAgICAgICAgICdjYXJkLW51bWJlcic6IHByb2Nlc3NlZEVsZW1lbnRzLmNhcmQsXG4gICAgICAgICAgICAnY2FzaC1uYW1lJzogcHJvY2Vzc2VkRWxlbWVudHMuY2FzaFxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtb3ZlU2V0dXAgPSBjb21tb24uaGFuZGxlSG9zdGVkRmllbGRNZXNzYWdlKGNvbW1vbi5ob3N0ZWRSZWFkeVR5cGVNZXNzYWdlLCBoYW5kbGVyLnNldHVwSGFuZGxlcihzdHlsZXMsIHNldHVwVHJhbnNhY3RpbmcpKVxuXG4gICAgICAgIGNvbnN0IHJlbW92ZVNpYmxpbmcgPSBjb21tb24uaGFuZGxlSG9zdGVkRmllbGRNZXNzYWdlKGNvbW1vbi5zaWJsaW5nVHlwZU1lc3NhZ2UsIGhhbmRsZXIuc2libGluZ0hhbmRsZXIocHJvY2Vzc2VkRWxlbWVudHMpKVxuXG4gICAgICAgIGNvbnN0IHJlbW92ZVN0YXRlID0gY29tbW9uLmhhbmRsZUhvc3RlZEZpZWxkTWVzc2FnZShjb21tb24uc3RhdGVUeXBlTWVzc2FnZSwgaGFuZGxlci5zdGF0ZVVwZGF0ZXIocHJvY2Vzc2VkRWxlbWVudHMpKVxuXG4gICAgICAgIGNvbnN0IHJlbW92ZUhvc3RlZEVycm9yID0gY29tbW9uLmhhbmRsZUhvc3RlZEZpZWxkTWVzc2FnZShjb21tb24uc29ja2V0RXJyb3JUeXBlTWVzc2FnZSwgaGFuZGxlci5ob3N0ZWRFcnJvckhhbmRsZXIpXG4gICAgXG4gICAgICAgIGlmIChwcm9jZXNzZWRFbGVtZW50cy5hY2gubGVuZ3RoID09PSAwICYmIHByb2Nlc3NlZEVsZW1lbnRzLmNhcmQubGVuZ3RoID09PSAwICYmIHByb2Nlc3NlZEVsZW1lbnRzLmNhc2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gY29tbW9uLmhhbmRsZUVycm9yKCdOT19GSUVMRFM6IFRoZXJlIGFyZSBubyBQYXlUaGVvcnkgZmllbGRzJylcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBwcm9jZXNzZWQgPSBbe1xuICAgICAgICAgICAgdHlwZTogJ2NhcmQnLFxuICAgICAgICAgICAgZWxlbWVudHM6IHByb2Nlc3NlZEVsZW1lbnRzLmNhcmQsXG4gICAgICAgICAgICBlcnJvckNoZWNrOiB2YWxpZC5maW5kQ2FyZEVycm9yXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHR5cGU6ICdhY2gnLFxuICAgICAgICAgICAgZWxlbWVudHM6IHByb2Nlc3NlZEVsZW1lbnRzLmFjaCxcbiAgICAgICAgICAgIGVycm9yQ2hlY2s6IHZhbGlkLmZpbmRBY2hFcnJvclxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0eXBlOiAnY2FzaCcsXG4gICAgICAgICAgICBlbGVtZW50czogcHJvY2Vzc2VkRWxlbWVudHMuY2FzaCxcbiAgICAgICAgICAgIGVycm9yQ2hlY2s6IHZhbGlkLmZpbmRDYXNoRXJyb3JcbiAgICAgICAgfV1cblxuICAgICAgICBhd2FpdCBtb3VudFByb2Nlc3NlZEVsZW1lbnRzKHByb2Nlc3NlZClcblxuICAgICAgICAvL3JldHVybnMgYSBmdW5jdGlvbiB0aGF0IHJlbW92ZXMgYW55IGV2ZW50IGhhbmRsZXJzIHRoYXQgd2VyZSBwdXQgb24gdGhlIHdpbmRvdyBkdXJpbmcgdGhlIG1vdW50IGZ1bmN0aW9uXG4gICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICByZW1vdmVSZWxheSgpXG4gICAgICAgICAgICByZW1vdmVTZXR1cCgpXG4gICAgICAgICAgICByZW1vdmVTaWJsaW5nKClcbiAgICAgICAgICAgIHJlbW92ZVN0YXRlKClcbiAgICAgICAgICAgIHJlbW92ZUhvc3RlZEVycm9yKClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUluaXRNZXNzYWdlID0gKHR5cGUsIGRhdGEpID0+IHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IFsnY2FyZCcsICdjYXNoJywgJ2FjaCddXG4gICAgICAgIGxldCBpbml0aWFsaXplZCA9IGZhbHNlXG4gICAgICAgIG9wdGlvbnMuZm9yRWFjaChvcHRpb24gPT4ge1xuICAgICAgICAgICAgaWYgKGNvbW1vbi5pc0hpZGRlbih0cmFuc2FjdGluZ1tvcHRpb25dKSA9PT0gZmFsc2UgJiYgaXNWYWxpZC5pbmNsdWRlcyhvcHRpb24pKSB7XG4gICAgICAgICAgICAgICAgaW5pdGlhbGl6ZWQgPSB0cnVlXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHRyYW5zYWN0aW5nW29wdGlvbl1cbiAgICAgICAgICAgICAgICBjb21tb24uc2V0VHJhbnNhY3RpbmdFbGVtZW50KGVsZW1lbnQpXG4gICAgICAgICAgICAgICAgZWxlbWVudC5yZXNldFRva2VuID0gcmVzZXRIb3N0VG9rZW5cbiAgICAgICAgICAgICAgICBjb21tb24ucG9zdE1lc3NhZ2VUb0hvc3RlZEZpZWxkKGNvbW1vbi5ob3N0ZWRGaWVsZE1hcFtlbGVtZW50LmlkXSwge3R5cGUsIGRhdGF9KVxuICAgICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAvLyBJZiB0aGVyZSB3YXMgbm90IHRyYW5zYWN0aW5nIG1lc3NhZ2Ugc2VudCB3ZSBzaG91bGQgdGhyb3cgZXJyb3IgYW5kIHJlbW92ZSBpbml0aWFsaXplIHNvIGl0IGNhbiBiZSBydW4gYWdhaW4gYWZ0ZXIgZmllbGRzIGFyZSB2YWxpZFxuICAgICAgICBpZiAoIWluaXRpYWxpemVkKSB7XG4gICAgICAgICAgICBjb21tb24uaGFuZGxlRXJyb3IoJ05PVF9WQUxJRDogRmllbGRzIGRpc3BsYXllZCBhcmUgbm90IHZhbGlkLicpXG4gICAgICAgICAgICBjb21tb24ucmVtb3ZlSW5pdGlhbGl6ZSgpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGhhbmRsZUluaXRpYWxpemVkID0gKGFtb3VudCwgcGF5b3JJbmZvLCBwYXlUaGVvcnlEYXRhLCBtZXRhZGF0YSwgZmVlTW9kZSwgY29uZmlybWF0aW9uKSA9PiB7XG4gICAgICAgIC8vdmFsaWRhdGUgdGhlIGlucHV0IHBhcmFtIHR5cGVzXG4gICAgICAgIGlmKCF2YWxpZC5pc3ZhbGlkVHJhbnNhY3RQYXJhbXMoYW1vdW50LCBwYXlvckluZm8sIG1ldGFkYXRhKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIC8vdmFsaWRhdGUgdGhlIGFtb3VudFxuICAgICAgICBpZighdmFsaWQuaXNWYWxpZEFtb3VudChhbW91bnQpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgLy92YWxpZGF0ZSB0aGUgcGF5b3JJbmZvXG4gICAgICAgIGlmKCF2YWxpZC5pc1ZhbGlkUGF5b3JJbmZvKHBheW9ySW5mbykpIHJldHVybiBmYWxzZVxuICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgcGF5b3JJZFxuICAgICAgICBpZighdmFsaWQuaXNWYWxpZFBheW9yRGV0YWlscyhwYXlvckluZm8sIHBheVRoZW9yeURhdGEucGF5b3JJZCkpIHJldHVybiBmYWxzZVxuICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgZmVlIG1vZGVcbiAgICAgICAgaWYoIXZhbGlkLmlzVmFsaWRGZWVNb2RlKGZlZU1vZGUgfHwgZmVlX21vZGUpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgLy8gdmFsaWRhdGUgdGhlIGludm9pY2UgYW5kIHJlY3VycmluZyBpZFxuICAgICAgICBpZighdmFsaWQuaXNWYWxpZEludm9pY2VBbmRSZWN1cnJpbmdJZChwYXlUaGVvcnlEYXRhKSkgcmV0dXJuIGZhbHNlXG4gICAgICAgIC8vIHZhbGlkYXRlIHRoZSBmZWVcbiAgICAgICAgaWYoIXZhbGlkLmlzVmFsaWRGZWVBbW91bnQocGF5VGhlb3J5RGF0YS5mZWUpKSByZXR1cm4gZmFsc2VcblxuICAgICAgICBjb25zdCBkYXRhID0geyBhbW91bnQsIHBheW9ySW5mbywgcGF5VGhlb3J5RGF0YSwgbWV0YWRhdGEsIGZlZV9tb2RlOiBmZWVNb2RlIHx8IGZlZV9tb2RlLCBjb25maXJtYXRpb24gfVxuICAgICAgICByZXR1cm4gaGFuZGxlSW5pdE1lc3NhZ2UoJ3B0LXN0YXRpYzpwYXltZW50LWRldGFpbCcsIGRhdGEpXG4gICAgfVxuXG4gICAgY29uc3QgdHJhbnNhY3QgPSBjb21tb24uZ2VuZXJhdGVJbml0aWFsaXphdGlvbihoYW5kbGVJbml0aWFsaXplZCwgcHRUb2tlbi50b2tlbi5jaGFsbGVuZ2VPcHRpb25zKVxuXG4gICAgY29uc3QgaW5pdFRyYW5zYWN0aW9uID0gKGFtb3VudCwgcGF5b3JJbmZvLCBjb25maXJtYXRpb24pID0+IHtcbiAgICAgICAgY29uc29sZS53YXJuKCdpbml0VHJhbnNhY3Rpb24gaXMgZGVwcmVjYXRlZC4gUGxlYXNlIHVzZSB0cmFuc2FjdCBpbnN0ZWFkLicpXG4gICAgICAgIC8vUGFzc2luZyBpbiB0aGUgc2Vzc2lvbiBtZXRhZGF0YSBmcm9tIGNyZWF0ZSBiZWNhdXNlIHRob3NlIHVzZWQgdG8gYmUgdGhlIG9ubHkgbWV0YWRhdGEgdGhhdCB3ZXJlIHBhc3NlZCBpblxuICAgICAgICB0cmFuc2FjdCh7YW1vdW50LCBwYXlvckluZm8sIG1ldGFkYXRhOiBzZXNzaW9uTWV0YWRhdGEsIGNvbmZpcm1hdGlvbn0pXG4gICAgfVxuXG4gICAgY29uc3QgaGFuZGxlVG9rZW5pemUgPSAocGF5b3JJbmZvLCBwYXlvcklkLCBtZXRhZGF0YSkgPT4ge1xuICAgICAgICAvL3ZhbGlkYXRlIHRoZSBpbnB1dCBwYXJhbSB0eXBlc1xuICAgICAgICBpZighdmFsaWQuaXNWYWxpZFRva2VuaXplUGFyYW1zKHBheW9ySW5mbywgbWV0YWRhdGEpKSByZXR1cm4gZmFsc2VcbiAgICAgICAgLy92YWxpZGF0ZSB0aGUgcGF5b3JJbmZvXG4gICAgICAgIGlmKCF2YWxpZC5pc1ZhbGlkUGF5b3JJbmZvKHBheW9ySW5mbykpIHJldHVybiBmYWxzZVxuICAgICAgICAvLyB2YWxpZGF0ZSB0aGUgcGF5b3JJZFxuICAgICAgICBpZighdmFsaWQuaXNWYWxpZFBheW9yRGV0YWlscyhwYXlvckluZm8sIHBheW9ySWQpKSByZXR1cm4gZmFsc2VcblxuICAgICAgICBjb25zdCBkYXRhID0geyBwYXlvckluZm8sIG1ldGFkYXRhLCBwYXlvcklkIH1cbiAgICAgICAgcmV0dXJuIGhhbmRsZUluaXRNZXNzYWdlKCdwdC1zdGF0aWM6dG9rZW5pemUtZGV0YWlsJywgZGF0YSlcbiAgICB9XG5cbiAgICBjb25zdCB0b2tlbml6ZVBheW1lbnRNZXRob2QgPSBjb21tb24uZ2VuZXJhdGVUb2tlbml6YXRpb24oaGFuZGxlVG9rZW5pemUsIHB0VG9rZW4udG9rZW4uY2hhbGxlbmdlT3B0aW9ucylcblxuXG4gICAgY29uc3QgY29uZmlybSA9ICgpID0+IHtcbiAgICAgICAgY29uc3QgdHJhbnNhY3RpbmcgPSBjb21tb24uZ2V0VHJhbnNhY3RpbmdFbGVtZW50KClcbiAgICAgICAgaWYgKHRyYW5zYWN0aW5nKSB7XG4gICAgICAgICAgICBjb21tb24ucG9zdE1lc3NhZ2VUb0hvc3RlZEZpZWxkKGNvbW1vbi5ob3N0ZWRGaWVsZE1hcFt0cmFuc2FjdGluZ10sIHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogJ3B0LXN0YXRpYzpjb25maXJtJyxcbiAgICAgICAgICAgICAgICAgICAgY2FwdHVyZTogdHJ1ZVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGNhbmNlbCA9IGFzeW5jKCkgPT4ge1xuICAgICAgICBsZXQgdHJhbnNhY3RpbmcgPSBjb21tb24uZ2V0VHJhbnNhY3RpbmdFbGVtZW50KClcbiAgICAgICAgaWYgKHRyYW5zYWN0aW5nKSB7XG4gICAgICAgICAgICBjb21tb24ucG9zdE1lc3NhZ2VUb0hvc3RlZEZpZWxkKGNvbW1vbi5ob3N0ZWRGaWVsZE1hcFt0cmFuc2FjdGluZ10sIHtcbiAgICAgICAgICAgICAgICB0eXBlOiBgcHQtc3RhdGljOmNhbmNlbGBcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgICBhd2FpdCByZXNldEhvc3RUb2tlbigpXG4gICAgICAgIH1cbiAgICAgICAgY29tbW9uLnJlbW92ZUluaXRpYWxpemUoKVxuICAgICAgICBjb21tb24ucmVtb3ZlVHJhbnNhY3RpbmdFbGVtZW50KClcbiAgICB9XG5cbiAgICBjb25zdCBpc1JlYWR5U3RhbGUgPSAoKSA9PiB7XG4gICAgICAgIGlmICghaXNOYU4ocGFyc2VJbnQoY29tbW9uLmdldFJlYWR5KCkpKSkge1xuICAgICAgICAgICAgcmV0dXJuIChNYXRoLnJvdW5kKERhdGUubm93KCkpIC0gcGFyc2VJbnQoY29tbW9uLmdldFJlYWR5KCkpID4gMTAwMDApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGNvbnN0IHJlYWR5T2JzZXJ2ZXIgPSBjYiA9PiBjb21tb24uaGFuZGxlTWVzc2FnZShcbiAgICAgICAgY29tbW9uLnJlYWR5VHlwZU1lc3NhZ2UsXG4gICAgICAgIG1lc3NhZ2UgPT4ge1xuICAgICAgICAgICAgaWYgKG1lc3NhZ2UudHlwZSA9PT0gJ3BheS10aGVvcnk6cmVhZHknICYmICghaXNSZWFkeSkgJiYgaXNSZWFkeVN0YWxlKCkpIHtcbiAgICAgICAgICAgICAgICBjb21tb24uc2V0UmVhZHkoTWF0aC5yb3VuZChEYXRlLm5vdygpKSlcbiAgICAgICAgICAgICAgICBpc1JlYWR5ID0gbWVzc2FnZS5yZWFkeVxuICAgICAgICAgICAgICAgIGNiKG1lc3NhZ2UucmVhZHkpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG5cbiAgICBjb25zdCB2YWxpZE9ic2VydmVyID0gY2IgPT4gY29tbW9uLmhhbmRsZU1lc3NhZ2UoXG4gICAgICAgIHZhbGlkLnZhbGlkVHlwZU1lc3NhZ2UocHJvY2Vzc2VkRWxlbWVudHMpLFxuICAgICAgICBtZXNzYWdlID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHR5cGUgPSBtZXNzYWdlLnR5cGUuc3BsaXQoJzonKVsxXVxuICAgICAgICAgICAgbGV0IHZhbGlkYXRpbmcgPSBmYWxzZVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbGlkVHlwZXNbdHlwZV0gPT09ICd1bmRlZmluZWQnKSByZXR1cm5cblxuXG4gICAgICAgICAgICB2YWxpZFR5cGVzW3R5cGVdID0gbWVzc2FnZS52YWxpZFxuXG4gICAgICAgICAgICBjb25zdCB2YWxpZENhcmQgPSB2YWxpZC5oYXNWYWxpZENhcmQodmFsaWRUeXBlcylcblxuICAgICAgICAgICAgY29uc3QgdmFsaWRBY2ggPSB2YWxpZC5oYXNWYWxpZEFjY291bnQodmFsaWRUeXBlcylcblxuICAgICAgICAgICAgY29uc3QgdmFsaWRDYXNoID0gdmFsaWQuaGFzVmFsaWRDYXNoKHZhbGlkVHlwZXMpXG5cbiAgICAgICAgICAgIGNvbnN0IHZhbGlkT2JqZWN0cyA9IFt7XG4gICAgICAgICAgICAgICAgaXNWYWxpZDogdmFsaWRDYXJkLFxuICAgICAgICAgICAgICAgIG5hbWU6ICdjYXJkJ1xuICAgICAgICAgICAgfSwge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQ6IHZhbGlkQ2FzaCxcbiAgICAgICAgICAgICAgICBuYW1lOiAnY2FzaCdcbiAgICAgICAgICAgIH0sIHtcbiAgICAgICAgICAgICAgICBpc1ZhbGlkOiB2YWxpZEFjaCxcbiAgICAgICAgICAgICAgICBuYW1lOiAnYWNoJ1xuICAgICAgICAgICAgfV1cblxuICAgICAgICAgICAgbGV0IHZhbGlkRmllbGRzID0gdmFsaWRPYmplY3RzLnJlZHVjZSgoYXJlVmFsaWQsIG9iaikgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvYmouaXNWYWxpZCkgYXJlVmFsaWQucHVzaChvYmoubmFtZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gYXJlVmFsaWRcbiAgICAgICAgICAgIH0sIFtdKVxuICAgICAgICAgICAgdmFsaWRhdGluZyA9IHZhbGlkRmllbGRzLmpvaW4oJy0nKVxuXG4gICAgICAgICAgICBpZiAoaXNWYWxpZCAhPT0gdmFsaWRhdGluZykge1xuICAgICAgICAgICAgICAgIGlzVmFsaWQgPSB2YWxpZGF0aW5nXG4gICAgICAgICAgICAgICAgY2IoaXNWYWxpZClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgIGNvbnN0IHN0YXRlT2JzZXJ2ZXIgPSBjYiA9PiBjb21tb24uaGFuZGxlSG9zdGVkRmllbGRNZXNzYWdlKGNvbW1vbi5zdGF0ZVR5cGVNZXNzYWdlLCBtZXNzYWdlID0+IHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSB7Li4ubWVzc2FnZS5zdGF0ZX1cbiAgICAgICAgZGVsZXRlIHN0YXRlLmVsZW1lbnRcbiAgICAgICAgZWxlbWVudFN0YXRlc1ttZXNzYWdlLmVsZW1lbnRdID0gc3RhdGVcbiAgICAgICAgY2IoZWxlbWVudFN0YXRlcylcbiAgICB9KVxuXG4gICAgY29uc3QgY2FzaE9ic2VydmVyID0gY2IgPT4gY29tbW9uLmhhbmRsZUhvc3RlZEZpZWxkTWVzc2FnZShjb21tb24uY2FzaENvbXBsZXRlVHlwZU1lc3NhZ2UsIG1lc3NhZ2UgPT4ge1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgICAgICAgdGltZW91dDogNTAwMCxcbiAgICAgICAgICAgIG1heGltdW1BZ2U6IDBcbiAgICAgICAgfTtcblxuICAgICAgICBmdW5jdGlvbiBzdWNjZXNzKHBvcykge1xuICAgICAgICAgICAgY29uc3QgY3JkID0gcG9zLmNvb3JkcztcbiAgICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gbWVzc2FnZS5iYXJjb2RlO1xuICAgICAgICAgICAgcmVzcG9uc2UubWFwVXJsID0gYGh0dHBzOi8vbWFwLnBheWl0aGVyZS5jb20vYmlsbGVyLzRiODAzMzQ1ODg0N2ZlYzE1YjljODQwYzViNTc0NTg0Lz9sYXQ9JHtjcmQubGF0aXR1ZGV9JmxuZz0ke2NyZC5sb25naXR1ZGV9YFxuICAgICAgICAgICAgY2IocmVzcG9uc2UpXG4gICAgICAgICAgICBjb21tb24ucmVtb3ZlQWxsKClcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGVycm9yKCkge1xuICAgICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBtZXNzYWdlLmJhcmNvZGU7XG4gICAgICAgICAgICBjYihyZXNwb25zZSlcbiAgICAgICAgICAgIGNvbW1vbi5yZW1vdmVBbGwodHJ1ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIG5hdmlnYXRvci5nZW9sb2NhdGlvbi5nZXRDdXJyZW50UG9zaXRpb24oc3VjY2VzcywgZXJyb3IsIG9wdGlvbnMpO1xuICAgIH0pXG5cbiAgICByZXR1cm4gY29tbW9uLmdlbmVyYXRlUmV0dXJuKFxuICAgICAgICAgICAgbW91bnQsXG4gICAgICAgICAgICBpbml0VHJhbnNhY3Rpb24sXG4gICAgICAgICAgICB0cmFuc2FjdCxcbiAgICAgICAgICAgIHRva2VuaXplUGF5bWVudE1ldGhvZCxcbiAgICAgICAgICAgIGNvbmZpcm0sXG4gICAgICAgICAgICBjYW5jZWwsXG4gICAgICAgICAgICByZWFkeU9ic2VydmVyLFxuICAgICAgICAgICAgdmFsaWRPYnNlcnZlcixcbiAgICAgICAgICAgIGNhc2hPYnNlcnZlcixcbiAgICAgICAgICAgIHN0YXRlT2JzZXJ2ZXJcbiAgICAgICAgKVxufVxuIiwiLyogZXNsaW50IG5vLWNvbnNvbGU6IFtcImVycm9yXCIsIHsgYWxsb3c6IFtcIndhcm5cIiwgXCJlcnJvclwiXSB9XSAqL1xuaW1wb3J0IGNvbW1vbiBmcm9tICcuLi9jb21tb24nXG5pbXBvcnQgKiBhcyBtZXNzYWdlIGZyb20gXCIuLi9jb21tb24vbWVzc2FnZVwiO1xuXG4vLyBwYXJ0bmVyIG1vZGUgaXMgdXNlZCB0byBpbmRpY2F0ZSBtaWdyYXRpb24gYnVpbGRzXG5jb25zdCBjaGVja0FwaUtleSA9IChrZXkscGFydG5lck1vZGUpID0+IHtcbiAgICBjb25zdCBzdGFnZUluZGV4ID0gcGFydG5lck1vZGUgPyAyIDogMVxuICAgIGNvbnN0IGtleVNwbGl0TGVuZ3RoID0gcGFydG5lck1vZGUgPyA0IDogM1xuICAgIGlmICh0eXBlb2Yga2V5ICE9PSAnc3RyaW5nJykge1xuICAgICAgICB0aHJvdyBFcnJvcignQXBpIGtleSBzaG91bGQgYmUgYSBzdHJpbmcnKVxuICAgIH1cbiAgICBlbHNlIGlmIChrZXkuc3BsaXQoXCItXCIpLmxlbmd0aCAhPT0ga2V5U3BsaXRMZW5ndGgpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYEFwaSBrZXkgc2hvdWxkIGJlIGEgc3RyaW5nIGZvcm1hdHRlZCBpbiAke2tleVNwbGl0TGVuZ3RofSBzZWN0aW9uc2ApXG4gICAgfVxuICAgIGVsc2UgaWYgKCFrZXkuc3BsaXQoXCItXCIpW3N0YWdlSW5kZXhdLmluY2x1ZGVzKFwicGF5dGhlb3J5XCIpKSB7XG4gICAgICAgIHRocm93IEVycm9yKGBBcGkga2V5IGhhcyBpbnZhbGlkIHN0YWdlICR7a2V5LnNwbGl0KFwiLVwiKVtzdGFnZUluZGV4XX1gKVxuICAgIH1cbn1cblxuY29uc3QgdmFsaWRhdGUgPSAodmFsdWUsIHR5cGUpID0+IHtcbiAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSB0eXBlICYmIHZhbHVlXG59XG5cbmNvbnN0IGNoZWNrRmVlTW9kZSA9IG1vZGUgPT4ge1xuICAgIGlmICghdmFsaWRhdGUobW9kZSwgJ3N0cmluZycpIHx8ICFbY29tbW9uLklOVEVSQ0hBTkdFLCBjb21tb24uU0VSVklDRV9GRUVdLmluY2x1ZGVzKG1vZGUpKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYEZlZSBNb2RlIHNob3VsZCBiZSBlaXRoZXIgJ2ludGVyY2hhbmdlJyBvciAnc2VydmljZV9mZWUnIHdoaWNoIGFyZSBhbHNvIGF2YWlsYWJsZSBhcyBjb25zdGFudHMgYXQgd2luZG93LnBheXRoZW9yeS5JTlRFUkNIQU5HRSBhbmQgd2luZG93LnBheXRoZW9yeS5TRVJWSUNFX0ZFRWApXG4gICAgfVxufVxuXG5jb25zdCBjaGVja01ldGFkYXRhID0gbWV0YWRhdGEgPT4ge1xuICAgIGlmICghdmFsaWRhdGUobWV0YWRhdGEsICdvYmplY3QnKSkge1xuICAgICAgICB0aHJvdyBFcnJvcihgTWV0YWRhdGEgc2hvdWxkIGJlIGEgSlNPTiBPYmplY3RgKVxuICAgIH1cbn1cblxuY29uc3QgY2hlY2tTdHlsZXMgPSBzdHlsZXMgPT4ge1xuICAgIGlmICghdmFsaWRhdGUoc3R5bGVzLCAnb2JqZWN0JykpIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoYFN0eWxlcyBzaG91bGQgYmUgYSBKU09OIE9iamVjdC4gQW4gZXhhbXBsZSBvZiB0aGUgb2JqZWN0IGlzIGF0IGh0dHBzOi8vZ2l0aHViLmNvbS9wYXktdGhlb3J5L3BheW1lbnQtY29tcG9uZW50c2ApXG4gICAgfVxufVxuXG5jb25zdCBjaGVja0VudiA9IGVudiA9PiB7XG4gICAgaWYgKCF2YWxpZGF0ZShlbnYsICdzdHJpbmcnKSkge1xuICAgICAgICB0aHJvdyBFcnJvcihgRW52aXJvbm1lbnQgbm90IGZvdW5kIGluIGFwaSBrZXlgKVxuICAgIH1cbn1cbmNvbnN0IFZBTElEX1NUQUdFUyA9IFsncGF5dGhlb3J5JywgJ3BheXRoZW9yeWxhYicsICdwYXl0aGVvcnlzdHVkeSddXG5jb25zdCBjaGVja1N0YWdlID0gc3RhZ2UgPT4ge1xuICAgIGlmICghVkFMSURfU1RBR0VTLmluY2x1ZGVzKHN0YWdlKSkge1xuICAgICAgICB0aHJvdyBFcnJvcihgU3RhZ2UgdmFyaWFibGUgbm90IGZvdW5kIGluIGFwaSBrZXlgKVxuICAgIH1cbn1cblxuY29uc3QgY2hlY2tDcmVhdGVQYXJhbXMgPSAoa2V5LCBtb2RlLCBtZXRhZGF0YSwgc3R5bGVzLCBlbnYsIHN0YWdlLCBwYXJ0bmVyTW9kZSkgPT4ge1xuICAgIGNoZWNrQXBpS2V5KGtleSxwYXJ0bmVyTW9kZSlcbiAgICBjaGVja0ZlZU1vZGUobW9kZSlcbiAgICBjaGVja01ldGFkYXRhKG1ldGFkYXRhKVxuICAgIGNoZWNrU3R5bGVzKHN0eWxlcylcbiAgICBjaGVja0VudihlbnYpXG4gICAgY2hlY2tTdGFnZShzdGFnZSlcbn1cblxuLy9MZXRzIHRoZSB2YWxpZCBvYnNlcnZlciBjaGVjayB0aGF0IGFsbCBmaWVsZHMgYXJlIHNldCB0byB2YWxpZCBiZWZvcmUgc2VuZGluZyBhIG1lc3NhZ2VcbmNvbnN0IGhhc1ZhbGlkQ2FyZE51bWJlciA9IHR5cGVzID0+XG4gICAgKHR5cGVzWydjYXJkLW51bWJlciddICYmIHR5cGVzWydjYXJkLWN2diddICYmIHR5cGVzWydjYXJkLWV4cCddICYmIHR5cGVzWydiaWxsaW5nLXppcCddKVxuXG5jb25zdCBoYXNWYWxpZENhcmQgPSB0eXBlcyA9PiBoYXNWYWxpZENhcmROdW1iZXIodHlwZXMpXG5cbmNvbnN0IGhhc1ZhbGlkQWNjb3VudCA9IHR5cGVzID0+XG4gICAgKHR5cGVzWydhY2NvdW50LW51bWJlciddICYmIHR5cGVzWydhY2NvdW50LXR5cGUnXSAmJiB0eXBlc1snYWNjb3VudC1uYW1lJ10gJiYgdHlwZXNbJ3JvdXRpbmctbnVtYmVyJ10pXG5cbmNvbnN0IGhhc1ZhbGlkQ2FzaCA9IHR5cGVzID0+XG4gICAgKHR5cGVzWydjYXNoLW5hbWUnXSAmJiB0eXBlc1snY2FzaC1jb250YWN0J10pXG5cblxuLy8gQ2hlY2tzIHRoZSBkb20gZm9yIGVsZW1lbnRzIGFuZCByZXR1cm5zIGVycm9ycyBpZiB0aGVyZSBhcmUgbWlzc2luZyBlbGVtZW50cyBvciBjb25mbGljdGluZyBlbGVtZW50c1xuY29uc3QgZmluZENhcmROdW1iZXJFcnJvciA9IHByb2Nlc3NlZEVsZW1lbnRzID0+IHtcbiAgICBsZXQgZXJyb3IgPSBmYWxzZVxuICAgIGlmIChwcm9jZXNzZWRFbGVtZW50cy5yZWR1Y2UoY29tbW9uLmZpbmRFeHAsIGZhbHNlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXJyb3IgPSAnbWlzc2luZyBjcmVkaXQgY2FyZCBleHBpcmF0aW9uIGZpZWxkIHJlcXVpcmVkIGZvciBwYXltZW50cydcbiAgICB9XG5cbiAgICBpZiAocHJvY2Vzc2VkRWxlbWVudHMucmVkdWNlKGNvbW1vbi5maW5kQ1ZWLCBmYWxzZSkgPT09IGZhbHNlKSB7XG4gICAgICAgIGVycm9yID0gJ21pc3NpbmcgY3JlZGl0IGNhcmQgQ1ZWIGZpZWxkIHJlcXVpcmVkIGZvciBwYXltZW50cydcbiAgICB9XG5cbiAgICBpZihwcm9jZXNzZWRFbGVtZW50cy5yZWR1Y2UoY29tbW9uLmZpbmRaaXAsIGZhbHNlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXJyb3IgPSAnbWlzc2luZyBiaWxsaW5nIHppcCBmaWVsZCByZXF1aXJlZCBmb3IgcGF5bWVudHMnXG4gICAgfVxuXG4gICAgaWYgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGBwYXktdGhlb3J5LWNyZWRpdC1jYXJkYCkpIHtcbiAgICAgICAgZXJyb3IgPSAnY3JlZGl0IGNhcmQgZWxlbWVudCBpcyBub3QgYWxsb3dlZCB3aGVuIHVzaW5nIGNyZWRpdCBjYXJkIG51bWJlcidcbiAgICB9XG4gICAgcmV0dXJuIGVycm9yXG59XG5cbmNvbnN0IGZpbmRDb21iaW5lZENhcmRFcnJvciA9IHByb2Nlc3NlZEVsZW1lbnRzID0+IHtcbiAgICBsZXQgZXJyb3IgPSBmYWxzZVxuICAgIGlmIChwcm9jZXNzZWRFbGVtZW50cy5yZWR1Y2UoY29tbW9uLmZpbmRFeHAsIGZhbHNlKSkge1xuICAgICAgICBlcnJvciA9ICdleHBpcmF0aW9uIGlzIG5vdCBhbGxvd2VkIHdoZW4gdXNpbmcgY29tYmluZWQgY3JlZGl0IGNhcmQnXG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3NlZEVsZW1lbnRzLnJlZHVjZShjb21tb24uZmluZENWViwgZmFsc2UpKSB7XG4gICAgICAgIGVycm9yID0gJ2N2diBpcyBub3QgYWxsb3dlZCB3aGVuIHVzaW5nIGNvbWJpbmVkIGNyZWRpdCBjYXJkJ1xuICAgIH1cblxuICAgIGlmKHByb2Nlc3NlZEVsZW1lbnRzLnJlZHVjZShjb21tb24uZmluZFppcCwgZmFsc2UpID09PSBmYWxzZSkge1xuICAgICAgICBlcnJvciA9ICdtaXNzaW5nIGJpbGxpbmcgemlwIGZpZWxkIHJlcXVpcmVkIGZvciBwYXltZW50cydcbiAgICB9XG5cbiAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYHBheS10aGVvcnktY3JlZGl0LWNhcmQtbnVtYmVyYCkpIHtcbiAgICAgICAgZXJyb3IgPSAnY3JlZGl0IGNhcmQgbnVtYmVyIGlzIG5vdCBhbGxvd2VkIHdoZW4gdXNpbmcgY29tYmluZWQgY3JlZGl0IGNhcmQnXG4gICAgfVxuICAgIHJldHVybiBlcnJvclxufVxuXG5jb25zdCBhY2hDaGVjayA9IFt7XG4gICAgY2hlY2s6IGNvbW1vbi5maW5kQWNjb3VudE5hbWUsXG4gICAgZXJyb3I6ICdtaXNzaW5nIEFDSCBhY2NvdW50IG5hbWUgZmllbGQgcmVxdWlyZWQgZm9yIHBheW1lbnRzJ1xufSwge1xuICAgIGNoZWNrOiBjb21tb24uZmluZEFjY291bnROdW1iZXIsXG4gICAgZXJyb3I6ICdtaXNzaW5nIEFDSCBhY2NvdW50IG51bWJlciBmaWVsZCByZXF1aXJlZCBmb3IgcGF5bWVudHMnXG59LCB7XG4gICAgY2hlY2s6IGNvbW1vbi5maW5kQWNjb3VudFR5cGUsXG4gICAgZXJyb3I6ICdtaXNzaW5nIEFDSCBhY2NvdW50IHR5cGUgZmllbGQgcmVxdWlyZWQgZm9yIHBheW1lbnRzJ1xufSwge1xuICAgIGNoZWNrOiBjb21tb24uZmluZEJhbmtDb2RlLFxuICAgIGVycm9yOiAnbWlzc2luZyBBQ0ggcm91dGluZyBudW1iZXIgZmllbGQgcmVxdWlyZWQgZm9yIHBheW1lbnRzJ1xufSwgXVxuXG5jb25zdCBmaW5kQWNoRXJyb3IgPSAocHJvY2Vzc2VkRWxlbWVudHMpID0+IHtcbiAgICBsZXQgZXJyb3IgPSBmYWxzZVxuICAgIGlmIChwcm9jZXNzZWRFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgcmV0dXJuIGVycm9yXG4gICAgfVxuXG4gICAgYWNoQ2hlY2suZm9yRWFjaChvYmogPT4ge1xuICAgICAgICBpZiAocHJvY2Vzc2VkRWxlbWVudHMucmVkdWNlKG9iai5jaGVjaywgZmFsc2UpID09PSBmYWxzZSkge1xuICAgICAgICAgICAgcmV0dXJuIG9iai5lcnJvclxuICAgICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBlcnJvclxufVxuXG5jb25zdCBmaW5kQ2FyZEVycm9yID0gKHByb2Nlc3NlZEVsZW1lbnRzLCB0cmFuc2FjdGluZykgPT4ge1xuICAgIGxldCBlcnJvciA9IGZhbHNlXG4gICAgaWYgKHByb2Nlc3NlZEVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICByZXR1cm4gZXJyb3JcbiAgICB9XG5cbiAgICBpZiAodHJhbnNhY3RpbmcgPT09IGZhbHNlKSB7XG4gICAgICAgIGVycm9yID0gJ21pc3NpbmcgY3JlZGl0IGNhcmQgZW50cnkgZmllbGQgcmVxdWlyZWQgZm9yIHBheW1lbnRzJ1xuICAgIH1cbiAgICBlbHNlIGlmICh0cmFuc2FjdGluZy5pZCA9PT0gJ3BheS10aGVvcnktY3JlZGl0LWNhcmQtbnVtYmVyLXRhZy1mcmFtZScpIHtcbiAgICAgICAgZXJyb3IgPSBmaW5kQ2FyZE51bWJlckVycm9yKHByb2Nlc3NlZEVsZW1lbnRzKVxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgZXJyb3IgPSBmaW5kQ29tYmluZWRDYXJkRXJyb3IocHJvY2Vzc2VkRWxlbWVudHMpXG4gICAgfVxuICAgIHJldHVybiBlcnJvclxufVxuXG5jb25zdCBmaW5kQ2FzaEVycm9yID0gKHByb2Nlc3NlZEVsZW1lbnRzKSA9PiB7XG4gICAgbGV0IGVycm9yID0gZmFsc2VcbiAgICBpZiAocHJvY2Vzc2VkRWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHJldHVybiBlcnJvclxuICAgIH1cblxuICAgIGlmIChwcm9jZXNzZWRFbGVtZW50cy5yZWR1Y2UoY29tbW9uLmZpbmRGaWVsZCgnY2FzaC1uYW1lJyksIGZhbHNlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXJyb3IgPSAnbWlzc2luZyBDYXNoIG5hbWUgZmllbGQgcmVxdWlyZWQgZm9yIHBheW1lbnRzJ1xuICAgIH1cblxuICAgIGlmIChwcm9jZXNzZWRFbGVtZW50cy5yZWR1Y2UoY29tbW9uLmZpbmRGaWVsZCgnY2FzaC1jb250YWN0JyksIGZhbHNlKSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZXJyb3IgPSAnbWlzc2luZyBDYXNoIENvbnRhY3QgaW5mbyBmaWVsZCByZXF1aXJlZCBmb3IgcGF5bWVudHMnXG4gICAgfVxuXG4gICAgcmV0dXJuIGVycm9yXG59XG5cbmNvbnN0IGlzVmFsaWRQYXlvckluZm8gPSAocGF5b3JJbmZvKSA9PiB7XG4gICAgaWYgKCF2YWxpZGF0ZShwYXlvckluZm8sICdvYmplY3QnKSkge1xuICAgICAgICBtZXNzYWdlLmhhbmRsZUVycm9yKCdJTlZBTElEX1BBUkFNOiBwYXlvcl9pbmZvIGlzIG5vdCBhbiBvYmplY3QnKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgaWYocGF5b3JJbmZvLnNhbWVfYXNfYmlsbGluZyA9PT0gdHJ1ZSkge1xuICAgICAgICBjb25zdCBhbGxvd2VkS2V5cyA9IFsnc2FtZV9hc19iaWxsaW5nJywgJ2VtYWlsJywgJ3Bob25lJ11cbiAgICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHBheW9ySW5mbylcbiAgICAgICAgZm9yIChsZXQga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgIGlmICghYWxsb3dlZEtleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgIG1lc3NhZ2UuaGFuZGxlRXJyb3IoYElOVkFMSURfUEFSQU06IGlmIHBheW9yX2luZm8gaXMgc2FtZV9hc19iaWxsaW5nLCBvbmx5IHRoZSBmb2xsb3dpbmcga2V5cyBhcmUgYWxsb3dlZDogJHthbGxvd2VkS2V5cy5qb2luKCcsICcpfWApXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgdmFsaWRUeXBlTWVzc2FnZSA9IGVsZW1lbnRzID0+IG1lc3NhZ2UgPT4ge1xuICAgIGlmICh0eXBlb2YgbWVzc2FnZS50eXBlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCB2YWxpZFR5cGUgPSBtZXNzYWdlLnR5cGUuc3BsaXQoJzonKVsxXVxuICAgICAgICBsZXQgdHlwZXMgPSBbXVxuICAgICAgICBlbGVtZW50cy5jYXJkLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC50eXBlID09PSAnY3JlZGl0LWNhcmQnKSB7XG4gICAgICAgICAgICAgICAgdHlwZXMgPSB0eXBlcy5jb25jYXQoY29tbW9uLmNvbWJpbmVkQ2FyZFR5cGVzKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChlbGVtZW50LnR5cGUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICAgIHR5cGVzID0gdHlwZXMuY29uY2F0KGVsZW1lbnRzLmFjaC5tYXAoZWxlbWVudCA9PiBlbGVtZW50LnR5cGUpKVxuICAgICAgICB0eXBlcyA9IHR5cGVzLmNvbmNhdChlbGVtZW50cy5jYXNoLm1hcChlbGVtZW50ID0+IGVsZW1lbnQudHlwZSkpXG4gICAgICAgIHJldHVybiBtZXNzYWdlLnR5cGUuZW5kc1dpdGgoJzp2YWxpZCcpICYmIHR5cGVzLmluY2x1ZGVzKGAke3ZhbGlkVHlwZX1gKVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2Vcbn1cblxuY29uc3QgaXN2YWxpZFRyYW5zYWN0UGFyYW1zID0gKGFtb3VudCwgcGF5b3JJbmZvLCBtZXRhZGF0YSkgPT4ge1xuICAgIC8vTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSB0aGUgYmFzZSByZXF1aXJlZCBzZXR0aW5nc1xuICAgIGlmICghdmFsaWRhdGUoYW1vdW50LCAnbnVtYmVyJykgfHwgIXZhbGlkYXRlKG1ldGFkYXRhLCAnb2JqZWN0JykgfHwgIXZhbGlkYXRlKHBheW9ySW5mbywgJ29iamVjdCcpKSB7XG4gICAgICAgIGNvbnN0IG1pc3NpbmcgPSBgJHshdmFsaWRhdGUoYW1vdW50LCAnbnVtYmVyJykgPyAnYW1vdW50ICcgOiAnJ30keyF2YWxpZGF0ZShtZXRhZGF0YSwgJ29iamVjdCcpID8gJ21ldGFkYXRhICcgOiAnJ30keyF2YWxpZGF0ZShwYXlvckluZm8sICdvYmplY3QnKSA/ICdwYXlvckluZm8gJyA6ICcnfWBcbiAgICAgICAgbWVzc2FnZS5oYW5kbGVFcnJvcignSU5WQUxJRF9QQVJBTTogU29tZSByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3Npbmcgb3IgaW52YWxpZDogJyArIG1pc3NpbmcpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5jb25zdCBpc1ZhbGlkVG9rZW5pemVQYXJhbXMgPSAocGF5b3JJbmZvLCBtZXRhZGF0YSkgPT4ge1xuICAgIC8vTWFrZSBzdXJlIHRoYXQgd2UgaGF2ZSB0aGUgYmFzZSByZXF1aXJlZCBzZXR0aW5nc1xuICAgIGlmICghdmFsaWRhdGUobWV0YWRhdGEsICdvYmplY3QnKSB8fCAhdmFsaWRhdGUocGF5b3JJbmZvLCAnb2JqZWN0JykpIHtcbiAgICAgICAgY29uc3QgbWlzc2luZyA9IGAkeyF2YWxpZGF0ZShtZXRhZGF0YSwgJ29iamVjdCcpID8gJ21ldGFkYXRhICcgOiAnJ30keyF2YWxpZGF0ZShwYXlvckluZm8sICdvYmplY3QnKSA/ICdwYXlvckluZm8gJyA6ICcnfWBcbiAgICAgICAgbWVzc2FnZS5oYW5kbGVFcnJvcignSU5WQUxJRF9QQVJBTTogU29tZSByZXF1aXJlZCBmaWVsZHMgYXJlIG1pc3Npbmcgb3IgaW52YWxpZDogJyArIG1pc3NpbmcpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5jb25zdCBpc1ZhbGlkQW1vdW50ID0gKGFtb3VudCkgPT4ge1xuICAgIGlmICghdmFsaWRhdGUoYW1vdW50LCAnbnVtYmVyJykpIHtcbiAgICAgICAgbWVzc2FnZS5oYW5kbGVFcnJvcignSU5WQUxJRF9QQVJBTTogYW1vdW50IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ2VyJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IGlzVmFsaWRQYXlvckRldGFpbHMgPSAocGF5b3JJbmZvLCBwYXlvcklkKSA9PiB7XG4gICAgbGV0IGtleXMgID0gT2JqZWN0LmtleXMocGF5b3JJbmZvKVxuICAgIC8vIFZlcmlmeSBib3RoIGlkIGFuZCBpbmZvIGFyZW4ndCBwYXNzZWQgaW5cbiAgICBpZiAocGF5b3JJZCAmJiBrZXlzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgbWVzc2FnZS5oYW5kbGVFcnJvcignSU5WQUxJRF9QQVJBTTogVW5hYmxlIHRvIHByb2Nlc3Mgd2hlbiBib3RoIHBheW9ySWQgYW5kIHBheW9ySW5mbyBhcmUgcHJvdmlkZWQnKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9IGVsc2UgaWYocGF5b3JJZCAmJiAhdmFsaWRhdGUocGF5b3JJZCwgJ3N0cmluZycpKSB7IC8vIFZlcmlmeSBwYXlvcklkIGlzIGEgc3RyaW5nIGlmIHByZXNlbnRcbiAgICAgICAgbWVzc2FnZS5oYW5kbGVFcnJvcignSU5WQUxJRF9QQVJBTTogcGF5b3JJZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IGlzVmFsaWRJbnZvaWNlQW5kUmVjdXJyaW5nSWQgPSBwYXlUaGVvcnlJbmZvID0+IHtcbiAgICBjb25zdCB7IGludm9pY2VJZCwgcmVjdXJyaW5nSWQgfSA9IHBheVRoZW9yeUluZm9cbiAgICBpZiAoaW52b2ljZUlkICYmICF2YWxpZGF0ZShpbnZvaWNlSWQsICdzdHJpbmcnKSkge1xuICAgICAgICBtZXNzYWdlLmhhbmRsZUVycm9yKCdJTlZBTElEX1BBUkFNOiBpbnZvaWNlSWQgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAocmVjdXJyaW5nSWQgJiYgIXZhbGlkYXRlKHJlY3VycmluZ0lkLCAnc3RyaW5nJykpIHtcbiAgICAgICAgbWVzc2FnZS5oYW5kbGVFcnJvcignSU5WQUxJRF9QQVJBTTogcmVjdXJyaW5nSWQgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICBpZiAoaW52b2ljZUlkICYmIHJlY3VycmluZ0lkKSB7XG4gICAgICAgIG1lc3NhZ2UuaGFuZGxlRXJyb3IoJ0lOVkFMSURfUEFSQU06IGludm9pY2VJZCBhbmQgcmVjdXJyaW5nSWQgY2Fubm90IGJvdGggYmUgcHJlc2VudCcpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5jb25zdCBpc1ZhbGlkRmVlTW9kZSA9IChmZWVNb2RlKSA9PiB7XG4gICAgaWYgKCFbY29tbW9uLklOVEVSQ0hBTkdFLCBjb21tb24uU0VSVklDRV9GRUVdLmluY2x1ZGVzKGZlZU1vZGUpKSB7XG4gICAgICAgIG1lc3NhZ2UuaGFuZGxlRXJyb3IoJ0lOVkFMSURfUEFSQU06IGZlZU1vZGUgbXVzdCBiZSBlaXRoZXIgSU5URVJDSEFOR0Ugb3IgU0VSVklDRV9GRUUnKVxuICAgICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gICAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgaXNWYWxpZEZlZUFtb3VudCA9IChmZWUpID0+IHtcbiAgICBpZiAoKGZlZSB8fCB0eXBlb2YgZmVlID09PSAnbnVtYmVyJykgJiYgIXZhbGlkYXRlKGZlZSwgJ251bWJlcicpKSB7XG4gICAgICAgIG1lc3NhZ2UuaGFuZGxlRXJyb3IoJ0lOVkFMSURfUEFSQU06IGZlZSBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlcicpXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm4gdHJ1ZVxufVxuXG5leHBvcnQge1xuICAgIGNoZWNrQ3JlYXRlUGFyYW1zLFxuICAgIGhhc1ZhbGlkQ2FyZCxcbiAgICBoYXNWYWxpZEFjY291bnQsXG4gICAgaGFzVmFsaWRDYXNoLFxuICAgIGZpbmRDYXJkTnVtYmVyRXJyb3IsXG4gICAgZmluZENvbWJpbmVkQ2FyZEVycm9yLFxuICAgIGZpbmRBY2hFcnJvcixcbiAgICBmaW5kQ2FyZEVycm9yLFxuICAgIGZpbmRDYXNoRXJyb3IsXG4gICAgdmFsaWRUeXBlTWVzc2FnZSxcbiAgICB2YWxpZGF0ZSxcbiAgICBpc1ZhbGlkQW1vdW50LFxuICAgIGlzdmFsaWRUcmFuc2FjdFBhcmFtcyxcbiAgICBpc1ZhbGlkVG9rZW5pemVQYXJhbXMsXG4gICAgaXNWYWxpZFBheW9ySW5mbyxcbiAgICBpc1ZhbGlkUGF5b3JEZXRhaWxzLFxuICAgIGlzVmFsaWRGZWVNb2RlLFxuICAgIGlzVmFsaWRJbnZvaWNlQW5kUmVjdXJyaW5nSWQsXG4gICAgaXNWYWxpZEZlZUFtb3VudFxufVxuIiwiLyogZ2xvYmFsIEJsb2IgZ2xvYmFsVGhpcyBnbG9iYWwgKi9cbi8qZXNsaW50IG5vLWV4dGVuZC1uYXRpdmU6IFtcImVycm9yXCIsIHsgXCJleGNlcHRpb25zXCI6IFtcIlN0cmluZ1wiLCBcIkFycmF5XCJdIH1dKi9cbi8vaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4vZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvU3RyaW5nL2VuZHNXaXRoXG5jb25zdCBlbmRzSVdpdGhJc1ZhbGlkID0gKHN1YmplY3RTdHJpbmcsIHBvc2l0aW9uKSA9PiB0eXBlb2YgcG9zaXRpb24gIT09ICdudW1iZXInIHx8ICFpc0Zpbml0ZShwb3NpdGlvbikgfHwgTWF0aC5mbG9vcihwb3NpdGlvbikgIT09IHBvc2l0aW9uIHx8IHBvc2l0aW9uID4gc3ViamVjdFN0cmluZy5sZW5ndGhcbmNvbnN0IGVuZHNXaXRoUmVzdWx0ID0gKGxhc3RJbmRleCwgcG9zaXRpb24pID0+IGxhc3RJbmRleCAhPT0gLTEgJiYgbGFzdEluZGV4ID09PSBwb3NpdGlvblxuaWYgKCFTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoKSB7XG4gICAgU3RyaW5nLnByb3RvdHlwZS5lbmRzV2l0aCA9IGZ1bmN0aW9uIChzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKSB7XG4gICAgICAgIHZhciBzdWJqZWN0U3RyaW5nID0gdGhpcy50b1N0cmluZygpO1xuICAgICAgICBpZiAoZW5kc0lXaXRoSXNWYWxpZChzdWJqZWN0U3RyaW5nLCBwb3NpdGlvbikpIHtcbiAgICAgICAgICAgIHBvc2l0aW9uID0gc3ViamVjdFN0cmluZy5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgICAgcG9zaXRpb24gLT0gc2VhcmNoU3RyaW5nLmxlbmd0aDtcbiAgICAgICAgdmFyIGxhc3RJbmRleCA9IHN1YmplY3RTdHJpbmcuaW5kZXhPZihzZWFyY2hTdHJpbmcsIHBvc2l0aW9uKTtcbiAgICAgICAgcmV0dXJuIGVuZHNXaXRoUmVzdWx0KGxhc3RJbmRleCwgcG9zaXRpb24pXG4gICAgfTtcbn1cblxudmFyIGdsb2JhbCA9XG4gICAgKHR5cGVvZiBnbG9iYWxUaGlzICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWxUaGlzKSB8fFxuICAgICh0eXBlb2Ygd2luZG93LnNlbGYgIT09ICd1bmRlZmluZWQnICYmIHdpbmRvdy5zZWxmKSB8fFxuICAgICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJyAmJiBnbG9iYWwpXG5cbmNvbnN0IGNhbkJsb2IgPSAoKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIG5ldyBCbG9iKClcbiAgICB9XG4gICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxufVxuXG52YXIgc3VwcG9ydCA9IHtcbiAgICBzZWFyY2hQYXJhbXM6ICdVUkxTZWFyY2hQYXJhbXMnIGluIGdsb2JhbCxcbiAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gZ2xvYmFsICYmICdpdGVyYXRvcicgaW4gU3ltYm9sLFxuICAgIGJsb2I6ICdGaWxlUmVhZGVyJyBpbiBnbG9iYWwgJiZcbiAgICAgICAgJ0Jsb2InIGluIGdsb2JhbCAmJlxuICAgICAgICBjYW5CbG9iKCksXG4gICAgZm9ybURhdGE6ICdGb3JtRGF0YScgaW4gZ2xvYmFsLFxuICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIGdsb2JhbFxufVxuXG5mdW5jdGlvbiBpc0RhdGFWaWV3KG9iaikge1xuICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxufVxuXG5pZiAoc3VwcG9ydC5hcnJheUJ1ZmZlcikge1xuICAgIHZhciB2aWV3Q2xhc3NlcyA9IFtcbiAgICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAgICdbb2JqZWN0IFVpbnQ4QXJyYXldJyxcbiAgICAgICAgJ1tvYmplY3QgVWludDhDbGFtcGVkQXJyYXldJyxcbiAgICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgICAnW29iamVjdCBVaW50MTZBcnJheV0nLFxuICAgICAgICAnW29iamVjdCBJbnQzMkFycmF5XScsXG4gICAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAgICdbb2JqZWN0IEZsb2F0MzJBcnJheV0nLFxuICAgICAgICAnW29iamVjdCBGbG9hdDY0QXJyYXldJ1xuICAgIF1cblxuICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9XG4gICAgICAgIEFycmF5QnVmZmVyLmlzVmlldyB8fFxuICAgICAgICBmdW5jdGlvbiAob2JqKSB7XG4gICAgICAgICAgICByZXR1cm4gb2JqICYmIHZpZXdDbGFzc2VzLmluZGV4T2YoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iaikpID4gLTFcbiAgICAgICAgfVxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVOYW1lKG5hbWUpIHtcbiAgICBpZiAodHlwZW9mIG5hbWUgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgICB9XG4gICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXl9gfH4hXS9pLnRlc3QobmFtZSkgfHwgbmFtZSA9PT0gJycpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBjaGFyYWN0ZXIgaW4gaGVhZGVyIGZpZWxkIG5hbWU6IFwiJyArIG5hbWUgKyAnXCInKVxuICAgIH1cbiAgICByZXR1cm4gbmFtZS50b0xvd2VyQ2FzZSgpXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgdmFsdWUgPSBTdHJpbmcodmFsdWUpXG4gICAgfVxuICAgIHJldHVybiB2YWx1ZVxufVxuXG4vLyBCdWlsZCBhIGRlc3RydWN0aXZlIGl0ZXJhdG9yIGZvciB0aGUgdmFsdWUgbGlzdFxuZnVuY3Rpb24gaXRlcmF0b3JGb3IoaXRlbXMpIHtcbiAgICB2YXIgaXRlcmF0b3IgPSB7XG4gICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcblxuICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogdHlwZW9mIHZhbHVlID09PSAndW5kZWZpbmVkJywgdmFsdWUgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgICAgaXRlcmF0b3JbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJldHVybiBpdGVyYXRvclxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIGl0ZXJhdG9yXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICB0aGlzLm1hcCA9IHt9XG5cbiAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgdGhpcy5hcHBlbmQobmFtZSwgdmFsdWUpXG4gICAgICAgIH0sIHRoaXMpXG4gICAgfVxuICAgIGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgICAgaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uIChoZWFkZXIpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKGhlYWRlclswXSwgaGVhZGVyWzFdKVxuICAgICAgICB9LCB0aGlzKVxuICAgIH1cbiAgICBlbHNlIGlmIChoZWFkZXJzKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kKG5hbWUsIGhlYWRlcnNbbmFtZV0pXG4gICAgICAgIH0sIHRoaXMpXG4gICAgfVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICBuYW1lID0gbm9ybWFsaXplTmFtZShuYW1lKVxuICAgIHZhbHVlID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gICAgdmFyIG9sZFZhbHVlID0gdGhpcy5tYXBbbmFtZV1cbiAgICB0aGlzLm1hcFtuYW1lXSA9IG9sZFZhbHVlID8gb2xkVmFsdWUgKyAnLCAnICsgdmFsdWUgOiB2YWx1ZVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZVsnZGVsZXRlJ10gPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS5nZXQgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmhhcyA9IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLnNldCA9IGZ1bmN0aW9uIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmZvckVhY2ggPSBmdW5jdGlvbiAoY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICAgIGlmICh0aGlzLm1hcC5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xuICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICAgICAgfVxuICAgIH1cbn1cblxuSGVhZGVycy5wcm90b3R5cGUua2V5cyA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgaXRlbXMgPSBbXVxuICAgIHRoaXMuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUsIG5hbWUpIHtcbiAgICAgICAgaXRlbXMucHVzaChuYW1lKVxuICAgIH0pXG4gICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxufVxuXG5IZWFkZXJzLnByb3RvdHlwZS52YWx1ZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgICAgIGl0ZW1zLnB1c2godmFsdWUpXG4gICAgfSlcbiAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG59XG5cbkhlYWRlcnMucHJvdG90eXBlLmVudHJpZXMgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIGl0ZW1zID0gW11cbiAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24gKHZhbHVlLCBuYW1lKSB7XG4gICAgICAgIGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSlcbiAgICB9KVxuICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbn1cblxuaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICBIZWFkZXJzLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gSGVhZGVycy5wcm90b3R5cGUuZW50cmllc1xufVxuXG5mdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoJ0FscmVhZHkgcmVhZCcpKVxuICAgIH1cbiAgICBib2R5LmJvZHlVc2VkID0gdHJ1ZVxufVxuXG5mdW5jdGlvbiBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcmVhZGVyLm9ubG9hZCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICAgICAgfVxuICAgICAgICByZWFkZXIub25lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgICAgIH1cbiAgICB9KVxufVxuXG5mdW5jdGlvbiByZWFkQmxvYkFzQXJyYXlCdWZmZXIoYmxvYikge1xuICAgIHZhciByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpXG4gICAgdmFyIHByb21pc2UgPSBmaWxlUmVhZGVyUmVhZHkocmVhZGVyKVxuICAgIHJlYWRlci5yZWFkQXNBcnJheUJ1ZmZlcihibG9iKVxuICAgIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICAgIHJldHVybiBwcm9taXNlXG59XG5cbmZ1bmN0aW9uIHJlYWRBcnJheUJ1ZmZlckFzVGV4dChidWYpIHtcbiAgICB2YXIgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZilcbiAgICB2YXIgY2hhcnMgPSBuZXcgQXJyYXkodmlldy5sZW5ndGgpXG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZpZXcubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2hhcnNbaV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHZpZXdbaV0pXG4gICAgfVxuICAgIHJldHVybiBjaGFycy5qb2luKCcnKVxufVxuXG5mdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICAgIHJldHVybiBidWYuc2xpY2UoMClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgICAgIHZpZXcuc2V0KG5ldyBVaW50OEFycmF5KGJ1ZikpXG4gICAgICAgIHJldHVybiB2aWV3LmJ1ZmZlclxuICAgIH1cbn1cblxuXG5jb25zdCBidWlsZEJvZHlCbG9iID0gKGJhc2UsIGJvZHkpID0+IHtcbiAgICBpZiAoc3VwcG9ydC5ibG9iICYmIEJsb2IucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgYmFzZS5fYm9keUJsb2IgPSBib2R5XG4gICAgfVxufVxuXG5jb25zdCBidWlsZEJvZHlGb3JtRGF0YSA9IChiYXNlLCBib2R5KSA9PiB7XG4gICAgaWYgKHN1cHBvcnQuZm9ybURhdGEgJiYgRm9ybURhdGEucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgYmFzZS5fYm9keUZvcm1EYXRhID0gYm9keVxuICAgIH1cbn1cblxuY29uc3QgYnVpbGRCb2R5QXJyYXlCdWZmZXIgPSAoYmFzZSwgYm9keSkgPT4ge1xuICAgIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIHN1cHBvcnQuYmxvYiAmJiBpc0RhdGFWaWV3KGJvZHkpKSB7XG4gICAgICAgIHRoaXMuX2JvZHlBcnJheUJ1ZmZlciA9IGJ1ZmZlckNsb25lKGJvZHkuYnVmZmVyKVxuICAgICAgICAvLyBJRSAxMC0xMSBjYW4ndCBoYW5kbGUgYSBEYXRhVmlldyBib2R5LlxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IG5ldyBCbG9iKFt0aGlzLl9ib2R5QXJyYXlCdWZmZXJdKVxuICAgIH1cbiAgICBlbHNlIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyICYmIChBcnJheUJ1ZmZlci5wcm90b3R5cGUuaXNQcm90b3R5cGVPZihib2R5KSB8fCBpc0FycmF5QnVmZmVyVmlldyhib2R5KSkpIHtcbiAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keSlcbiAgICB9XG59XG5cblxuY29uc3QgYnVpbGRCb2R5ID0gKGJhc2UsIGJvZHkpID0+IHtcbiAgICBidWlsZEJvZHlCbG9iKGJhc2UsIGJvZHkpXG4gICAgYnVpbGRCb2R5Rm9ybURhdGEoYmFzZSwgYm9keSlcbiAgICBidWlsZEJvZHlBcnJheUJ1ZmZlcihiYXNlLCBib2R5KVxuXG4gICAgaWYgKCFib2R5KSB7XG4gICAgICAgIGJhc2UuX2JvZHlUZXh0ID0gJydcbiAgICB9XG4gICAgZWxzZSBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGJhc2UuX2JvZHlUZXh0ID0gYm9keVxuICAgIH1cbiAgICBlbHNlIGlmIChzdXBwb3J0LnNlYXJjaFBhcmFtcyAmJiBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmlzUHJvdG90eXBlT2YoYm9keSkpIHtcbiAgICAgICAgYmFzZS5fYm9keVRleHQgPSBib2R5LnRvU3RyaW5nKClcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIGJhc2UuX2JvZHlUZXh0ID0gYm9keSA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChib2R5KVxuICAgIH1cbn1cblxuXG5jb25zdCBidWlsZEhlYWRlcnMgPSAoYmFzZSwgYm9keSkgPT4ge1xuICAgIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgYmFzZS5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgfVxuICAgIGVsc2UgaWYgKGJhc2UuX2JvZHlCbG9iICYmIGJhc2UuX2JvZHlCbG9iLnR5cGUpIHtcbiAgICAgICAgYmFzZS5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgYmFzZS5fYm9keUJsb2IudHlwZSlcbiAgICB9XG4gICAgZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgIGJhc2UuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpXG4gICAgfVxufVxuXG5cblxuZnVuY3Rpb24gQm9keSgpIHtcbiAgICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24gKGJvZHkpIHtcbiAgICAgICAgLypcbiAgICAgICAgICBmZXRjaC1tb2NrIHdyYXBzIHRoZSBSZXNwb25zZSBvYmplY3QgaW4gYW4gRVM2IFByb3h5IHRvXG4gICAgICAgICAgcHJvdmlkZSB1c2VmdWwgdGVzdCBoYXJuZXNzIGZlYXR1cmVzIHN1Y2ggYXMgZmx1c2guIEhvd2V2ZXIsIG9uXG4gICAgICAgICAgRVM1IGJyb3dzZXJzIHdpdGhvdXQgZmV0Y2ggb3IgUHJveHkgc3VwcG9ydCBwb2xseWZpbGxzIG11c3QgYmUgdXNlZDtcbiAgICAgICAgICB0aGUgcHJveHktcG9sbHlmaWxsIGlzIHVuYWJsZSB0byBwcm94eSBhbiBhdHRyaWJ1dGUgdW5sZXNzIGl0IGV4aXN0c1xuICAgICAgICAgIG9uIHRoZSBvYmplY3QgYmVmb3JlIHRoZSBQcm94eSBpcyBjcmVhdGVkLiBUaGlzIGNoYW5nZSBlbnN1cmVzXG4gICAgICAgICAgUmVzcG9uc2UuYm9keVVzZWQgZXhpc3RzIG9uIHRoZSBpbnN0YW5jZSwgd2hpbGUgbWFpbnRhaW5pbmcgdGhlXG4gICAgICAgICAgc2VtYW50aWMgb2Ygc2V0dGluZyBSZXF1ZXN0LmJvZHlVc2VkIGluIHRoZSBjb25zdHJ1Y3RvciBiZWZvcmVcbiAgICAgICAgICBfaW5pdEJvZHkgaXMgY2FsbGVkLlxuICAgICAgICAqL1xuICAgICAgICB0aGlzLmJvZHlVc2VkID0gdGhpcy5ib2R5VXNlZFxuICAgICAgICB0aGlzLl9ib2R5SW5pdCA9IGJvZHlcbiAgICAgICAgYnVpbGRCb2R5KHRoaXMsIGJvZHkpXG5cbiAgICAgICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgICAgYnVpbGRIZWFkZXJzKHRoaXMsIGJvZHkpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5ibG9iKSB7XG4gICAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciByZWplY3RlZCA9IGNvbnN1bWVkKHRoaXMpXG4gICAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMuX2JvZHlCbG9iKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QmxvYilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keVRleHRdKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuYXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgdmFyIGlzQ29uc3VtZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgICAgIGlmIChpc0NvbnN1bWVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBpc0NvbnN1bWVkXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodGhpcy5fYm9keUFycmF5QnVmZmVyKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyLmJ1ZmZlci5zbGljZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIuYnl0ZU9mZnNldCArIHRoaXMuX2JvZHlBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUFycmF5QnVmZmVyKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmJsb2IoKS50aGVuKHJlYWRCbG9iQXNBcnJheUJ1ZmZlcilcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMudGV4dCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHJlamVjdGVkID0gY29uc3VtZWQodGhpcylcbiAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMuX2JvZHlBcnJheUJ1ZmZlcikge1xuICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLl9ib2R5Rm9ybURhdGEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoc3VwcG9ydC5mb3JtRGF0YSkge1xuICAgICAgICB0aGlzLmZvcm1EYXRhID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5qc29uID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gdGhpcy50ZXh0KCkudGhlbihKU09OLnBhcnNlKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG59XG5cbi8vIEhUVFAgbWV0aG9kcyB3aG9zZSBjYXBpdGFsaXphdGlvbiBzaG91bGQgYmUgbm9ybWFsaXplZFxudmFyIG1ldGhvZHMgPSBbJ0RFTEVURScsICdHRVQnLCAnSEVBRCcsICdPUFRJT05TJywgJ1BPU1QnLCAnUFVUJ11cblxuZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICByZXR1cm4gbWV0aG9kcy5pbmRleE9mKHVwY2FzZWQpID4gLTEgPyB1cGNhc2VkIDogbWV0aG9kXG59XG5cbmNvbnN0IGJ1aWxkUmVxdWVzdEhlYWRlcnMgPSAob3B0aW9ucywgaW5wdXQpID0+IHtcbiAgICBpZiAoIW9wdGlvbnMuaGVhZGVycykge1xuICAgICAgICByZXR1cm4gbmV3IEhlYWRlcnMoaW5wdXQuaGVhZGVycylcbiAgICB9XG4gICAgcmV0dXJuXG59XG5cbmNvbnN0IGhhbmRsZUlucHV0UmVxdWVzdCA9IChiYXNlLCBvcHRpb25zLCBpbnB1dCkgPT4ge1xuICAgIGlmIChpbnB1dC5ib2R5VXNlZCkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKVxuICAgIH1cbiAgICBiYXNlLnVybCA9IGlucHV0LnVybFxuICAgIGJhc2UuY3JlZGVudGlhbHMgPSBpbnB1dC5jcmVkZW50aWFsc1xuICAgIGJhc2UuaGVhZGVycyA9IGJ1aWxkUmVxdWVzdEhlYWRlcnMoYmFzZSwgb3B0aW9ucywgaW5wdXQpXG4gICAgYmFzZS5tZXRob2QgPSBpbnB1dC5tZXRob2RcbiAgICBiYXNlLm1vZGUgPSBpbnB1dC5tb2RlXG4gICAgYmFzZS5zaWduYWwgPSBpbnB1dC5zaWduYWxcbiAgICBpZiAoIWJvZHkgJiYgaW5wdXQuX2JvZHlJbml0ICE9IG51bGwpIHtcbiAgICAgICAgYm9keSA9IGlucHV0Ll9ib2R5SW5pdFxuICAgICAgICBpbnB1dC5ib2R5VXNlZCA9IHRydWVcbiAgICB9XG59XG5cbmNvbnN0IGlzSW5wdXRSZXF1ZXN0ID0gKGJhc2UsIG9wdGlvbnMsIGlucHV0KSA9PiB7XG4gICAgaWYgKGlucHV0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICBoYW5kbGVJbnB1dFJlcXVlc3QoYmFzZSwgb3B0aW9ucywgaW5wdXQpXG4gICAgfVxuICAgIGVsc2Uge1xuICAgICAgICBiYXNlLnVybCA9IFN0cmluZyhpbnB1dClcbiAgICB9XG59XG5cbmNvbnN0IGJ1aWxkUmVxdWVzdENyZWRlbnRpYWxzID0gKGJhc2UsIG9wdGlvbnMpID0+IG9wdGlvbnMuY3JlZGVudGlhbHMgfHwgYmFzZS5jcmVkZW50aWFscyB8fCAnc2FtZS1vcmlnaW4nXG5cbmNvbnN0IGJ1aWxkUmVxdWVzdE1ldGhvZCA9IChiYXNlLCBvcHRpb25zKSA9PiBub3JtYWxpemVNZXRob2Qob3B0aW9ucy5tZXRob2QgfHwgYmFzZS5tZXRob2QgfHwgJ0dFVCcpXG5cbmNvbnN0IGJ1aWxkUmVxdWVzdE1vZGUgPSAoYmFzZSwgb3B0aW9ucykgPT4gb3B0aW9ucy5tb2RlIHx8IGJhc2UubW9kZSB8fCBudWxsXG5cbmNvbnN0IGJ1aWxkUmVxdWVzdFNpZ25hbCA9IChiYXNlLCBvcHRpb25zKSA9PiBvcHRpb25zLnNpZ25hbCB8fCBiYXNlLnNpZ25hbFxuXG5jb25zdCBjaGVja0ZvcklsbGVnYWxCb2R5ID0gKGJhc2UsIGJvZHkpID0+IHtcbiAgICBpZiAoKGJhc2UubWV0aG9kID09PSAnR0VUJyB8fCBiYXNlLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0JvZHkgbm90IGFsbG93ZWQgZm9yIEdFVCBvciBIRUFEIHJlcXVlc3RzJylcbiAgICB9XG59XG5cbmNvbnN0IGJ1aWxkQm9keWxlc3NPcHRpb25zVXJsID0gKGJhc2UpID0+IHtcbiAgICBsZXQgcmVQYXJhbVNlYXJjaCA9IC8oWz8mXSlfPVteJl0qL1xuICAgIGxldCByZVF1ZXJ5U3RyaW5nID0gL1xcPy9cbiAgICByZXR1cm4gcmVQYXJhbVNlYXJjaC50ZXN0KGJhc2UudXJsKSA/XG4gICAgICAgIGJhc2UudXJsLnJlcGxhY2UocmVQYXJhbVNlYXJjaCwgJyQxXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpIDpcbiAgICAgICAgYCR7YmFzZS51cmx9JHsocmVRdWVyeVN0cmluZy50ZXN0KGJhc2UudXJsKSA/ICcmJyA6ICc/JykgKyAnXz0nICsgbmV3IERhdGUoKS5nZXRUaW1lKCl9YFxufVxuXG5jb25zdCBwcm9jZXNzQm9keWxlc3NPcHRpb25zID0gKGJhc2UsIG9wdGlvbnMpID0+IHtcbiAgICBpZiAob3B0aW9ucy5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBvcHRpb25zLmNhY2hlID09PSAnbm8tY2FjaGUnKSB7XG4gICAgICAgIGJhc2UudXJsID0gYnVpbGRCb2R5bGVzc09wdGlvbnNVcmwoYmFzZSlcbiAgICB9XG59XG5cbmNvbnN0IGhhbmRsZUJvZHlsZXNzID0gKGJhc2UpID0+IHtcbiAgICBpZiAoYmFzZS5tZXRob2QgPT09ICdHRVQnIHx8IGJhc2UubWV0aG9kID09PSAnSEVBRCcpIHtcbiAgICAgICAgcHJvY2Vzc0JvZHlsZXNzT3B0aW9ucyhiYXNlLCBvcHRpb25zKVxuICAgIH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICBpZiAoISh0aGlzIGluc3RhbmNlb2YgUmVxdWVzdCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9XG4gICAgdmFyIGJvZHkgPSBvcHRpb25zLmJvZHlcblxuICAgIGlzSW5wdXRSZXF1ZXN0KHRoaXMsIG9wdGlvbnMsIGlucHV0KVxuXG4gICAgdGhpcy5jcmVkZW50aWFscyA9IGJ1aWxkUmVxdWVzdENyZWRlbnRpYWxzKHRoaXMsIG9wdGlvbnMpXG4gICAgdGhpcy5oZWFkZXJzID0gYnVpbGRSZXF1ZXN0SGVhZGVycyhvcHRpb25zLCBpbnB1dClcbiAgICB0aGlzLm1ldGhvZCA9IGJ1aWxkUmVxdWVzdE1ldGhvZCh0aGlzLCBvcHRpb25zKVxuICAgIHRoaXMubW9kZSA9IGJ1aWxkUmVxdWVzdE1vZGUodGhpcywgb3B0aW9ucylcbiAgICB0aGlzLnNpZ25hbCA9IGJ1aWxkUmVxdWVzdFNpZ25hbCh0aGlzLCBvcHRpb25zKVxuICAgIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgICBjaGVja0ZvcklsbGVnYWxCb2R5KHRoaXMsIGJvZHkpXG5cbiAgICB0aGlzLl9pbml0Qm9keShib2R5KVxuXG4gICAgaGFuZGxlQm9keWxlc3ModGhpcylcbn1cblxuUmVxdWVzdC5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBSZXF1ZXN0KHRoaXMsIHsgYm9keTogdGhpcy5fYm9keUluaXQgfSlcbn1cblxuZnVuY3Rpb24gZGVjb2RlKGJvZHkpIHtcbiAgICB2YXIgZm9ybSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgYm9keVxuICAgICAgICAudHJpbSgpXG4gICAgICAgIC5zcGxpdCgnJicpXG4gICAgICAgIC5mb3JFYWNoKGZ1bmN0aW9uIChieXRlcykge1xuICAgICAgICAgICAgaWYgKGJ5dGVzKSB7XG4gICAgICAgICAgICAgICAgdmFyIHNwbGl0ID0gYnl0ZXMuc3BsaXQoJz0nKVxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICAgICAgICAgIHZhciB2YWx1ZSA9IHNwbGl0LmpvaW4oJz0nKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICAgICAgICAgIGZvcm0uYXBwZW5kKGRlY29kZVVSSUNvbXBvbmVudChuYW1lKSwgZGVjb2RlVVJJQ29tcG9uZW50KHZhbHVlKSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICByZXR1cm4gZm9ybVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMocmF3SGVhZGVycykge1xuICAgIHZhciBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuICAgIC8vIFJlcGxhY2UgaW5zdGFuY2VzIG9mIFxcclxcbiBhbmQgXFxuIGZvbGxvd2VkIGJ5IGF0IGxlYXN0IG9uZSBzcGFjZSBvciBob3Jpem9udGFsIHRhYiB3aXRoIGEgc3BhY2VcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMlxuICAgIHZhciBwcmVQcm9jZXNzZWRIZWFkZXJzID0gcmF3SGVhZGVycy5yZXBsYWNlKC9cXHI/XFxuW1xcdCBdKy9nLCAnICcpXG4gICAgLy8gQXZvaWRpbmcgc3BsaXQgdmlhIHJlZ2V4IHRvIHdvcmsgYXJvdW5kIGEgY29tbW9uIElFMTEgYnVnIHdpdGggdGhlIGNvcmUtanMgMy42LjAgcmVnZXggcG9seWZpbGxcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZ2l0aHViL2ZldGNoL2lzc3Vlcy83NDhcbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNzUxXG4gICAgcHJlUHJvY2Vzc2VkSGVhZGVyc1xuICAgICAgICAuc3BsaXQoJ1xccicpXG4gICAgICAgIC5tYXAoZnVuY3Rpb24gKGhlYWRlcikge1xuICAgICAgICAgICAgcmV0dXJuIGhlYWRlci5pbmRleE9mKCdcXG4nKSA9PT0gMCA/IGhlYWRlci5zdWJzdHIoMSwgaGVhZGVyLmxlbmd0aCkgOiBoZWFkZXJcbiAgICAgICAgfSlcbiAgICAgICAgLmZvckVhY2goZnVuY3Rpb24gKGxpbmUpIHtcbiAgICAgICAgICAgIHZhciBwYXJ0cyA9IGxpbmUuc3BsaXQoJzonKVxuICAgICAgICAgICAgdmFyIGtleSA9IHBhcnRzLnNoaWZ0KCkudHJpbSgpXG4gICAgICAgICAgICBpZiAoa2V5KSB7XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICAgICAgICAgIGhlYWRlcnMuYXBwZW5kKGtleSwgdmFsdWUpXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgcmV0dXJuIGhlYWRlcnNcbn1cblxuQm9keS5jYWxsKFJlcXVlc3QucHJvdG90eXBlKVxuXG5jb25zdCBmaW5kT3B0aW9uU3RhdHVzID0gKG9wdGlvbnMpID0+IHR5cGVvZiBvcHRpb25zLnN0YXR1cyA9PT0gJ3VuZGVmaW5lZCcgPyAyMDAgOiBvcHRpb25zLnN0YXR1c1xuY29uc3QgZmluZE9wdGlvblN0YXR1c1RleHQgPSAob3B0aW9ucykgPT4gdHlwZW9mIG9wdGlvbnMuc3RhdHVzVGV4dCA9PT0gJ3VuZGVmaW5lZCcgPyAnJyA6ICcnICsgb3B0aW9ucy5zdGF0dXNUZXh0XG5jb25zdCBmaW5kT3B0aW9uT2sgPSAoYmFzZSkgPT4gYmFzZS5zdGF0dXMgPj0gMjAwICYmIGJhc2Uuc3RhdHVzIDwgMzAwXG5jb25zdCBmaW5kT3B0aW9uVXJsID0gKG9wdGlvbnMpID0+IG9wdGlvbnMudXJsIHx8ICcnXG5leHBvcnQgZnVuY3Rpb24gUmVzcG9uc2UoYm9keUluaXQsIG9wdGlvbnMgPSB7fSkge1xuICAgIGlmICh0aGlzIGluc3RhbmNlb2YgUmVzcG9uc2UpIHtcbiAgICAgICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gICAgICAgIHRoaXMuc3RhdHVzID0gZmluZE9wdGlvblN0YXR1cyhvcHRpb25zKVxuICAgICAgICB0aGlzLm9rID0gZmluZE9wdGlvbk9rKHRoaXMpXG4gICAgICAgIHRoaXMuc3RhdHVzVGV4dCA9IGZpbmRPcHRpb25TdGF0dXNUZXh0KG9wdGlvbnMpXG4gICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylcbiAgICAgICAgdGhpcy51cmwgPSBmaW5kT3B0aW9uVXJsKG9wdGlvbnMpXG4gICAgICAgIHRoaXMuX2luaXRCb2R5KGJvZHlJbml0KVxuICAgICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUGxlYXNlIHVzZSB0aGUgXCJuZXdcIiBvcGVyYXRvciwgdGhpcyBET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4nKVxufVxuXG5Cb2R5LmNhbGwoUmVzcG9uc2UucHJvdG90eXBlKVxuXG5SZXNwb25zZS5wcm90b3R5cGUuY2xvbmUgPSBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgICBzdGF0dXM6IHRoaXMuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB0aGlzLnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgIHVybDogdGhpcy51cmxcbiAgICB9KVxufVxuXG5SZXNwb25zZS5lcnJvciA9IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgcmVzcG9uc2UgPSBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnIH0pXG4gICAgcmVzcG9uc2UudHlwZSA9ICdlcnJvcidcbiAgICByZXR1cm4gcmVzcG9uc2Vcbn1cblxudmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cblJlc3BvbnNlLnJlZGlyZWN0ID0gZnVuY3Rpb24gKHVybCwgc3RhdHVzKSB7XG4gICAgaWYgKHJlZGlyZWN0U3RhdHVzZXMuaW5kZXhPZihzdGF0dXMpID09PSAtMSkge1xuICAgICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCBzdGF0dXMgY29kZScpXG4gICAgfVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7IGxvY2F0aW9uOiB1cmwgfVxuICAgIHJldHVybiBuZXcgUmVzcG9uc2UobnVsbCwgeyBzdGF0dXMsIGhlYWRlcnMgfSlcbn1cblxuZXhwb3J0IHZhciBET01FeGNlcHRpb24gPSBnbG9iYWwuRE9NRXhjZXB0aW9uXG50cnkge1xuICAgIGNvbnN0IGhhc0RvbUV4Y2VwdGlvbiA9IG5ldyBET01FeGNlcHRpb24oKVxufVxuY2F0Y2ggKGVycikge1xuICAgIERPTUV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlLCBuYW1lKSB7XG4gICAgICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2VcbiAgICAgICAgdGhpcy5uYW1lID0gbmFtZVxuICAgICAgICB2YXIgZXJyb3IgPSBFcnJvcihtZXNzYWdlKVxuICAgICAgICB0aGlzLnN0YWNrID0gZXJyb3Iuc3RhY2tcbiAgICB9XG4gICAgRE9NRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKVxuICAgIERPTUV4Y2VwdGlvbi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBET01FeGNlcHRpb25cbn1cblxuY29uc3QgaXNBYm9ydCA9IChyZXF1ZXN0LCByZWplY3QpID0+IHtcbiAgICBpZiAocmVxdWVzdC5zaWduYWwgJiYgcmVxdWVzdC5zaWduYWwuYWJvcnRlZCkgcmVqZWN0KG5ldyBET01FeGNlcHRpb24oJ0Fib3J0ZWQnLCAnQWJvcnRFcnJvcicpKVxufVxuXG5jb25zdCB4aHJCdWlsZE9uTG9hZCA9ICh4aHIsIHJlc29sdmUpID0+ICgpID0+IHtcbiAgICB2YXIgb3B0aW9ucyA9IHtcbiAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiB4aHIuc3RhdHVzVGV4dCxcbiAgICAgICAgaGVhZGVyczogcGFyc2VIZWFkZXJzKHhoci5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSB8fCAnJylcbiAgICB9XG4gICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgIHZhciBib2R5ID0gJ3Jlc3BvbnNlJyBpbiB4aHIgPyB4aHIucmVzcG9uc2UgOiB4aHIucmVzcG9uc2VUZXh0XG4gICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJlc29sdmUobmV3IFJlc3BvbnNlKGJvZHksIG9wdGlvbnMpKVxuICAgIH0sIDApXG59XG5cbmNvbnN0IHhockJ1aWxkT25FcnJvciA9IChyZWplY3QpID0+ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICB9LCAwKVxufVxuXG5jb25zdCB4aHJCdWlsZE9uVGltZW91dCA9IChyZWplY3QpID0+ICgpID0+IHtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICB9LCAwKVxufVxuY29uc3QgeGhyQnVpbGRPbkFib3J0ID0gKHJlamVjdCkgPT4gKCkgPT4ge1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xuICAgICAgICByZWplY3QobmV3IERPTUV4Y2VwdGlvbignQWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgfSwgMClcbn1cbmNvbnN0IHhockJ1aWxkT25SZWFkeVN0YXRlQ2hhbmdlID0gKHJlcXVlc3QsIGFib3J0WGhyLCByZWFkeVN0YXRlKSA9PiAoKSA9PiB7XG4gICAgLy8gRE9ORSAoc3VjY2VzcyBvciBmYWlsdXJlKVxuICAgIGlmIChyZWFkeVN0YXRlID09PSA0KSB7XG4gICAgICAgIHJlcXVlc3Quc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnRYaHIpXG4gICAgfVxufVxuXG5jb25zdCBmaXhVcmwgPSAodXJsKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHVybCA9PT0gJycgJiYgZ2xvYmFsLmxvY2F0aW9uLmhyZWYgPyBnbG9iYWwubG9jYXRpb24uaHJlZiA6IHVybFxuICAgIH1cbiAgICBjYXRjaCAoZSkge1xuICAgICAgICByZXR1cm4gdXJsXG4gICAgfVxufVxuXG5jb25zdCBmaW5kWGhyQ3JlZGVudGlhbHMgPSAocmVxdWVzdCkgPT4ge1xuICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gICAgZWxzZSBpZiAocmVxdWVzdC5jcmVkZW50aWFscyA9PT0gJ29taXQnKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgICByZXR1cm5cbn1cblxuY29uc3QgZmluZFhoclJlc3BvbnNlVHlwZSA9IChyZXF1ZXN0LCB4aHIpID0+IHtcbiAgICBpZiAoJ3Jlc3BvbnNlVHlwZScgaW4geGhyKSB7XG4gICAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgIHJldHVybiAnYmxvYidcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChcbiAgICAgICAgICAgIHN1cHBvcnQuYXJyYXlCdWZmZXIgJiZcbiAgICAgICAgICAgIHJlcXVlc3QuaGVhZGVycy5nZXQoJ0NvbnRlbnQtVHlwZScpICYmXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKS5pbmRleE9mKCdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKSAhPT0gLTFcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gJ2FycmF5YnVmZmVyJ1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVyblxufVxuXG5jb25zdCBmaW5kWGhyUmVxdWVzdEhlYWRlciA9IChpbml0LCByZXF1ZXN0LCB4aHIpID0+IHtcbiAgICBpZiAoaW5pdCAmJiB0eXBlb2YgaW5pdC5oZWFkZXJzID09PSAnb2JqZWN0JyAmJiAhKGluaXQuaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpKSB7XG4gICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGluaXQuaGVhZGVycykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgbm9ybWFsaXplVmFsdWUoaW5pdC5oZWFkZXJzW25hbWVdKSlcbiAgICAgICAgfSlcbiAgICB9XG4gICAgZWxzZSB7XG4gICAgICAgIHJlcXVlc3QuaGVhZGVycy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgeGhyLnNldFJlcXVlc3RIZWFkZXIobmFtZSwgdmFsdWUpXG4gICAgICAgIH0pXG4gICAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmV0Y2goaW5wdXQsIGluaXQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuXG4gICAgICAgIGlzQWJvcnQocmVxdWVzdCwgcmVqZWN0KVxuXG4gICAgICAgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKVxuXG4gICAgICAgIGZ1bmN0aW9uIGFib3J0WGhyKCkge1xuICAgICAgICAgICAgeGhyLmFib3J0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHhoci5vbmxvYWQgPSB4aHJCdWlsZE9uTG9hZCh4aHIsIHJlc29sdmUpXG5cbiAgICAgICAgeGhyLm9uZXJyb3IgPSB4aHJCdWlsZE9uRXJyb3IocmVqZWN0KVxuXG4gICAgICAgIHhoci5vbnRpbWVvdXQgPSB4aHJCdWlsZE9uVGltZW91dChyZWplY3QpXG5cbiAgICAgICAgeGhyLm9uYWJvcnQgPSB4aHJCdWlsZE9uQWJvcnQocmVqZWN0KVxuXG4gICAgICAgIHhoci5vcGVuKHJlcXVlc3QubWV0aG9kLCBmaXhVcmwocmVxdWVzdC51cmwpLCB0cnVlKVxuXG4gICAgICAgIHhoci53aXRoQ3JlZGVudGlhbHMgPSBmaW5kWGhyQ3JlZGVudGlhbHMocmVxdWVzdClcblxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gZmluZFhoclJlc3BvbnNlVHlwZSgpXG5cbiAgICAgICAgZmluZFhoclJlcXVlc3RIZWFkZXIoaW5pdCwgcmVxdWVzdCwgeGhyKVxuXG4gICAgICAgIGlmIChyZXF1ZXN0LnNpZ25hbCkge1xuICAgICAgICAgICAgcmVxdWVzdC5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBhYm9ydFhocilcblxuICAgICAgICAgICAgeGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHhockJ1aWxkT25SZWFkeVN0YXRlQ2hhbmdlKHJlcXVlc3QsIGFib3J0WGhyLCB4aHIucmVhZHlTdGF0ZSlcbiAgICAgICAgfVxuXG4gICAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gICAgfSlcbn1cblxuZmV0Y2gucG9seWZpbGwgPSB0cnVlXG5cbmlmICghZ2xvYmFsLmZldGNoKSB7XG4gICAgZ2xvYmFsLmZldGNoID0gZmV0Y2hcbiAgICBnbG9iYWwuSGVhZGVycyA9IEhlYWRlcnNcbiAgICBnbG9iYWwuUmVxdWVzdCA9IFJlcXVlc3RcbiAgICBnbG9iYWwuUmVzcG9uc2UgPSBSZXNwb25zZVxufVxuIiwidmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXNzZXJ0OiBJc0NhbGxhYmxlKGFyZ3VtZW50KSBpcyB0cnVlYFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgaWYgKGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgYSBmdW5jdGlvbicpO1xufTtcbiIsInZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYEFzc2VydDogSXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkgaXMgdHJ1ZWBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSkgcmV0dXJuIGFyZ3VtZW50O1xuICB0aHJvdyAkVHlwZUVycm9yKHRyeVRvU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgJFN0cmluZyA9IFN0cmluZztcbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAodHlwZW9mIGFyZ3VtZW50ID09ICdvYmplY3QnIHx8IGlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gYXJndW1lbnQ7XG4gIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBzZXQgXCIgKyAkU3RyaW5nKGFyZ3VtZW50KSArICcgYXMgYSBwcm90b3R5cGUnKTtcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIFVOU0NPUEFCTEVTID0gd2VsbEtub3duU3ltYm9sKCd1bnNjb3BhYmxlcycpO1xudmFyIEFycmF5UHJvdG90eXBlID0gQXJyYXkucHJvdG90eXBlO1xuXG4vLyBBcnJheS5wcm90b3R5cGVbQEB1bnNjb3BhYmxlc11cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmlmIChBcnJheVByb3RvdHlwZVtVTlNDT1BBQkxFU10gPT0gdW5kZWZpbmVkKSB7XG4gIGRlZmluZVByb3BlcnR5KEFycmF5UHJvdG90eXBlLCBVTlNDT1BBQkxFUywge1xuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSxcbiAgICB2YWx1ZTogY3JlYXRlKG51bGwpXG4gIH0pO1xufVxuXG4vLyBhZGQgYSBrZXkgdG8gQXJyYXkucHJvdG90eXBlW0BAdW5zY29wYWJsZXNdXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgQXJyYXlQcm90b3R5cGVbVU5TQ09QQUJMRVNdW2tleV0gPSB0cnVlO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBjaGFyQXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3RyaW5nLW11bHRpYnl0ZScpLmNoYXJBdDtcblxuLy8gYEFkdmFuY2VTdHJpbmdJbmRleGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFkdmFuY2VzdHJpbmdpbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoUywgaW5kZXgsIHVuaWNvZGUpIHtcbiAgcmV0dXJuIGluZGV4ICsgKHVuaWNvZGUgPyBjaGFyQXQoUywgaW5kZXgpLmxlbmd0aCA6IDEpO1xufTtcbiIsInZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0LCBQcm90b3R5cGUpIHtcbiAgaWYgKGlzUHJvdG90eXBlT2YoUHJvdG90eXBlLCBpdCkpIHJldHVybiBpdDtcbiAgdGhyb3cgJFR5cGVFcnJvcignSW5jb3JyZWN0IGludm9jYXRpb24nKTtcbn07XG4iLCJ2YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBBc3NlcnQ6IFR5cGUoYXJndW1lbnQpIGlzIE9iamVjdGBcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIGlmIChpc09iamVjdChhcmd1bWVudCkpIHJldHVybiBhcmd1bWVudDtcbiAgdGhyb3cgJFR5cGVFcnJvcigkU3RyaW5nKGFyZ3VtZW50KSArICcgaXMgbm90IGFuIG9iamVjdCcpO1xufTtcbiIsIi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLXR5cGVkLWFycmF5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiBBcnJheUJ1ZmZlciAhPSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgRGF0YVZpZXcgIT0gJ3VuZGVmaW5lZCc7XG4iLCIvLyBGRjI2LSBidWc6IEFycmF5QnVmZmVycyBhcmUgbm9uLWV4dGVuc2libGUsIGJ1dCBPYmplY3QuaXNFeHRlbnNpYmxlIGRvZXMgbm90IHJlcG9ydCBpdFxudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyID09ICdmdW5jdGlvbicpIHtcbiAgICB2YXIgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKDgpO1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1pc2V4dGVuc2libGUsIGVzLXgvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbiAgICBpZiAoT2JqZWN0LmlzRXh0ZW5zaWJsZShidWZmZXIpKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoYnVmZmVyLCAnYScsIHsgdmFsdWU6IDggfSk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIE5BVElWRV9BUlJBWV9CVUZGRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLW5hdGl2ZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LXByb3RvdHlwZS1vZicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBJbnQ4QXJyYXkgPSBnbG9iYWwuSW50OEFycmF5O1xudmFyIEludDhBcnJheVByb3RvdHlwZSA9IEludDhBcnJheSAmJiBJbnQ4QXJyYXkucHJvdG90eXBlO1xudmFyIFVpbnQ4Q2xhbXBlZEFycmF5ID0gZ2xvYmFsLlVpbnQ4Q2xhbXBlZEFycmF5O1xudmFyIFVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlID0gVWludDhDbGFtcGVkQXJyYXkgJiYgVWludDhDbGFtcGVkQXJyYXkucHJvdG90eXBlO1xudmFyIFR5cGVkQXJyYXkgPSBJbnQ4QXJyYXkgJiYgZ2V0UHJvdG90eXBlT2YoSW50OEFycmF5KTtcbnZhciBUeXBlZEFycmF5UHJvdG90eXBlID0gSW50OEFycmF5UHJvdG90eXBlICYmIGdldFByb3RvdHlwZU9mKEludDhBcnJheVByb3RvdHlwZSk7XG52YXIgT2JqZWN0UHJvdG90eXBlID0gT2JqZWN0LnByb3RvdHlwZTtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciBUWVBFRF9BUlJBWV9UQUcgPSB1aWQoJ1RZUEVEX0FSUkFZX1RBRycpO1xudmFyIFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SID0gJ1R5cGVkQXJyYXlDb25zdHJ1Y3Rvcic7XG4vLyBGaXhpbmcgbmF0aXZlIHR5cGVkIGFycmF5cyBpbiBPcGVyYSBQcmVzdG8gY3Jhc2hlcyB0aGUgYnJvd3Nlciwgc2VlICM1OTVcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gTkFUSVZFX0FSUkFZX0JVRkZFUiAmJiAhIXNldFByb3RvdHlwZU9mICYmIGNsYXNzb2YoZ2xvYmFsLm9wZXJhKSAhPT0gJ09wZXJhJztcbnZhciBUWVBFRF9BUlJBWV9UQUdfUkVRVUlSRUQgPSBmYWxzZTtcbnZhciBOQU1FLCBDb25zdHJ1Y3RvciwgUHJvdG90eXBlO1xuXG52YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QgPSB7XG4gIEludDhBcnJheTogMSxcbiAgVWludDhBcnJheTogMSxcbiAgVWludDhDbGFtcGVkQXJyYXk6IDEsXG4gIEludDE2QXJyYXk6IDIsXG4gIFVpbnQxNkFycmF5OiAyLFxuICBJbnQzMkFycmF5OiA0LFxuICBVaW50MzJBcnJheTogNCxcbiAgRmxvYXQzMkFycmF5OiA0LFxuICBGbG9hdDY0QXJyYXk6IDhcbn07XG5cbnZhciBCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QgPSB7XG4gIEJpZ0ludDY0QXJyYXk6IDgsXG4gIEJpZ1VpbnQ2NEFycmF5OiA4XG59O1xuXG52YXIgaXNWaWV3ID0gZnVuY3Rpb24gaXNWaWV3KGl0KSB7XG4gIGlmICghaXNPYmplY3QoaXQpKSByZXR1cm4gZmFsc2U7XG4gIHZhciBrbGFzcyA9IGNsYXNzb2YoaXQpO1xuICByZXR1cm4ga2xhc3MgPT09ICdEYXRhVmlldydcbiAgICB8fCBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QsIGtsYXNzKVxuICAgIHx8IGhhc093bihCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QsIGtsYXNzKTtcbn07XG5cbnZhciBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHByb3RvID0gZ2V0UHJvdG90eXBlT2YoaXQpO1xuICBpZiAoIWlzT2JqZWN0KHByb3RvKSkgcmV0dXJuO1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHByb3RvKTtcbiAgcmV0dXJuIChzdGF0ZSAmJiBoYXNPd24oc3RhdGUsIFRZUEVEX0FSUkFZX0NPTlNUUlVDVE9SKSkgPyBzdGF0ZVtUWVBFRF9BUlJBWV9DT05TVFJVQ1RPUl0gOiBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IocHJvdG8pO1xufTtcblxudmFyIGlzVHlwZWRBcnJheSA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoIWlzT2JqZWN0KGl0KSkgcmV0dXJuIGZhbHNlO1xuICB2YXIga2xhc3MgPSBjbGFzc29mKGl0KTtcbiAgcmV0dXJuIGhhc093bihUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpXG4gICAgfHwgaGFzT3duKEJpZ0ludEFycmF5Q29uc3RydWN0b3JzTGlzdCwga2xhc3MpO1xufTtcblxudmFyIGFUeXBlZEFycmF5ID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpc1R5cGVkQXJyYXkoaXQpKSByZXR1cm4gaXQ7XG4gIHRocm93IFR5cGVFcnJvcignVGFyZ2V0IGlzIG5vdCBhIHR5cGVkIGFycmF5Jyk7XG59O1xuXG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIChDKSB7XG4gIGlmIChpc0NhbGxhYmxlKEMpICYmICghc2V0UHJvdG90eXBlT2YgfHwgaXNQcm90b3R5cGVPZihUeXBlZEFycmF5LCBDKSkpIHJldHVybiBDO1xuICB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoQykgKyAnIGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yJyk7XG59O1xuXG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IGZ1bmN0aW9uIChLRVksIHByb3BlcnR5LCBmb3JjZWQsIG9wdGlvbnMpIHtcbiAgaWYgKCFERVNDUklQVE9SUykgcmV0dXJuO1xuICBpZiAoZm9yY2VkKSBmb3IgKHZhciBBUlJBWSBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3JzTGlzdCkge1xuICAgIHZhciBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBnbG9iYWxbQVJSQVldO1xuICAgIGlmIChUeXBlZEFycmF5Q29uc3RydWN0b3IgJiYgaGFzT3duKFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIEtFWSkpIHRyeSB7XG4gICAgICBkZWxldGUgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZVtLRVldO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBvbGQgV2ViS2l0IGJ1ZyAtIHNvbWUgbWV0aG9kcyBhcmUgbm9uLWNvbmZpZ3VyYWJsZVxuICAgICAgdHJ5IHtcbiAgICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZVtLRVldID0gcHJvcGVydHk7XG4gICAgICB9IGNhdGNoIChlcnJvcjIpIHsgLyogZW1wdHkgKi8gfVxuICAgIH1cbiAgfVxuICBpZiAoIVR5cGVkQXJyYXlQcm90b3R5cGVbS0VZXSB8fCBmb3JjZWQpIHtcbiAgICBkZWZpbmVCdWlsdEluKFR5cGVkQXJyYXlQcm90b3R5cGUsIEtFWSwgZm9yY2VkID8gcHJvcGVydHlcbiAgICAgIDogTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBJbnQ4QXJyYXlQcm90b3R5cGVbS0VZXSB8fCBwcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG5cbnZhciBleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kID0gZnVuY3Rpb24gKEtFWSwgcHJvcGVydHksIGZvcmNlZCkge1xuICB2YXIgQVJSQVksIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbiAgaWYgKCFERVNDUklQVE9SUykgcmV0dXJuO1xuICBpZiAoc2V0UHJvdG90eXBlT2YpIHtcbiAgICBpZiAoZm9yY2VkKSBmb3IgKEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBnbG9iYWxbQVJSQVldO1xuICAgICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciAmJiBoYXNPd24oVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBLRVkpKSB0cnkge1xuICAgICAgICBkZWxldGUgVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV07XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgfVxuICAgIGlmICghVHlwZWRBcnJheVtLRVldIHx8IGZvcmNlZCkge1xuICAgICAgLy8gVjggfiBDaHJvbWUgNDktNTAgYCVUeXBlZEFycmF5JWAgbWV0aG9kcyBhcmUgbm9uLXdyaXRhYmxlIG5vbi1jb25maWd1cmFibGVcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBkZWZpbmVCdWlsdEluKFR5cGVkQXJyYXksIEtFWSwgZm9yY2VkID8gcHJvcGVydHkgOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTICYmIFR5cGVkQXJyYXlbS0VZXSB8fCBwcm9wZXJ0eSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgfSBlbHNlIHJldHVybjtcbiAgfVxuICBmb3IgKEFSUkFZIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gZ2xvYmFsW0FSUkFZXTtcbiAgICBpZiAoVHlwZWRBcnJheUNvbnN0cnVjdG9yICYmICghVHlwZWRBcnJheUNvbnN0cnVjdG9yW0tFWV0gfHwgZm9yY2VkKSkge1xuICAgICAgZGVmaW5lQnVpbHRJbihUeXBlZEFycmF5Q29uc3RydWN0b3IsIEtFWSwgcHJvcGVydHkpO1xuICAgIH1cbiAgfVxufTtcblxuZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gIENvbnN0cnVjdG9yID0gZ2xvYmFsW05BTUVdO1xuICBQcm90b3R5cGUgPSBDb25zdHJ1Y3RvciAmJiBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIGlmIChQcm90b3R5cGUpIGVuZm9yY2VJbnRlcm5hbFN0YXRlKFByb3RvdHlwZSlbVFlQRURfQVJSQVlfQ09OU1RSVUNUT1JdID0gQ29uc3RydWN0b3I7XG4gIGVsc2UgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IGZhbHNlO1xufVxuXG5mb3IgKE5BTUUgaW4gQmlnSW50QXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gIENvbnN0cnVjdG9yID0gZ2xvYmFsW05BTUVdO1xuICBQcm90b3R5cGUgPSBDb25zdHJ1Y3RvciAmJiBDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIGlmIChQcm90b3R5cGUpIGVuZm9yY2VJbnRlcm5hbFN0YXRlKFByb3RvdHlwZSlbVFlQRURfQVJSQVlfQ09OU1RSVUNUT1JdID0gQ29uc3RydWN0b3I7XG59XG5cbi8vIFdlYktpdCBidWcgLSB0eXBlZCBhcnJheXMgY29uc3RydWN0b3JzIHByb3RvdHlwZSBpcyBPYmplY3QucHJvdG90eXBlXG5pZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MgfHwgIWlzQ2FsbGFibGUoVHlwZWRBcnJheSkgfHwgVHlwZWRBcnJheSA9PT0gRnVuY3Rpb24ucHJvdG90eXBlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zaGFkb3cgLS0gc2FmZVxuICBUeXBlZEFycmF5ID0gZnVuY3Rpb24gVHlwZWRBcnJheSgpIHtcbiAgICB0aHJvdyBUeXBlRXJyb3IoJ0luY29ycmVjdCBpbnZvY2F0aW9uJyk7XG4gIH07XG4gIGlmIChOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTKSBmb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIHtcbiAgICBpZiAoZ2xvYmFsW05BTUVdKSBzZXRQcm90b3R5cGVPZihnbG9iYWxbTkFNRV0sIFR5cGVkQXJyYXkpO1xuICB9XG59XG5cbmlmICghTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB8fCAhVHlwZWRBcnJheVByb3RvdHlwZSB8fCBUeXBlZEFycmF5UHJvdG90eXBlID09PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgVHlwZWRBcnJheVByb3RvdHlwZSA9IFR5cGVkQXJyYXkucHJvdG90eXBlO1xuICBpZiAoTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUykgZm9yIChOQU1FIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvcnNMaXN0KSB7XG4gICAgaWYgKGdsb2JhbFtOQU1FXSkgc2V0UHJvdG90eXBlT2YoZ2xvYmFsW05BTUVdLnByb3RvdHlwZSwgVHlwZWRBcnJheVByb3RvdHlwZSk7XG4gIH1cbn1cblxuLy8gV2ViS2l0IGJ1ZyAtIG9uZSBtb3JlIG9iamVjdCBpbiBVaW50OENsYW1wZWRBcnJheSBwcm90b3R5cGUgY2hhaW5cbmlmIChOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTICYmIGdldFByb3RvdHlwZU9mKFVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlKSAhPT0gVHlwZWRBcnJheVByb3RvdHlwZSkge1xuICBzZXRQcm90b3R5cGVPZihVaW50OENsYW1wZWRBcnJheVByb3RvdHlwZSwgVHlwZWRBcnJheVByb3RvdHlwZSk7XG59XG5cbmlmIChERVNDUklQVE9SUyAmJiAhaGFzT3duKFR5cGVkQXJyYXlQcm90b3R5cGUsIFRPX1NUUklOR19UQUcpKSB7XG4gIFRZUEVEX0FSUkFZX1RBR19SRVFVSVJFRCA9IHRydWU7XG4gIGRlZmluZVByb3BlcnR5KFR5cGVkQXJyYXlQcm90b3R5cGUsIFRPX1NUUklOR19UQUcsIHsgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHRoaXMpID8gdGhpc1tUWVBFRF9BUlJBWV9UQUddIDogdW5kZWZpbmVkO1xuICB9IH0pO1xuICBmb3IgKE5BTUUgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QpIGlmIChnbG9iYWxbTkFNRV0pIHtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoZ2xvYmFsW05BTUVdLCBUWVBFRF9BUlJBWV9UQUcsIE5BTUUpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTOiBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTLFxuICBUWVBFRF9BUlJBWV9UQUc6IFRZUEVEX0FSUkFZX1RBR19SRVFVSVJFRCAmJiBUWVBFRF9BUlJBWV9UQUcsXG4gIGFUeXBlZEFycmF5OiBhVHlwZWRBcnJheSxcbiAgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjogYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcixcbiAgZXhwb3J0VHlwZWRBcnJheU1ldGhvZDogZXhwb3J0VHlwZWRBcnJheU1ldGhvZCxcbiAgZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDogZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCxcbiAgZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yOiBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IsXG4gIGlzVmlldzogaXNWaWV3LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheTogVHlwZWRBcnJheSxcbiAgVHlwZWRBcnJheVByb3RvdHlwZTogVHlwZWRBcnJheVByb3RvdHlwZVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1uYXRpdmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9JbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleCcpO1xudmFyIElFRUU3NTQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWVlZTc1NCcpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBhcnJheUZpbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZmlsbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBEQVRBX1ZJRVcgPSAnRGF0YVZpZXcnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFdST05HX0xFTkdUSCA9ICdXcm9uZyBsZW5ndGgnO1xudmFyIFdST05HX0lOREVYID0gJ1dyb25nIGluZGV4JztcbnZhciBOYXRpdmVBcnJheUJ1ZmZlciA9IGdsb2JhbFtBUlJBWV9CVUZGRVJdO1xudmFyICRBcnJheUJ1ZmZlciA9IE5hdGl2ZUFycmF5QnVmZmVyO1xudmFyIEFycmF5QnVmZmVyUHJvdG90eXBlID0gJEFycmF5QnVmZmVyICYmICRBcnJheUJ1ZmZlcltQUk9UT1RZUEVdO1xudmFyICREYXRhVmlldyA9IGdsb2JhbFtEQVRBX1ZJRVddO1xudmFyIERhdGFWaWV3UHJvdG90eXBlID0gJERhdGFWaWV3ICYmICREYXRhVmlld1tQUk9UT1RZUEVdO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgQXJyYXkgPSBnbG9iYWwuQXJyYXk7XG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIGZpbGwgPSB1bmN1cnJ5VGhpcyhhcnJheUZpbGwpO1xudmFyIHJldmVyc2UgPSB1bmN1cnJ5VGhpcyhbXS5yZXZlcnNlKTtcblxudmFyIHBhY2tJRUVFNzU0ID0gSUVFRTc1NC5wYWNrO1xudmFyIHVucGFja0lFRUU3NTQgPSBJRUVFNzU0LnVucGFjaztcblxudmFyIHBhY2tJbnQ4ID0gZnVuY3Rpb24gKG51bWJlcikge1xuICByZXR1cm4gW251bWJlciAmIDB4RkZdO1xufTtcblxudmFyIHBhY2tJbnQxNiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIFtudW1iZXIgJiAweEZGLCBudW1iZXIgPj4gOCAmIDB4RkZdO1xufTtcblxudmFyIHBhY2tJbnQzMiA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIFtudW1iZXIgJiAweEZGLCBudW1iZXIgPj4gOCAmIDB4RkYsIG51bWJlciA+PiAxNiAmIDB4RkYsIG51bWJlciA+PiAyNCAmIDB4RkZdO1xufTtcblxudmFyIHVucGFja0ludDMyID0gZnVuY3Rpb24gKGJ1ZmZlcikge1xuICByZXR1cm4gYnVmZmVyWzNdIDw8IDI0IHwgYnVmZmVyWzJdIDw8IDE2IHwgYnVmZmVyWzFdIDw8IDggfCBidWZmZXJbMF07XG59O1xuXG52YXIgcGFja0Zsb2F0MzIgPSBmdW5jdGlvbiAobnVtYmVyKSB7XG4gIHJldHVybiBwYWNrSUVFRTc1NChudW1iZXIsIDIzLCA0KTtcbn07XG5cbnZhciBwYWNrRmxvYXQ2NCA9IGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgcmV0dXJuIHBhY2tJRUVFNzU0KG51bWJlciwgNTIsIDgpO1xufTtcblxudmFyIGFkZEdldHRlciA9IGZ1bmN0aW9uIChDb25zdHJ1Y3Rvciwga2V5KSB7XG4gIGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yW1BST1RPVFlQRV0sIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGdldEludGVybmFsU3RhdGUodGhpcylba2V5XTsgfSB9KTtcbn07XG5cbnZhciBnZXQgPSBmdW5jdGlvbiAodmlldywgY291bnQsIGluZGV4LCBpc0xpdHRsZUVuZGlhbikge1xuICB2YXIgaW50SW5kZXggPSB0b0luZGV4KGluZGV4KTtcbiAgdmFyIHN0b3JlID0gZ2V0SW50ZXJuYWxTdGF0ZSh2aWV3KTtcbiAgaWYgKGludEluZGV4ICsgY291bnQgPiBzdG9yZS5ieXRlTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0lOREVYKTtcbiAgdmFyIGJ5dGVzID0gZ2V0SW50ZXJuYWxTdGF0ZShzdG9yZS5idWZmZXIpLmJ5dGVzO1xuICB2YXIgc3RhcnQgPSBpbnRJbmRleCArIHN0b3JlLmJ5dGVPZmZzZXQ7XG4gIHZhciBwYWNrID0gYXJyYXlTbGljZShieXRlcywgc3RhcnQsIHN0YXJ0ICsgY291bnQpO1xuICByZXR1cm4gaXNMaXR0bGVFbmRpYW4gPyBwYWNrIDogcmV2ZXJzZShwYWNrKTtcbn07XG5cbnZhciBzZXQgPSBmdW5jdGlvbiAodmlldywgY291bnQsIGluZGV4LCBjb252ZXJzaW9uLCB2YWx1ZSwgaXNMaXR0bGVFbmRpYW4pIHtcbiAgdmFyIGludEluZGV4ID0gdG9JbmRleChpbmRleCk7XG4gIHZhciBzdG9yZSA9IGdldEludGVybmFsU3RhdGUodmlldyk7XG4gIGlmIChpbnRJbmRleCArIGNvdW50ID4gc3RvcmUuYnl0ZUxlbmd0aCkgdGhyb3cgUmFuZ2VFcnJvcihXUk9OR19JTkRFWCk7XG4gIHZhciBieXRlcyA9IGdldEludGVybmFsU3RhdGUoc3RvcmUuYnVmZmVyKS5ieXRlcztcbiAgdmFyIHN0YXJ0ID0gaW50SW5kZXggKyBzdG9yZS5ieXRlT2Zmc2V0O1xuICB2YXIgcGFjayA9IGNvbnZlcnNpb24oK3ZhbHVlKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSBieXRlc1tzdGFydCArIGldID0gcGFja1tpc0xpdHRsZUVuZGlhbiA/IGkgOiBjb3VudCAtIGkgLSAxXTtcbn07XG5cbmlmICghTkFUSVZFX0FSUkFZX0JVRkZFUikge1xuICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIEFycmF5QnVmZmVyUHJvdG90eXBlKTtcbiAgICB2YXIgYnl0ZUxlbmd0aCA9IHRvSW5kZXgobGVuZ3RoKTtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIGJ5dGVzOiBmaWxsKEFycmF5KGJ5dGVMZW5ndGgpLCAwKSxcbiAgICAgIGJ5dGVMZW5ndGg6IGJ5dGVMZW5ndGhcbiAgICB9KTtcbiAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGlzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoO1xuICB9O1xuXG4gIEFycmF5QnVmZmVyUHJvdG90eXBlID0gJEFycmF5QnVmZmVyW1BST1RPVFlQRV07XG5cbiAgJERhdGFWaWV3ID0gZnVuY3Rpb24gRGF0YVZpZXcoYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoKSB7XG4gICAgYW5JbnN0YW5jZSh0aGlzLCBEYXRhVmlld1Byb3RvdHlwZSk7XG4gICAgYW5JbnN0YW5jZShidWZmZXIsIEFycmF5QnVmZmVyUHJvdG90eXBlKTtcbiAgICB2YXIgYnVmZmVyTGVuZ3RoID0gZ2V0SW50ZXJuYWxTdGF0ZShidWZmZXIpLmJ5dGVMZW5ndGg7XG4gICAgdmFyIG9mZnNldCA9IHRvSW50ZWdlck9ySW5maW5pdHkoYnl0ZU9mZnNldCk7XG4gICAgaWYgKG9mZnNldCA8IDAgfHwgb2Zmc2V0ID4gYnVmZmVyTGVuZ3RoKSB0aHJvdyBSYW5nZUVycm9yKCdXcm9uZyBvZmZzZXQnKTtcbiAgICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCA9PT0gdW5kZWZpbmVkID8gYnVmZmVyTGVuZ3RoIC0gb2Zmc2V0IDogdG9MZW5ndGgoYnl0ZUxlbmd0aCk7XG4gICAgaWYgKG9mZnNldCArIGJ5dGVMZW5ndGggPiBidWZmZXJMZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgIGJ1ZmZlcjogYnVmZmVyLFxuICAgICAgYnl0ZUxlbmd0aDogYnl0ZUxlbmd0aCxcbiAgICAgIGJ5dGVPZmZzZXQ6IG9mZnNldFxuICAgIH0pO1xuICAgIGlmICghREVTQ1JJUFRPUlMpIHtcbiAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyO1xuICAgICAgdGhpcy5ieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aDtcbiAgICAgIHRoaXMuYnl0ZU9mZnNldCA9IG9mZnNldDtcbiAgICB9XG4gIH07XG5cbiAgRGF0YVZpZXdQcm90b3R5cGUgPSAkRGF0YVZpZXdbUFJPVE9UWVBFXTtcblxuICBpZiAoREVTQ1JJUFRPUlMpIHtcbiAgICBhZGRHZXR0ZXIoJEFycmF5QnVmZmVyLCAnYnl0ZUxlbmd0aCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsICdidWZmZXInKTtcbiAgICBhZGRHZXR0ZXIoJERhdGFWaWV3LCAnYnl0ZUxlbmd0aCcpO1xuICAgIGFkZEdldHRlcigkRGF0YVZpZXcsICdieXRlT2Zmc2V0Jyk7XG4gIH1cblxuICBkZWZpbmVCdWlsdElucyhEYXRhVmlld1Byb3RvdHlwZSwge1xuICAgIGdldEludDg6IGZ1bmN0aW9uIGdldEludDgoYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIGdldCh0aGlzLCAxLCBieXRlT2Zmc2V0KVswXSA8PCAyNCA+PiAyNDtcbiAgICB9LFxuICAgIGdldFVpbnQ4OiBmdW5jdGlvbiBnZXRVaW50OChieXRlT2Zmc2V0KSB7XG4gICAgICByZXR1cm4gZ2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQpWzBdO1xuICAgIH0sXG4gICAgZ2V0SW50MTY6IGZ1bmN0aW9uIGdldEludDE2KGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHZhciBieXRlcyA9IGdldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gICAgICByZXR1cm4gKGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXSkgPDwgMTYgPj4gMTY7XG4gICAgfSxcbiAgICBnZXRVaW50MTY6IGZ1bmN0aW9uIGdldFVpbnQxNihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICB2YXIgYnl0ZXMgPSBnZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgcmV0dXJuIGJ5dGVzWzFdIDw8IDggfCBieXRlc1swXTtcbiAgICB9LFxuICAgIGdldEludDMyOiBmdW5jdGlvbiBnZXRJbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSW50MzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSk7XG4gICAgfSxcbiAgICBnZXRVaW50MzI6IGZ1bmN0aW9uIGdldFVpbnQzMihieXRlT2Zmc2V0IC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICByZXR1cm4gdW5wYWNrSW50MzIoZ2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSkgPj4+IDA7XG4gICAgfSxcbiAgICBnZXRGbG9hdDMyOiBmdW5jdGlvbiBnZXRGbG9hdDMyKGJ5dGVPZmZzZXQgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHJldHVybiB1bnBhY2tJRUVFNzU0KGdldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCksIDIzKTtcbiAgICB9LFxuICAgIGdldEZsb2F0NjQ6IGZ1bmN0aW9uIGdldEZsb2F0NjQoYnl0ZU9mZnNldCAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgcmV0dXJuIHVucGFja0lFRUU3NTQoZ2V0KHRoaXMsIDgsIGJ5dGVPZmZzZXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKSwgNTIpO1xuICAgIH0sXG4gICAgc2V0SW50ODogZnVuY3Rpb24gc2V0SW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgc2V0KHRoaXMsIDEsIGJ5dGVPZmZzZXQsIHBhY2tJbnQ4LCB2YWx1ZSk7XG4gICAgfSxcbiAgICBzZXRVaW50ODogZnVuY3Rpb24gc2V0VWludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgIHNldCh0aGlzLCAxLCBieXRlT2Zmc2V0LCBwYWNrSW50OCwgdmFsdWUpO1xuICAgIH0sXG4gICAgc2V0SW50MTY6IGZ1bmN0aW9uIHNldEludDE2KGJ5dGVPZmZzZXQsIHZhbHVlIC8qICwgbGl0dGxlRW5kaWFuICovKSB7XG4gICAgICBzZXQodGhpcywgMiwgYnl0ZU9mZnNldCwgcGFja0ludDE2LCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xuICAgIH0sXG4gICAgc2V0VWludDE2OiBmdW5jdGlvbiBzZXRVaW50MTYoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCAyLCBieXRlT2Zmc2V0LCBwYWNrSW50MTYsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzZXRJbnQzMjogZnVuY3Rpb24gc2V0SW50MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrSW50MzIsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gICAgfSxcbiAgICBzZXRVaW50MzI6IGZ1bmN0aW9uIHNldFVpbnQzMihieXRlT2Zmc2V0LCB2YWx1ZSAvKiAsIGxpdHRsZUVuZGlhbiAqLykge1xuICAgICAgc2V0KHRoaXMsIDQsIGJ5dGVPZmZzZXQsIHBhY2tJbnQzMiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNldEZsb2F0MzI6IGZ1bmN0aW9uIHNldEZsb2F0MzIoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA0LCBieXRlT2Zmc2V0LCBwYWNrRmxvYXQzMiwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9LFxuICAgIHNldEZsb2F0NjQ6IGZ1bmN0aW9uIHNldEZsb2F0NjQoYnl0ZU9mZnNldCwgdmFsdWUgLyogLCBsaXR0bGVFbmRpYW4gKi8pIHtcbiAgICAgIHNldCh0aGlzLCA4LCBieXRlT2Zmc2V0LCBwYWNrRmxvYXQ2NCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkKTtcbiAgICB9XG4gIH0pO1xufSBlbHNlIHtcbiAgdmFyIElOQ09SUkVDVF9BUlJBWV9CVUZGRVJfTkFNRSA9IFBST1BFUl9GVU5DVElPTl9OQU1FICYmIE5hdGl2ZUFycmF5QnVmZmVyLm5hbWUgIT09IEFSUkFZX0JVRkZFUjtcbiAgLyogZXNsaW50LWRpc2FibGUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG4gIGlmICghZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIE5hdGl2ZUFycmF5QnVmZmVyKDEpO1xuICB9KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcigtMSk7XG4gIH0pIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoKTtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoMS41KTtcbiAgICBuZXcgTmF0aXZlQXJyYXlCdWZmZXIoTmFOKTtcbiAgICByZXR1cm4gSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FICYmICFDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRTtcbiAgfSkpIHtcbiAgLyogZXNsaW50LWVuYWJsZSBuby1uZXcgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmcgKi9cbiAgICAkQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiBBcnJheUJ1ZmZlcihsZW5ndGgpIHtcbiAgICAgIGFuSW5zdGFuY2UodGhpcywgQXJyYXlCdWZmZXJQcm90b3R5cGUpO1xuICAgICAgcmV0dXJuIG5ldyBOYXRpdmVBcnJheUJ1ZmZlcih0b0luZGV4KGxlbmd0aCkpO1xuICAgIH07XG5cbiAgICAkQXJyYXlCdWZmZXJbUFJPVE9UWVBFXSA9IEFycmF5QnVmZmVyUHJvdG90eXBlO1xuXG4gICAgZm9yICh2YXIga2V5cyA9IGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlQXJyYXlCdWZmZXIpLCBqID0gMCwga2V5OyBrZXlzLmxlbmd0aCA+IGo7KSB7XG4gICAgICBpZiAoISgoa2V5ID0ga2V5c1tqKytdKSBpbiAkQXJyYXlCdWZmZXIpKSB7XG4gICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSgkQXJyYXlCdWZmZXIsIGtleSwgTmF0aXZlQXJyYXlCdWZmZXJba2V5XSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgQXJyYXlCdWZmZXJQcm90b3R5cGUuY29uc3RydWN0b3IgPSAkQXJyYXlCdWZmZXI7XG4gIH0gZWxzZSBpZiAoSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FICYmIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FKSB7XG4gICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KE5hdGl2ZUFycmF5QnVmZmVyLCAnbmFtZScsIEFSUkFZX0JVRkZFUik7XG4gIH1cblxuICAvLyBXZWJLaXQgYnVnIC0gdGhlIHNhbWUgcGFyZW50IHByb3RvdHlwZSBmb3IgdHlwZWQgYXJyYXlzIGFuZCBkYXRhIHZpZXdcbiAgaWYgKHNldFByb3RvdHlwZU9mICYmIGdldFByb3RvdHlwZU9mKERhdGFWaWV3UHJvdG90eXBlKSAhPT0gT2JqZWN0UHJvdG90eXBlKSB7XG4gICAgc2V0UHJvdG90eXBlT2YoRGF0YVZpZXdQcm90b3R5cGUsIE9iamVjdFByb3RvdHlwZSk7XG4gIH1cblxuICAvLyBpT1MgU2FmYXJpIDcueCBidWdcbiAgdmFyIHRlc3RWaWV3ID0gbmV3ICREYXRhVmlldyhuZXcgJEFycmF5QnVmZmVyKDIpKTtcbiAgdmFyICRzZXRJbnQ4ID0gdW5jdXJyeVRoaXMoRGF0YVZpZXdQcm90b3R5cGUuc2V0SW50OCk7XG4gIHRlc3RWaWV3LnNldEludDgoMCwgMjE0NzQ4MzY0OCk7XG4gIHRlc3RWaWV3LnNldEludDgoMSwgMjE0NzQ4MzY0OSk7XG4gIGlmICh0ZXN0Vmlldy5nZXRJbnQ4KDApIHx8ICF0ZXN0Vmlldy5nZXRJbnQ4KDEpKSBkZWZpbmVCdWlsdElucyhEYXRhVmlld1Byb3RvdHlwZSwge1xuICAgIHNldEludDg6IGZ1bmN0aW9uIHNldEludDgoYnl0ZU9mZnNldCwgdmFsdWUpIHtcbiAgICAgICRzZXRJbnQ4KHRoaXMsIGJ5dGVPZmZzZXQsIHZhbHVlIDw8IDI0ID4+IDI0KTtcbiAgICB9LFxuICAgIHNldFVpbnQ4OiBmdW5jdGlvbiBzZXRVaW50OChieXRlT2Zmc2V0LCB2YWx1ZSkge1xuICAgICAgJHNldEludDgodGhpcywgYnl0ZU9mZnNldCwgdmFsdWUgPDwgMjQgPj4gMjQpO1xuICAgIH1cbiAgfSwgeyB1bnNhZmU6IHRydWUgfSk7XG59XG5cbnNldFRvU3RyaW5nVGFnKCRBcnJheUJ1ZmZlciwgQVJSQVlfQlVGRkVSKTtcbnNldFRvU3RyaW5nVGFnKCREYXRhVmlldywgREFUQV9WSUVXKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEFycmF5QnVmZmVyOiAkQXJyYXlCdWZmZXIsXG4gIERhdGFWaWV3OiAkRGF0YVZpZXdcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkZWxldGVQcm9wZXJ0eU9yVGhyb3cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVsZXRlLXByb3BlcnR5LW9yLXRocm93Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5jb3B5V2l0aGluYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmNvcHl3aXRoaW5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLWFycmF5LXByb3RvdHlwZS1jb3B5d2l0aGluIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gW10uY29weVdpdGhpbiB8fCBmdW5jdGlvbiBjb3B5V2l0aGluKHRhcmdldCAvKiA9IDAgKi8sIHN0YXJ0IC8qID0gMCwgZW5kID0gQGxlbmd0aCAqLykge1xuICB2YXIgTyA9IHRvT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciB0byA9IHRvQWJzb2x1dGVJbmRleCh0YXJnZXQsIGxlbik7XG4gIHZhciBmcm9tID0gdG9BYnNvbHV0ZUluZGV4KHN0YXJ0LCBsZW4pO1xuICB2YXIgZW5kID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQ7XG4gIHZhciBjb3VudCA9IG1pbigoZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW4pKSAtIGZyb20sIGxlbiAtIHRvKTtcbiAgdmFyIGluYyA9IDE7XG4gIGlmIChmcm9tIDwgdG8gJiYgdG8gPCBmcm9tICsgY291bnQpIHtcbiAgICBpbmMgPSAtMTtcbiAgICBmcm9tICs9IGNvdW50IC0gMTtcbiAgICB0byArPSBjb3VudCAtIDE7XG4gIH1cbiAgd2hpbGUgKGNvdW50LS0gPiAwKSB7XG4gICAgaWYgKGZyb20gaW4gTykgT1t0b10gPSBPW2Zyb21dO1xuICAgIGVsc2UgZGVsZXRlUHJvcGVydHlPclRocm93KE8sIHRvKTtcbiAgICB0byArPSBpbmM7XG4gICAgZnJvbSArPSBpbmM7XG4gIH0gcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIHRvQWJzb2x1dGVJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1hYnNvbHV0ZS1pbmRleCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZmlsbGAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWxsXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZpbGwodmFsdWUgLyogLCBzdGFydCA9IDAsIGVuZCA9IEBsZW5ndGggKi8pIHtcbiAgdmFyIE8gPSB0b09iamVjdCh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICB2YXIgYXJndW1lbnRzTGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGxlbmd0aCk7XG4gIHZhciBlbmQgPSBhcmd1bWVudHNMZW5ndGggPiAyID8gYXJndW1lbnRzWzJdIDogdW5kZWZpbmVkO1xuICB2YXIgZW5kUG9zID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiB0b0Fic29sdXRlSW5kZXgoZW5kLCBsZW5ndGgpO1xuICB3aGlsZSAoZW5kUG9zID4gaW5kZXgpIE9baW5kZXgrK10gPSB2YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICRmb3JFYWNoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZvckVhY2g7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBTVFJJQ1RfTUVUSE9EID0gYXJyYXlNZXRob2RJc1N0cmljdCgnZm9yRWFjaCcpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZm9yZWFjaFxubW9kdWxlLmV4cG9ydHMgPSAhU1RSSUNUX01FVEhPRCA/IGZ1bmN0aW9uIGZvckVhY2goY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmb3JFYWNoKHRoaXMsIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLWFycmF5LXByb3RvdHlwZS1mb3JlYWNoIC0tIHNhZmVcbn0gOiBbXS5mb3JFYWNoO1xuIiwidmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENvbnN0cnVjdG9yLCBsaXN0KSB7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShsaXN0KTtcbiAgdmFyIHJlc3VsdCA9IG5ldyBDb25zdHJ1Y3RvcihsZW5ndGgpO1xuICB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHJlc3VsdFtpbmRleF0gPSBsaXN0W2luZGV4KytdO1xuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2FsbC13aXRoLXNhZmUtaXRlcmF0aW9uLWNsb3NpbmcnKTtcbnZhciBpc0FycmF5SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXktaXRlcmF0b3ItbWV0aG9kJyk7XG52YXIgaXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jb25zdHJ1Y3RvcicpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2QgaW1wbGVtZW50YXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBmcm9tKGFycmF5TGlrZSAvKiAsIG1hcGZuID0gdW5kZWZpbmVkLCB0aGlzQXJnID0gdW5kZWZpbmVkICovKSB7XG4gIHZhciBPID0gdG9PYmplY3QoYXJyYXlMaWtlKTtcbiAgdmFyIElTX0NPTlNUUlVDVE9SID0gaXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgaWYgKG1hcHBpbmcpIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzTGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG4gIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKE8pO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgbGVuZ3RoLCByZXN1bHQsIHN0ZXAsIGl0ZXJhdG9yLCBuZXh0LCB2YWx1ZTtcbiAgLy8gaWYgdGhlIHRhcmdldCBpcyBub3QgaXRlcmFibGUgb3IgaXQncyBhbiBhcnJheSB3aXRoIHRoZSBkZWZhdWx0IGl0ZXJhdG9yIC0gdXNlIGEgc2ltcGxlIGNhc2VcbiAgaWYgKGl0ZXJhdG9yTWV0aG9kICYmICEodGhpcyA9PT0gJEFycmF5ICYmIGlzQXJyYXlJdGVyYXRvck1ldGhvZChpdGVyYXRvck1ldGhvZCkpKSB7XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihPLCBpdGVyYXRvck1ldGhvZCk7XG4gICAgbmV4dCA9IGl0ZXJhdG9yLm5leHQ7XG4gICAgcmVzdWx0ID0gSVNfQ09OU1RSVUNUT1IgPyBuZXcgdGhpcygpIDogW107XG4gICAgZm9yICg7IShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmU7IGluZGV4KyspIHtcbiAgICAgIHZhbHVlID0gbWFwcGluZyA/IGNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmcoaXRlcmF0b3IsIG1hcGZuLCBbc3RlcC52YWx1ZSwgaW5kZXhdLCB0cnVlKSA6IHN0ZXAudmFsdWU7XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKE8pO1xuICAgIHJlc3VsdCA9IElTX0NPTlNUUlVDVE9SID8gbmV3IHRoaXMobGVuZ3RoKSA6ICRBcnJheShsZW5ndGgpO1xuICAgIGZvciAoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKSB7XG4gICAgICB2YWx1ZSA9IG1hcHBpbmcgPyBtYXBmbihPW2luZGV4XSwgaW5kZXgpIDogT1tpbmRleF07XG4gICAgICBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIGluZGV4LCB2YWx1ZSk7XG4gICAgfVxuICB9XG4gIHJlc3VsdC5sZW5ndGggPSBpbmRleDtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS57IGluZGV4T2YsIGluY2x1ZGVzIH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoSVNfSU5DTFVERVMpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgZWwsIGZyb21JbmRleCkge1xuICAgIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGluZGV4ID0gdG9BYnNvbHV0ZUluZGV4KGZyb21JbmRleCwgbGVuZ3RoKTtcbiAgICB2YXIgdmFsdWU7XG4gICAgLy8gQXJyYXkjaW5jbHVkZXMgdXNlcyBTYW1lVmFsdWVaZXJvIGVxdWFsaXR5IGFsZ29yaXRobVxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgaWYgKElTX0lOQ0xVREVTICYmIGVsICE9IGVsKSB3aGlsZSAobGVuZ3RoID4gaW5kZXgpIHtcbiAgICAgIHZhbHVlID0gT1tpbmRleCsrXTtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgICBpZiAodmFsdWUgIT0gdmFsdWUpIHJldHVybiB0cnVlO1xuICAgIC8vIEFycmF5I2luZGV4T2YgaWdub3JlcyBob2xlcywgQXJyYXkjaW5jbHVkZXMgLSBub3RcbiAgICB9IGVsc2UgZm9yICg7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgIGlmICgoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTykgJiYgT1tpbmRleF0gPT09IGVsKSByZXR1cm4gSVNfSU5DTFVERVMgfHwgaW5kZXggfHwgMDtcbiAgICB9IHJldHVybiAhSVNfSU5DTFVERVMgJiYgLTE7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4gIGluY2x1ZGVzOiBjcmVhdGVNZXRob2QodHJ1ZSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuaW5kZXhPZmAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluZGV4b2ZcbiAgaW5kZXhPZjogY3JlYXRlTWV0aG9kKGZhbHNlKVxufTtcbiIsInZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xuXG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKFtdLnB1c2gpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgZm9yRWFjaCwgbWFwLCBmaWx0ZXIsIHNvbWUsIGV2ZXJ5LCBmaW5kLCBmaW5kSW5kZXgsIGZpbHRlclJlamVjdCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKFRZUEUpIHtcbiAgdmFyIElTX01BUCA9IFRZUEUgPT0gMTtcbiAgdmFyIElTX0ZJTFRFUiA9IFRZUEUgPT0gMjtcbiAgdmFyIElTX1NPTUUgPSBUWVBFID09IDM7XG4gIHZhciBJU19FVkVSWSA9IFRZUEUgPT0gNDtcbiAgdmFyIElTX0ZJTkRfSU5ERVggPSBUWVBFID09IDY7XG4gIHZhciBJU19GSUxURVJfUkVKRUNUID0gVFlQRSA9PSA3O1xuICB2YXIgTk9fSE9MRVMgPSBUWVBFID09IDUgfHwgSVNfRklORF9JTkRFWDtcbiAgcmV0dXJuIGZ1bmN0aW9uICgkdGhpcywgY2FsbGJhY2tmbiwgdGhhdCwgc3BlY2lmaWNDcmVhdGUpIHtcbiAgICB2YXIgTyA9IHRvT2JqZWN0KCR0aGlzKTtcbiAgICB2YXIgc2VsZiA9IEluZGV4ZWRPYmplY3QoTyk7XG4gICAgdmFyIGJvdW5kRnVuY3Rpb24gPSBiaW5kKGNhbGxiYWNrZm4sIHRoYXQpO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShzZWxmKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBjcmVhdGUgPSBzcGVjaWZpY0NyZWF0ZSB8fCBhcnJheVNwZWNpZXNDcmVhdGU7XG4gICAgdmFyIHRhcmdldCA9IElTX01BUCA/IGNyZWF0ZSgkdGhpcywgbGVuZ3RoKSA6IElTX0ZJTFRFUiB8fCBJU19GSUxURVJfUkVKRUNUID8gY3JlYXRlKCR0aGlzLCAwKSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgdmFsdWUsIHJlc3VsdDtcbiAgICBmb3IgKDtsZW5ndGggPiBpbmRleDsgaW5kZXgrKykgaWYgKE5PX0hPTEVTIHx8IGluZGV4IGluIHNlbGYpIHtcbiAgICAgIHZhbHVlID0gc2VsZltpbmRleF07XG4gICAgICByZXN1bHQgPSBib3VuZEZ1bmN0aW9uKHZhbHVlLCBpbmRleCwgTyk7XG4gICAgICBpZiAoVFlQRSkge1xuICAgICAgICBpZiAoSVNfTUFQKSB0YXJnZXRbaW5kZXhdID0gcmVzdWx0OyAvLyBtYXBcbiAgICAgICAgZWxzZSBpZiAocmVzdWx0KSBzd2l0Y2ggKFRZUEUpIHtcbiAgICAgICAgICBjYXNlIDM6IHJldHVybiB0cnVlOyAgICAgICAgICAgICAgLy8gc29tZVxuICAgICAgICAgIGNhc2UgNTogcmV0dXJuIHZhbHVlOyAgICAgICAgICAgICAvLyBmaW5kXG4gICAgICAgICAgY2FzZSA2OiByZXR1cm4gaW5kZXg7ICAgICAgICAgICAgIC8vIGZpbmRJbmRleFxuICAgICAgICAgIGNhc2UgMjogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJcbiAgICAgICAgfSBlbHNlIHN3aXRjaCAoVFlQRSkge1xuICAgICAgICAgIGNhc2UgNDogcmV0dXJuIGZhbHNlOyAgICAgICAgICAgICAvLyBldmVyeVxuICAgICAgICAgIGNhc2UgNzogcHVzaCh0YXJnZXQsIHZhbHVlKTsgICAgICAvLyBmaWx0ZXJSZWplY3RcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gSVNfRklORF9JTkRFWCA/IC0xIDogSVNfU09NRSB8fCBJU19FVkVSWSA/IElTX0VWRVJZIDogdGFyZ2V0O1xuICB9O1xufTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZm9yRWFjaGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmZvcmVhY2hcbiAgZm9yRWFjaDogY3JlYXRlTWV0aG9kKDApLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuICBtYXA6IGNyZWF0ZU1ldGhvZCgxKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maWx0ZXJgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbiAgZmlsdGVyOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuc29tZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnNvbWVcbiAgc29tZTogY3JlYXRlTWV0aG9kKDMpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZXZlcnlcbiAgZXZlcnk6IGNyZWF0ZU1ldGhvZCg0KSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5maW5kYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZFxuICBmaW5kOiBjcmVhdGVNZXRob2QoNSksXG4gIC8vIGBBcnJheS5wcm90b3R5cGUuZmluZEluZGV4YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuZmluZEluZGV4XG4gIGZpbmRJbmRleDogY3JlYXRlTWV0aG9kKDYpLFxuICAvLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlclJlamVjdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS90YzM5L3Byb3Bvc2FsLWFycmF5LWZpbHRlcmluZ1xuICBmaWx0ZXJSZWplY3Q6IGNyZWF0ZU1ldGhvZCg3KVxufTtcbiIsIid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIGVzLXgvbm8tYXJyYXktcHJvdG90eXBlLWxhc3RpbmRleG9mIC0tIHNhZmUgKi9cbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciBtaW4gPSBNYXRoLm1pbjtcbnZhciAkbGFzdEluZGV4T2YgPSBbXS5sYXN0SW5kZXhPZjtcbnZhciBORUdBVElWRV9aRVJPID0gISEkbGFzdEluZGV4T2YgJiYgMSAvIFsxXS5sYXN0SW5kZXhPZigxLCAtMCkgPCAwO1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdsYXN0SW5kZXhPZicpO1xudmFyIEZPUkNFRCA9IE5FR0FUSVZFX1pFUk8gfHwgIVNUUklDVF9NRVRIT0Q7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2ZgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUubGFzdGluZGV4b2Zcbm1vZHVsZS5leHBvcnRzID0gRk9SQ0VEID8gZnVuY3Rpb24gbGFzdEluZGV4T2Yoc2VhcmNoRWxlbWVudCAvKiAsIGZyb21JbmRleCA9IEBbKi0xXSAqLykge1xuICAvLyBjb252ZXJ0IC0wIHRvICswXG4gIGlmIChORUdBVElWRV9aRVJPKSByZXR1cm4gYXBwbHkoJGxhc3RJbmRleE9mLCB0aGlzLCBhcmd1bWVudHMpIHx8IDA7XG4gIHZhciBPID0gdG9JbmRleGVkT2JqZWN0KHRoaXMpO1xuICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gIHZhciBpbmRleCA9IGxlbmd0aCAtIDE7XG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID4gMSkgaW5kZXggPSBtaW4oaW5kZXgsIHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnRzWzFdKSk7XG4gIGlmIChpbmRleCA8IDApIGluZGV4ID0gbGVuZ3RoICsgaW5kZXg7XG4gIGZvciAoO2luZGV4ID49IDA7IGluZGV4LS0pIGlmIChpbmRleCBpbiBPICYmIE9baW5kZXhdID09PSBzZWFyY2hFbGVtZW50KSByZXR1cm4gaW5kZXggfHwgMDtcbiAgcmV0dXJuIC0xO1xufSA6ICRsYXN0SW5kZXhPZjtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIFY4X1ZFUlNJT04gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXY4LXZlcnNpb24nKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTUVUSE9EX05BTUUpIHtcbiAgLy8gV2UgY2FuJ3QgdXNlIHRoaXMgZmVhdHVyZSBkZXRlY3Rpb24gaW4gVjggc2luY2UgaXQgY2F1c2VzXG4gIC8vIGRlb3B0aW1pemF0aW9uIGFuZCBzZXJpb3VzIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzdcbiAgcmV0dXJuIFY4X1ZFUlNJT04gPj0gNTEgfHwgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgYXJyYXkgPSBbXTtcbiAgICB2YXIgY29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciA9IHt9O1xuICAgIGNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHsgZm9vOiAxIH07XG4gICAgfTtcbiAgICByZXR1cm4gYXJyYXlbTUVUSE9EX05BTUVdKEJvb2xlYW4pLmZvbyAhPT0gMTtcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FLCBhcmd1bWVudCkge1xuICB2YXIgbWV0aG9kID0gW11bTUVUSE9EX05BTUVdO1xuICByZXR1cm4gISFtZXRob2QgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11c2VsZXNzLWNhbGwgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgICBtZXRob2QuY2FsbChudWxsLCBhcmd1bWVudCB8fCBmdW5jdGlvbiAoKSB7IHJldHVybiAxOyB9LCAxKTtcbiAgfSk7XG59O1xuIiwidmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmRleGVkLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLnsgcmVkdWNlLCByZWR1Y2VSaWdodCB9YCBtZXRob2RzIGltcGxlbWVudGF0aW9uXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKElTX1JJR0hUKSB7XG4gIHJldHVybiBmdW5jdGlvbiAodGhhdCwgY2FsbGJhY2tmbiwgYXJndW1lbnRzTGVuZ3RoLCBtZW1vKSB7XG4gICAgYUNhbGxhYmxlKGNhbGxiYWNrZm4pO1xuICAgIHZhciBPID0gdG9PYmplY3QodGhhdCk7XG4gICAgdmFyIHNlbGYgPSBJbmRleGVkT2JqZWN0KE8pO1xuICAgIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgICB2YXIgaW5kZXggPSBJU19SSUdIVCA/IGxlbmd0aCAtIDEgOiAwO1xuICAgIHZhciBpID0gSVNfUklHSFQgPyAtMSA6IDE7XG4gICAgaWYgKGFyZ3VtZW50c0xlbmd0aCA8IDIpIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgICBtZW1vID0gc2VsZltpbmRleF07XG4gICAgICAgIGluZGV4ICs9IGk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgICAgaW5kZXggKz0gaTtcbiAgICAgIGlmIChJU19SSUdIVCA/IGluZGV4IDwgMCA6IGxlbmd0aCA8PSBpbmRleCkge1xuICAgICAgICB0aHJvdyAkVHlwZUVycm9yKCdSZWR1Y2Ugb2YgZW1wdHkgYXJyYXkgd2l0aCBubyBpbml0aWFsIHZhbHVlJyk7XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAoO0lTX1JJR0hUID8gaW5kZXggPj0gMCA6IGxlbmd0aCA+IGluZGV4OyBpbmRleCArPSBpKSBpZiAoaW5kZXggaW4gc2VsZikge1xuICAgICAgbWVtbyA9IGNhbGxiYWNrZm4obWVtbywgc2VsZltpbmRleF0sIGluZGV4LCBPKTtcbiAgICB9XG4gICAgcmV0dXJuIG1lbW87XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5yZWR1Y2VcbiAgbGVmdDogY3JlYXRlTWV0aG9kKGZhbHNlKSxcbiAgLy8gYEFycmF5LnByb3RvdHlwZS5yZWR1Y2VSaWdodGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLnJlZHVjZXJpZ2h0XG4gIHJpZ2h0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCJ2YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHknKTtcblxudmFyICRBcnJheSA9IEFycmF5O1xudmFyIG1heCA9IE1hdGgubWF4O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gIHZhciBmaW4gPSB0b0Fic29sdXRlSW5kZXgoZW5kID09PSB1bmRlZmluZWQgPyBsZW5ndGggOiBlbmQsIGxlbmd0aCk7XG4gIHZhciByZXN1bHQgPSAkQXJyYXkobWF4KGZpbiAtIGssIDApKTtcbiAgZm9yICh2YXIgbiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICByZXN1bHQubGVuZ3RoID0gbjtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoW10uc2xpY2UpO1xuIiwidmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbnZhciBtZXJnZVNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgbWlkZGxlID0gZmxvb3IobGVuZ3RoIC8gMik7XG4gIHJldHVybiBsZW5ndGggPCA4ID8gaW5zZXJ0aW9uU29ydChhcnJheSwgY29tcGFyZWZuKSA6IG1lcmdlKFxuICAgIGFycmF5LFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCAwLCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIG1lcmdlU29ydChhcnJheVNsaWNlKGFycmF5LCBtaWRkbGUpLCBjb21wYXJlZm4pLFxuICAgIGNvbXBhcmVmblxuICApO1xufTtcblxudmFyIGluc2VydGlvblNvcnQgPSBmdW5jdGlvbiAoYXJyYXksIGNvbXBhcmVmbikge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB2YXIgaSA9IDE7XG4gIHZhciBlbGVtZW50LCBqO1xuXG4gIHdoaWxlIChpIDwgbGVuZ3RoKSB7XG4gICAgaiA9IGk7XG4gICAgZWxlbWVudCA9IGFycmF5W2ldO1xuICAgIHdoaWxlIChqICYmIGNvbXBhcmVmbihhcnJheVtqIC0gMV0sIGVsZW1lbnQpID4gMCkge1xuICAgICAgYXJyYXlbal0gPSBhcnJheVstLWpdO1xuICAgIH1cbiAgICBpZiAoaiAhPT0gaSsrKSBhcnJheVtqXSA9IGVsZW1lbnQ7XG4gIH0gcmV0dXJuIGFycmF5O1xufTtcblxudmFyIG1lcmdlID0gZnVuY3Rpb24gKGFycmF5LCBsZWZ0LCByaWdodCwgY29tcGFyZWZuKSB7XG4gIHZhciBsbGVuZ3RoID0gbGVmdC5sZW5ndGg7XG4gIHZhciBybGVuZ3RoID0gcmlnaHQubGVuZ3RoO1xuICB2YXIgbGluZGV4ID0gMDtcbiAgdmFyIHJpbmRleCA9IDA7XG5cbiAgd2hpbGUgKGxpbmRleCA8IGxsZW5ndGggfHwgcmluZGV4IDwgcmxlbmd0aCkge1xuICAgIGFycmF5W2xpbmRleCArIHJpbmRleF0gPSAobGluZGV4IDwgbGxlbmd0aCAmJiByaW5kZXggPCBybGVuZ3RoKVxuICAgICAgPyBjb21wYXJlZm4obGVmdFtsaW5kZXhdLCByaWdodFtyaW5kZXhdKSA8PSAwID8gbGVmdFtsaW5kZXgrK10gOiByaWdodFtyaW5kZXgrK11cbiAgICAgIDogbGluZGV4IDwgbGxlbmd0aCA/IGxlZnRbbGluZGV4KytdIDogcmlnaHRbcmluZGV4KytdO1xuICB9IHJldHVybiBhcnJheTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gbWVyZ2VTb3J0O1xuIiwidmFyIGlzQXJyYXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtYXJyYXknKTtcbnZhciBpc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNvbnN0cnVjdG9yJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG5cbi8vIGEgcGFydCBvZiBgQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXlzcGVjaWVzY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHZhciBDO1xuICBpZiAoaXNBcnJheShvcmlnaW5hbEFycmF5KSkge1xuICAgIEMgPSBvcmlnaW5hbEFycmF5LmNvbnN0cnVjdG9yO1xuICAgIC8vIGNyb3NzLXJlYWxtIGZhbGxiYWNrXG4gICAgaWYgKGlzQ29uc3RydWN0b3IoQykgJiYgKEMgPT09ICRBcnJheSB8fCBpc0FycmF5KEMucHJvdG90eXBlKSkpIEMgPSB1bmRlZmluZWQ7XG4gICAgZWxzZSBpZiAoaXNPYmplY3QoQykpIHtcbiAgICAgIEMgPSBDW1NQRUNJRVNdO1xuICAgICAgaWYgKEMgPT09IG51bGwpIEMgPSB1bmRlZmluZWQ7XG4gICAgfVxuICB9IHJldHVybiBDID09PSB1bmRlZmluZWQgPyAkQXJyYXkgOiBDO1xufTtcbiIsInZhciBhcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbi8vIGBBcnJheVNwZWNpZXNDcmVhdGVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheXNwZWNpZXNjcmVhdGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9yaWdpbmFsQXJyYXksIGxlbmd0aCkge1xuICByZXR1cm4gbmV3IChhcnJheVNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5KSkobGVuZ3RoID09PSAwID8gMCA6IGxlbmd0aCk7XG59O1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGl0ZXJhdG9yQ2xvc2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3ItY2xvc2UnKTtcblxuLy8gY2FsbCBzb21ldGhpbmcgb24gaXRlcmF0b3Igc3RlcCB3aXRoIHNhZmUgY2xvc2luZyBvbiBlcnJvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlcmF0b3IsIGZuLCB2YWx1ZSwgRU5UUklFUykge1xuICB0cnkge1xuICAgIHJldHVybiBFTlRSSUVTID8gZm4oYW5PYmplY3QodmFsdWUpWzBdLCB2YWx1ZVsxXSkgOiBmbih2YWx1ZSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaXRlcmF0b3JDbG9zZShpdGVyYXRvciwgJ3Rocm93JywgZXJyb3IpO1xuICB9XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgU0FGRV9DTE9TSU5HID0gZmFsc2U7XG5cbnRyeSB7XG4gIHZhciBjYWxsZWQgPSAwO1xuICB2YXIgaXRlcmF0b3JXaXRoUmV0dXJuID0ge1xuICAgIG5leHQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHJldHVybiB7IGRvbmU6ICEhY2FsbGVkKysgfTtcbiAgICB9LFxuICAgICdyZXR1cm4nOiBmdW5jdGlvbiAoKSB7XG4gICAgICBTQUZFX0NMT1NJTkcgPSB0cnVlO1xuICAgIH1cbiAgfTtcbiAgaXRlcmF0b3JXaXRoUmV0dXJuW0lURVJBVE9SXSA9IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tYXJyYXktZnJvbSwgbm8tdGhyb3ctbGl0ZXJhbCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICBBcnJheS5mcm9tKGl0ZXJhdG9yV2l0aFJldHVybiwgZnVuY3Rpb24gKCkgeyB0aHJvdyAyOyB9KTtcbn0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoZXhlYywgU0tJUF9DTE9TSU5HKSB7XG4gIGlmICghU0tJUF9DTE9TSU5HICYmICFTQUZFX0NMT1NJTkcpIHJldHVybiBmYWxzZTtcbiAgdmFyIElURVJBVElPTl9TVVBQT1JUID0gZmFsc2U7XG4gIHRyeSB7XG4gICAgdmFyIG9iamVjdCA9IHt9O1xuICAgIG9iamVjdFtJVEVSQVRPUl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgcmV0dXJuIHsgZG9uZTogSVRFUkFUSU9OX1NVUFBPUlQgPSB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfTtcbiAgICBleGVjKG9iamVjdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgcmV0dXJuIElURVJBVElPTl9TVVBQT1JUO1xufTtcbiIsInZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcblxudmFyIHRvU3RyaW5nID0gdW5jdXJyeVRoaXMoe30udG9TdHJpbmcpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gc3RyaW5nU2xpY2UodG9TdHJpbmcoaXQpLCA4LCAtMSk7XG59O1xuIiwidmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZlJhdyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xuXG4vLyBFUzMgd3JvbmcgaGVyZVxudmFyIENPUlJFQ1RfQVJHVU1FTlRTID0gY2xhc3NvZlJhdyhmdW5jdGlvbiAoKSB7IHJldHVybiBhcmd1bWVudHM7IH0oKSkgPT0gJ0FyZ3VtZW50cyc7XG5cbi8vIGZhbGxiYWNrIGZvciBJRTExIFNjcmlwdCBBY2Nlc3MgRGVuaWVkIGVycm9yXG52YXIgdHJ5R2V0ID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gaXRba2V5XTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxufTtcblxuLy8gZ2V0dGluZyB0YWcgZnJvbSBFUzYrIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYFxubW9kdWxlLmV4cG9ydHMgPSBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPyBjbGFzc29mUmF3IDogZnVuY3Rpb24gKGl0KSB7XG4gIHZhciBPLCB0YWcsIHJlc3VsdDtcbiAgcmV0dXJuIGl0ID09PSB1bmRlZmluZWQgPyAnVW5kZWZpbmVkJyA6IGl0ID09PSBudWxsID8gJ051bGwnXG4gICAgLy8gQEB0b1N0cmluZ1RhZyBjYXNlXG4gICAgOiB0eXBlb2YgKHRhZyA9IHRyeUdldChPID0gJE9iamVjdChpdCksIFRPX1NUUklOR19UQUcpKSA9PSAnc3RyaW5nJyA/IHRhZ1xuICAgIC8vIGJ1aWx0aW5UYWcgY2FzZVxuICAgIDogQ09SUkVDVF9BUkdVTUVOVFMgPyBjbGFzc29mUmF3KE8pXG4gICAgLy8gRVMzIGFyZ3VtZW50cyBmYWxsYmFja1xuICAgIDogKHJlc3VsdCA9IGNsYXNzb2ZSYXcoTykpID09ICdPYmplY3QnICYmIGlzQ2FsbGFibGUoTy5jYWxsZWUpID8gJ0FyZ3VtZW50cycgOiByZXN1bHQ7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZGVmaW5lQnVpbHRJbnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWlucycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhc3RLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5mYXN0S2V5O1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3I7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGluZGV4OiBjcmVhdGUobnVsbCksXG4gICAgICAgIGZpcnN0OiB1bmRlZmluZWQsXG4gICAgICAgIGxhc3Q6IHVuZGVmaW5lZCxcbiAgICAgICAgc2l6ZTogMFxuICAgICAgfSk7XG4gICAgICBpZiAoIURFU0NSSVBUT1JTKSB0aGF0LnNpemUgPSAwO1xuICAgICAgaWYgKGl0ZXJhYmxlICE9IHVuZGVmaW5lZCkgaXRlcmF0ZShpdGVyYWJsZSwgdGhhdFtBRERFUl0sIHsgdGhhdDogdGhhdCwgQVNfRU5UUklFUzogSVNfTUFQIH0pO1xuICAgIH0pO1xuXG4gICAgdmFyIFByb3RvdHlwZSA9IENvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuICAgIHZhciBnZXRJbnRlcm5hbFN0YXRlID0gaW50ZXJuYWxTdGF0ZUdldHRlckZvcihDT05TVFJVQ1RPUl9OQU1FKTtcblxuICAgIHZhciBkZWZpbmUgPSBmdW5jdGlvbiAodGhhdCwga2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICB2YXIgcHJldmlvdXMsIGluZGV4O1xuICAgICAgLy8gY2hhbmdlIGV4aXN0aW5nIGVudHJ5XG4gICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgZW50cnkudmFsdWUgPSB2YWx1ZTtcbiAgICAgIC8vIGNyZWF0ZSBuZXcgZW50cnlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YXRlLmxhc3QgPSBlbnRyeSA9IHtcbiAgICAgICAgICBpbmRleDogaW5kZXggPSBmYXN0S2V5KGtleSwgdHJ1ZSksXG4gICAgICAgICAga2V5OiBrZXksXG4gICAgICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzOiBwcmV2aW91cyA9IHN0YXRlLmxhc3QsXG4gICAgICAgICAgbmV4dDogdW5kZWZpbmVkLFxuICAgICAgICAgIHJlbW92ZWQ6IGZhbHNlXG4gICAgICAgIH07XG4gICAgICAgIGlmICghc3RhdGUuZmlyc3QpIHN0YXRlLmZpcnN0ID0gZW50cnk7XG4gICAgICAgIGlmIChwcmV2aW91cykgcHJldmlvdXMubmV4dCA9IGVudHJ5O1xuICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUrKztcbiAgICAgICAgZWxzZSB0aGF0LnNpemUrKztcbiAgICAgICAgLy8gYWRkIHRvIGluZGV4XG4gICAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSBzdGF0ZS5pbmRleFtpbmRleF0gPSBlbnRyeTtcbiAgICAgIH0gcmV0dXJuIHRoYXQ7XG4gICAgfTtcblxuICAgIHZhciBnZXRFbnRyeSA9IGZ1bmN0aW9uICh0aGF0LCBrZXkpIHtcbiAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAvLyBmYXN0IGNhc2VcbiAgICAgIHZhciBpbmRleCA9IGZhc3RLZXkoa2V5KTtcbiAgICAgIHZhciBlbnRyeTtcbiAgICAgIGlmIChpbmRleCAhPT0gJ0YnKSByZXR1cm4gc3RhdGUuaW5kZXhbaW5kZXhdO1xuICAgICAgLy8gZnJvemVuIG9iamVjdCBjYXNlXG4gICAgICBmb3IgKGVudHJ5ID0gc3RhdGUuZmlyc3Q7IGVudHJ5OyBlbnRyeSA9IGVudHJ5Lm5leHQpIHtcbiAgICAgICAgaWYgKGVudHJ5LmtleSA9PSBrZXkpIHJldHVybiBlbnRyeTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBNYXAsIFNldCB9LnByb3RvdHlwZS5jbGVhcigpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuY2xlYXJcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5jbGVhclxuICAgICAgY2xlYXI6IGZ1bmN0aW9uIGNsZWFyKCkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBkYXRhID0gc3RhdGUuaW5kZXg7XG4gICAgICAgIHZhciBlbnRyeSA9IHN0YXRlLmZpcnN0O1xuICAgICAgICB3aGlsZSAoZW50cnkpIHtcbiAgICAgICAgICBlbnRyeS5yZW1vdmVkID0gdHJ1ZTtcbiAgICAgICAgICBpZiAoZW50cnkucHJldmlvdXMpIGVudHJ5LnByZXZpb3VzID0gZW50cnkucHJldmlvdXMubmV4dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgICBkZWxldGUgZGF0YVtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkgPSBlbnRyeS5uZXh0O1xuICAgICAgICB9XG4gICAgICAgIHN0YXRlLmZpcnN0ID0gc3RhdGUubGFzdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgaWYgKERFU0NSSVBUT1JTKSBzdGF0ZS5zaXplID0gMDtcbiAgICAgICAgZWxzZSB0aGF0LnNpemUgPSAwO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZGVsZXRlXG4gICAgICAnZGVsZXRlJzogZnVuY3Rpb24gKGtleSkge1xuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhhdCk7XG4gICAgICAgIHZhciBlbnRyeSA9IGdldEVudHJ5KHRoYXQsIGtleSk7XG4gICAgICAgIGlmIChlbnRyeSkge1xuICAgICAgICAgIHZhciBuZXh0ID0gZW50cnkubmV4dDtcbiAgICAgICAgICB2YXIgcHJldiA9IGVudHJ5LnByZXZpb3VzO1xuICAgICAgICAgIGRlbGV0ZSBzdGF0ZS5pbmRleFtlbnRyeS5pbmRleF07XG4gICAgICAgICAgZW50cnkucmVtb3ZlZCA9IHRydWU7XG4gICAgICAgICAgaWYgKHByZXYpIHByZXYubmV4dCA9IG5leHQ7XG4gICAgICAgICAgaWYgKG5leHQpIG5leHQucHJldmlvdXMgPSBwcmV2O1xuICAgICAgICAgIGlmIChzdGF0ZS5maXJzdCA9PSBlbnRyeSkgc3RhdGUuZmlyc3QgPSBuZXh0O1xuICAgICAgICAgIGlmIChzdGF0ZS5sYXN0ID09IGVudHJ5KSBzdGF0ZS5sYXN0ID0gcHJldjtcbiAgICAgICAgICBpZiAoREVTQ1JJUFRPUlMpIHN0YXRlLnNpemUtLTtcbiAgICAgICAgICBlbHNlIHRoYXQuc2l6ZS0tO1xuICAgICAgICB9IHJldHVybiAhIWVudHJ5O1xuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlLmZvckVhY2goY2FsbGJhY2tmbiwgdGhpc0FyZyA9IHVuZGVmaW5lZClgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5mb3JlYWNoXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUuZm9yZWFjaFxuICAgICAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFja2ZuIC8qICwgdGhhdCA9IHVuZGVmaW5lZCAqLykge1xuICAgICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICAgICAgICB2YXIgZW50cnk7XG4gICAgICAgIHdoaWxlIChlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLmZpcnN0KSB7XG4gICAgICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICAgICAgICAvLyByZXZlcnQgdG8gdGhlIGxhc3QgZXhpc3RpbmcgZW50cnlcbiAgICAgICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGB7IE1hcCwgU2V0fS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS5oYXNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5oYXNcbiAgICAgIGhhczogZnVuY3Rpb24gaGFzKGtleSkge1xuICAgICAgICByZXR1cm4gISFnZXRFbnRyeSh0aGlzLCBrZXkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCBJU19NQVAgPyB7XG4gICAgICAvLyBgTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuZ2V0XG4gICAgICBnZXQ6IGZ1bmN0aW9uIGdldChrZXkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gZ2V0RW50cnkodGhpcywga2V5KTtcbiAgICAgICAgcmV0dXJuIGVudHJ5ICYmIGVudHJ5LnZhbHVlO1xuICAgICAgfSxcbiAgICAgIC8vIGBNYXAucHJvdG90eXBlLnNldChrZXksIHZhbHVlKWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUuc2V0XG4gICAgICBzZXQ6IGZ1bmN0aW9uIHNldChrZXksIHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywga2V5ID09PSAwID8gMCA6IGtleSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0gOiB7XG4gICAgICAvLyBgU2V0LnByb3RvdHlwZS5hZGQodmFsdWUpYCBtZXRob2RcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUgPSB2YWx1ZSA9PT0gMCA/IDAgOiB2YWx1ZSwgdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmIChERVNDUklQVE9SUykgZGVmaW5lUHJvcGVydHkoUHJvdG90eXBlLCAnc2l6ZScsIHtcbiAgICAgIGdldDogZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5zaXplO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBDb25zdHJ1Y3RvcjtcbiAgfSxcbiAgc2V0U3Ryb25nOiBmdW5jdGlvbiAoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCkge1xuICAgIHZhciBJVEVSQVRPUl9OQU1FID0gQ09OU1RSVUNUT1JfTkFNRSArICcgSXRlcmF0b3InO1xuICAgIHZhciBnZXRJbnRlcm5hbENvbGxlY3Rpb25TdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoQ09OU1RSVUNUT1JfTkFNRSk7XG4gICAgdmFyIGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSA9IGludGVybmFsU3RhdGVHZXR0ZXJGb3IoSVRFUkFUT1JfTkFNRSk7XG4gICAgLy8gYHsgTWFwLCBTZXQgfS5wcm90b3R5cGUueyBrZXlzLCB2YWx1ZXMsIGVudHJpZXMsIEBAaXRlcmF0b3IgfSgpYCBtZXRob2RzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAucHJvdG90eXBlLmVudHJpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUua2V5c1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWFwLnByb3RvdHlwZS52YWx1ZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW1hcC5wcm90b3R5cGUtQEBpdGVyYXRvclxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc2V0LnByb3RvdHlwZS5lbnRyaWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLmtleXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNldC5wcm90b3R5cGUudmFsdWVzXG4gICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zZXQucHJvdG90eXBlLUBAaXRlcmF0b3JcbiAgICBkZWZpbmVJdGVyYXRvcihDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICAgICAgdHlwZTogSVRFUkFUT1JfTkFNRSxcbiAgICAgICAgdGFyZ2V0OiBpdGVyYXRlZCxcbiAgICAgICAgc3RhdGU6IGdldEludGVybmFsQ29sbGVjdGlvblN0YXRlKGl0ZXJhdGVkKSxcbiAgICAgICAga2luZDoga2luZCxcbiAgICAgICAgbGFzdDogdW5kZWZpbmVkXG4gICAgICB9KTtcbiAgICB9LCBmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUodGhpcyk7XG4gICAgICB2YXIga2luZCA9IHN0YXRlLmtpbmQ7XG4gICAgICB2YXIgZW50cnkgPSBzdGF0ZS5sYXN0O1xuICAgICAgLy8gcmV2ZXJ0IHRvIHRoZSBsYXN0IGV4aXN0aW5nIGVudHJ5XG4gICAgICB3aGlsZSAoZW50cnkgJiYgZW50cnkucmVtb3ZlZCkgZW50cnkgPSBlbnRyeS5wcmV2aW91cztcbiAgICAgIC8vIGdldCBuZXh0IGVudHJ5XG4gICAgICBpZiAoIXN0YXRlLnRhcmdldCB8fCAhKHN0YXRlLmxhc3QgPSBlbnRyeSA9IGVudHJ5ID8gZW50cnkubmV4dCA6IHN0YXRlLnN0YXRlLmZpcnN0KSkge1xuICAgICAgICAvLyBvciBmaW5pc2ggdGhlIGl0ZXJhdGlvblxuICAgICAgICBzdGF0ZS50YXJnZXQgPSB1bmRlZmluZWQ7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgICAgIH1cbiAgICAgIC8vIHJldHVybiBzdGVwIGJ5IGtpbmRcbiAgICAgIGlmIChraW5kID09ICdrZXlzJykgcmV0dXJuIHsgdmFsdWU6IGVudHJ5LmtleSwgZG9uZTogZmFsc2UgfTtcbiAgICAgIGlmIChraW5kID09ICd2YWx1ZXMnKSByZXR1cm4geyB2YWx1ZTogZW50cnkudmFsdWUsIGRvbmU6IGZhbHNlIH07XG4gICAgICByZXR1cm4geyB2YWx1ZTogW2VudHJ5LmtleSwgZW50cnkudmFsdWVdLCBkb25lOiBmYWxzZSB9O1xuICAgIH0sIElTX01BUCA/ICdlbnRyaWVzJyA6ICd2YWx1ZXMnLCAhSVNfTUFQLCB0cnVlKTtcblxuICAgIC8vIGB7IE1hcCwgU2V0IH0ucHJvdG90eXBlW0BAc3BlY2llc11gIGFjY2Vzc29yc1xuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0LW1hcC1AQHNwZWNpZXNcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldC1zZXQtQEBzcGVjaWVzXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgZ2V0V2Vha0RhdGEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtbWV0YWRhdGEnKS5nZXRXZWFrRGF0YTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbkluc3RhbmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLWluc3RhbmNlJyk7XG52YXIgaXRlcmF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRlJyk7XG52YXIgQXJyYXlJdGVyYXRpb25Nb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG5cbnZhciBzZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5zZXQ7XG52YXIgaW50ZXJuYWxTdGF0ZUdldHRlckZvciA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yO1xudmFyIGZpbmQgPSBBcnJheUl0ZXJhdGlvbk1vZHVsZS5maW5kO1xudmFyIGZpbmRJbmRleCA9IEFycmF5SXRlcmF0aW9uTW9kdWxlLmZpbmRJbmRleDtcbnZhciBzcGxpY2UgPSB1bmN1cnJ5VGhpcyhbXS5zcGxpY2UpO1xudmFyIGlkID0gMDtcblxuLy8gZmFsbGJhY2sgZm9yIHVuY2F1Z2h0IGZyb3plbiBrZXlzXG52YXIgdW5jYXVnaHRGcm96ZW5TdG9yZSA9IGZ1bmN0aW9uIChzdG9yZSkge1xuICByZXR1cm4gc3RvcmUuZnJvemVuIHx8IChzdG9yZS5mcm96ZW4gPSBuZXcgVW5jYXVnaHRGcm96ZW5TdG9yZSgpKTtcbn07XG5cbnZhciBVbmNhdWdodEZyb3plblN0b3JlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbn07XG5cbnZhciBmaW5kVW5jYXVnaHRGcm96ZW4gPSBmdW5jdGlvbiAoc3RvcmUsIGtleSkge1xuICByZXR1cm4gZmluZChzdG9yZS5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaXRbMF0gPT09IGtleTtcbiAgfSk7XG59O1xuXG5VbmNhdWdodEZyb3plblN0b3JlLnByb3RvdHlwZSA9IHtcbiAgZ2V0OiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSByZXR1cm4gZW50cnlbMV07XG4gIH0sXG4gIGhhczogZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiAhIWZpbmRVbmNhdWdodEZyb3plbih0aGlzLCBrZXkpO1xuICB9LFxuICBzZXQ6IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgdmFyIGVudHJ5ID0gZmluZFVuY2F1Z2h0RnJvemVuKHRoaXMsIGtleSk7XG4gICAgaWYgKGVudHJ5KSBlbnRyeVsxXSA9IHZhbHVlO1xuICAgIGVsc2UgdGhpcy5lbnRyaWVzLnB1c2goW2tleSwgdmFsdWVdKTtcbiAgfSxcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICB2YXIgaW5kZXggPSBmaW5kSW5kZXgodGhpcy5lbnRyaWVzLCBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHJldHVybiBpdFswXSA9PT0ga2V5O1xuICAgIH0pO1xuICAgIGlmICh+aW5kZXgpIHNwbGljZSh0aGlzLmVudHJpZXMsIGluZGV4LCAxKTtcbiAgICByZXR1cm4gISF+aW5kZXg7XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb25zdHJ1Y3RvcjogZnVuY3Rpb24gKHdyYXBwZXIsIENPTlNUUlVDVE9SX05BTUUsIElTX01BUCwgQURERVIpIHtcbiAgICB2YXIgQ29uc3RydWN0b3IgPSB3cmFwcGVyKGZ1bmN0aW9uICh0aGF0LCBpdGVyYWJsZSkge1xuICAgICAgYW5JbnN0YW5jZSh0aGF0LCBQcm90b3R5cGUpO1xuICAgICAgc2V0SW50ZXJuYWxTdGF0ZSh0aGF0LCB7XG4gICAgICAgIHR5cGU6IENPTlNUUlVDVE9SX05BTUUsXG4gICAgICAgIGlkOiBpZCsrLFxuICAgICAgICBmcm96ZW46IHVuZGVmaW5lZFxuICAgICAgfSk7XG4gICAgICBpZiAoaXRlcmFibGUgIT0gdW5kZWZpbmVkKSBpdGVyYXRlKGl0ZXJhYmxlLCB0aGF0W0FEREVSXSwgeyB0aGF0OiB0aGF0LCBBU19FTlRSSUVTOiBJU19NQVAgfSk7XG4gICAgfSk7XG5cbiAgICB2YXIgUHJvdG90eXBlID0gQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgdmFyIGdldEludGVybmFsU3RhdGUgPSBpbnRlcm5hbFN0YXRlR2V0dGVyRm9yKENPTlNUUlVDVE9SX05BTUUpO1xuXG4gICAgdmFyIGRlZmluZSA9IGZ1bmN0aW9uICh0aGF0LCBrZXksIHZhbHVlKSB7XG4gICAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoYXQpO1xuICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShhbk9iamVjdChrZXkpLCB0cnVlKTtcbiAgICAgIGlmIChkYXRhID09PSB0cnVlKSB1bmNhdWdodEZyb3plblN0b3JlKHN0YXRlKS5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICBlbHNlIGRhdGFbc3RhdGUuaWRdID0gdmFsdWU7XG4gICAgICByZXR1cm4gdGhhdDtcbiAgICB9O1xuXG4gICAgZGVmaW5lQnVpbHRJbnMoUHJvdG90eXBlLCB7XG4gICAgICAvLyBgeyBXZWFrTWFwLCBXZWFrU2V0IH0ucHJvdG90eXBlLmRlbGV0ZShrZXkpYCBtZXRob2RzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmRlbGV0ZVxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5kZWxldGVcbiAgICAgICdkZWxldGUnOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSlbJ2RlbGV0ZSddKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmIGhhc093bihkYXRhLCBzdGF0ZS5pZCkgJiYgZGVsZXRlIGRhdGFbc3RhdGUuaWRdO1xuICAgICAgfSxcbiAgICAgIC8vIGB7IFdlYWtNYXAsIFdlYWtTZXQgfS5wcm90b3R5cGUuaGFzKGtleSlgIG1ldGhvZHNcbiAgICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtd2Vha21hcC5wcm90b3R5cGUuaGFzXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWtzZXQucHJvdG90eXBlLmhhc1xuICAgICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghaXNPYmplY3Qoa2V5KSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICB2YXIgZGF0YSA9IGdldFdlYWtEYXRhKGtleSk7XG4gICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuaGFzKGtleSk7XG4gICAgICAgIHJldHVybiBkYXRhICYmIGhhc093bihkYXRhLCBzdGF0ZS5pZCk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBkZWZpbmVCdWlsdElucyhQcm90b3R5cGUsIElTX01BUCA/IHtcbiAgICAgIC8vIGBXZWFrTWFwLnByb3RvdHlwZS5nZXQoa2V5KWAgbWV0aG9kXG4gICAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAucHJvdG90eXBlLmdldFxuICAgICAgZ2V0OiBmdW5jdGlvbiBnZXQoa2V5KSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGdldEludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmIChpc09iamVjdChrZXkpKSB7XG4gICAgICAgICAgdmFyIGRhdGEgPSBnZXRXZWFrRGF0YShrZXkpO1xuICAgICAgICAgIGlmIChkYXRhID09PSB0cnVlKSByZXR1cm4gdW5jYXVnaHRGcm96ZW5TdG9yZShzdGF0ZSkuZ2V0KGtleSk7XG4gICAgICAgICAgcmV0dXJuIGRhdGEgPyBkYXRhW3N0YXRlLmlkXSA6IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIGBXZWFrTWFwLnByb3RvdHlwZS5zZXQoa2V5LCB2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrbWFwLnByb3RvdHlwZS5zZXRcbiAgICAgIHNldDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIGRlZmluZSh0aGlzLCBrZXksIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9IDoge1xuICAgICAgLy8gYFdlYWtTZXQucHJvdG90eXBlLmFkZCh2YWx1ZSlgIG1ldGhvZFxuICAgICAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy13ZWFrc2V0LnByb3RvdHlwZS5hZGRcbiAgICAgIGFkZDogZnVuY3Rpb24gYWRkKHZhbHVlKSB7XG4gICAgICAgIHJldHVybiBkZWZpbmUodGhpcywgdmFsdWUsIHRydWUpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIENvbnN0cnVjdG9yO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzRm9yY2VkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWZvcmNlZCcpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGl0ZXJhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBpbmhlcml0SWZSZXF1aXJlZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbmhlcml0LWlmLXJlcXVpcmVkJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKENPTlNUUlVDVE9SX05BTUUsIHdyYXBwZXIsIGNvbW1vbikge1xuICB2YXIgSVNfTUFQID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdNYXAnKSAhPT0gLTE7XG4gIHZhciBJU19XRUFLID0gQ09OU1RSVUNUT1JfTkFNRS5pbmRleE9mKCdXZWFrJykgIT09IC0xO1xuICB2YXIgQURERVIgPSBJU19NQVAgPyAnc2V0JyA6ICdhZGQnO1xuICB2YXIgTmF0aXZlQ29uc3RydWN0b3IgPSBnbG9iYWxbQ09OU1RSVUNUT1JfTkFNRV07XG4gIHZhciBOYXRpdmVQcm90b3R5cGUgPSBOYXRpdmVDb25zdHJ1Y3RvciAmJiBOYXRpdmVDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG4gIHZhciBDb25zdHJ1Y3RvciA9IE5hdGl2ZUNvbnN0cnVjdG9yO1xuICB2YXIgZXhwb3J0ZWQgPSB7fTtcblxuICB2YXIgZml4TWV0aG9kID0gZnVuY3Rpb24gKEtFWSkge1xuICAgIHZhciB1bmN1cnJpZWROYXRpdmVNZXRob2QgPSB1bmN1cnJ5VGhpcyhOYXRpdmVQcm90b3R5cGVbS0VZXSk7XG4gICAgZGVmaW5lQnVpbHRJbihOYXRpdmVQcm90b3R5cGUsIEtFWSxcbiAgICAgIEtFWSA9PSAnYWRkJyA/IGZ1bmN0aW9uIGFkZCh2YWx1ZSkge1xuICAgICAgICB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywgdmFsdWUgPT09IDAgPyAwIDogdmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH0gOiBLRVkgPT0gJ2RlbGV0ZScgPyBmdW5jdGlvbiAoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogS0VZID09ICdnZXQnID8gZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgICByZXR1cm4gSVNfV0VBSyAmJiAhaXNPYmplY3Qoa2V5KSA/IHVuZGVmaW5lZCA6IHVuY3VycmllZE5hdGl2ZU1ldGhvZCh0aGlzLCBrZXkgPT09IDAgPyAwIDoga2V5KTtcbiAgICAgIH0gOiBLRVkgPT0gJ2hhcycgPyBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICAgIHJldHVybiBJU19XRUFLICYmICFpc09iamVjdChrZXkpID8gZmFsc2UgOiB1bmN1cnJpZWROYXRpdmVNZXRob2QodGhpcywga2V5ID09PSAwID8gMCA6IGtleSk7XG4gICAgICB9IDogZnVuY3Rpb24gc2V0KGtleSwgdmFsdWUpIHtcbiAgICAgICAgdW5jdXJyaWVkTmF0aXZlTWV0aG9kKHRoaXMsIGtleSA9PT0gMCA/IDAgOiBrZXksIHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgKTtcbiAgfTtcblxuICB2YXIgUkVQTEFDRSA9IGlzRm9yY2VkKFxuICAgIENPTlNUUlVDVE9SX05BTUUsXG4gICAgIWlzQ2FsbGFibGUoTmF0aXZlQ29uc3RydWN0b3IpIHx8ICEoSVNfV0VBSyB8fCBOYXRpdmVQcm90b3R5cGUuZm9yRWFjaCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCkuZW50cmllcygpLm5leHQoKTtcbiAgICB9KSlcbiAgKTtcblxuICBpZiAoUkVQTEFDRSkge1xuICAgIC8vIGNyZWF0ZSBjb2xsZWN0aW9uIGNvbnN0cnVjdG9yXG4gICAgQ29uc3RydWN0b3IgPSBjb21tb24uZ2V0Q29uc3RydWN0b3Iod3JhcHBlciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQLCBBRERFUik7XG4gICAgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZS5lbmFibGUoKTtcbiAgfSBlbHNlIGlmIChpc0ZvcmNlZChDT05TVFJVQ1RPUl9OQU1FLCB0cnVlKSkge1xuICAgIHZhciBpbnN0YW5jZSA9IG5ldyBDb25zdHJ1Y3RvcigpO1xuICAgIC8vIGVhcmx5IGltcGxlbWVudGF0aW9ucyBub3Qgc3VwcG9ydHMgY2hhaW5pbmdcbiAgICB2YXIgSEFTTlRfQ0hBSU5JTkcgPSBpbnN0YW5jZVtBRERFUl0oSVNfV0VBSyA/IHt9IDogLTAsIDEpICE9IGluc3RhbmNlO1xuICAgIC8vIFY4IH4gQ2hyb21pdW0gNDAtIHdlYWstY29sbGVjdGlvbnMgdGhyb3dzIG9uIHByaW1pdGl2ZXMsIGJ1dCBzaG91bGQgcmV0dXJuIGZhbHNlXG4gICAgdmFyIFRIUk9XU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyBpbnN0YW5jZS5oYXMoMSk7IH0pO1xuICAgIC8vIG1vc3QgZWFybHkgaW1wbGVtZW50YXRpb25zIGRvZXNuJ3Qgc3VwcG9ydHMgaXRlcmFibGVzLCBtb3N0IG1vZGVybiAtIG5vdCBjbG9zZSBpdCBjb3JyZWN0bHlcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tbmV3IC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgdmFyIEFDQ0VQVF9JVEVSQUJMRVMgPSBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7IG5ldyBOYXRpdmVDb25zdHJ1Y3RvcihpdGVyYWJsZSk7IH0pO1xuICAgIC8vIGZvciBlYXJseSBpbXBsZW1lbnRhdGlvbnMgLTAgYW5kICswIG5vdCB0aGUgc2FtZVxuICAgIHZhciBCVUdHWV9aRVJPID0gIUlTX1dFQUsgJiYgZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgICAgLy8gVjggfiBDaHJvbWl1bSA0Mi0gZmFpbHMgb25seSB3aXRoIDUrIGVsZW1lbnRzXG4gICAgICB2YXIgJGluc3RhbmNlID0gbmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCk7XG4gICAgICB2YXIgaW5kZXggPSA1O1xuICAgICAgd2hpbGUgKGluZGV4LS0pICRpbnN0YW5jZVtBRERFUl0oaW5kZXgsIGluZGV4KTtcbiAgICAgIHJldHVybiAhJGluc3RhbmNlLmhhcygtMCk7XG4gICAgfSk7XG5cbiAgICBpZiAoIUFDQ0VQVF9JVEVSQUJMRVMpIHtcbiAgICAgIENvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGl0ZXJhYmxlKSB7XG4gICAgICAgIGFuSW5zdGFuY2UoZHVtbXksIE5hdGl2ZVByb3RvdHlwZSk7XG4gICAgICAgIHZhciB0aGF0ID0gaW5oZXJpdElmUmVxdWlyZWQobmV3IE5hdGl2ZUNvbnN0cnVjdG9yKCksIGR1bW15LCBDb25zdHJ1Y3Rvcik7XG4gICAgICAgIGlmIChpdGVyYWJsZSAhPSB1bmRlZmluZWQpIGl0ZXJhdGUoaXRlcmFibGUsIHRoYXRbQURERVJdLCB7IHRoYXQ6IHRoYXQsIEFTX0VOVFJJRVM6IElTX01BUCB9KTtcbiAgICAgICAgcmV0dXJuIHRoYXQ7XG4gICAgICB9KTtcbiAgICAgIENvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE5hdGl2ZVByb3RvdHlwZTtcbiAgICAgIE5hdGl2ZVByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IENvbnN0cnVjdG9yO1xuICAgIH1cblxuICAgIGlmIChUSFJPV1NfT05fUFJJTUlUSVZFUyB8fCBCVUdHWV9aRVJPKSB7XG4gICAgICBmaXhNZXRob2QoJ2RlbGV0ZScpO1xuICAgICAgZml4TWV0aG9kKCdoYXMnKTtcbiAgICAgIElTX01BUCAmJiBmaXhNZXRob2QoJ2dldCcpO1xuICAgIH1cblxuICAgIGlmIChCVUdHWV9aRVJPIHx8IEhBU05UX0NIQUlOSU5HKSBmaXhNZXRob2QoQURERVIpO1xuXG4gICAgLy8gd2VhayBjb2xsZWN0aW9ucyBzaG91bGQgbm90IGNvbnRhaW5zIC5jbGVhciBtZXRob2RcbiAgICBpZiAoSVNfV0VBSyAmJiBOYXRpdmVQcm90b3R5cGUuY2xlYXIpIGRlbGV0ZSBOYXRpdmVQcm90b3R5cGUuY2xlYXI7XG4gIH1cblxuICBleHBvcnRlZFtDT05TVFJVQ1RPUl9OQU1FXSA9IENvbnN0cnVjdG9yO1xuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiBDb25zdHJ1Y3RvciAhPSBOYXRpdmVDb25zdHJ1Y3RvciB9LCBleHBvcnRlZCk7XG5cbiAgc2V0VG9TdHJpbmdUYWcoQ29uc3RydWN0b3IsIENPTlNUUlVDVE9SX05BTUUpO1xuXG4gIGlmICghSVNfV0VBSykgY29tbW9uLnNldFN0cm9uZyhDb25zdHJ1Y3RvciwgQ09OU1RSVUNUT1JfTkFNRSwgSVNfTUFQKTtcblxuICByZXR1cm4gQ29uc3RydWN0b3I7XG59O1xuIiwidmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNvdXJjZSwgZXhjZXB0aW9ucykge1xuICB2YXIga2V5cyA9IG93bktleXMoc291cmNlKTtcbiAgdmFyIGRlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbiAgdmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIga2V5ID0ga2V5c1tpXTtcbiAgICBpZiAoIWhhc093bih0YXJnZXQsIGtleSkgJiYgIShleGNlcHRpb25zICYmIGhhc093bihleGNlcHRpb25zLCBrZXkpKSkge1xuICAgICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpO1xuICAgIH1cbiAgfVxufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChNRVRIT0RfTkFNRSkge1xuICB2YXIgcmVnZXhwID0gLy4vO1xuICB0cnkge1xuICAgICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICB9IGNhdGNoIChlcnJvcjEpIHtcbiAgICB0cnkge1xuICAgICAgcmVnZXhwW01BVENIXSA9IGZhbHNlO1xuICAgICAgcmV0dXJuICcvLi8nW01FVEhPRF9OQU1FXShyZWdleHApO1xuICAgIH0gY2F0Y2ggKGVycm9yMikgeyAvKiBlbXB0eSAqLyB9XG4gIH0gcmV0dXJuIGZhbHNlO1xufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIGZ1bmN0aW9uIEYoKSB7IC8qIGVtcHR5ICovIH1cbiAgRi5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBudWxsO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihuZXcgRigpKSAhPT0gRi5wcm90b3R5cGU7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBJdGVyYXRvclByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMtY29yZScpLkl0ZXJhdG9yUHJvdG90eXBlO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG5cbnZhciByZXR1cm5UaGlzID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gdGhpczsgfTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoSXRlcmF0b3JDb25zdHJ1Y3RvciwgTkFNRSwgbmV4dCwgRU5VTUVSQUJMRV9ORVhUKSB7XG4gIHZhciBUT19TVFJJTkdfVEFHID0gTkFNRSArICcgSXRlcmF0b3InO1xuICBJdGVyYXRvckNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IGNyZWF0ZShJdGVyYXRvclByb3RvdHlwZSwgeyBuZXh0OiBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoKyFFTlVNRVJBQkxFX05FWFQsIG5leHQpIH0pO1xuICBzZXRUb1N0cmluZ1RhZyhJdGVyYXRvckNvbnN0cnVjdG9yLCBUT19TVFJJTkdfVEFHLCBmYWxzZSwgdHJ1ZSk7XG4gIEl0ZXJhdG9yc1tUT19TVFJJTkdfVEFHXSA9IHJldHVyblRoaXM7XG4gIHJldHVybiBJdGVyYXRvckNvbnN0cnVjdG9yO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyA/IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5TW9kdWxlLmYob2JqZWN0LCBrZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigxLCB2YWx1ZSkpO1xufSA6IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgb2JqZWN0W2tleV0gPSB2YWx1ZTtcbiAgcmV0dXJuIG9iamVjdDtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChiaXRtYXAsIHZhbHVlKSB7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZTogIShiaXRtYXAgJiAxKSxcbiAgICBjb25maWd1cmFibGU6ICEoYml0bWFwICYgMiksXG4gICAgd3JpdGFibGU6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWU6IHZhbHVlXG4gIH07XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRvUHJvcGVydHlLZXkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJvcGVydHkta2V5Jyk7XG52YXIgZGVmaW5lUHJvcGVydHlNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWRlZmluZS1wcm9wZXJ0eScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvYmplY3QsIGtleSwgdmFsdWUpIHtcbiAgdmFyIHByb3BlcnR5S2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICBpZiAocHJvcGVydHlLZXkgaW4gb2JqZWN0KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKG9iamVjdCwgcHJvcGVydHlLZXksIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCB2YWx1ZSkpO1xuICBlbHNlIG9iamVjdFtwcm9wZXJ0eUtleV0gPSB2YWx1ZTtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBtYWtlQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9tYWtlLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChPLCBrZXksIHZhbHVlLCBvcHRpb25zKSB7XG4gIGlmICghb3B0aW9ucykgb3B0aW9ucyA9IHt9O1xuICB2YXIgc2ltcGxlID0gb3B0aW9ucy5lbnVtZXJhYmxlO1xuICB2YXIgbmFtZSA9IG9wdGlvbnMubmFtZSAhPT0gdW5kZWZpbmVkID8gb3B0aW9ucy5uYW1lIDoga2V5O1xuICBpZiAoaXNDYWxsYWJsZSh2YWx1ZSkpIG1ha2VCdWlsdEluKHZhbHVlLCBuYW1lLCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMuZ2xvYmFsKSB7XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVHbG9iYWxQcm9wZXJ0eShrZXksIHZhbHVlKTtcbiAgfSBlbHNlIHtcbiAgICB0cnkge1xuICAgICAgaWYgKCFvcHRpb25zLnVuc2FmZSkgZGVsZXRlIE9ba2V5XTtcbiAgICAgIGVsc2UgaWYgKE9ba2V5XSkgc2ltcGxlID0gdHJ1ZTtcbiAgICB9IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4gICAgaWYgKHNpbXBsZSkgT1trZXldID0gdmFsdWU7XG4gICAgZWxzZSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSwge1xuICAgICAgdmFsdWU6IHZhbHVlLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6ICFvcHRpb25zLm5vbkNvbmZpZ3VyYWJsZSxcbiAgICAgIHdyaXRhYmxlOiAhb3B0aW9ucy5ub25Xcml0YWJsZVxuICAgIH0pO1xuICB9IHJldHVybiBPO1xufTtcbiIsInZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICh0YXJnZXQsIHNyYywgb3B0aW9ucykge1xuICBmb3IgKHZhciBrZXkgaW4gc3JjKSBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzcmNba2V5XSwgb3B0aW9ucyk7XG4gIHJldHVybiB0YXJnZXQ7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tb2JqZWN0LWRlZmluZXByb3BlcnR5IC0tIHNhZmVcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICB0cnkge1xuICAgIGRlZmluZVByb3BlcnR5KGdsb2JhbCwga2V5LCB7IHZhbHVlOiB2YWx1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBnbG9iYWxba2V5XSA9IHZhbHVlO1xuICB9IHJldHVybiB2YWx1ZTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBGdW5jdGlvbk5hbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1pdGVyYXRvci1jb25zdHJ1Y3RvcicpO1xudmFyIGdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIEl0ZXJhdG9ycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pdGVyYXRvcnMnKTtcbnZhciBJdGVyYXRvcnNDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycy1jb3JlJyk7XG5cbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IEZ1bmN0aW9uTmFtZS5QUk9QRVI7XG52YXIgQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgPSBGdW5jdGlvbk5hbWUuQ09ORklHVVJBQkxFO1xudmFyIEl0ZXJhdG9yUHJvdG90eXBlID0gSXRlcmF0b3JzQ29yZS5JdGVyYXRvclByb3RvdHlwZTtcbnZhciBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gSXRlcmF0b3JzQ29yZS5CVUdHWV9TQUZBUklfSVRFUkFUT1JTO1xudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIEtFWVMgPSAna2V5cyc7XG52YXIgVkFMVUVTID0gJ3ZhbHVlcyc7XG52YXIgRU5UUklFUyA9ICdlbnRyaWVzJztcblxudmFyIHJldHVyblRoaXMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChJdGVyYWJsZSwgTkFNRSwgSXRlcmF0b3JDb25zdHJ1Y3RvciwgbmV4dCwgREVGQVVMVCwgSVNfU0VULCBGT1JDRUQpIHtcbiAgY3JlYXRlSXRlcmF0b3JDb25zdHJ1Y3RvcihJdGVyYXRvckNvbnN0cnVjdG9yLCBOQU1FLCBuZXh0KTtcblxuICB2YXIgZ2V0SXRlcmF0aW9uTWV0aG9kID0gZnVuY3Rpb24gKEtJTkQpIHtcbiAgICBpZiAoS0lORCA9PT0gREVGQVVMVCAmJiBkZWZhdWx0SXRlcmF0b3IpIHJldHVybiBkZWZhdWx0SXRlcmF0b3I7XG4gICAgaWYgKCFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIEtJTkQgaW4gSXRlcmFibGVQcm90b3R5cGUpIHJldHVybiBJdGVyYWJsZVByb3RvdHlwZVtLSU5EXTtcbiAgICBzd2l0Y2ggKEtJTkQpIHtcbiAgICAgIGNhc2UgS0VZUzogcmV0dXJuIGZ1bmN0aW9uIGtleXMoKSB7IHJldHVybiBuZXcgSXRlcmF0b3JDb25zdHJ1Y3Rvcih0aGlzLCBLSU5EKTsgfTtcbiAgICAgIGNhc2UgVkFMVUVTOiByZXR1cm4gZnVuY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgICBjYXNlIEVOVFJJRVM6IHJldHVybiBmdW5jdGlvbiBlbnRyaWVzKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcywgS0lORCk7IH07XG4gICAgfSByZXR1cm4gZnVuY3Rpb24gKCkgeyByZXR1cm4gbmV3IEl0ZXJhdG9yQ29uc3RydWN0b3IodGhpcyk7IH07XG4gIH07XG5cbiAgdmFyIFRPX1NUUklOR19UQUcgPSBOQU1FICsgJyBJdGVyYXRvcic7XG4gIHZhciBJTkNPUlJFQ1RfVkFMVUVTX05BTUUgPSBmYWxzZTtcbiAgdmFyIEl0ZXJhYmxlUHJvdG90eXBlID0gSXRlcmFibGUucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlSXRlcmF0b3IgPSBJdGVyYWJsZVByb3RvdHlwZVtJVEVSQVRPUl1cbiAgICB8fCBJdGVyYWJsZVByb3RvdHlwZVsnQEBpdGVyYXRvciddXG4gICAgfHwgREVGQVVMVCAmJiBJdGVyYWJsZVByb3RvdHlwZVtERUZBVUxUXTtcbiAgdmFyIGRlZmF1bHRJdGVyYXRvciA9ICFCVUdHWV9TQUZBUklfSVRFUkFUT1JTICYmIG5hdGl2ZUl0ZXJhdG9yIHx8IGdldEl0ZXJhdGlvbk1ldGhvZChERUZBVUxUKTtcbiAgdmFyIGFueU5hdGl2ZUl0ZXJhdG9yID0gTkFNRSA9PSAnQXJyYXknID8gSXRlcmFibGVQcm90b3R5cGUuZW50cmllcyB8fCBuYXRpdmVJdGVyYXRvciA6IG5hdGl2ZUl0ZXJhdG9yO1xuICB2YXIgQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBtZXRob2RzLCBLRVk7XG5cbiAgLy8gZml4IG5hdGl2ZVxuICBpZiAoYW55TmF0aXZlSXRlcmF0b3IpIHtcbiAgICBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90b3R5cGVPZihhbnlOYXRpdmVJdGVyYXRvci5jYWxsKG5ldyBJdGVyYWJsZSgpKSk7XG4gICAgaWYgKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSAhPT0gT2JqZWN0LnByb3RvdHlwZSAmJiBDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUubmV4dCkge1xuICAgICAgaWYgKCFJU19QVVJFICYmIGdldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSkgIT09IEl0ZXJhdG9yUHJvdG90eXBlKSB7XG4gICAgICAgIGlmIChzZXRQcm90b3R5cGVPZikge1xuICAgICAgICAgIHNldFByb3RvdHlwZU9mKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZSwgSXRlcmF0b3JQcm90b3R5cGUpO1xuICAgICAgICB9IGVsc2UgaWYgKCFpc0NhbGxhYmxlKEN1cnJlbnRJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0pKSB7XG4gICAgICAgICAgZGVmaW5lQnVpbHRJbihDdXJyZW50SXRlcmF0b3JQcm90b3R5cGUsIElURVJBVE9SLCByZXR1cm5UaGlzKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLy8gU2V0IEBAdG9TdHJpbmdUYWcgdG8gbmF0aXZlIGl0ZXJhdG9yc1xuICAgICAgc2V0VG9TdHJpbmdUYWcoQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCB0cnVlLCB0cnVlKTtcbiAgICAgIGlmIChJU19QVVJFKSBJdGVyYXRvcnNbVE9fU1RSSU5HX1RBR10gPSByZXR1cm5UaGlzO1xuICAgIH1cbiAgfVxuXG4gIC8vIGZpeCBBcnJheS5wcm90b3R5cGUueyB2YWx1ZXMsIEBAaXRlcmF0b3IgfS5uYW1lIGluIFY4IC8gRkZcbiAgaWYgKFBST1BFUl9GVU5DVElPTl9OQU1FICYmIERFRkFVTFQgPT0gVkFMVUVTICYmIG5hdGl2ZUl0ZXJhdG9yICYmIG5hdGl2ZUl0ZXJhdG9yLm5hbWUgIT09IFZBTFVFUykge1xuICAgIGlmICghSVNfUFVSRSAmJiBDT05GSUdVUkFCTEVfRlVOQ1RJT05fTkFNRSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KEl0ZXJhYmxlUHJvdG90eXBlLCAnbmFtZScsIFZBTFVFUyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIElOQ09SUkVDVF9WQUxVRVNfTkFNRSA9IHRydWU7XG4gICAgICBkZWZhdWx0SXRlcmF0b3IgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBjYWxsKG5hdGl2ZUl0ZXJhdG9yLCB0aGlzKTsgfTtcbiAgICB9XG4gIH1cblxuICAvLyBleHBvcnQgYWRkaXRpb25hbCBtZXRob2RzXG4gIGlmIChERUZBVUxUKSB7XG4gICAgbWV0aG9kcyA9IHtcbiAgICAgIHZhbHVlczogZ2V0SXRlcmF0aW9uTWV0aG9kKFZBTFVFUyksXG4gICAgICBrZXlzOiBJU19TRVQgPyBkZWZhdWx0SXRlcmF0b3IgOiBnZXRJdGVyYXRpb25NZXRob2QoS0VZUyksXG4gICAgICBlbnRyaWVzOiBnZXRJdGVyYXRpb25NZXRob2QoRU5UUklFUylcbiAgICB9O1xuICAgIGlmIChGT1JDRUQpIGZvciAoS0VZIGluIG1ldGhvZHMpIHtcbiAgICAgIGlmIChCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB8fCAhKEtFWSBpbiBJdGVyYWJsZVByb3RvdHlwZSkpIHtcbiAgICAgICAgZGVmaW5lQnVpbHRJbihJdGVyYWJsZVByb3RvdHlwZSwgS0VZLCBtZXRob2RzW0tFWV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSAkKHsgdGFyZ2V0OiBOQU1FLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCVUdHWV9TQUZBUklfSVRFUkFUT1JTIHx8IElOQ09SUkVDVF9WQUxVRVNfTkFNRSB9LCBtZXRob2RzKTtcbiAgfVxuXG4gIC8vIGRlZmluZSBpdGVyYXRvclxuICBpZiAoKCFJU19QVVJFIHx8IEZPUkNFRCkgJiYgSXRlcmFibGVQcm90b3R5cGVbSVRFUkFUT1JdICE9PSBkZWZhdWx0SXRlcmF0b3IpIHtcbiAgICBkZWZpbmVCdWlsdEluKEl0ZXJhYmxlUHJvdG90eXBlLCBJVEVSQVRPUiwgZGVmYXVsdEl0ZXJhdG9yLCB7IG5hbWU6IERFRkFVTFQgfSk7XG4gIH1cbiAgSXRlcmF0b3JzW05BTUVdID0gZGVmYXVsdEl0ZXJhdG9yO1xuXG4gIHJldHVybiBtZXRob2RzO1xufTtcbiIsInZhciBwYXRoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BhdGgnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdyYXBwZWRXZWxsS25vd25TeW1ib2xNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wtd3JhcHBlZCcpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChOQU1FKSB7XG4gIHZhciBTeW1ib2wgPSBwYXRoLlN5bWJvbCB8fCAocGF0aC5TeW1ib2wgPSB7fSk7XG4gIGlmICghaGFzT3duKFN5bWJvbCwgTkFNRSkpIGRlZmluZVByb3BlcnR5KFN5bWJvbCwgTkFNRSwge1xuICAgIHZhbHVlOiB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYoTkFNRSlcbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIHRyeVRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RyeS10by1zdHJpbmcnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE8sIFApIHtcbiAgaWYgKCFkZWxldGUgT1tQXSkgdGhyb3cgJFR5cGVFcnJvcignQ2Fubm90IGRlbGV0ZSBwcm9wZXJ0eSAnICsgdHJ5VG9TdHJpbmcoUCkgKyAnIG9mICcgKyB0cnlUb1N0cmluZyhPKSk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIERldGVjdCBJRTgncyBpbmNvbXBsZXRlIGRlZmluZVByb3BlcnR5IGltcGxlbWVudGF0aW9uXG5tb2R1bGUuZXhwb3J0cyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAxLCB7IGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gNzsgfSB9KVsxXSAhPSA3O1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG4vLyB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCBpcyAnb2JqZWN0JyBpbiBvbGQgSUVcbnZhciBFWElTVFMgPSBpc09iamVjdChkb2N1bWVudCkgJiYgaXNPYmplY3QoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBFWElTVFMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcbiIsInZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xudmFyIE1BWF9TQUZFX0lOVEVHRVIgPSAweDFGRkZGRkZGRkZGRkZGOyAvLyAyICoqIDUzIC0gMSA9PSA5MDA3MTk5MjU0NzQwOTkxXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA+IE1BWF9TQUZFX0lOVEVHRVIpIHRocm93ICRUeXBlRXJyb3IoJ01heGltdW0gYWxsb3dlZCBpbmRleCBleGNlZWRlZCcpO1xuICByZXR1cm4gaXQ7XG59O1xuIiwiLy8gaXRlcmFibGUgRE9NIGNvbGxlY3Rpb25zXG4vLyBmbGFnIC0gYGl0ZXJhYmxlYCBpbnRlcmZhY2UgLSAnZW50cmllcycsICdrZXlzJywgJ3ZhbHVlcycsICdmb3JFYWNoJyBtZXRob2RzXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ1NTUnVsZUxpc3Q6IDAsXG4gIENTU1N0eWxlRGVjbGFyYXRpb246IDAsXG4gIENTU1ZhbHVlTGlzdDogMCxcbiAgQ2xpZW50UmVjdExpc3Q6IDAsXG4gIERPTVJlY3RMaXN0OiAwLFxuICBET01TdHJpbmdMaXN0OiAwLFxuICBET01Ub2tlbkxpc3Q6IDEsXG4gIERhdGFUcmFuc2Zlckl0ZW1MaXN0OiAwLFxuICBGaWxlTGlzdDogMCxcbiAgSFRNTEFsbENvbGxlY3Rpb246IDAsXG4gIEhUTUxDb2xsZWN0aW9uOiAwLFxuICBIVE1MRm9ybUVsZW1lbnQ6IDAsXG4gIEhUTUxTZWxlY3RFbGVtZW50OiAwLFxuICBNZWRpYUxpc3Q6IDAsXG4gIE1pbWVUeXBlQXJyYXk6IDAsXG4gIE5hbWVkTm9kZU1hcDogMCxcbiAgTm9kZUxpc3Q6IDEsXG4gIFBhaW50UmVxdWVzdExpc3Q6IDAsXG4gIFBsdWdpbjogMCxcbiAgUGx1Z2luQXJyYXk6IDAsXG4gIFNWR0xlbmd0aExpc3Q6IDAsXG4gIFNWR051bWJlckxpc3Q6IDAsXG4gIFNWR1BhdGhTZWdMaXN0OiAwLFxuICBTVkdQb2ludExpc3Q6IDAsXG4gIFNWR1N0cmluZ0xpc3Q6IDAsXG4gIFNWR1RyYW5zZm9ybUxpc3Q6IDAsXG4gIFNvdXJjZUJ1ZmZlckxpc3Q6IDAsXG4gIFN0eWxlU2hlZXRMaXN0OiAwLFxuICBUZXh0VHJhY2tDdWVMaXN0OiAwLFxuICBUZXh0VHJhY2tMaXN0OiAwLFxuICBUb3VjaExpc3Q6IDBcbn07XG4iLCIvLyBpbiBvbGQgV2ViS2l0IHZlcnNpb25zLCBgZWxlbWVudC5jbGFzc0xpc3RgIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBnbG9iYWwgYERPTVRva2VuTGlzdGBcbnZhciBkb2N1bWVudENyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxudmFyIGNsYXNzTGlzdCA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnc3BhbicpLmNsYXNzTGlzdDtcbnZhciBET01Ub2tlbkxpc3RQcm90b3R5cGUgPSBjbGFzc0xpc3QgJiYgY2xhc3NMaXN0LmNvbnN0cnVjdG9yICYmIGNsYXNzTGlzdC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gRE9NVG9rZW5MaXN0UHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlID8gdW5kZWZpbmVkIDogRE9NVG9rZW5MaXN0UHJvdG90eXBlO1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG52YXIgZmlyZWZveCA9IHVzZXJBZ2VudC5tYXRjaCgvZmlyZWZveFxcLyhcXGQrKS9pKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhIWZpcmVmb3ggJiYgK2ZpcmVmb3hbMV07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgdHlwZW9mIERlbm8gIT0gJ29iamVjdCc7XG4iLCJ2YXIgVUEgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAvTVNJRXxUcmlkZW50Ly50ZXN0KFVBKTtcbiIsInZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL2lwYWR8aXBob25lfGlwb2QvaS50ZXN0KHVzZXJBZ2VudCkgJiYgZ2xvYmFsLlBlYmJsZSAhPT0gdW5kZWZpbmVkO1xuIiwidmFyIHVzZXJBZ2VudCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdXNlci1hZ2VudCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IC8oPzppcGFkfGlwaG9uZXxpcG9kKS4qYXBwbGV3ZWJraXQvaS50ZXN0KHVzZXJBZ2VudCk7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mLXJhdycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzc29mKGdsb2JhbC5wcm9jZXNzKSA9PSAncHJvY2Vzcyc7XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gL3dlYjBzKD8hLipjaHJvbWUpL2kudGVzdCh1c2VyQWdlbnQpO1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignbmF2aWdhdG9yJywgJ3VzZXJBZ2VudCcpIHx8ICcnO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1c2VyQWdlbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLXVzZXItYWdlbnQnKTtcblxudmFyIHByb2Nlc3MgPSBnbG9iYWwucHJvY2VzcztcbnZhciBEZW5vID0gZ2xvYmFsLkRlbm87XG52YXIgdmVyc2lvbnMgPSBwcm9jZXNzICYmIHByb2Nlc3MudmVyc2lvbnMgfHwgRGVubyAmJiBEZW5vLnZlcnNpb247XG52YXIgdjggPSB2ZXJzaW9ucyAmJiB2ZXJzaW9ucy52ODtcbnZhciBtYXRjaCwgdmVyc2lvbjtcblxuaWYgKHY4KSB7XG4gIG1hdGNoID0gdjguc3BsaXQoJy4nKTtcbiAgLy8gaW4gb2xkIENocm9tZSwgdmVyc2lvbnMgb2YgVjggaXNuJ3QgVjggPSBDaHJvbWUgLyAxMFxuICAvLyBidXQgdGhlaXIgY29ycmVjdCB2ZXJzaW9ucyBhcmUgbm90IGludGVyZXN0aW5nIGZvciB1c1xuICB2ZXJzaW9uID0gbWF0Y2hbMF0gPiAwICYmIG1hdGNoWzBdIDwgNCA/IDEgOiArKG1hdGNoWzBdICsgbWF0Y2hbMV0pO1xufVxuXG4vLyBCcm93c2VyRlMgTm9kZUpTIGBwcm9jZXNzYCBwb2x5ZmlsbCBpbmNvcnJlY3RseSBzZXQgYC52OGAgdG8gYDAuMGBcbi8vIHNvIGNoZWNrIGB1c2VyQWdlbnRgIGV2ZW4gaWYgYC52OGAgZXhpc3RzLCBidXQgMFxuaWYgKCF2ZXJzaW9uICYmIHVzZXJBZ2VudCkge1xuICBtYXRjaCA9IHVzZXJBZ2VudC5tYXRjaCgvRWRnZVxcLyhcXGQrKS8pO1xuICBpZiAoIW1hdGNoIHx8IG1hdGNoWzFdID49IDc0KSB7XG4gICAgbWF0Y2ggPSB1c2VyQWdlbnQubWF0Y2goL0Nocm9tZVxcLyhcXGQrKS8pO1xuICAgIGlmIChtYXRjaCkgdmVyc2lvbiA9ICttYXRjaFsxXTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHZlcnNpb247XG4iLCJ2YXIgdXNlckFnZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS11c2VyLWFnZW50Jyk7XG5cbnZhciB3ZWJraXQgPSB1c2VyQWdlbnQubWF0Y2goL0FwcGxlV2ViS2l0XFwvKFxcZCspXFwuLyk7XG5cbm1vZHVsZS5leHBvcnRzID0gISF3ZWJraXQgJiYgK3dlYmtpdFsxXTtcbiIsIi8vIElFOC0gZG9uJ3QgZW51bSBidWcga2V5c1xubW9kdWxlLmV4cG9ydHMgPSBbXG4gICdjb25zdHJ1Y3RvcicsXG4gICdoYXNPd25Qcm9wZXJ0eScsXG4gICdpc1Byb3RvdHlwZU9mJyxcbiAgJ3Byb3BlcnR5SXNFbnVtZXJhYmxlJyxcbiAgJ3RvTG9jYWxlU3RyaW5nJyxcbiAgJ3RvU3RyaW5nJyxcbiAgJ3ZhbHVlT2YnXG5dO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xudmFyIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29weS1jb25zdHJ1Y3Rvci1wcm9wZXJ0aWVzJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG5cbi8qXG4gIG9wdGlvbnMudGFyZ2V0ICAgICAgICAgLSBuYW1lIG9mIHRoZSB0YXJnZXQgb2JqZWN0XG4gIG9wdGlvbnMuZ2xvYmFsICAgICAgICAgLSB0YXJnZXQgaXMgdGhlIGdsb2JhbCBvYmplY3RcbiAgb3B0aW9ucy5zdGF0ICAgICAgICAgICAtIGV4cG9ydCBhcyBzdGF0aWMgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5wcm90byAgICAgICAgICAtIGV4cG9ydCBhcyBwcm90b3R5cGUgbWV0aG9kcyBvZiB0YXJnZXRcbiAgb3B0aW9ucy5yZWFsICAgICAgICAgICAtIHJlYWwgcHJvdG90eXBlIG1ldGhvZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMuZm9yY2VkICAgICAgICAgLSBleHBvcnQgZXZlbiBpZiB0aGUgbmF0aXZlIGZlYXR1cmUgaXMgYXZhaWxhYmxlXG4gIG9wdGlvbnMuYmluZCAgICAgICAgICAgLSBiaW5kIG1ldGhvZHMgdG8gdGhlIHRhcmdldCwgcmVxdWlyZWQgZm9yIHRoZSBgcHVyZWAgdmVyc2lvblxuICBvcHRpb25zLndyYXAgICAgICAgICAgIC0gd3JhcCBjb25zdHJ1Y3RvcnMgdG8gcHJldmVudGluZyBnbG9iYWwgcG9sbHV0aW9uLCByZXF1aXJlZCBmb3IgdGhlIGBwdXJlYCB2ZXJzaW9uXG4gIG9wdGlvbnMudW5zYWZlICAgICAgICAgLSB1c2UgdGhlIHNpbXBsZSBhc3NpZ25tZW50IG9mIHByb3BlcnR5IGluc3RlYWQgb2YgZGVsZXRlICsgZGVmaW5lUHJvcGVydHlcbiAgb3B0aW9ucy5zaGFtICAgICAgICAgICAtIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgb3B0aW9ucy5lbnVtZXJhYmxlICAgICAtIGV4cG9ydCBhcyBlbnVtZXJhYmxlIHByb3BlcnR5XG4gIG9wdGlvbnMuZG9udENhbGxHZXRTZXQgLSBwcmV2ZW50IGNhbGxpbmcgYSBnZXR0ZXIgb24gdGFyZ2V0XG4gIG9wdGlvbnMubmFtZSAgICAgICAgICAgLSB0aGUgLm5hbWUgb2YgdGhlIGZ1bmN0aW9uIGlmIGl0IGRvZXMgbm90IG1hdGNoIHRoZSBrZXlcbiovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcHRpb25zLCBzb3VyY2UpIHtcbiAgdmFyIFRBUkdFVCA9IG9wdGlvbnMudGFyZ2V0O1xuICB2YXIgR0xPQkFMID0gb3B0aW9ucy5nbG9iYWw7XG4gIHZhciBTVEFUSUMgPSBvcHRpb25zLnN0YXQ7XG4gIHZhciBGT1JDRUQsIHRhcmdldCwga2V5LCB0YXJnZXRQcm9wZXJ0eSwgc291cmNlUHJvcGVydHksIGRlc2NyaXB0b3I7XG4gIGlmIChHTE9CQUwpIHtcbiAgICB0YXJnZXQgPSBnbG9iYWw7XG4gIH0gZWxzZSBpZiAoU1RBVElDKSB7XG4gICAgdGFyZ2V0ID0gZ2xvYmFsW1RBUkdFVF0gfHwgZGVmaW5lR2xvYmFsUHJvcGVydHkoVEFSR0VULCB7fSk7XG4gIH0gZWxzZSB7XG4gICAgdGFyZ2V0ID0gKGdsb2JhbFtUQVJHRVRdIHx8IHt9KS5wcm90b3R5cGU7XG4gIH1cbiAgaWYgKHRhcmdldCkgZm9yIChrZXkgaW4gc291cmNlKSB7XG4gICAgc291cmNlUHJvcGVydHkgPSBzb3VyY2Vba2V5XTtcbiAgICBpZiAob3B0aW9ucy5kb250Q2FsbEdldFNldCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGtleSk7XG4gICAgICB0YXJnZXRQcm9wZXJ0eSA9IGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci52YWx1ZTtcbiAgICB9IGVsc2UgdGFyZ2V0UHJvcGVydHkgPSB0YXJnZXRba2V5XTtcbiAgICBGT1JDRUQgPSBpc0ZvcmNlZChHTE9CQUwgPyBrZXkgOiBUQVJHRVQgKyAoU1RBVElDID8gJy4nIDogJyMnKSArIGtleSwgb3B0aW9ucy5mb3JjZWQpO1xuICAgIC8vIGNvbnRhaW5lZCBpbiB0YXJnZXRcbiAgICBpZiAoIUZPUkNFRCAmJiB0YXJnZXRQcm9wZXJ0eSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAodHlwZW9mIHNvdXJjZVByb3BlcnR5ID09IHR5cGVvZiB0YXJnZXRQcm9wZXJ0eSkgY29udGludWU7XG4gICAgICBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzKHNvdXJjZVByb3BlcnR5LCB0YXJnZXRQcm9wZXJ0eSk7XG4gICAgfVxuICAgIC8vIGFkZCBhIGZsYWcgdG8gbm90IGNvbXBsZXRlbHkgZnVsbCBwb2x5ZmlsbHNcbiAgICBpZiAob3B0aW9ucy5zaGFtIHx8ICh0YXJnZXRQcm9wZXJ0eSAmJiB0YXJnZXRQcm9wZXJ0eS5zaGFtKSkge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KHNvdXJjZVByb3BlcnR5LCAnc2hhbScsIHRydWUpO1xuICAgIH1cbiAgICBkZWZpbmVCdWlsdEluKHRhcmdldCwga2V5LCBzb3VyY2VQcm9wZXJ0eSwgb3B0aW9ucyk7XG4gIH1cbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuICEhZXhlYygpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHJlZ2V4cEV4ZWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWV4ZWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChLRVksIGV4ZWMsIEZPUkNFRCwgU0hBTSkge1xuICB2YXIgU1lNQk9MID0gd2VsbEtub3duU3ltYm9sKEtFWSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19TWU1CT0wgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN0cmluZyBtZXRob2RzIGNhbGwgc3ltYm9sLW5hbWVkIFJlZ0VwIG1ldGhvZHNcbiAgICB2YXIgTyA9IHt9O1xuICAgIE9bU1lNQk9MXSA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuIDc7IH07XG4gICAgcmV0dXJuICcnW0tFWV0oTykgIT0gNztcbiAgfSk7XG5cbiAgdmFyIERFTEVHQVRFU19UT19FWEVDID0gREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAgIC8vIFN5bWJvbC1uYW1lZCBSZWdFeHAgbWV0aG9kcyBjYWxsIC5leGVjXG4gICAgdmFyIGV4ZWNDYWxsZWQgPSBmYWxzZTtcbiAgICB2YXIgcmUgPSAvYS87XG5cbiAgICBpZiAoS0VZID09PSAnc3BsaXQnKSB7XG4gICAgICAvLyBXZSBjYW4ndCB1c2UgcmVhbCByZWdleCBoZXJlIHNpbmNlIGl0IGNhdXNlcyBkZW9wdGltaXphdGlvblxuICAgICAgLy8gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gaW4gVjhcbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy8zMDZcbiAgICAgIHJlID0ge307XG4gICAgICAvLyBSZWdFeHBbQEBzcGxpdF0gZG9lc24ndCBjYWxsIHRoZSByZWdleCdzIGV4ZWMgbWV0aG9kLCBidXQgZmlyc3QgY3JlYXRlc1xuICAgICAgLy8gYSBuZXcgb25lLiBXZSBuZWVkIHRvIHJldHVybiB0aGUgcGF0Y2hlZCByZWdleCB3aGVuIGNyZWF0aW5nIHRoZSBuZXcgb25lLlxuICAgICAgcmUuY29uc3RydWN0b3IgPSB7fTtcbiAgICAgIHJlLmNvbnN0cnVjdG9yW1NQRUNJRVNdID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gcmU7IH07XG4gICAgICByZS5mbGFncyA9ICcnO1xuICAgICAgcmVbU1lNQk9MXSA9IC8uL1tTWU1CT0xdO1xuICAgIH1cblxuICAgIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IGV4ZWNDYWxsZWQgPSB0cnVlOyByZXR1cm4gbnVsbDsgfTtcblxuICAgIHJlW1NZTUJPTF0oJycpO1xuICAgIHJldHVybiAhZXhlY0NhbGxlZDtcbiAgfSk7XG5cbiAgaWYgKFxuICAgICFERUxFR0FURVNfVE9fU1lNQk9MIHx8XG4gICAgIURFTEVHQVRFU19UT19FWEVDIHx8XG4gICAgRk9SQ0VEXG4gICkge1xuICAgIHZhciB1bmN1cnJpZWROYXRpdmVSZWdFeHBNZXRob2QgPSB1bmN1cnJ5VGhpcygvLi9bU1lNQk9MXSk7XG4gICAgdmFyIG1ldGhvZHMgPSBleGVjKFNZTUJPTCwgJydbS0VZXSwgZnVuY3Rpb24gKG5hdGl2ZU1ldGhvZCwgcmVnZXhwLCBzdHIsIGFyZzIsIGZvcmNlU3RyaW5nTWV0aG9kKSB7XG4gICAgICB2YXIgdW5jdXJyaWVkTmF0aXZlTWV0aG9kID0gdW5jdXJyeVRoaXMobmF0aXZlTWV0aG9kKTtcbiAgICAgIHZhciAkZXhlYyA9IHJlZ2V4cC5leGVjO1xuICAgICAgaWYgKCRleGVjID09PSByZWdleHBFeGVjIHx8ICRleGVjID09PSBSZWdFeHBQcm90b3R5cGUuZXhlYykge1xuICAgICAgICBpZiAoREVMRUdBVEVTX1RPX1NZTUJPTCAmJiAhZm9yY2VTdHJpbmdNZXRob2QpIHtcbiAgICAgICAgICAvLyBUaGUgbmF0aXZlIFN0cmluZyBtZXRob2QgYWxyZWFkeSBkZWxlZ2F0ZXMgdG8gQEBtZXRob2QgKHRoaXNcbiAgICAgICAgICAvLyBwb2x5ZmlsbGVkIGZ1bmN0aW9uKSwgbGVhc2luZyB0byBpbmZpbml0ZSByZWN1cnNpb24uXG4gICAgICAgICAgLy8gV2UgYXZvaWQgaXQgYnkgZGlyZWN0bHkgY2FsbGluZyB0aGUgbmF0aXZlIEBAbWV0aG9kIG1ldGhvZC5cbiAgICAgICAgICByZXR1cm4geyBkb25lOiB0cnVlLCB2YWx1ZTogdW5jdXJyaWVkTmF0aXZlUmVnRXhwTWV0aG9kKHJlZ2V4cCwgc3RyLCBhcmcyKSB9O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7IGRvbmU6IHRydWUsIHZhbHVlOiB1bmN1cnJpZWROYXRpdmVNZXRob2Qoc3RyLCByZWdleHAsIGFyZzIpIH07XG4gICAgICB9XG4gICAgICByZXR1cm4geyBkb25lOiBmYWxzZSB9O1xuICAgIH0pO1xuXG4gICAgZGVmaW5lQnVpbHRJbihTdHJpbmcucHJvdG90eXBlLCBLRVksIG1ldGhvZHNbMF0pO1xuICAgIGRlZmluZUJ1aWx0SW4oUmVnRXhwUHJvdG90eXBlLCBTWU1CT0wsIG1ldGhvZHNbMV0pO1xuICB9XG5cbiAgaWYgKFNIQU0pIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShSZWdFeHBQcm90b3R5cGVbU1lNQk9MXSwgJ3NoYW0nLCB0cnVlKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtaXNleHRlbnNpYmxlLCBlcy14L25vLW9iamVjdC1wcmV2ZW50ZXh0ZW5zaW9ucyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmlzRXh0ZW5zaWJsZShPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKTtcbn0pO1xuIiwidmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbnZhciBhcHBseSA9IEZ1bmN0aW9uUHJvdG90eXBlLmFwcGx5O1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1yZWZsZWN0IC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFJlZmxlY3QgPT0gJ29iamVjdCcgJiYgUmVmbGVjdC5hcHBseSB8fCAoTkFUSVZFX0JJTkQgPyBjYWxsLmJpbmQoYXBwbHkpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShhcHBseSwgYXJndW1lbnRzKTtcbn0pO1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIGJpbmQgPSB1bmN1cnJ5VGhpcyh1bmN1cnJ5VGhpcy5iaW5kKTtcblxuLy8gb3B0aW9uYWwgLyBzaW1wbGUgY29udGV4dCBiaW5kaW5nXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChmbiwgdGhhdCkge1xuICBhQ2FsbGFibGUoZm4pO1xuICByZXR1cm4gdGhhdCA9PT0gdW5kZWZpbmVkID8gZm4gOiBOQVRJVkVfQklORCA/IGJpbmQoZm4sIHRoYXQpIDogZnVuY3Rpb24gKC8qIC4uLmFyZ3MgKi8pIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1mdW5jdGlvbi1wcm90b3R5cGUtYmluZCAtLSBzYWZlXG4gIHZhciB0ZXN0ID0gKGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSkuYmluZCgpO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zIC0tIHNhZmVcbiAgcmV0dXJuIHR5cGVvZiB0ZXN0ICE9ICdmdW5jdGlvbicgfHwgdGVzdC5oYXNPd25Qcm9wZXJ0eSgncHJvdG90eXBlJyk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgYXJyYXlTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xudmFyIE5BVElWRV9CSU5EID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtbmF0aXZlJyk7XG5cbnZhciAkRnVuY3Rpb24gPSBGdW5jdGlvbjtcbnZhciBjb25jYXQgPSB1bmN1cnJ5VGhpcyhbXS5jb25jYXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBmYWN0b3JpZXMgPSB7fTtcblxudmFyIGNvbnN0cnVjdCA9IGZ1bmN0aW9uIChDLCBhcmdzTGVuZ3RoLCBhcmdzKSB7XG4gIGlmICghaGFzT3duKGZhY3RvcmllcywgYXJnc0xlbmd0aCkpIHtcbiAgICBmb3IgKHZhciBsaXN0ID0gW10sIGkgPSAwOyBpIDwgYXJnc0xlbmd0aDsgaSsrKSBsaXN0W2ldID0gJ2FbJyArIGkgKyAnXSc7XG4gICAgZmFjdG9yaWVzW2FyZ3NMZW5ndGhdID0gJEZ1bmN0aW9uKCdDLGEnLCAncmV0dXJuIG5ldyBDKCcgKyBqb2luKGxpc3QsICcsJykgKyAnKScpO1xuICB9IHJldHVybiBmYWN0b3JpZXNbYXJnc0xlbmd0aF0oQywgYXJncyk7XG59O1xuXG4vLyBgRnVuY3Rpb24ucHJvdG90eXBlLmJpbmRgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1mdW5jdGlvbi5wcm90b3R5cGUuYmluZFxubW9kdWxlLmV4cG9ydHMgPSBOQVRJVkVfQklORCA/ICRGdW5jdGlvbi5iaW5kIDogZnVuY3Rpb24gYmluZCh0aGF0IC8qICwgLi4uYXJncyAqLykge1xuICB2YXIgRiA9IGFDYWxsYWJsZSh0aGlzKTtcbiAgdmFyIFByb3RvdHlwZSA9IEYucHJvdG90eXBlO1xuICB2YXIgcGFydEFyZ3MgPSBhcnJheVNsaWNlKGFyZ3VtZW50cywgMSk7XG4gIHZhciBib3VuZEZ1bmN0aW9uID0gZnVuY3Rpb24gYm91bmQoLyogYXJncy4uLiAqLykge1xuICAgIHZhciBhcmdzID0gY29uY2F0KHBhcnRBcmdzLCBhcnJheVNsaWNlKGFyZ3VtZW50cykpO1xuICAgIHJldHVybiB0aGlzIGluc3RhbmNlb2YgYm91bmRGdW5jdGlvbiA/IGNvbnN0cnVjdChGLCBhcmdzLmxlbmd0aCwgYXJncykgOiBGLmFwcGx5KHRoYXQsIGFyZ3MpO1xuICB9O1xuICBpZiAoaXNPYmplY3QoUHJvdG90eXBlKSkgYm91bmRGdW5jdGlvbi5wcm90b3R5cGUgPSBQcm90b3R5cGU7XG4gIHJldHVybiBib3VuZEZ1bmN0aW9uO1xufTtcbiIsInZhciBOQVRJVkVfQklORCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLW5hdGl2ZScpO1xuXG52YXIgY2FsbCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gY2FsbC5iaW5kKGNhbGwpIDogZnVuY3Rpb24gKCkge1xuICByZXR1cm4gY2FsbC5hcHBseShjYWxsLCBhcmd1bWVudHMpO1xufTtcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbnZhciBGdW5jdGlvblByb3RvdHlwZSA9IEZ1bmN0aW9uLnByb3RvdHlwZTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyIGdldERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG52YXIgRVhJU1RTID0gaGFzT3duKEZ1bmN0aW9uUHJvdG90eXBlLCAnbmFtZScpO1xuLy8gYWRkaXRpb25hbCBwcm90ZWN0aW9uIGZyb20gbWluaWZpZWQgLyBtYW5nbGVkIC8gZHJvcHBlZCBmdW5jdGlvbiBuYW1lc1xudmFyIFBST1BFUiA9IEVYSVNUUyAmJiAoZnVuY3Rpb24gc29tZXRoaW5nKCkgeyAvKiBlbXB0eSAqLyB9KS5uYW1lID09PSAnc29tZXRoaW5nJztcbnZhciBDT05GSUdVUkFCTEUgPSBFWElTVFMgJiYgKCFERVNDUklQVE9SUyB8fCAoREVTQ1JJUFRPUlMgJiYgZ2V0RGVzY3JpcHRvcihGdW5jdGlvblByb3RvdHlwZSwgJ25hbWUnKS5jb25maWd1cmFibGUpKTtcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEVYSVNUUzogRVhJU1RTLFxuICBQUk9QRVI6IFBST1BFUixcbiAgQ09ORklHVVJBQkxFOiBDT05GSUdVUkFCTEVcbn07XG4iLCJ2YXIgTkFUSVZFX0JJTkQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1uYXRpdmUnKTtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGJpbmQgPSBGdW5jdGlvblByb3RvdHlwZS5iaW5kO1xudmFyIGNhbGwgPSBGdW5jdGlvblByb3RvdHlwZS5jYWxsO1xudmFyIHVuY3VycnlUaGlzID0gTkFUSVZFX0JJTkQgJiYgYmluZC5iaW5kKGNhbGwsIGNhbGwpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9CSU5EID8gZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiAmJiB1bmN1cnJ5VGhpcyhmbik7XG59IDogZnVuY3Rpb24gKGZuKSB7XG4gIHJldHVybiBmbiAmJiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNhbGwuYXBwbHkoZm4sIGFyZ3VtZW50cyk7XG4gIH07XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG5cbnZhciBhRnVuY3Rpb24gPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgcmV0dXJuIGlzQ2FsbGFibGUoYXJndW1lbnQpID8gYXJndW1lbnQgOiB1bmRlZmluZWQ7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChuYW1lc3BhY2UsIG1ldGhvZCkge1xuICByZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBhRnVuY3Rpb24oZ2xvYmFsW25hbWVzcGFjZV0pIDogZ2xvYmFsW25hbWVzcGFjZV0gJiYgZ2xvYmFsW25hbWVzcGFjZV1bbWV0aG9kXTtcbn07XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ICE9IHVuZGVmaW5lZCkgcmV0dXJuIGdldE1ldGhvZChpdCwgSVRFUkFUT1IpXG4gICAgfHwgZ2V0TWV0aG9kKGl0LCAnQEBpdGVyYXRvcicpXG4gICAgfHwgSXRlcmF0b3JzW2NsYXNzb2YoaXQpXTtcbn07XG4iLCJ2YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQsIHVzaW5nSXRlcmF0b3IpIHtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gYXJndW1lbnRzLmxlbmd0aCA8IDIgPyBnZXRJdGVyYXRvck1ldGhvZChhcmd1bWVudCkgOiB1c2luZ0l0ZXJhdG9yO1xuICBpZiAoYUNhbGxhYmxlKGl0ZXJhdG9yTWV0aG9kKSkgcmV0dXJuIGFuT2JqZWN0KGNhbGwoaXRlcmF0b3JNZXRob2QsIGFyZ3VtZW50KSk7XG4gIHRocm93ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoYXJndW1lbnQpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbn07XG4iLCJ2YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxuLy8gYEdldE1ldGhvZGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWdldG1ldGhvZFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoViwgUCkge1xuICB2YXIgZnVuYyA9IFZbUF07XG4gIHJldHVybiBmdW5jID09IG51bGwgPyB1bmRlZmluZWQgOiBhQ2FsbGFibGUoZnVuYyk7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xudmFyIFNVQlNUSVRVVElPTl9TWU1CT0xTID0gL1xcJChbJCYnYF18XFxkezEsMn18PFtePl0qPikvZztcbnZhciBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCA9IC9cXCQoWyQmJ2BdfFxcZHsxLDJ9KS9nO1xuXG4vLyBgR2V0U3Vic3RpdHV0aW9uYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2V0c3Vic3RpdHV0aW9uXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChtYXRjaGVkLCBzdHIsIHBvc2l0aW9uLCBjYXB0dXJlcywgbmFtZWRDYXB0dXJlcywgcmVwbGFjZW1lbnQpIHtcbiAgdmFyIHRhaWxQb3MgPSBwb3NpdGlvbiArIG1hdGNoZWQubGVuZ3RoO1xuICB2YXIgbSA9IGNhcHR1cmVzLmxlbmd0aDtcbiAgdmFyIHN5bWJvbHMgPSBTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRDtcbiAgaWYgKG5hbWVkQ2FwdHVyZXMgIT09IHVuZGVmaW5lZCkge1xuICAgIG5hbWVkQ2FwdHVyZXMgPSB0b09iamVjdChuYW1lZENhcHR1cmVzKTtcbiAgICBzeW1ib2xzID0gU1VCU1RJVFVUSU9OX1NZTUJPTFM7XG4gIH1cbiAgcmV0dXJuIHJlcGxhY2UocmVwbGFjZW1lbnQsIHN5bWJvbHMsIGZ1bmN0aW9uIChtYXRjaCwgY2gpIHtcbiAgICB2YXIgY2FwdHVyZTtcbiAgICBzd2l0Y2ggKGNoYXJBdChjaCwgMCkpIHtcbiAgICAgIGNhc2UgJyQnOiByZXR1cm4gJyQnO1xuICAgICAgY2FzZSAnJic6IHJldHVybiBtYXRjaGVkO1xuICAgICAgY2FzZSAnYCc6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIDAsIHBvc2l0aW9uKTtcbiAgICAgIGNhc2UgXCInXCI6IHJldHVybiBzdHJpbmdTbGljZShzdHIsIHRhaWxQb3MpO1xuICAgICAgY2FzZSAnPCc6XG4gICAgICAgIGNhcHR1cmUgPSBuYW1lZENhcHR1cmVzW3N0cmluZ1NsaWNlKGNoLCAxLCAtMSldO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6IC8vIFxcZFxcZD9cbiAgICAgICAgdmFyIG4gPSArY2g7XG4gICAgICAgIGlmIChuID09PSAwKSByZXR1cm4gbWF0Y2g7XG4gICAgICAgIGlmIChuID4gbSkge1xuICAgICAgICAgIHZhciBmID0gZmxvb3IobiAvIDEwKTtcbiAgICAgICAgICBpZiAoZiA9PT0gMCkgcmV0dXJuIG1hdGNoO1xuICAgICAgICAgIGlmIChmIDw9IG0pIHJldHVybiBjYXB0dXJlc1tmIC0gMV0gPT09IHVuZGVmaW5lZCA/IGNoYXJBdChjaCwgMSkgOiBjYXB0dXJlc1tmIC0gMV0gKyBjaGFyQXQoY2gsIDEpO1xuICAgICAgICAgIHJldHVybiBtYXRjaDtcbiAgICAgICAgfVxuICAgICAgICBjYXB0dXJlID0gY2FwdHVyZXNbbiAtIDFdO1xuICAgIH1cbiAgICByZXR1cm4gY2FwdHVyZSA9PT0gdW5kZWZpbmVkID8gJycgOiBjYXB0dXJlO1xuICB9KTtcbn07XG4iLCJ2YXIgY2hlY2sgPSBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGl0ICYmIGl0Lk1hdGggPT0gTWF0aCAmJiBpdDtcbn07XG5cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG5tb2R1bGUuZXhwb3J0cyA9XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLWdsb2JhbC10aGlzIC0tIHNhZmVcbiAgY2hlY2sodHlwZW9mIGdsb2JhbFRoaXMgPT0gJ29iamVjdCcgJiYgZ2xvYmFsVGhpcykgfHxcbiAgY2hlY2sodHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JyAmJiB3aW5kb3cpIHx8XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLWdsb2JhbHMgLS0gc2FmZVxuICBjaGVjayh0eXBlb2Ygc2VsZiA9PSAnb2JqZWN0JyAmJiBzZWxmKSB8fFxuICBjaGVjayh0eXBlb2YgZ2xvYmFsID09ICdvYmplY3QnICYmIGdsb2JhbCkgfHxcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLW5ldy1mdW5jIC0tIGZhbGxiYWNrXG4gIChmdW5jdGlvbiAoKSB7IHJldHVybiB0aGlzOyB9KSgpIHx8IEZ1bmN0aW9uKCdyZXR1cm4gdGhpcycpKCk7XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG5cbnZhciBoYXNPd25Qcm9wZXJ0eSA9IHVuY3VycnlUaGlzKHt9Lmhhc093blByb3BlcnR5KTtcblxuLy8gYEhhc093blByb3BlcnR5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaGFzb3ducHJvcGVydHlcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1oYXNvd24gLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBPYmplY3QuaGFzT3duIHx8IGZ1bmN0aW9uIGhhc093bihpdCwga2V5KSB7XG4gIHJldHVybiBoYXNPd25Qcm9wZXJ0eSh0b09iamVjdChpdCksIGtleSk7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSB7fTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGEsIGIpIHtcbiAgdmFyIGNvbnNvbGUgPSBnbG9iYWwuY29uc29sZTtcbiAgaWYgKGNvbnNvbGUgJiYgY29uc29sZS5lcnJvcikge1xuICAgIGFyZ3VtZW50cy5sZW5ndGggPT0gMSA/IGNvbnNvbGUuZXJyb3IoYSkgOiBjb25zb2xlLmVycm9yKGEsIGIpO1xuICB9XG59O1xuIiwidmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZ2V0QnVpbHRJbignZG9jdW1lbnQnLCAnZG9jdW1lbnRFbGVtZW50Jyk7XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNyZWF0ZUVsZW1lbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9jdW1lbnQtY3JlYXRlLWVsZW1lbnQnKTtcblxuLy8gVGhhbmtzIHRvIElFOCBmb3IgaXRzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFERVNDUklQVE9SUyAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjcmVhdGVFbGVtZW50KCdkaXYnKSwgJ2EnLCB7XG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7IHJldHVybiA3OyB9XG4gIH0pLmEgIT0gNztcbn0pO1xuIiwiLy8gSUVFRTc1NCBjb252ZXJzaW9ucyBiYXNlZCBvbiBodHRwczovL2dpdGh1Yi5jb20vZmVyb3NzL2llZWU3NTRcbnZhciAkQXJyYXkgPSBBcnJheTtcbnZhciBhYnMgPSBNYXRoLmFicztcbnZhciBwb3cgPSBNYXRoLnBvdztcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG52YXIgbG9nID0gTWF0aC5sb2c7XG52YXIgTE4yID0gTWF0aC5MTjI7XG5cbnZhciBwYWNrID0gZnVuY3Rpb24gKG51bWJlciwgbWFudGlzc2FMZW5ndGgsIGJ5dGVzKSB7XG4gIHZhciBidWZmZXIgPSAkQXJyYXkoYnl0ZXMpO1xuICB2YXIgZXhwb25lbnRMZW5ndGggPSBieXRlcyAqIDggLSBtYW50aXNzYUxlbmd0aCAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZXhwb25lbnRMZW5ndGgpIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgcnQgPSBtYW50aXNzYUxlbmd0aCA9PT0gMjMgPyBwb3coMiwgLTI0KSAtIHBvdygyLCAtNzcpIDogMDtcbiAgdmFyIHNpZ24gPSBudW1iZXIgPCAwIHx8IG51bWJlciA9PT0gMCAmJiAxIC8gbnVtYmVyIDwgMCA/IDEgOiAwO1xuICB2YXIgaW5kZXggPSAwO1xuICB2YXIgZXhwb25lbnQsIG1hbnRpc3NhLCBjO1xuICBudW1iZXIgPSBhYnMobnVtYmVyKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgaWYgKG51bWJlciAhPSBudW1iZXIgfHwgbnVtYmVyID09PSBJbmZpbml0eSkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zZWxmLWNvbXBhcmUgLS0gTmFOIGNoZWNrXG4gICAgbWFudGlzc2EgPSBudW1iZXIgIT0gbnVtYmVyID8gMSA6IDA7XG4gICAgZXhwb25lbnQgPSBlTWF4O1xuICB9IGVsc2Uge1xuICAgIGV4cG9uZW50ID0gZmxvb3IobG9nKG51bWJlcikgLyBMTjIpO1xuICAgIGMgPSBwb3coMiwgLWV4cG9uZW50KTtcbiAgICBpZiAobnVtYmVyICogYyA8IDEpIHtcbiAgICAgIGV4cG9uZW50LS07XG4gICAgICBjICo9IDI7XG4gICAgfVxuICAgIGlmIChleHBvbmVudCArIGVCaWFzID49IDEpIHtcbiAgICAgIG51bWJlciArPSBydCAvIGM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG51bWJlciArPSBydCAqIHBvdygyLCAxIC0gZUJpYXMpO1xuICAgIH1cbiAgICBpZiAobnVtYmVyICogYyA+PSAyKSB7XG4gICAgICBleHBvbmVudCsrO1xuICAgICAgYyAvPSAyO1xuICAgIH1cbiAgICBpZiAoZXhwb25lbnQgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtYW50aXNzYSA9IDA7XG4gICAgICBleHBvbmVudCA9IGVNYXg7XG4gICAgfSBlbHNlIGlmIChleHBvbmVudCArIGVCaWFzID49IDEpIHtcbiAgICAgIG1hbnRpc3NhID0gKG51bWJlciAqIGMgLSAxKSAqIHBvdygyLCBtYW50aXNzYUxlbmd0aCk7XG4gICAgICBleHBvbmVudCA9IGV4cG9uZW50ICsgZUJpYXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hbnRpc3NhID0gbnVtYmVyICogcG93KDIsIGVCaWFzIC0gMSkgKiBwb3coMiwgbWFudGlzc2FMZW5ndGgpO1xuICAgICAgZXhwb25lbnQgPSAwO1xuICAgIH1cbiAgfVxuICB3aGlsZSAobWFudGlzc2FMZW5ndGggPj0gOCkge1xuICAgIGJ1ZmZlcltpbmRleCsrXSA9IG1hbnRpc3NhICYgMjU1O1xuICAgIG1hbnRpc3NhIC89IDI1NjtcbiAgICBtYW50aXNzYUxlbmd0aCAtPSA4O1xuICB9XG4gIGV4cG9uZW50ID0gZXhwb25lbnQgPDwgbWFudGlzc2FMZW5ndGggfCBtYW50aXNzYTtcbiAgZXhwb25lbnRMZW5ndGggKz0gbWFudGlzc2FMZW5ndGg7XG4gIHdoaWxlIChleHBvbmVudExlbmd0aCA+IDApIHtcbiAgICBidWZmZXJbaW5kZXgrK10gPSBleHBvbmVudCAmIDI1NTtcbiAgICBleHBvbmVudCAvPSAyNTY7XG4gICAgZXhwb25lbnRMZW5ndGggLT0gODtcbiAgfVxuICBidWZmZXJbLS1pbmRleF0gfD0gc2lnbiAqIDEyODtcbiAgcmV0dXJuIGJ1ZmZlcjtcbn07XG5cbnZhciB1bnBhY2sgPSBmdW5jdGlvbiAoYnVmZmVyLCBtYW50aXNzYUxlbmd0aCkge1xuICB2YXIgYnl0ZXMgPSBidWZmZXIubGVuZ3RoO1xuICB2YXIgZXhwb25lbnRMZW5ndGggPSBieXRlcyAqIDggLSBtYW50aXNzYUxlbmd0aCAtIDE7XG4gIHZhciBlTWF4ID0gKDEgPDwgZXhwb25lbnRMZW5ndGgpIC0gMTtcbiAgdmFyIGVCaWFzID0gZU1heCA+PiAxO1xuICB2YXIgbkJpdHMgPSBleHBvbmVudExlbmd0aCAtIDc7XG4gIHZhciBpbmRleCA9IGJ5dGVzIC0gMTtcbiAgdmFyIHNpZ24gPSBidWZmZXJbaW5kZXgtLV07XG4gIHZhciBleHBvbmVudCA9IHNpZ24gJiAxMjc7XG4gIHZhciBtYW50aXNzYTtcbiAgc2lnbiA+Pj0gNztcbiAgd2hpbGUgKG5CaXRzID4gMCkge1xuICAgIGV4cG9uZW50ID0gZXhwb25lbnQgKiAyNTYgKyBidWZmZXJbaW5kZXgtLV07XG4gICAgbkJpdHMgLT0gODtcbiAgfVxuICBtYW50aXNzYSA9IGV4cG9uZW50ICYgKDEgPDwgLW5CaXRzKSAtIDE7XG4gIGV4cG9uZW50ID4+PSAtbkJpdHM7XG4gIG5CaXRzICs9IG1hbnRpc3NhTGVuZ3RoO1xuICB3aGlsZSAobkJpdHMgPiAwKSB7XG4gICAgbWFudGlzc2EgPSBtYW50aXNzYSAqIDI1NiArIGJ1ZmZlcltpbmRleC0tXTtcbiAgICBuQml0cyAtPSA4O1xuICB9XG4gIGlmIChleHBvbmVudCA9PT0gMCkge1xuICAgIGV4cG9uZW50ID0gMSAtIGVCaWFzO1xuICB9IGVsc2UgaWYgKGV4cG9uZW50ID09PSBlTWF4KSB7XG4gICAgcmV0dXJuIG1hbnRpc3NhID8gTmFOIDogc2lnbiA/IC1JbmZpbml0eSA6IEluZmluaXR5O1xuICB9IGVsc2Uge1xuICAgIG1hbnRpc3NhID0gbWFudGlzc2EgKyBwb3coMiwgbWFudGlzc2FMZW5ndGgpO1xuICAgIGV4cG9uZW50ID0gZXhwb25lbnQgLSBlQmlhcztcbiAgfSByZXR1cm4gKHNpZ24gPyAtMSA6IDEpICogbWFudGlzc2EgKiBwb3coMiwgZXhwb25lbnQgLSBtYW50aXNzYUxlbmd0aCk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgcGFjazogcGFjayxcbiAgdW5wYWNrOiB1bnBhY2tcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIHNwbGl0ID0gdW5jdXJyeVRoaXMoJycuc3BsaXQpO1xuXG4vLyBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIGFuZCBub24tZW51bWVyYWJsZSBvbGQgVjggc3RyaW5nc1xubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIHRocm93cyBhbiBlcnJvciBpbiByaGlubywgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL3JoaW5vL2lzc3Vlcy8zNDZcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGlucyAtLSBzYWZlXG4gIHJldHVybiAhJE9iamVjdCgneicpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApO1xufSkgPyBmdW5jdGlvbiAoaXQpIHtcbiAgcmV0dXJuIGNsYXNzb2YoaXQpID09ICdTdHJpbmcnID8gc3BsaXQoaXQsICcnKSA6ICRPYmplY3QoaXQpO1xufSA6ICRPYmplY3Q7XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG5cbi8vIG1ha2VzIHN1YmNsYXNzaW5nIHdvcmsgY29ycmVjdCBmb3Igd3JhcHBlZCBidWlsdC1pbnNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKCR0aGlzLCBkdW1teSwgV3JhcHBlcikge1xuICB2YXIgTmV3VGFyZ2V0LCBOZXdUYXJnZXRQcm90b3R5cGU7XG4gIGlmIChcbiAgICAvLyBpdCBjYW4gd29yayBvbmx5IHdpdGggbmF0aXZlIGBzZXRQcm90b3R5cGVPZmBcbiAgICBzZXRQcm90b3R5cGVPZiAmJlxuICAgIC8vIHdlIGhhdmVuJ3QgY29tcGxldGVseSBjb3JyZWN0IHByZS1FUzYgd2F5IGZvciBnZXR0aW5nIGBuZXcudGFyZ2V0YCwgc28gdXNlIHRoaXNcbiAgICBpc0NhbGxhYmxlKE5ld1RhcmdldCA9IGR1bW15LmNvbnN0cnVjdG9yKSAmJlxuICAgIE5ld1RhcmdldCAhPT0gV3JhcHBlciAmJlxuICAgIGlzT2JqZWN0KE5ld1RhcmdldFByb3RvdHlwZSA9IE5ld1RhcmdldC5wcm90b3R5cGUpICYmXG4gICAgTmV3VGFyZ2V0UHJvdG90eXBlICE9PSBXcmFwcGVyLnByb3RvdHlwZVxuICApIHNldFByb3RvdHlwZU9mKCR0aGlzLCBOZXdUYXJnZXRQcm90b3R5cGUpO1xuICByZXR1cm4gJHRoaXM7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvbi50b1N0cmluZyk7XG5cbi8vIHRoaXMgaGVscGVyIGJyb2tlbiBpbiBgY29yZS1qc0AzLjQuMS0zLjQuNGAsIHNvIHdlIGNhbid0IHVzZSBgc2hhcmVkYCBoZWxwZXJcbmlmICghaXNDYWxsYWJsZShzdG9yZS5pbnNwZWN0U291cmNlKSkge1xuICBzdG9yZS5pbnNwZWN0U291cmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uVG9TdHJpbmcoaXQpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHN0b3JlLmluc3BlY3RTb3VyY2U7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzLWV4dGVybmFsJyk7XG52YXIgaXNFeHRlbnNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1leHRlbnNpYmxlJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xudmFyIEZSRUVaSU5HID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZyZWV6aW5nJyk7XG5cbnZhciBSRVFVSVJFRCA9IGZhbHNlO1xudmFyIE1FVEFEQVRBID0gdWlkKCdtZXRhJyk7XG52YXIgaWQgPSAwO1xuXG52YXIgc2V0TWV0YWRhdGEgPSBmdW5jdGlvbiAoaXQpIHtcbiAgZGVmaW5lUHJvcGVydHkoaXQsIE1FVEFEQVRBLCB7IHZhbHVlOiB7XG4gICAgb2JqZWN0SUQ6ICdPJyArIGlkKyssIC8vIG9iamVjdCBJRFxuICAgIHdlYWtEYXRhOiB7fSAgICAgICAgICAvLyB3ZWFrIGNvbGxlY3Rpb25zIElEc1xuICB9IH0pO1xufTtcblxudmFyIGZhc3RLZXkgPSBmdW5jdGlvbiAoaXQsIGNyZWF0ZSkge1xuICAvLyByZXR1cm4gYSBwcmltaXRpdmUgd2l0aCBwcmVmaXhcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiB0eXBlb2YgaXQgPT0gJ3N5bWJvbCcgPyBpdCA6ICh0eXBlb2YgaXQgPT0gJ3N0cmluZycgPyAnUycgOiAnUCcpICsgaXQ7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuICdGJztcbiAgICAvLyBub3QgbmVjZXNzYXJ5IHRvIGFkZCBtZXRhZGF0YVxuICAgIGlmICghY3JlYXRlKSByZXR1cm4gJ0UnO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gb2JqZWN0IElEXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS5vYmplY3RJRDtcbn07XG5cbnZhciBnZXRXZWFrRGF0YSA9IGZ1bmN0aW9uIChpdCwgY3JlYXRlKSB7XG4gIGlmICghaGFzT3duKGl0LCBNRVRBREFUQSkpIHtcbiAgICAvLyBjYW4ndCBzZXQgbWV0YWRhdGEgdG8gdW5jYXVnaHQgZnJvemVuIG9iamVjdFxuICAgIGlmICghaXNFeHRlbnNpYmxlKGl0KSkgcmV0dXJuIHRydWU7XG4gICAgLy8gbm90IG5lY2Vzc2FyeSB0byBhZGQgbWV0YWRhdGFcbiAgICBpZiAoIWNyZWF0ZSkgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGFkZCBtaXNzaW5nIG1ldGFkYXRhXG4gICAgc2V0TWV0YWRhdGEoaXQpO1xuICAvLyByZXR1cm4gdGhlIHN0b3JlIG9mIHdlYWsgY29sbGVjdGlvbnMgSURzXG4gIH0gcmV0dXJuIGl0W01FVEFEQVRBXS53ZWFrRGF0YTtcbn07XG5cbi8vIGFkZCBtZXRhZGF0YSBvbiBmcmVlemUtZmFtaWx5IG1ldGhvZHMgY2FsbGluZ1xudmFyIG9uRnJlZXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChGUkVFWklORyAmJiBSRVFVSVJFRCAmJiBpc0V4dGVuc2libGUoaXQpICYmICFoYXNPd24oaXQsIE1FVEFEQVRBKSkgc2V0TWV0YWRhdGEoaXQpO1xuICByZXR1cm4gaXQ7XG59O1xuXG52YXIgZW5hYmxlID0gZnVuY3Rpb24gKCkge1xuICBtZXRhLmVuYWJsZSA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiAgUkVRVUlSRUQgPSB0cnVlO1xuICB2YXIgZ2V0T3duUHJvcGVydHlOYW1lcyA9IGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZjtcbiAgdmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG4gIHZhciB0ZXN0ID0ge307XG4gIHRlc3RbTUVUQURBVEFdID0gMTtcblxuICAvLyBwcmV2ZW50IGV4cG9zaW5nIG9mIG1ldGFkYXRhIGtleVxuICBpZiAoZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0KS5sZW5ndGgpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlLmYgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICAgIHZhciByZXN1bHQgPSBnZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KTtcbiAgICAgIGZvciAodmFyIGkgPSAwLCBsZW5ndGggPSByZXN1bHQubGVuZ3RoOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgaWYgKHJlc3VsdFtpXSA9PT0gTUVUQURBVEEpIHtcbiAgICAgICAgICBzcGxpY2UocmVzdWx0LCBpLCAxKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfSByZXR1cm4gcmVzdWx0O1xuICAgIH07XG5cbiAgICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbE1vZHVsZS5mXG4gICAgfSk7XG4gIH1cbn07XG5cbnZhciBtZXRhID0gbW9kdWxlLmV4cG9ydHMgPSB7XG4gIGVuYWJsZTogZW5hYmxlLFxuICBmYXN0S2V5OiBmYXN0S2V5LFxuICBnZXRXZWFrRGF0YTogZ2V0V2Vha0RhdGEsXG4gIG9uRnJlZXplOiBvbkZyZWV6ZVxufTtcblxuaGlkZGVuS2V5c1tNRVRBREFUQV0gPSB0cnVlO1xuIiwidmFyIE5BVElWRV9XRUFLX01BUCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtd2Vhay1tYXAnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1ub24tZW51bWVyYWJsZS1wcm9wZXJ0eScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1zdG9yZScpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xuXG52YXIgT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQgPSAnT2JqZWN0IGFscmVhZHkgaW5pdGlhbGl6ZWQnO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgV2Vha01hcCA9IGdsb2JhbC5XZWFrTWFwO1xudmFyIHNldCwgZ2V0LCBoYXM7XG5cbnZhciBlbmZvcmNlID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBoYXMoaXQpID8gZ2V0KGl0KSA6IHNldChpdCwge30pO1xufTtcblxudmFyIGdldHRlckZvciA9IGZ1bmN0aW9uIChUWVBFKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoaXQpIHtcbiAgICB2YXIgc3RhdGU7XG4gICAgaWYgKCFpc09iamVjdChpdCkgfHwgKHN0YXRlID0gZ2V0KGl0KSkudHlwZSAhPT0gVFlQRSkge1xuICAgICAgdGhyb3cgVHlwZUVycm9yKCdJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICcgKyBUWVBFICsgJyByZXF1aXJlZCcpO1xuICAgIH0gcmV0dXJuIHN0YXRlO1xuICB9O1xufTtcblxuaWYgKE5BVElWRV9XRUFLX01BUCB8fCBzaGFyZWQuc3RhdGUpIHtcbiAgdmFyIHN0b3JlID0gc2hhcmVkLnN0YXRlIHx8IChzaGFyZWQuc3RhdGUgPSBuZXcgV2Vha01hcCgpKTtcbiAgdmFyIHdtZ2V0ID0gdW5jdXJyeVRoaXMoc3RvcmUuZ2V0KTtcbiAgdmFyIHdtaGFzID0gdW5jdXJyeVRoaXMoc3RvcmUuaGFzKTtcbiAgdmFyIHdtc2V0ID0gdW5jdXJyeVRoaXMoc3RvcmUuc2V0KTtcbiAgc2V0ID0gZnVuY3Rpb24gKGl0LCBtZXRhZGF0YSkge1xuICAgIGlmICh3bWhhcyhzdG9yZSwgaXQpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICB3bXNldChzdG9yZSwgaXQsIG1ldGFkYXRhKTtcbiAgICByZXR1cm4gbWV0YWRhdGE7XG4gIH07XG4gIGdldCA9IGZ1bmN0aW9uIChpdCkge1xuICAgIHJldHVybiB3bWdldChzdG9yZSwgaXQpIHx8IHt9O1xuICB9O1xuICBoYXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gd21oYXMoc3RvcmUsIGl0KTtcbiAgfTtcbn0gZWxzZSB7XG4gIHZhciBTVEFURSA9IHNoYXJlZEtleSgnc3RhdGUnKTtcbiAgaGlkZGVuS2V5c1tTVEFURV0gPSB0cnVlO1xuICBzZXQgPSBmdW5jdGlvbiAoaXQsIG1ldGFkYXRhKSB7XG4gICAgaWYgKGhhc093bihpdCwgU1RBVEUpKSB0aHJvdyBuZXcgVHlwZUVycm9yKE9CSkVDVF9BTFJFQURZX0lOSVRJQUxJWkVEKTtcbiAgICBtZXRhZGF0YS5mYWNhZGUgPSBpdDtcbiAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoaXQsIFNUQVRFLCBtZXRhZGF0YSk7XG4gICAgcmV0dXJuIG1ldGFkYXRhO1xuICB9O1xuICBnZXQgPSBmdW5jdGlvbiAoaXQpIHtcbiAgICByZXR1cm4gaGFzT3duKGl0LCBTVEFURSkgPyBpdFtTVEFURV0gOiB7fTtcbiAgfTtcbiAgaGFzID0gZnVuY3Rpb24gKGl0KSB7XG4gICAgcmV0dXJuIGhhc093bihpdCwgU1RBVEUpO1xuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGdldDogZ2V0LFxuICBoYXM6IGhhcyxcbiAgZW5mb3JjZTogZW5mb3JjZSxcbiAgZ2V0dGVyRm9yOiBnZXR0ZXJGb3Jcbn07XG4iLCJ2YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgSXRlcmF0b3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9ycycpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQXJyYXlQcm90b3R5cGUgPSBBcnJheS5wcm90b3R5cGU7XG5cbi8vIGNoZWNrIG9uIGRlZmF1bHQgQXJyYXkgaXRlcmF0b3Jcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiBpdCAhPT0gdW5kZWZpbmVkICYmIChJdGVyYXRvcnMuQXJyYXkgPT09IGl0IHx8IEFycmF5UHJvdG90eXBlW0lURVJBVE9SXSA9PT0gaXQpO1xufTtcbiIsInZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG5cbi8vIGBJc0FycmF5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtaXNhcnJheVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tYXJyYXktaXNhcnJheSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gaXNBcnJheShhcmd1bWVudCkge1xuICByZXR1cm4gY2xhc3NvZihhcmd1bWVudCkgPT0gJ0FycmF5Jztcbn07XG4iLCIvLyBgSXNDYWxsYWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzY2FsbGFibGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGFyZ3VtZW50KSB7XG4gIHJldHVybiB0eXBlb2YgYXJndW1lbnQgPT0gJ2Z1bmN0aW9uJztcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBub29wID0gZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9O1xudmFyIGVtcHR5ID0gW107XG52YXIgY29uc3RydWN0ID0gZ2V0QnVpbHRJbignUmVmbGVjdCcsICdjb25zdHJ1Y3QnKTtcbnZhciBjb25zdHJ1Y3RvclJlZ0V4cCA9IC9eXFxzKig/OmNsYXNzfGZ1bmN0aW9uKVxcYi87XG52YXIgZXhlYyA9IHVuY3VycnlUaGlzKGNvbnN0cnVjdG9yUmVnRXhwLmV4ZWMpO1xudmFyIElOQ09SUkVDVF9UT19TVFJJTkcgPSAhY29uc3RydWN0b3JSZWdFeHAuZXhlYyhub29wKTtcblxudmFyIGlzQ29uc3RydWN0b3JNb2Rlcm4gPSBmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGFyZ3VtZW50KSB7XG4gIGlmICghaXNDYWxsYWJsZShhcmd1bWVudCkpIHJldHVybiBmYWxzZTtcbiAgdHJ5IHtcbiAgICBjb25zdHJ1Y3Qobm9vcCwgZW1wdHksIGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbn07XG5cbnZhciBpc0NvbnN0cnVjdG9yTGVnYWN5ID0gZnVuY3Rpb24gaXNDb25zdHJ1Y3Rvcihhcmd1bWVudCkge1xuICBpZiAoIWlzQ2FsbGFibGUoYXJndW1lbnQpKSByZXR1cm4gZmFsc2U7XG4gIHN3aXRjaCAoY2xhc3NvZihhcmd1bWVudCkpIHtcbiAgICBjYXNlICdBc3luY0Z1bmN0aW9uJzpcbiAgICBjYXNlICdHZW5lcmF0b3JGdW5jdGlvbic6XG4gICAgY2FzZSAnQXN5bmNHZW5lcmF0b3JGdW5jdGlvbic6IHJldHVybiBmYWxzZTtcbiAgfVxuICB0cnkge1xuICAgIC8vIHdlIGNhbid0IGNoZWNrIC5wcm90b3R5cGUgc2luY2UgY29uc3RydWN0b3JzIHByb2R1Y2VkIGJ5IC5iaW5kIGhhdmVuJ3QgaXRcbiAgICAvLyBgRnVuY3Rpb24jdG9TdHJpbmdgIHRocm93cyBvbiBzb21lIGJ1aWx0LWl0IGZ1bmN0aW9uIGluIHNvbWUgbGVnYWN5IGVuZ2luZXNcbiAgICAvLyAoZm9yIGV4YW1wbGUsIGBET01RdWFkYCBhbmQgc2ltaWxhciBpbiBGRjQxLSlcbiAgICByZXR1cm4gSU5DT1JSRUNUX1RPX1NUUklORyB8fCAhIWV4ZWMoY29uc3RydWN0b3JSZWdFeHAsIGluc3BlY3RTb3VyY2UoYXJndW1lbnQpKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuaXNDb25zdHJ1Y3RvckxlZ2FjeS5zaGFtID0gdHJ1ZTtcblxuLy8gYElzQ29uc3RydWN0b3JgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc2NvbnN0cnVjdG9yXG5tb2R1bGUuZXhwb3J0cyA9ICFjb25zdHJ1Y3QgfHwgZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgY2FsbGVkO1xuICByZXR1cm4gaXNDb25zdHJ1Y3Rvck1vZGVybihpc0NvbnN0cnVjdG9yTW9kZXJuLmNhbGwpXG4gICAgfHwgIWlzQ29uc3RydWN0b3JNb2Rlcm4oT2JqZWN0KVxuICAgIHx8ICFpc0NvbnN0cnVjdG9yTW9kZXJuKGZ1bmN0aW9uICgpIHsgY2FsbGVkID0gdHJ1ZTsgfSlcbiAgICB8fCBjYWxsZWQ7XG59KSA/IGlzQ29uc3RydWN0b3JMZWdhY3kgOiBpc0NvbnN0cnVjdG9yTW9kZXJuO1xuIiwidmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGRlc2NyaXB0b3IpIHtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgIT09IHVuZGVmaW5lZCAmJiAoaGFzT3duKGRlc2NyaXB0b3IsICd2YWx1ZScpIHx8IGhhc093bihkZXNjcmlwdG9yLCAnd3JpdGFibGUnKSk7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG52YXIgcmVwbGFjZW1lbnQgPSAvI3xcXC5wcm90b3R5cGVcXC4vO1xuXG52YXIgaXNGb3JjZWQgPSBmdW5jdGlvbiAoZmVhdHVyZSwgZGV0ZWN0aW9uKSB7XG4gIHZhciB2YWx1ZSA9IGRhdGFbbm9ybWFsaXplKGZlYXR1cmUpXTtcbiAgcmV0dXJuIHZhbHVlID09IFBPTFlGSUxMID8gdHJ1ZVxuICAgIDogdmFsdWUgPT0gTkFUSVZFID8gZmFsc2VcbiAgICA6IGlzQ2FsbGFibGUoZGV0ZWN0aW9uKSA/IGZhaWxzKGRldGVjdGlvbilcbiAgICA6ICEhZGV0ZWN0aW9uO1xufTtcblxudmFyIG5vcm1hbGl6ZSA9IGlzRm9yY2VkLm5vcm1hbGl6ZSA9IGZ1bmN0aW9uIChzdHJpbmcpIHtcbiAgcmV0dXJuIFN0cmluZyhzdHJpbmcpLnJlcGxhY2UocmVwbGFjZW1lbnQsICcuJykudG9Mb3dlckNhc2UoKTtcbn07XG5cbnZhciBkYXRhID0gaXNGb3JjZWQuZGF0YSA9IHt9O1xudmFyIE5BVElWRSA9IGlzRm9yY2VkLk5BVElWRSA9ICdOJztcbnZhciBQT0xZRklMTCA9IGlzRm9yY2VkLlBPTFlGSUxMID0gJ1AnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGlzRm9yY2VkO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgZmxvb3IgPSBNYXRoLmZsb29yO1xuXG4vLyBgSXNJbnRlZ3JhbE51bWJlcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWlzaW50ZWdyYWxudW1iZXJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW51bWJlci1pc2ludGVnZXIgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBOdW1iZXIuaXNJbnRlZ2VyIHx8IGZ1bmN0aW9uIGlzSW50ZWdlcihpdCkge1xuICByZXR1cm4gIWlzT2JqZWN0KGl0KSAmJiBpc0Zpbml0ZShpdCkgJiYgZmxvb3IoaXQpID09PSBpdDtcbn07XG4iLCJ2YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiBpc0NhbGxhYmxlKGl0KTtcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZhbHNlO1xuIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIE1BVENIID0gd2VsbEtub3duU3ltYm9sKCdtYXRjaCcpO1xuXG4vLyBgSXNSZWdFeHBgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1pc3JlZ2V4cFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGlzUmVnRXhwO1xuICByZXR1cm4gaXNPYmplY3QoaXQpICYmICgoaXNSZWdFeHAgPSBpdFtNQVRDSF0pICE9PSB1bmRlZmluZWQgPyAhIWlzUmVnRXhwIDogY2xhc3NvZihpdCkgPT0gJ1JlZ0V4cCcpO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciBVU0VfU1lNQk9MX0FTX1VJRCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91c2Utc3ltYm9sLWFzLXVpZCcpO1xuXG52YXIgJE9iamVjdCA9IE9iamVjdDtcblxubW9kdWxlLmV4cG9ydHMgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gdHlwZW9mIGl0ID09ICdzeW1ib2wnO1xufSA6IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgJFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICByZXR1cm4gaXNDYWxsYWJsZSgkU3ltYm9sKSAmJiBpc1Byb3RvdHlwZU9mKCRTeW1ib2wucHJvdG90eXBlLCAkT2JqZWN0KGl0KSk7XG59O1xuIiwidmFyIGJpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYmluZC1jb250ZXh0Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdHJ5VG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHJ5LXRvLXN0cmluZycpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIGlzUHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWlzLXByb3RvdHlwZS1vZicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBpdGVyYXRvckNsb3NlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdG9yLWNsb3NlJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG52YXIgUmVzdWx0ID0gZnVuY3Rpb24gKHN0b3BwZWQsIHJlc3VsdCkge1xuICB0aGlzLnN0b3BwZWQgPSBzdG9wcGVkO1xuICB0aGlzLnJlc3VsdCA9IHJlc3VsdDtcbn07XG5cbnZhciBSZXN1bHRQcm90b3R5cGUgPSBSZXN1bHQucHJvdG90eXBlO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVyYWJsZSwgdW5ib3VuZEZ1bmN0aW9uLCBvcHRpb25zKSB7XG4gIHZhciB0aGF0ID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoYXQ7XG4gIHZhciBBU19FTlRSSUVTID0gISEob3B0aW9ucyAmJiBvcHRpb25zLkFTX0VOVFJJRVMpO1xuICB2YXIgSVNfSVRFUkFUT1IgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSVNfSVRFUkFUT1IpO1xuICB2YXIgSU5URVJSVVBURUQgPSAhIShvcHRpb25zICYmIG9wdGlvbnMuSU5URVJSVVBURUQpO1xuICB2YXIgZm4gPSBiaW5kKHVuYm91bmRGdW5jdGlvbiwgdGhhdCk7XG4gIHZhciBpdGVyYXRvciwgaXRlckZuLCBpbmRleCwgbGVuZ3RoLCByZXN1bHQsIG5leHQsIHN0ZXA7XG5cbiAgdmFyIHN0b3AgPSBmdW5jdGlvbiAoY29uZGl0aW9uKSB7XG4gICAgaWYgKGl0ZXJhdG9yKSBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAnbm9ybWFsJywgY29uZGl0aW9uKTtcbiAgICByZXR1cm4gbmV3IFJlc3VsdCh0cnVlLCBjb25kaXRpb24pO1xuICB9O1xuXG4gIHZhciBjYWxsRm4gPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBpZiAoQVNfRU5UUklFUykge1xuICAgICAgYW5PYmplY3QodmFsdWUpO1xuICAgICAgcmV0dXJuIElOVEVSUlVQVEVEID8gZm4odmFsdWVbMF0sIHZhbHVlWzFdLCBzdG9wKSA6IGZuKHZhbHVlWzBdLCB2YWx1ZVsxXSk7XG4gICAgfSByZXR1cm4gSU5URVJSVVBURUQgPyBmbih2YWx1ZSwgc3RvcCkgOiBmbih2YWx1ZSk7XG4gIH07XG5cbiAgaWYgKElTX0lURVJBVE9SKSB7XG4gICAgaXRlcmF0b3IgPSBpdGVyYWJsZTtcbiAgfSBlbHNlIHtcbiAgICBpdGVyRm4gPSBnZXRJdGVyYXRvck1ldGhvZChpdGVyYWJsZSk7XG4gICAgaWYgKCFpdGVyRm4pIHRocm93ICRUeXBlRXJyb3IodHJ5VG9TdHJpbmcoaXRlcmFibGUpICsgJyBpcyBub3QgaXRlcmFibGUnKTtcbiAgICAvLyBvcHRpbWlzYXRpb24gZm9yIGFycmF5IGl0ZXJhdG9yc1xuICAgIGlmIChpc0FycmF5SXRlcmF0b3JNZXRob2QoaXRlckZuKSkge1xuICAgICAgZm9yIChpbmRleCA9IDAsIGxlbmd0aCA9IGxlbmd0aE9mQXJyYXlMaWtlKGl0ZXJhYmxlKTsgbGVuZ3RoID4gaW5kZXg7IGluZGV4KyspIHtcbiAgICAgICAgcmVzdWx0ID0gY2FsbEZuKGl0ZXJhYmxlW2luZGV4XSk7XG4gICAgICAgIGlmIChyZXN1bHQgJiYgaXNQcm90b3R5cGVPZihSZXN1bHRQcm90b3R5cGUsIHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgICB9IHJldHVybiBuZXcgUmVzdWx0KGZhbHNlKTtcbiAgICB9XG4gICAgaXRlcmF0b3IgPSBnZXRJdGVyYXRvcihpdGVyYWJsZSwgaXRlckZuKTtcbiAgfVxuXG4gIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICB0cnkge1xuICAgICAgcmVzdWx0ID0gY2FsbEZuKHN0ZXAudmFsdWUpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBpdGVyYXRvckNsb3NlKGl0ZXJhdG9yLCAndGhyb3cnLCBlcnJvcik7XG4gICAgfVxuICAgIGlmICh0eXBlb2YgcmVzdWx0ID09ICdvYmplY3QnICYmIHJlc3VsdCAmJiBpc1Byb3RvdHlwZU9mKFJlc3VsdFByb3RvdHlwZSwgcmVzdWx0KSkgcmV0dXJuIHJlc3VsdDtcbiAgfSByZXR1cm4gbmV3IFJlc3VsdChmYWxzZSk7XG59O1xuIiwidmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0ZXJhdG9yLCBraW5kLCB2YWx1ZSkge1xuICB2YXIgaW5uZXJSZXN1bHQsIGlubmVyRXJyb3I7XG4gIGFuT2JqZWN0KGl0ZXJhdG9yKTtcbiAgdHJ5IHtcbiAgICBpbm5lclJlc3VsdCA9IGdldE1ldGhvZChpdGVyYXRvciwgJ3JldHVybicpO1xuICAgIGlmICghaW5uZXJSZXN1bHQpIHtcbiAgICAgIGlmIChraW5kID09PSAndGhyb3cnKSB0aHJvdyB2YWx1ZTtcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG4gICAgaW5uZXJSZXN1bHQgPSBjYWxsKGlubmVyUmVzdWx0LCBpdGVyYXRvcik7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW5uZXJFcnJvciA9IHRydWU7XG4gICAgaW5uZXJSZXN1bHQgPSBlcnJvcjtcbiAgfVxuICBpZiAoa2luZCA9PT0gJ3Rocm93JykgdGhyb3cgdmFsdWU7XG4gIGlmIChpbm5lckVycm9yKSB0aHJvdyBpbm5lclJlc3VsdDtcbiAgYW5PYmplY3QoaW5uZXJSZXN1bHQpO1xuICByZXR1cm4gdmFsdWU7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG52YXIgQlVHR1lfU0FGQVJJX0lURVJBVE9SUyA9IGZhbHNlO1xuXG4vLyBgJUl0ZXJhdG9yUHJvdG90eXBlJWAgb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtb2JqZWN0XG52YXIgSXRlcmF0b3JQcm90b3R5cGUsIFByb3RvdHlwZU9mQXJyYXlJdGVyYXRvclByb3RvdHlwZSwgYXJyYXlJdGVyYXRvcjtcblxuLyogZXNsaW50LWRpc2FibGUgZXMteC9uby1hcnJheS1wcm90b3R5cGUta2V5cyAtLSBzYWZlICovXG5pZiAoW10ua2V5cykge1xuICBhcnJheUl0ZXJhdG9yID0gW10ua2V5cygpO1xuICAvLyBTYWZhcmkgOCBoYXMgYnVnZ3kgaXRlcmF0b3JzIHcvbyBgbmV4dGBcbiAgaWYgKCEoJ25leHQnIGluIGFycmF5SXRlcmF0b3IpKSBCVUdHWV9TQUZBUklfSVRFUkFUT1JTID0gdHJ1ZTtcbiAgZWxzZSB7XG4gICAgUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YoZ2V0UHJvdG90eXBlT2YoYXJyYXlJdGVyYXRvcikpO1xuICAgIGlmIChQcm90b3R5cGVPZkFycmF5SXRlcmF0b3JQcm90b3R5cGUgIT09IE9iamVjdC5wcm90b3R5cGUpIEl0ZXJhdG9yUHJvdG90eXBlID0gUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlO1xuICB9XG59XG5cbnZhciBORVdfSVRFUkFUT1JfUFJPVE9UWVBFID0gSXRlcmF0b3JQcm90b3R5cGUgPT0gdW5kZWZpbmVkIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHRlc3QgPSB7fTtcbiAgLy8gRkY0NC0gbGVnYWN5IGl0ZXJhdG9ycyBjYXNlXG4gIHJldHVybiBJdGVyYXRvclByb3RvdHlwZVtJVEVSQVRPUl0uY2FsbCh0ZXN0KSAhPT0gdGVzdDtcbn0pO1xuXG5pZiAoTkVXX0lURVJBVE9SX1BST1RPVFlQRSkgSXRlcmF0b3JQcm90b3R5cGUgPSB7fTtcbmVsc2UgaWYgKElTX1BVUkUpIEl0ZXJhdG9yUHJvdG90eXBlID0gY3JlYXRlKEl0ZXJhdG9yUHJvdG90eXBlKTtcblxuLy8gYCVJdGVyYXRvclByb3RvdHlwZSVbQEBpdGVyYXRvcl0oKWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSVpdGVyYXRvcnByb3RvdHlwZSUtQEBpdGVyYXRvclxuaWYgKCFpc0NhbGxhYmxlKEl0ZXJhdG9yUHJvdG90eXBlW0lURVJBVE9SXSkpIHtcbiAgZGVmaW5lQnVpbHRJbihJdGVyYXRvclByb3RvdHlwZSwgSVRFUkFUT1IsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBJdGVyYXRvclByb3RvdHlwZTogSXRlcmF0b3JQcm90b3R5cGUsXG4gIEJVR0dZX1NBRkFSSV9JVEVSQVRPUlM6IEJVR0dZX1NBRkFSSV9JVEVSQVRPUlNcbn07XG4iLCJtb2R1bGUuZXhwb3J0cyA9IHt9O1xuIiwidmFyIHRvTGVuZ3RoID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWxlbmd0aCcpO1xuXG4vLyBgTGVuZ3RoT2ZBcnJheUxpa2VgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1sZW5ndGhvZmFycmF5bGlrZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqKSB7XG4gIHJldHVybiB0b0xlbmd0aChvYmoubGVuZ3RoKTtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIENPTkZJR1VSQUJMRV9GVU5DVElPTl9OQU1FID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLW5hbWUnKS5DT05GSUdVUkFCTEU7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcblxudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5lbmZvcmNlO1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldDtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSBzYWZlXG52YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7XG5cbnZhciBDT05GSUdVUkFCTEVfTEVOR1RIID0gREVTQ1JJUFRPUlMgJiYgIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgcmV0dXJuIGRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ2xlbmd0aCcsIHsgdmFsdWU6IDggfSkubGVuZ3RoICE9PSA4O1xufSk7XG5cbnZhciBURU1QTEFURSA9IFN0cmluZyhTdHJpbmcpLnNwbGl0KCdTdHJpbmcnKTtcblxudmFyIG1ha2VCdWlsdEluID0gbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodmFsdWUsIG5hbWUsIG9wdGlvbnMpIHtcbiAgaWYgKFN0cmluZyhuYW1lKS5zbGljZSgwLCA3KSA9PT0gJ1N5bWJvbCgnKSB7XG4gICAgbmFtZSA9ICdbJyArIFN0cmluZyhuYW1lKS5yZXBsYWNlKC9eU3ltYm9sXFwoKFteKV0qKVxcKS8sICckMScpICsgJ10nO1xuICB9XG4gIGlmIChvcHRpb25zICYmIG9wdGlvbnMuZ2V0dGVyKSBuYW1lID0gJ2dldCAnICsgbmFtZTtcbiAgaWYgKG9wdGlvbnMgJiYgb3B0aW9ucy5zZXR0ZXIpIG5hbWUgPSAnc2V0ICcgKyBuYW1lO1xuICBpZiAoIWhhc093bih2YWx1ZSwgJ25hbWUnKSB8fCAoQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUgJiYgdmFsdWUubmFtZSAhPT0gbmFtZSkpIHtcbiAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbmFtZScsIHsgdmFsdWU6IG5hbWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTtcbiAgICBlbHNlIHZhbHVlLm5hbWUgPSBuYW1lO1xuICB9XG4gIGlmIChDT05GSUdVUkFCTEVfTEVOR1RIICYmIG9wdGlvbnMgJiYgaGFzT3duKG9wdGlvbnMsICdhcml0eScpICYmIHZhbHVlLmxlbmd0aCAhPT0gb3B0aW9ucy5hcml0eSkge1xuICAgIGRlZmluZVByb3BlcnR5KHZhbHVlLCAnbGVuZ3RoJywgeyB2YWx1ZTogb3B0aW9ucy5hcml0eSB9KTtcbiAgfVxuICB0cnkge1xuICAgIGlmIChvcHRpb25zICYmIGhhc093bihvcHRpb25zLCAnY29uc3RydWN0b3InKSAmJiBvcHRpb25zLmNvbnN0cnVjdG9yKSB7XG4gICAgICBpZiAoREVTQ1JJUFRPUlMpIGRlZmluZVByb3BlcnR5KHZhbHVlLCAncHJvdG90eXBlJywgeyB3cml0YWJsZTogZmFsc2UgfSk7XG4gICAgLy8gaW4gVjggfiBDaHJvbWUgNTMsIHByb3RvdHlwZXMgb2Ygc29tZSBtZXRob2RzLCBsaWtlIGBBcnJheS5wcm90b3R5cGUudmFsdWVzYCwgYXJlIG5vbi13cml0YWJsZVxuICAgIH0gZWxzZSBpZiAodmFsdWUucHJvdG90eXBlKSB2YWx1ZS5wcm90b3R5cGUgPSB1bmRlZmluZWQ7XG4gIH0gY2F0Y2ggKGVycm9yKSB7IC8qIGVtcHR5ICovIH1cbiAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodmFsdWUpO1xuICBpZiAoIWhhc093bihzdGF0ZSwgJ3NvdXJjZScpKSB7XG4gICAgc3RhdGUuc291cmNlID0gVEVNUExBVEUuam9pbih0eXBlb2YgbmFtZSA9PSAnc3RyaW5nJyA/IG5hbWUgOiAnJyk7XG4gIH0gcmV0dXJuIHZhbHVlO1xufTtcblxuLy8gYWRkIGZha2UgRnVuY3Rpb24jdG9TdHJpbmcgZm9yIGNvcnJlY3Qgd29yayB3cmFwcGVkIG1ldGhvZHMgLyBjb25zdHJ1Y3RvcnMgd2l0aCBtZXRob2RzIGxpa2UgTG9EYXNoIGlzTmF0aXZlXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXh0ZW5kLW5hdGl2ZSAtLSByZXF1aXJlZFxuRnVuY3Rpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gbWFrZUJ1aWx0SW4oZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBpc0NhbGxhYmxlKHRoaXMpICYmIGdldEludGVybmFsU3RhdGUodGhpcykuc291cmNlIHx8IGluc3BlY3RTb3VyY2UodGhpcyk7XG59LCAndG9TdHJpbmcnKTtcbiIsInZhciBjZWlsID0gTWF0aC5jZWlsO1xudmFyIGZsb29yID0gTWF0aC5mbG9vcjtcblxuLy8gYE1hdGgudHJ1bmNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXRoLnRydW5jXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1tYXRoLXRydW5jIC0tIHNhZmVcbm1vZHVsZS5leHBvcnRzID0gTWF0aC50cnVuYyB8fCBmdW5jdGlvbiB0cnVuYyh4KSB7XG4gIHZhciBuID0gK3g7XG4gIHJldHVybiAobiA+IDAgPyBmbG9vciA6IGNlaWwpKG4pO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgbWFjcm90YXNrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Rhc2snKS5zZXQ7XG52YXIgSVNfSU9TID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MnKTtcbnZhciBJU19JT1NfUEVCQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1pb3MtcGViYmxlJyk7XG52YXIgSVNfV0VCT1NfV0VCS0lUID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy13ZWJvcy13ZWJraXQnKTtcbnZhciBJU19OT0RFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS1pcy1ub2RlJyk7XG5cbnZhciBNdXRhdGlvbk9ic2VydmVyID0gZ2xvYmFsLk11dGF0aW9uT2JzZXJ2ZXIgfHwgZ2xvYmFsLldlYktpdE11dGF0aW9uT2JzZXJ2ZXI7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIFByb21pc2UgPSBnbG9iYWwuUHJvbWlzZTtcbi8vIE5vZGUuanMgMTEgc2hvd3MgRXhwZXJpbWVudGFsV2FybmluZyBvbiBnZXR0aW5nIGBxdWV1ZU1pY3JvdGFza2BcbnZhciBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZ2xvYmFsLCAncXVldWVNaWNyb3Rhc2snKTtcbnZhciBxdWV1ZU1pY3JvdGFzayA9IHF1ZXVlTWljcm90YXNrRGVzY3JpcHRvciAmJiBxdWV1ZU1pY3JvdGFza0Rlc2NyaXB0b3IudmFsdWU7XG5cbnZhciBmbHVzaCwgaGVhZCwgbGFzdCwgbm90aWZ5LCB0b2dnbGUsIG5vZGUsIHByb21pc2UsIHRoZW47XG5cbi8vIG1vZGVybiBlbmdpbmVzIGhhdmUgcXVldWVNaWNyb3Rhc2sgbWV0aG9kXG5pZiAoIXF1ZXVlTWljcm90YXNrKSB7XG4gIGZsdXNoID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciBwYXJlbnQsIGZuO1xuICAgIGlmIChJU19OT0RFICYmIChwYXJlbnQgPSBwcm9jZXNzLmRvbWFpbikpIHBhcmVudC5leGl0KCk7XG4gICAgd2hpbGUgKGhlYWQpIHtcbiAgICAgIGZuID0gaGVhZC5mbjtcbiAgICAgIGhlYWQgPSBoZWFkLm5leHQ7XG4gICAgICB0cnkge1xuICAgICAgICBmbigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgaWYgKGhlYWQpIG5vdGlmeSgpO1xuICAgICAgICBlbHNlIGxhc3QgPSB1bmRlZmluZWQ7XG4gICAgICAgIHRocm93IGVycm9yO1xuICAgICAgfVxuICAgIH0gbGFzdCA9IHVuZGVmaW5lZDtcbiAgICBpZiAocGFyZW50KSBwYXJlbnQuZW50ZXIoKTtcbiAgfTtcblxuICAvLyBicm93c2VycyB3aXRoIE11dGF0aW9uT2JzZXJ2ZXIsIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMzM5XG4gIC8vIGFsc28gZXhjZXB0IFdlYk9TIFdlYmtpdCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODk4XG4gIGlmICghSVNfSU9TICYmICFJU19OT0RFICYmICFJU19XRUJPU19XRUJLSVQgJiYgTXV0YXRpb25PYnNlcnZlciAmJiBkb2N1bWVudCkge1xuICAgIHRvZ2dsZSA9IHRydWU7XG4gICAgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgICBuZXcgTXV0YXRpb25PYnNlcnZlcihmbHVzaCkub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbm9kZS5kYXRhID0gdG9nZ2xlID0gIXRvZ2dsZTtcbiAgICB9O1xuICAvLyBlbnZpcm9ubWVudHMgd2l0aCBtYXliZSBub24tY29tcGxldGVseSBjb3JyZWN0LCBidXQgZXhpc3RlbnQgUHJvbWlzZVxuICB9IGVsc2UgaWYgKCFJU19JT1NfUEVCQkxFICYmIFByb21pc2UgJiYgUHJvbWlzZS5yZXNvbHZlKSB7XG4gICAgLy8gUHJvbWlzZS5yZXNvbHZlIHdpdGhvdXQgYW4gYXJndW1lbnQgdGhyb3dzIGFuIGVycm9yIGluIExHIFdlYk9TIDJcbiAgICBwcm9taXNlID0gUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgLy8gd29ya2Fyb3VuZCBvZiBXZWJLaXQgfiBpT1MgU2FmYXJpIDEwLjEgYnVnXG4gICAgcHJvbWlzZS5jb25zdHJ1Y3RvciA9IFByb21pc2U7XG4gICAgdGhlbiA9IGJpbmQocHJvbWlzZS50aGVuLCBwcm9taXNlKTtcbiAgICBub3RpZnkgPSBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGVuKGZsdXNoKTtcbiAgICB9O1xuICAvLyBOb2RlLmpzIHdpdGhvdXQgcHJvbWlzZXNcbiAgfSBlbHNlIGlmIChJU19OT0RFKSB7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gICAgfTtcbiAgLy8gZm9yIG90aGVyIGVudmlyb25tZW50cyAtIG1hY3JvdGFzayBiYXNlZCBvbjpcbiAgLy8gLSBzZXRJbW1lZGlhdGVcbiAgLy8gLSBNZXNzYWdlQ2hhbm5lbFxuICAvLyAtIHdpbmRvdy5wb3N0TWVzc2FnZVxuICAvLyAtIG9ucmVhZHlzdGF0ZWNoYW5nZVxuICAvLyAtIHNldFRpbWVvdXRcbiAgfSBlbHNlIHtcbiAgICAvLyBzdHJhbmdlIElFICsgd2VicGFjayBkZXYgc2VydmVyIGJ1ZyAtIHVzZSAuYmluZChnbG9iYWwpXG4gICAgbWFjcm90YXNrID0gYmluZChtYWNyb3Rhc2ssIGdsb2JhbCk7XG4gICAgbm90aWZ5ID0gZnVuY3Rpb24gKCkge1xuICAgICAgbWFjcm90YXNrKGZsdXNoKTtcbiAgICB9O1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gcXVldWVNaWNyb3Rhc2sgfHwgZnVuY3Rpb24gKGZuKSB7XG4gIHZhciB0YXNrID0geyBmbjogZm4sIG5leHQ6IHVuZGVmaW5lZCB9O1xuICBpZiAobGFzdCkgbGFzdC5uZXh0ID0gdGFzaztcbiAgaWYgKCFoZWFkKSB7XG4gICAgaGVhZCA9IHRhc2s7XG4gICAgbm90aWZ5KCk7XG4gIH0gbGFzdCA9IHRhc2s7XG59O1xuIiwidmFyIE5BVElWRV9TWU1CT0wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbCcpO1xuXG4vKiBlc2xpbnQtZGlzYWJsZSBlcy14L25vLXN5bWJvbCAtLSBzYWZlICovXG5tb2R1bGUuZXhwb3J0cyA9IE5BVElWRV9TWU1CT0wgJiYgISFTeW1ib2xbJ2ZvciddICYmICEhU3ltYm9sLmtleUZvcjtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzLXgvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgVjhfVkVSU0lPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eXN5bWJvbHMgLS0gcmVxdWlyZWQgZm9yIHRlc3Rpbmdcbm1vZHVsZS5leHBvcnRzID0gISFPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzICYmICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBzeW1ib2wgPSBTeW1ib2woKTtcbiAgLy8gQ2hyb21lIDM4IFN5bWJvbCBoYXMgaW5jb3JyZWN0IHRvU3RyaW5nIGNvbnZlcnNpb25cbiAgLy8gYGdldC1vd24tcHJvcGVydHktc3ltYm9sc2AgcG9seWZpbGwgc3ltYm9scyBjb252ZXJ0ZWQgdG8gb2JqZWN0IGFyZSBub3QgU3ltYm9sIGluc3RhbmNlc1xuICByZXR1cm4gIVN0cmluZyhzeW1ib2wpIHx8ICEoT2JqZWN0KHN5bWJvbCkgaW5zdGFuY2VvZiBTeW1ib2wpIHx8XG4gICAgLy8gQ2hyb21lIDM4LTQwIHN5bWJvbHMgYXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBET00gY29sbGVjdGlvbnMgcHJvdG90eXBlcyB0byBpbnN0YW5jZXNcbiAgICAhU3ltYm9sLnNoYW0gJiYgVjhfVkVSU0lPTiAmJiBWOF9WRVJTSU9OIDwgNDE7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xuXG52YXIgSVRFUkFUT1IgPSB3ZWxsS25vd25TeW1ib2woJ2l0ZXJhdG9yJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcmVsYXRpdmUtdXJsLXN0eWxlIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciB1cmwgPSBuZXcgVVJMKCdiP2E9MSZiPTImYz0zJywgJ2h0dHA6Ly9hJyk7XG4gIHZhciBzZWFyY2hQYXJhbXMgPSB1cmwuc2VhcmNoUGFyYW1zO1xuICB2YXIgcmVzdWx0ID0gJyc7XG4gIHVybC5wYXRobmFtZSA9ICdjJTIwZCc7XG4gIHNlYXJjaFBhcmFtcy5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgc2VhcmNoUGFyYW1zWydkZWxldGUnXSgnYicpO1xuICAgIHJlc3VsdCArPSBrZXkgKyB2YWx1ZTtcbiAgfSk7XG4gIHJldHVybiAoSVNfUFVSRSAmJiAhdXJsLnRvSlNPTilcbiAgICB8fCAhc2VhcmNoUGFyYW1zLnNvcnRcbiAgICB8fCB1cmwuaHJlZiAhPT0gJ2h0dHA6Ly9hL2MlMjBkP2E9MSZjPTMnXG4gICAgfHwgc2VhcmNoUGFyYW1zLmdldCgnYycpICE9PSAnMydcbiAgICB8fCBTdHJpbmcobmV3IFVSTFNlYXJjaFBhcmFtcygnP2E9MScpKSAhPT0gJ2E9MSdcbiAgICB8fCAhc2VhcmNoUGFyYW1zW0lURVJBVE9SXVxuICAgIC8vIHRocm93cyBpbiBFZGdlXG4gICAgfHwgbmV3IFVSTCgnaHR0cHM6Ly9hQGInKS51c2VybmFtZSAhPT0gJ2EnXG4gICAgfHwgbmV3IFVSTFNlYXJjaFBhcmFtcyhuZXcgVVJMU2VhcmNoUGFyYW1zKCdhPWInKSkuZ2V0KCdhJykgIT09ICdiJ1xuICAgIC8vIG5vdCBwdW55Y29kZWQgaW4gRWRnZVxuICAgIHx8IG5ldyBVUkwoJ2h0dHA6Ly/RgtC10YHRgicpLmhvc3QgIT09ICd4bi0tZTFheWJjJ1xuICAgIC8vIG5vdCBlc2NhcGVkIGluIENocm9tZSA2Mi1cbiAgICB8fCBuZXcgVVJMKCdodHRwOi8vYSPQsScpLmhhc2ggIT09ICcjJUQwJUIxJ1xuICAgIC8vIGZhaWxzIGluIENocm9tZSA2Ni1cbiAgICB8fCByZXN1bHQgIT09ICdhMWMzJ1xuICAgIC8vIHRocm93cyBpbiBTYWZhcmlcbiAgICB8fCBuZXcgVVJMKCdodHRwOi8veCcsIHVuZGVmaW5lZCkuaG9zdCAhPT0gJ3gnO1xufSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpbnNwZWN0U291cmNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luc3BlY3Qtc291cmNlJyk7XG5cbnZhciBXZWFrTWFwID0gZ2xvYmFsLldlYWtNYXA7XG5cbm1vZHVsZS5leHBvcnRzID0gaXNDYWxsYWJsZShXZWFrTWFwKSAmJiAvbmF0aXZlIGNvZGUvLnRlc3QoaW5zcGVjdFNvdXJjZShXZWFrTWFwKSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcblxudmFyIFByb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgdmFyIHJlc29sdmUsIHJlamVjdDtcbiAgdGhpcy5wcm9taXNlID0gbmV3IEMoZnVuY3Rpb24gKCQkcmVzb2x2ZSwgJCRyZWplY3QpIHtcbiAgICBpZiAocmVzb2x2ZSAhPT0gdW5kZWZpbmVkIHx8IHJlamVjdCAhPT0gdW5kZWZpbmVkKSB0aHJvdyBUeXBlRXJyb3IoJ0JhZCBQcm9taXNlIGNvbnN0cnVjdG9yJyk7XG4gICAgcmVzb2x2ZSA9ICQkcmVzb2x2ZTtcbiAgICByZWplY3QgPSAkJHJlamVjdDtcbiAgfSk7XG4gIHRoaXMucmVzb2x2ZSA9IGFDYWxsYWJsZShyZXNvbHZlKTtcbiAgdGhpcy5yZWplY3QgPSBhQ2FsbGFibGUocmVqZWN0KTtcbn07XG5cbi8vIGBOZXdQcm9taXNlQ2FwYWJpbGl0eWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW5ld3Byb21pc2VjYXBhYmlsaXR5XG5tb2R1bGUuZXhwb3J0cy5mID0gZnVuY3Rpb24gKEMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlQ2FwYWJpbGl0eShDKTtcbn07XG4iLCJ2YXIgaXNSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcmVnZXhwJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICBpZiAoaXNSZWdFeHAoaXQpKSB7XG4gICAgdGhyb3cgJFR5cGVFcnJvcihcIlRoZSBtZXRob2QgZG9lc24ndCBhY2NlcHQgcmVndWxhciBleHByZXNzaW9uc1wiKTtcbiAgfSByZXR1cm4gaXQ7XG59O1xuIiwiLyogZ2xvYmFsIEFjdGl2ZVhPYmplY3QgLS0gb2xkIElFLCBXU0ggKi9cbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydGllcycpO1xudmFyIGVudW1CdWdLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VudW0tYnVnLWtleXMnKTtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG52YXIgaHRtbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9odG1sJyk7XG52YXIgZG9jdW1lbnRDcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcblxudmFyIEdUID0gJz4nO1xudmFyIExUID0gJzwnO1xudmFyIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xudmFyIFNDUklQVCA9ICdzY3JpcHQnO1xudmFyIElFX1BST1RPID0gc2hhcmVkS2V5KCdJRV9QUk9UTycpO1xuXG52YXIgRW1wdHlDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcblxudmFyIHNjcmlwdFRhZyA9IGZ1bmN0aW9uIChjb250ZW50KSB7XG4gIHJldHVybiBMVCArIFNDUklQVCArIEdUICsgY29udGVudCArIExUICsgJy8nICsgU0NSSVBUICsgR1Q7XG59O1xuXG4vLyBDcmVhdGUgb2JqZWN0IHdpdGggZmFrZSBgbnVsbGAgcHJvdG90eXBlOiB1c2UgQWN0aXZlWCBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVggPSBmdW5jdGlvbiAoYWN0aXZlWERvY3VtZW50KSB7XG4gIGFjdGl2ZVhEb2N1bWVudC53cml0ZShzY3JpcHRUYWcoJycpKTtcbiAgYWN0aXZlWERvY3VtZW50LmNsb3NlKCk7XG4gIHZhciB0ZW1wID0gYWN0aXZlWERvY3VtZW50LnBhcmVudFdpbmRvdy5PYmplY3Q7XG4gIGFjdGl2ZVhEb2N1bWVudCA9IG51bGw7IC8vIGF2b2lkIG1lbW9yeSBsZWFrXG4gIHJldHVybiB0ZW1wO1xufTtcblxuLy8gQ3JlYXRlIG9iamVjdCB3aXRoIGZha2UgYG51bGxgIHByb3RvdHlwZTogdXNlIGlmcmFtZSBPYmplY3Qgd2l0aCBjbGVhcmVkIHByb3RvdHlwZVxudmFyIE51bGxQcm90b09iamVjdFZpYUlGcmFtZSA9IGZ1bmN0aW9uICgpIHtcbiAgLy8gVGhyYXNoLCB3YXN0ZSBhbmQgc29kb215OiBJRSBHQyBidWdcbiAgdmFyIGlmcmFtZSA9IGRvY3VtZW50Q3JlYXRlRWxlbWVudCgnaWZyYW1lJyk7XG4gIHZhciBKUyA9ICdqYXZhJyArIFNDUklQVCArICc6JztcbiAgdmFyIGlmcmFtZURvY3VtZW50O1xuICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgaHRtbC5hcHBlbmRDaGlsZChpZnJhbWUpO1xuICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNDc1XG4gIGlmcmFtZS5zcmMgPSBTdHJpbmcoSlMpO1xuICBpZnJhbWVEb2N1bWVudCA9IGlmcmFtZS5jb250ZW50V2luZG93LmRvY3VtZW50O1xuICBpZnJhbWVEb2N1bWVudC5vcGVuKCk7XG4gIGlmcmFtZURvY3VtZW50LndyaXRlKHNjcmlwdFRhZygnZG9jdW1lbnQuRj1PYmplY3QnKSk7XG4gIGlmcmFtZURvY3VtZW50LmNsb3NlKCk7XG4gIHJldHVybiBpZnJhbWVEb2N1bWVudC5GO1xufTtcblxuLy8gQ2hlY2sgZm9yIGRvY3VtZW50LmRvbWFpbiBhbmQgYWN0aXZlIHggc3VwcG9ydFxuLy8gTm8gbmVlZCB0byB1c2UgYWN0aXZlIHggYXBwcm9hY2ggd2hlbiBkb2N1bWVudC5kb21haW4gaXMgbm90IHNldFxuLy8gc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9lcy1zaGltcy9lczUtc2hpbS9pc3N1ZXMvMTUwXG4vLyB2YXJpYXRpb24gb2YgaHR0cHM6Ly9naXRodWIuY29tL2tpdGNhbWJyaWRnZS9lczUtc2hpbS9jb21taXQvNGY3MzhhYzA2NjM0NlxuLy8gYXZvaWQgSUUgR0MgYnVnXG52YXIgYWN0aXZlWERvY3VtZW50O1xudmFyIE51bGxQcm90b09iamVjdCA9IGZ1bmN0aW9uICgpIHtcbiAgdHJ5IHtcbiAgICBhY3RpdmVYRG9jdW1lbnQgPSBuZXcgQWN0aXZlWE9iamVjdCgnaHRtbGZpbGUnKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogaWdub3JlICovIH1cbiAgTnVsbFByb3RvT2JqZWN0ID0gdHlwZW9mIGRvY3VtZW50ICE9ICd1bmRlZmluZWQnXG4gICAgPyBkb2N1bWVudC5kb21haW4gJiYgYWN0aXZlWERvY3VtZW50XG4gICAgICA/IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KSAvLyBvbGQgSUVcbiAgICAgIDogTnVsbFByb3RvT2JqZWN0VmlhSUZyYW1lKClcbiAgICA6IE51bGxQcm90b09iamVjdFZpYUFjdGl2ZVgoYWN0aXZlWERvY3VtZW50KTsgLy8gV1NIXG4gIHZhciBsZW5ndGggPSBlbnVtQnVnS2V5cy5sZW5ndGg7XG4gIHdoaWxlIChsZW5ndGgtLSkgZGVsZXRlIE51bGxQcm90b09iamVjdFtQUk9UT1RZUEVdW2VudW1CdWdLZXlzW2xlbmd0aF1dO1xuICByZXR1cm4gTnVsbFByb3RvT2JqZWN0KCk7XG59O1xuXG5oaWRkZW5LZXlzW0lFX1BST1RPXSA9IHRydWU7XG5cbi8vIGBPYmplY3QuY3JlYXRlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmNyZWF0ZVxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tb2JqZWN0LWNyZWF0ZSAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5jcmVhdGUgfHwgZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgdmFyIHJlc3VsdDtcbiAgaWYgKE8gIT09IG51bGwpIHtcbiAgICBFbXB0eUNvbnN0cnVjdG9yW1BST1RPVFlQRV0gPSBhbk9iamVjdChPKTtcbiAgICByZXN1bHQgPSBuZXcgRW1wdHlDb25zdHJ1Y3RvcigpO1xuICAgIEVtcHR5Q29uc3RydWN0b3JbUFJPVE9UWVBFXSA9IG51bGw7XG4gICAgLy8gYWRkIFwiX19wcm90b19fXCIgZm9yIE9iamVjdC5nZXRQcm90b3R5cGVPZiBwb2x5ZmlsbFxuICAgIHJlc3VsdFtJRV9QUk9UT10gPSBPO1xuICB9IGVsc2UgcmVzdWx0ID0gTnVsbFByb3RvT2JqZWN0KCk7XG4gIHJldHVybiBQcm9wZXJ0aWVzID09PSB1bmRlZmluZWQgPyByZXN1bHQgOiBkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlLmYocmVzdWx0LCBQcm9wZXJ0aWVzKTtcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBWOF9QUk9UT1RZUEVfREVGSU5FX0JVRyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92OC1wcm90b3R5cGUtZGVmaW5lLWJ1ZycpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG5cbi8vIGBPYmplY3QuZGVmaW5lUHJvcGVydGllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5kZWZpbmVwcm9wZXJ0aWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZGVmaW5lcHJvcGVydGllcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyAmJiAhVjhfUFJPVE9UWVBFX0RFRklORV9CVUcgPyBPYmplY3QuZGVmaW5lUHJvcGVydGllcyA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnRpZXMoTywgUHJvcGVydGllcykge1xuICBhbk9iamVjdChPKTtcbiAgdmFyIHByb3BzID0gdG9JbmRleGVkT2JqZWN0KFByb3BlcnRpZXMpO1xuICB2YXIga2V5cyA9IG9iamVjdEtleXMoUHJvcGVydGllcyk7XG4gIHZhciBsZW5ndGggPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGtleTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSBkZWZpbmVQcm9wZXJ0eU1vZHVsZS5mKE8sIGtleSA9IGtleXNbaW5kZXgrK10sIHByb3BzW2tleV0pO1xuICByZXR1cm4gTztcbn07XG4iLCJ2YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBJRThfRE9NX0RFRklORSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pZTgtZG9tLWRlZmluZScpO1xudmFyIFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Y4LXByb3RvdHlwZS1kZWZpbmUtYnVnJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZGVmaW5lcHJvcGVydHkgLS0gc2FmZVxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxudmFyICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xudmFyIEVOVU1FUkFCTEUgPSAnZW51bWVyYWJsZSc7XG52YXIgQ09ORklHVVJBQkxFID0gJ2NvbmZpZ3VyYWJsZSc7XG52YXIgV1JJVEFCTEUgPSAnd3JpdGFibGUnO1xuXG4vLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmRlZmluZXByb3BlcnR5XG5leHBvcnRzLmYgPSBERVNDUklQVE9SUyA/IFY4X1BST1RPVFlQRV9ERUZJTkVfQlVHID8gZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAodHlwZW9mIE8gPT09ICdmdW5jdGlvbicgJiYgUCA9PT0gJ3Byb3RvdHlwZScgJiYgJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzICYmIFdSSVRBQkxFIGluIEF0dHJpYnV0ZXMgJiYgIUF0dHJpYnV0ZXNbV1JJVEFCTEVdKSB7XG4gICAgdmFyIGN1cnJlbnQgPSAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApO1xuICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnRbV1JJVEFCTEVdKSB7XG4gICAgICBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgICAgIEF0dHJpYnV0ZXMgPSB7XG4gICAgICAgIGNvbmZpZ3VyYWJsZTogQ09ORklHVVJBQkxFIGluIEF0dHJpYnV0ZXMgPyBBdHRyaWJ1dGVzW0NPTkZJR1VSQUJMRV0gOiBjdXJyZW50W0NPTkZJR1VSQUJMRV0sXG4gICAgICAgIGVudW1lcmFibGU6IEVOVU1FUkFCTEUgaW4gQXR0cmlidXRlcyA/IEF0dHJpYnV0ZXNbRU5VTUVSQUJMRV0gOiBjdXJyZW50W0VOVU1FUkFCTEVdLFxuICAgICAgICB3cml0YWJsZTogZmFsc2VcbiAgICAgIH07XG4gICAgfVxuICB9IHJldHVybiAkZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcyk7XG59IDogJGRlZmluZVByb3BlcnR5IDogZnVuY3Rpb24gZGVmaW5lUHJvcGVydHkoTywgUCwgQXR0cmlidXRlcykge1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoSUU4X0RPTV9ERUZJTkUpIHRyeSB7XG4gICAgcmV0dXJuICRkZWZpbmVQcm9wZXJ0eShPLCBQLCBBdHRyaWJ1dGVzKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKSB0aHJvdyAkVHlwZUVycm9yKCdBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCcpO1xuICBpZiAoJ3ZhbHVlJyBpbiBBdHRyaWJ1dGVzKSBPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgcHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXByb3BlcnR5LWlzLWVudW1lcmFibGUnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciB0b1Byb3BlcnR5S2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXByb3BlcnR5LWtleScpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgSUU4X0RPTV9ERUZJTkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaWU4LWRvbS1kZWZpbmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuZXhwb3J0cy5mID0gREVTQ1JJUFRPUlMgPyAkZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIDogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIFApIHtcbiAgTyA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgUCA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChJRThfRE9NX0RFRklORSkgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICBpZiAoaGFzT3duKE8sIFApKSByZXR1cm4gY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yKCFjYWxsKHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYsIE8sIFApLCBPW1BdKTtcbn07XG4iLCIvKiBlc2xpbnQtZGlzYWJsZSBlcy14L25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eW5hbWVzIC0tIHNhZmUgKi9cbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKS5mO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2Utc2ltcGxlJyk7XG5cbnZhciB3aW5kb3dOYW1lcyA9IHR5cGVvZiB3aW5kb3cgPT0gJ29iamVjdCcgJiYgd2luZG93ICYmIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzXG4gID8gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KSA6IFtdO1xuXG52YXIgZ2V0V2luZG93TmFtZXMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJGdldE93blByb3BlcnR5TmFtZXMoaXQpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBhcnJheVNsaWNlKHdpbmRvd05hbWVzKTtcbiAgfVxufTtcblxuLy8gZmFsbGJhY2sgZm9yIElFMTEgYnVnZ3kgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMgd2l0aCBpZnJhbWUgYW5kIHdpbmRvd1xubW9kdWxlLmV4cG9ydHMuZiA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5TmFtZXMoaXQpIHtcbiAgcmV0dXJuIHdpbmRvd05hbWVzICYmIGNsYXNzb2YoaXQpID09ICdXaW5kb3cnXG4gICAgPyBnZXRXaW5kb3dOYW1lcyhpdClcbiAgICA6ICRnZXRPd25Qcm9wZXJ0eU5hbWVzKHRvSW5kZXhlZE9iamVjdChpdCkpO1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbnZhciBoaWRkZW5LZXlzID0gZW51bUJ1Z0tleXMuY29uY2F0KCdsZW5ndGgnLCAncHJvdG90eXBlJyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eW5hbWVzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSBzYWZlXG5leHBvcnRzLmYgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyB8fCBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgcmV0dXJuIGludGVybmFsT2JqZWN0S2V5cyhPLCBoaWRkZW5LZXlzKTtcbn07XG4iLCIvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlzeW1ib2xzIC0tIHNhZmVcbmV4cG9ydHMuZiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHM7XG4iLCJ2YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgc2hhcmVkS2V5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZC1rZXknKTtcbnZhciBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1wcm90b3R5cGUtZ2V0dGVyJyk7XG5cbnZhciBJRV9QUk9UTyA9IHNoYXJlZEtleSgnSUVfUFJPVE8nKTtcbnZhciAkT2JqZWN0ID0gT2JqZWN0O1xudmFyIE9iamVjdFByb3RvdHlwZSA9ICRPYmplY3QucHJvdG90eXBlO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZ2V0cHJvdG90eXBlb2YgLS0gc2FmZVxubW9kdWxlLmV4cG9ydHMgPSBDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIgPyAkT2JqZWN0LmdldFByb3RvdHlwZU9mIDogZnVuY3Rpb24gKE8pIHtcbiAgdmFyIG9iamVjdCA9IHRvT2JqZWN0KE8pO1xuICBpZiAoaGFzT3duKG9iamVjdCwgSUVfUFJPVE8pKSByZXR1cm4gb2JqZWN0W0lFX1BST1RPXTtcbiAgdmFyIGNvbnN0cnVjdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yO1xuICBpZiAoaXNDYWxsYWJsZShjb25zdHJ1Y3RvcikgJiYgb2JqZWN0IGluc3RhbmNlb2YgY29uc3RydWN0b3IpIHtcbiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlO1xuICB9IHJldHVybiBvYmplY3QgaW5zdGFuY2VvZiAkT2JqZWN0ID8gT2JqZWN0UHJvdG90eXBlIDogbnVsbDtcbn07XG4iLCJ2YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YtcmF3Jyk7XG52YXIgQVJSQVlfQlVGRkVSX05PTl9FWFRFTlNJQkxFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci1ub24tZXh0ZW5zaWJsZScpO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtaXNleHRlbnNpYmxlIC0tIHNhZmVcbnZhciAkaXNFeHRlbnNpYmxlID0gT2JqZWN0LmlzRXh0ZW5zaWJsZTtcbnZhciBGQUlMU19PTl9QUklNSVRJVkVTID0gZmFpbHMoZnVuY3Rpb24gKCkgeyAkaXNFeHRlbnNpYmxlKDEpOyB9KTtcblxuLy8gYE9iamVjdC5pc0V4dGVuc2libGVgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuaXNleHRlbnNpYmxlXG5tb2R1bGUuZXhwb3J0cyA9IChGQUlMU19PTl9QUklNSVRJVkVTIHx8IEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSkgPyBmdW5jdGlvbiBpc0V4dGVuc2libGUoaXQpIHtcbiAgaWYgKCFpc09iamVjdChpdCkpIHJldHVybiBmYWxzZTtcbiAgaWYgKEFSUkFZX0JVRkZFUl9OT05fRVhURU5TSUJMRSAmJiBjbGFzc29mKGl0KSA9PSAnQXJyYXlCdWZmZXInKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAkaXNFeHRlbnNpYmxlID8gJGlzRXh0ZW5zaWJsZShpdCkgOiB0cnVlO1xufSA6ICRpc0V4dGVuc2libGU7XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdW5jdXJyeVRoaXMoe30uaXNQcm90b3R5cGVPZik7XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcbnZhciBoaWRkZW5LZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hpZGRlbi1rZXlzJyk7XG5cbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG9iamVjdCwgbmFtZXMpIHtcbiAgdmFyIE8gPSB0b0luZGV4ZWRPYmplY3Qob2JqZWN0KTtcbiAgdmFyIGkgPSAwO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIHZhciBrZXk7XG4gIGZvciAoa2V5IGluIE8pICFoYXNPd24oaGlkZGVuS2V5cywga2V5KSAmJiBoYXNPd24oTywga2V5KSAmJiBwdXNoKHJlc3VsdCwga2V5KTtcbiAgLy8gRG9uJ3QgZW51bSBidWcgJiBoaWRkZW4ga2V5c1xuICB3aGlsZSAobmFtZXMubGVuZ3RoID4gaSkgaWYgKGhhc093bihPLCBrZXkgPSBuYW1lc1tpKytdKSkge1xuICAgIH5pbmRleE9mKHJlc3VsdCwga2V5KSB8fCBwdXNoKHJlc3VsdCwga2V5KTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufTtcbiIsInZhciBpbnRlcm5hbE9iamVjdEtleXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWtleXMtaW50ZXJuYWwnKTtcbnZhciBlbnVtQnVnS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbnVtLWJ1Zy1rZXlzJyk7XG5cbi8vIGBPYmplY3Qua2V5c2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5rZXlzXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3Qta2V5cyAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5rZXlzIHx8IGZ1bmN0aW9uIGtleXMoTykge1xuICByZXR1cm4gaW50ZXJuYWxPYmplY3RLZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZ2V0b3ducHJvcGVydHlkZXNjcmlwdG9yIC0tIHNhZmVcbnZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuXG4vLyBOYXNob3JuIH4gSkRLOCBidWdcbnZhciBOQVNIT1JOX0JVRyA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvciAmJiAhJHByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoeyAxOiAyIH0sIDEpO1xuXG4vLyBgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZWAgbWV0aG9kIGltcGxlbWVudGF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5wcm90b3R5cGUucHJvcGVydHlpc2VudW1lcmFibGVcbmV4cG9ydHMuZiA9IE5BU0hPUk5fQlVHID8gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcih0aGlzLCBWKTtcbiAgcmV0dXJuICEhZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGU7XG59IDogJHByb3BlcnR5SXNFbnVtZXJhYmxlO1xuIiwiLyogZXNsaW50LWRpc2FibGUgbm8tcHJvdG8gLS0gc2FmZSAqL1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGFQb3NzaWJsZVByb3RvdHlwZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLXBvc3NpYmxlLXByb3RvdHlwZScpO1xuXG4vLyBgT2JqZWN0LnNldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnNldHByb3RvdHlwZW9mXG4vLyBXb3JrcyB3aXRoIF9fcHJvdG9fXyBvbmx5LiBPbGQgdjggY2FuJ3Qgd29yayB3aXRoIG51bGwgcHJvdG8gb2JqZWN0cy5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1zZXRwcm90b3R5cGVvZiAtLSBzYWZlXG5tb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCAoJ19fcHJvdG9fXycgaW4ge30gPyBmdW5jdGlvbiAoKSB7XG4gIHZhciBDT1JSRUNUX1NFVFRFUiA9IGZhbHNlO1xuICB2YXIgdGVzdCA9IHt9O1xuICB2YXIgc2V0dGVyO1xuICB0cnkge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3IgLS0gc2FmZVxuICAgIHNldHRlciA9IHVuY3VycnlUaGlzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LnByb3RvdHlwZSwgJ19fcHJvdG9fXycpLnNldCk7XG4gICAgc2V0dGVyKHRlc3QsIFtdKTtcbiAgICBDT1JSRUNUX1NFVFRFUiA9IHRlc3QgaW5zdGFuY2VvZiBBcnJheTtcbiAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gZnVuY3Rpb24gc2V0UHJvdG90eXBlT2YoTywgcHJvdG8pIHtcbiAgICBhbk9iamVjdChPKTtcbiAgICBhUG9zc2libGVQcm90b3R5cGUocHJvdG8pO1xuICAgIGlmIChDT1JSRUNUX1NFVFRFUikgc2V0dGVyKE8sIHByb3RvKTtcbiAgICBlbHNlIE8uX19wcm90b19fID0gcHJvdG87XG4gICAgcmV0dXJuIE87XG4gIH07XG59KCkgOiB1bmRlZmluZWQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIFRPX1NUUklOR19UQUdfU1VQUE9SVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmctdGFnLXN1cHBvcnQnKTtcbnZhciBjbGFzc29mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NsYXNzb2YnKTtcblxuLy8gYE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZCBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QucHJvdG90eXBlLnRvc3RyaW5nXG5tb2R1bGUuZXhwb3J0cyA9IFRPX1NUUklOR19UQUdfU1VQUE9SVCA/IHt9LnRvU3RyaW5nIDogZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiAnW29iamVjdCAnICsgY2xhc3NvZih0aGlzKSArICddJztcbn07XG4iLCJ2YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcblxuLy8gYE9yZGluYXJ5VG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vcmRpbmFyeXRvcHJpbWl0aXZlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnB1dCwgcHJlZikge1xuICB2YXIgZm4sIHZhbDtcbiAgaWYgKHByZWYgPT09ICdzdHJpbmcnICYmIGlzQ2FsbGFibGUoZm4gPSBpbnB1dC50b1N0cmluZykgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChpc0NhbGxhYmxlKGZuID0gaW5wdXQudmFsdWVPZikgJiYgIWlzT2JqZWN0KHZhbCA9IGNhbGwoZm4sIGlucHV0KSkpIHJldHVybiB2YWw7XG4gIGlmIChwcmVmICE9PSAnc3RyaW5nJyAmJiBpc0NhbGxhYmxlKGZuID0gaW5wdXQudG9TdHJpbmcpICYmICFpc09iamVjdCh2YWwgPSBjYWxsKGZuLCBpbnB1dCkpKSByZXR1cm4gdmFsO1xuICB0aHJvdyAkVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpO1xufTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xuXG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcblxuLy8gYWxsIG9iamVjdCBrZXlzLCBpbmNsdWRlcyBub24tZW51bWVyYWJsZSBhbmQgc3ltYm9sc1xubW9kdWxlLmV4cG9ydHMgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ293bktleXMnKSB8fCBmdW5jdGlvbiBvd25LZXlzKGl0KSB7XG4gIHZhciBrZXlzID0gZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZS5mKGFuT2JqZWN0KGl0KSk7XG4gIHZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPSBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUuZjtcbiAgcmV0dXJuIGdldE93blByb3BlcnR5U3ltYm9scyA/IGNvbmNhdChrZXlzLCBnZXRPd25Qcm9wZXJ0eVN5bWJvbHMoaXQpKSA6IGtleXM7XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBnbG9iYWw7XG4iLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChleGVjKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IGZhbHNlLCB2YWx1ZTogZXhlYygpIH07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIHsgZXJyb3I6IHRydWUsIHZhbHVlOiBlcnJvciB9O1xuICB9XG59O1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNGb3JjZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtZm9yY2VkJyk7XG52YXIgaW5zcGVjdFNvdXJjZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnNwZWN0LXNvdXJjZScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIElTX0JST1dTRVIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWJyb3dzZXInKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xudmFyIFNVQkNMQVNTSU5HID0gZmFsc2U7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gaXNDYWxsYWJsZShnbG9iYWwuUHJvbWlzZVJlamVjdGlvbkV2ZW50KTtcblxudmFyIEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SID0gaXNGb3JjZWQoJ1Byb21pc2UnLCBmdW5jdGlvbiAoKSB7XG4gIHZhciBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSA9IGluc3BlY3RTb3VyY2UoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKTtcbiAgdmFyIEdMT0JBTF9DT1JFX0pTX1BST01JU0UgPSBQUk9NSVNFX0NPTlNUUlVDVE9SX1NPVVJDRSAhPT0gU3RyaW5nKE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvcik7XG4gIC8vIFY4IDYuNiAoTm9kZSAxMCBhbmQgQ2hyb21lIDY2KSBoYXZlIGEgYnVnIHdpdGggcmVzb2x2aW5nIGN1c3RvbSB0aGVuYWJsZXNcbiAgLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9ODMwNTY1XG4gIC8vIFdlIGNhbid0IGRldGVjdCBpdCBzeW5jaHJvbm91c2x5LCBzbyBqdXN0IGNoZWNrIHZlcnNpb25zXG4gIGlmICghR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSAmJiBWOF9WRVJTSU9OID09PSA2NikgcmV0dXJuIHRydWU7XG4gIC8vIFdlIG5lZWQgUHJvbWlzZSN7IGNhdGNoLCBmaW5hbGx5IH0gaW4gdGhlIHB1cmUgdmVyc2lvbiBmb3IgcHJldmVudGluZyBwcm90b3R5cGUgcG9sbHV0aW9uXG4gIGlmIChJU19QVVJFICYmICEoTmF0aXZlUHJvbWlzZVByb3RvdHlwZVsnY2F0Y2gnXSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlWydmaW5hbGx5J10pKSByZXR1cm4gdHJ1ZTtcbiAgLy8gV2UgY2FuJ3QgdXNlIEBAc3BlY2llcyBmZWF0dXJlIGRldGVjdGlvbiBpbiBWOCBzaW5jZSBpdCBjYXVzZXNcbiAgLy8gZGVvcHRpbWl6YXRpb24gYW5kIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbiAgaWYgKFY4X1ZFUlNJT04gPj0gNTEgJiYgL25hdGl2ZSBjb2RlLy50ZXN0KFBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFKSkgcmV0dXJuIGZhbHNlO1xuICAvLyBEZXRlY3QgY29ycmVjdG5lc3Mgb2Ygc3ViY2xhc3Npbmcgd2l0aCBAQHNwZWNpZXMgc3VwcG9ydFxuICB2YXIgcHJvbWlzZSA9IG5ldyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSgxKTsgfSk7XG4gIHZhciBGYWtlUHJvbWlzZSA9IGZ1bmN0aW9uIChleGVjKSB7XG4gICAgZXhlYyhmdW5jdGlvbiAoKSB7IC8qIGVtcHR5ICovIH0sIGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSk7XG4gIH07XG4gIHZhciBjb25zdHJ1Y3RvciA9IHByb21pc2UuY29uc3RydWN0b3IgPSB7fTtcbiAgY29uc3RydWN0b3JbU1BFQ0lFU10gPSBGYWtlUHJvbWlzZTtcbiAgU1VCQ0xBU1NJTkcgPSBwcm9taXNlLnRoZW4oZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KSBpbnN0YW5jZW9mIEZha2VQcm9taXNlO1xuICBpZiAoIVNVQkNMQVNTSU5HKSByZXR1cm4gdHJ1ZTtcbiAgLy8gVW5oYW5kbGVkIHJlamVjdGlvbnMgdHJhY2tpbmcgc3VwcG9ydCwgTm9kZUpTIFByb21pc2Ugd2l0aG91dCBpdCBmYWlscyBAQHNwZWNpZXMgdGVzdFxuICByZXR1cm4gIUdMT0JBTF9DT1JFX0pTX1BST01JU0UgJiYgSVNfQlJPV1NFUiAmJiAhTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBDT05TVFJVQ1RPUjogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IsXG4gIFJFSkVDVElPTl9FVkVOVDogTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5ULFxuICBTVUJDTEFTU0lORzogU1VCQ0xBU1NJTkdcbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5Qcm9taXNlO1xuIiwidmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoQywgeCkge1xuICBhbk9iamVjdChDKTtcbiAgaWYgKGlzT2JqZWN0KHgpICYmIHguY29uc3RydWN0b3IgPT09IEMpIHJldHVybiB4O1xuICB2YXIgcHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eS5mKEMpO1xuICB2YXIgcmVzb2x2ZSA9IHByb21pc2VDYXBhYmlsaXR5LnJlc29sdmU7XG4gIHJlc29sdmUoeCk7XG4gIHJldHVybiBwcm9taXNlQ2FwYWJpbGl0eS5wcm9taXNlO1xufTtcbiIsInZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2hlY2stY29ycmVjdG5lc3Mtb2YtaXRlcmF0aW9uJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxubW9kdWxlLmV4cG9ydHMgPSBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB8fCAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IuYWxsKGl0ZXJhYmxlKS50aGVuKHVuZGVmaW5lZCwgZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuIiwidmFyIFF1ZXVlID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmhlYWQgPSBudWxsO1xuICB0aGlzLnRhaWwgPSBudWxsO1xufTtcblxuUXVldWUucHJvdG90eXBlID0ge1xuICBhZGQ6IGZ1bmN0aW9uIChpdGVtKSB7XG4gICAgdmFyIGVudHJ5ID0geyBpdGVtOiBpdGVtLCBuZXh0OiBudWxsIH07XG4gICAgaWYgKHRoaXMuaGVhZCkgdGhpcy50YWlsLm5leHQgPSBlbnRyeTtcbiAgICBlbHNlIHRoaXMuaGVhZCA9IGVudHJ5O1xuICAgIHRoaXMudGFpbCA9IGVudHJ5O1xuICB9LFxuICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICB2YXIgZW50cnkgPSB0aGlzLmhlYWQ7XG4gICAgaWYgKGVudHJ5KSB7XG4gICAgICB0aGlzLmhlYWQgPSBlbnRyeS5uZXh0O1xuICAgICAgaWYgKHRoaXMudGFpbCA9PT0gZW50cnkpIHRoaXMudGFpbCA9IG51bGw7XG4gICAgICByZXR1cm4gZW50cnkuaXRlbTtcbiAgICB9XG4gIH1cbn07XG5cbm1vZHVsZS5leHBvcnRzID0gUXVldWU7XG4iLCJ2YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZi1yYXcnKTtcbnZhciByZWdleHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbnZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVnRXhwRXhlY2AgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cGV4ZWNcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIsIFMpIHtcbiAgdmFyIGV4ZWMgPSBSLmV4ZWM7XG4gIGlmIChpc0NhbGxhYmxlKGV4ZWMpKSB7XG4gICAgdmFyIHJlc3VsdCA9IGNhbGwoZXhlYywgUiwgUyk7XG4gICAgaWYgKHJlc3VsdCAhPT0gbnVsbCkgYW5PYmplY3QocmVzdWx0KTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG4gIGlmIChjbGFzc29mKFIpID09PSAnUmVnRXhwJykgcmV0dXJuIGNhbGwocmVnZXhwRXhlYywgUiwgUyk7XG4gIHRocm93ICRUeXBlRXJyb3IoJ1JlZ0V4cCNleGVjIGNhbGxlZCBvbiBpbmNvbXBhdGlibGUgcmVjZWl2ZXInKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG4vKiBlc2xpbnQtZGlzYWJsZSByZWdleHAvbm8tZW1wdHktY2FwdHVyaW5nLWdyb3VwLCByZWdleHAvbm8tZW1wdHktZ3JvdXAsIHJlZ2V4cC9uby1sYXp5LWVuZHMgLS0gdGVzdGluZyAqL1xuLyogZXNsaW50LWRpc2FibGUgcmVnZXhwL25vLXVzZWxlc3MtcXVhbnRpZmllciAtLSB0ZXN0aW5nICovXG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVnZXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWZsYWdzJyk7XG52YXIgc3RpY2t5SGVscGVycyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtc3RpY2t5LWhlbHBlcnMnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgY3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZ2V0O1xudmFyIFVOU1VQUE9SVEVEX0RPVF9BTEwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLWRvdC1hbGwnKTtcbnZhciBVTlNVUFBPUlRFRF9OQ0cgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXVuc3VwcG9ydGVkLW5jZycpO1xuXG52YXIgbmF0aXZlUmVwbGFjZSA9IHNoYXJlZCgnbmF0aXZlLXN0cmluZy1yZXBsYWNlJywgU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbnZhciBuYXRpdmVFeGVjID0gUmVnRXhwLnByb3RvdHlwZS5leGVjO1xudmFyIHBhdGNoZWRFeGVjID0gbmF0aXZlRXhlYztcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGluZGV4T2YgPSB1bmN1cnJ5VGhpcygnJy5pbmRleE9mKTtcbnZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgPSAoZnVuY3Rpb24gKCkge1xuICB2YXIgcmUxID0gL2EvO1xuICB2YXIgcmUyID0gL2IqL2c7XG4gIGNhbGwobmF0aXZlRXhlYywgcmUxLCAnYScpO1xuICBjYWxsKG5hdGl2ZUV4ZWMsIHJlMiwgJ2EnKTtcbiAgcmV0dXJuIHJlMS5sYXN0SW5kZXggIT09IDAgfHwgcmUyLmxhc3RJbmRleCAhPT0gMDtcbn0pKCk7XG5cbnZhciBVTlNVUFBPUlRFRF9ZID0gc3RpY2t5SGVscGVycy5CUk9LRU5fQ0FSRVQ7XG5cbi8vIG5vbnBhcnRpY2lwYXRpbmcgY2FwdHVyaW5nIGdyb3VwLCBjb3BpZWQgZnJvbSBlczUtc2hpbSdzIFN0cmluZyNzcGxpdCBwYXRjaC5cbnZhciBOUENHX0lOQ0xVREVEID0gLygpPz8vLmV4ZWMoJycpWzFdICE9PSB1bmRlZmluZWQ7XG5cbnZhciBQQVRDSCA9IFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyB8fCBOUENHX0lOQ0xVREVEIHx8IFVOU1VQUE9SVEVEX1kgfHwgVU5TVVBQT1JURURfRE9UX0FMTCB8fCBVTlNVUFBPUlRFRF9OQ0c7XG5cbmlmIChQQVRDSCkge1xuICBwYXRjaGVkRXhlYyA9IGZ1bmN0aW9uIGV4ZWMoc3RyaW5nKSB7XG4gICAgdmFyIHJlID0gdGhpcztcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHJlKTtcbiAgICB2YXIgc3RyID0gdG9TdHJpbmcoc3RyaW5nKTtcbiAgICB2YXIgcmF3ID0gc3RhdGUucmF3O1xuICAgIHZhciByZXN1bHQsIHJlQ29weSwgbGFzdEluZGV4LCBtYXRjaCwgaSwgb2JqZWN0LCBncm91cDtcblxuICAgIGlmIChyYXcpIHtcbiAgICAgIHJhdy5sYXN0SW5kZXggPSByZS5sYXN0SW5kZXg7XG4gICAgICByZXN1bHQgPSBjYWxsKHBhdGNoZWRFeGVjLCByYXcsIHN0cik7XG4gICAgICByZS5sYXN0SW5kZXggPSByYXcubGFzdEluZGV4O1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICB2YXIgZ3JvdXBzID0gc3RhdGUuZ3JvdXBzO1xuICAgIHZhciBzdGlja3kgPSBVTlNVUFBPUlRFRF9ZICYmIHJlLnN0aWNreTtcbiAgICB2YXIgZmxhZ3MgPSBjYWxsKHJlZ2V4cEZsYWdzLCByZSk7XG4gICAgdmFyIHNvdXJjZSA9IHJlLnNvdXJjZTtcbiAgICB2YXIgY2hhcnNBZGRlZCA9IDA7XG4gICAgdmFyIHN0ckNvcHkgPSBzdHI7XG5cbiAgICBpZiAoc3RpY2t5KSB7XG4gICAgICBmbGFncyA9IHJlcGxhY2UoZmxhZ3MsICd5JywgJycpO1xuICAgICAgaWYgKGluZGV4T2YoZmxhZ3MsICdnJykgPT09IC0xKSB7XG4gICAgICAgIGZsYWdzICs9ICdnJztcbiAgICAgIH1cblxuICAgICAgc3RyQ29weSA9IHN0cmluZ1NsaWNlKHN0ciwgcmUubGFzdEluZGV4KTtcbiAgICAgIC8vIFN1cHBvcnQgYW5jaG9yZWQgc3RpY2t5IGJlaGF2aW9yLlxuICAgICAgaWYgKHJlLmxhc3RJbmRleCA+IDAgJiYgKCFyZS5tdWx0aWxpbmUgfHwgcmUubXVsdGlsaW5lICYmIGNoYXJBdChzdHIsIHJlLmxhc3RJbmRleCAtIDEpICE9PSAnXFxuJykpIHtcbiAgICAgICAgc291cmNlID0gJyg/OiAnICsgc291cmNlICsgJyknO1xuICAgICAgICBzdHJDb3B5ID0gJyAnICsgc3RyQ29weTtcbiAgICAgICAgY2hhcnNBZGRlZCsrO1xuICAgICAgfVxuICAgICAgLy8gXig/ICsgcnggKyApIGlzIG5lZWRlZCwgaW4gY29tYmluYXRpb24gd2l0aCBzb21lIHN0ciBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXig/OicgKyBzb3VyY2UgKyAnKScsIGZsYWdzKTtcbiAgICB9XG5cbiAgICBpZiAoTlBDR19JTkNMVURFRCkge1xuICAgICAgcmVDb3B5ID0gbmV3IFJlZ0V4cCgnXicgKyBzb3VyY2UgKyAnJCg/IVxcXFxzKScsIGZsYWdzKTtcbiAgICB9XG4gICAgaWYgKFVQREFURVNfTEFTVF9JTkRFWF9XUk9ORykgbGFzdEluZGV4ID0gcmUubGFzdEluZGV4O1xuXG4gICAgbWF0Y2ggPSBjYWxsKG5hdGl2ZUV4ZWMsIHN0aWNreSA/IHJlQ29weSA6IHJlLCBzdHJDb3B5KTtcblxuICAgIGlmIChzdGlja3kpIHtcbiAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICBtYXRjaC5pbnB1dCA9IHN0cmluZ1NsaWNlKG1hdGNoLmlucHV0LCBjaGFyc0FkZGVkKTtcbiAgICAgICAgbWF0Y2hbMF0gPSBzdHJpbmdTbGljZShtYXRjaFswXSwgY2hhcnNBZGRlZCk7XG4gICAgICAgIG1hdGNoLmluZGV4ID0gcmUubGFzdEluZGV4O1xuICAgICAgICByZS5sYXN0SW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoO1xuICAgICAgfSBlbHNlIHJlLmxhc3RJbmRleCA9IDA7XG4gICAgfSBlbHNlIGlmIChVUERBVEVTX0xBU1RfSU5ERVhfV1JPTkcgJiYgbWF0Y2gpIHtcbiAgICAgIHJlLmxhc3RJbmRleCA9IHJlLmdsb2JhbCA/IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoIDogbGFzdEluZGV4O1xuICAgIH1cbiAgICBpZiAoTlBDR19JTkNMVURFRCAmJiBtYXRjaCAmJiBtYXRjaC5sZW5ndGggPiAxKSB7XG4gICAgICAvLyBGaXggYnJvd3NlcnMgd2hvc2UgYGV4ZWNgIG1ldGhvZHMgZG9uJ3QgY29uc2lzdGVudGx5IHJldHVybiBgdW5kZWZpbmVkYFxuICAgICAgLy8gZm9yIE5QQ0csIGxpa2UgSUU4LiBOT1RFOiBUaGlzIGRvZXNuJyB3b3JrIGZvciAvKC4/KT8vXG4gICAgICBjYWxsKG5hdGl2ZVJlcGxhY2UsIG1hdGNoWzBdLCByZUNvcHksIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGggLSAyOyBpKyspIHtcbiAgICAgICAgICBpZiAoYXJndW1lbnRzW2ldID09PSB1bmRlZmluZWQpIG1hdGNoW2ldID0gdW5kZWZpbmVkO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAobWF0Y2ggJiYgZ3JvdXBzKSB7XG4gICAgICBtYXRjaC5ncm91cHMgPSBvYmplY3QgPSBjcmVhdGUobnVsbCk7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgZ3JvdXBzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGdyb3VwID0gZ3JvdXBzW2ldO1xuICAgICAgICBvYmplY3RbZ3JvdXBbMF1dID0gbWF0Y2hbZ3JvdXBbMV1dO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXRjaDtcbiAgfTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwYXRjaGVkRXhlYztcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcblxuLy8gYFJlZ0V4cC5wcm90b3R5cGUuZmxhZ3NgIGdldHRlciBpbXBsZW1lbnRhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1nZXQtcmVnZXhwLnByb3RvdHlwZS5mbGFnc1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIHZhciB0aGF0ID0gYW5PYmplY3QodGhpcyk7XG4gIHZhciByZXN1bHQgPSAnJztcbiAgaWYgKHRoYXQuaGFzSW5kaWNlcykgcmVzdWx0ICs9ICdkJztcbiAgaWYgKHRoYXQuZ2xvYmFsKSByZXN1bHQgKz0gJ2cnO1xuICBpZiAodGhhdC5pZ25vcmVDYXNlKSByZXN1bHQgKz0gJ2knO1xuICBpZiAodGhhdC5tdWx0aWxpbmUpIHJlc3VsdCArPSAnbSc7XG4gIGlmICh0aGF0LmRvdEFsbCkgcmVzdWx0ICs9ICdzJztcbiAgaWYgKHRoYXQudW5pY29kZSkgcmVzdWx0ICs9ICd1JztcbiAgaWYgKHRoYXQudW5pY29kZVNldHMpIHJlc3VsdCArPSAndic7XG4gIGlmICh0aGF0LnN0aWNreSkgcmVzdWx0ICs9ICd5JztcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG4iLCJ2YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciByZWdFeHBGbGFncyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZmxhZ3MnKTtcblxudmFyIFJlZ0V4cFByb3RvdHlwZSA9IFJlZ0V4cC5wcm90b3R5cGU7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKFIpIHtcbiAgdmFyIGZsYWdzID0gUi5mbGFncztcbiAgcmV0dXJuIGZsYWdzID09PSB1bmRlZmluZWQgJiYgISgnZmxhZ3MnIGluIFJlZ0V4cFByb3RvdHlwZSkgJiYgIWhhc093bihSLCAnZmxhZ3MnKSAmJiBpc1Byb3RvdHlwZU9mKFJlZ0V4cFByb3RvdHlwZSwgUilcbiAgICA/IGNhbGwocmVnRXhwRmxhZ3MsIFIpIDogZmxhZ3M7XG59O1xuIiwidmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xuXG4vLyBiYWJlbC1taW5pZnkgYW5kIENsb3N1cmUgQ29tcGlsZXIgdHJhbnNwaWxlcyBSZWdFeHAoJ2EnLCAneScpIC0+IC9hL3kgYW5kIGl0IGNhdXNlcyBTeW50YXhFcnJvclxudmFyICRSZWdFeHAgPSBnbG9iYWwuUmVnRXhwO1xuXG52YXIgVU5TVVBQT1JURURfWSA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gJFJlZ0V4cCgnYScsICd5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdhYmNkJykgIT0gbnVsbDtcbn0pO1xuXG4vLyBVQyBCcm93c2VyIGJ1Z1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzEwMDhcbnZhciBNSVNTRURfU1RJQ0tZID0gVU5TVVBQT1JURURfWSB8fCBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhJFJlZ0V4cCgnYScsICd5Jykuc3RpY2t5O1xufSk7XG5cbnZhciBCUk9LRU5fQ0FSRVQgPSBVTlNVUFBPUlRFRF9ZIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzczNjg3XG4gIHZhciByZSA9ICRSZWdFeHAoJ15yJywgJ2d5Jyk7XG4gIHJlLmxhc3RJbmRleCA9IDI7XG4gIHJldHVybiByZS5leGVjKCdzdHInKSAhPSBudWxsO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBCUk9LRU5fQ0FSRVQ6IEJST0tFTl9DQVJFVCxcbiAgTUlTU0VEX1NUSUNLWTogTUlTU0VEX1NUSUNLWSxcbiAgVU5TVVBQT1JURURfWTogVU5TVVBQT1JURURfWVxufTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcuJywgJ3MnKSAtPiAvLi9zIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJy4nLCAncycpO1xuICByZXR1cm4gIShyZS5kb3RBbGwgJiYgcmUuZXhlYygnXFxuJykgJiYgcmUuZmxhZ3MgPT09ICdzJyk7XG59KTtcbiIsInZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcblxuLy8gYmFiZWwtbWluaWZ5IGFuZCBDbG9zdXJlIENvbXBpbGVyIHRyYW5zcGlsZXMgUmVnRXhwKCcoPzxhPmIpJywgJ2cnKSAtPiAvKD88YT5iKS9nIGFuZCBpdCBjYXVzZXMgU3ludGF4RXJyb3JcbnZhciAkUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcblxubW9kdWxlLmV4cG9ydHMgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciByZSA9ICRSZWdFeHAoJyg/PGE+YiknLCAnZycpO1xuICByZXR1cm4gcmUuZXhlYygnYicpLmdyb3Vwcy5hICE9PSAnYicgfHxcbiAgICAnYicucmVwbGFjZShyZSwgJyQ8YT5jJykgIT09ICdiYyc7XG59KTtcbiIsInZhciAkVHlwZUVycm9yID0gVHlwZUVycm9yO1xuXG4vLyBgUmVxdWlyZU9iamVjdENvZXJjaWJsZWAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlcXVpcmVvYmplY3Rjb2VyY2libGVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGl0KSB7XG4gIGlmIChpdCA9PSB1bmRlZmluZWQpIHRocm93ICRUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVByb3BlcnR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xuXG52YXIgU1BFQ0lFUyA9IHdlbGxLbm93blN5bWJvbCgnc3BlY2llcycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChDT05TVFJVQ1RPUl9OQU1FKSB7XG4gIHZhciBDb25zdHJ1Y3RvciA9IGdldEJ1aWx0SW4oQ09OU1RSVUNUT1JfTkFNRSk7XG4gIHZhciBkZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG5cbiAgaWYgKERFU0NSSVBUT1JTICYmIENvbnN0cnVjdG9yICYmICFDb25zdHJ1Y3RvcltTUEVDSUVTXSkge1xuICAgIGRlZmluZVByb3BlcnR5KENvbnN0cnVjdG9yLCBTUEVDSUVTLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRoaXM7IH1cbiAgICB9KTtcbiAgfVxufTtcbiIsInZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAodGFyZ2V0LCBUQUcsIFNUQVRJQykge1xuICBpZiAodGFyZ2V0ICYmICFTVEFUSUMpIHRhcmdldCA9IHRhcmdldC5wcm90b3R5cGU7XG4gIGlmICh0YXJnZXQgJiYgIWhhc093bih0YXJnZXQsIFRPX1NUUklOR19UQUcpKSB7XG4gICAgZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBUT19TVFJJTkdfVEFHLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgdmFsdWU6IFRBRyB9KTtcbiAgfVxufTtcbiIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgdWlkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3VpZCcpO1xuXG52YXIga2V5cyA9IHNoYXJlZCgna2V5cycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuIGtleXNba2V5XSB8fCAoa2V5c1trZXldID0gdWlkKGtleSkpO1xufTtcbiIsInZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgZGVmaW5lR2xvYmFsUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWdsb2JhbC1wcm9wZXJ0eScpO1xuXG52YXIgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXyc7XG52YXIgc3RvcmUgPSBnbG9iYWxbU0hBUkVEXSB8fCBkZWZpbmVHbG9iYWxQcm9wZXJ0eShTSEFSRUQsIHt9KTtcblxubW9kdWxlLmV4cG9ydHMgPSBzdG9yZTtcbiIsInZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcbnZhciBzdG9yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQtc3RvcmUnKTtcblxuKG1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGtleSwgdmFsdWUpIHtcbiAgcmV0dXJuIHN0b3JlW2tleV0gfHwgKHN0b3JlW2tleV0gPSB2YWx1ZSAhPT0gdW5kZWZpbmVkID8gdmFsdWUgOiB7fSk7XG59KSgndmVyc2lvbnMnLCBbXSkucHVzaCh7XG4gIHZlcnNpb246ICczLjIzLjMnLFxuICBtb2RlOiBJU19QVVJFID8gJ3B1cmUnIDogJ2dsb2JhbCcsXG4gIGNvcHlyaWdodDogJ8KpIDIwMTQtMjAyMiBEZW5pcyBQdXNoa2FyZXYgKHpsb2lyb2NrLnJ1KScsXG4gIGxpY2Vuc2U6ICdodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9ibG9iL3YzLjIzLjMvTElDRU5TRScsXG4gIHNvdXJjZTogJ2h0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzJ1xufSk7XG4iLCJ2YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIFNQRUNJRVMgPSB3ZWxsS25vd25TeW1ib2woJ3NwZWNpZXMnKTtcblxuLy8gYFNwZWNpZXNDb25zdHJ1Y3RvcmAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXNwZWNpZXNjb25zdHJ1Y3RvclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoTywgZGVmYXVsdENvbnN0cnVjdG9yKSB7XG4gIHZhciBDID0gYW5PYmplY3QoTykuY29uc3RydWN0b3I7XG4gIHZhciBTO1xuICByZXR1cm4gQyA9PT0gdW5kZWZpbmVkIHx8IChTID0gYW5PYmplY3QoQylbU1BFQ0lFU10pID09IHVuZGVmaW5lZCA/IGRlZmF1bHRDb25zdHJ1Y3RvciA6IGFDb25zdHJ1Y3RvcihTKTtcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyIGNoYXJBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJBdCk7XG52YXIgY2hhckNvZGVBdCA9IHVuY3VycnlUaGlzKCcnLmNoYXJDb2RlQXQpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgY3JlYXRlTWV0aG9kID0gZnVuY3Rpb24gKENPTlZFUlRfVE9fU1RSSU5HKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoJHRoaXMsIHBvcykge1xuICAgIHZhciBTID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSgkdGhpcykpO1xuICAgIHZhciBwb3NpdGlvbiA9IHRvSW50ZWdlck9ySW5maW5pdHkocG9zKTtcbiAgICB2YXIgc2l6ZSA9IFMubGVuZ3RoO1xuICAgIHZhciBmaXJzdCwgc2Vjb25kO1xuICAgIGlmIChwb3NpdGlvbiA8IDAgfHwgcG9zaXRpb24gPj0gc2l6ZSkgcmV0dXJuIENPTlZFUlRfVE9fU1RSSU5HID8gJycgOiB1bmRlZmluZWQ7XG4gICAgZmlyc3QgPSBjaGFyQ29kZUF0KFMsIHBvc2l0aW9uKTtcbiAgICByZXR1cm4gZmlyc3QgPCAweEQ4MDAgfHwgZmlyc3QgPiAweERCRkYgfHwgcG9zaXRpb24gKyAxID09PSBzaXplXG4gICAgICB8fCAoc2Vjb25kID0gY2hhckNvZGVBdChTLCBwb3NpdGlvbiArIDEpKSA8IDB4REMwMCB8fCBzZWNvbmQgPiAweERGRkZcbiAgICAgICAgPyBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gY2hhckF0KFMsIHBvc2l0aW9uKVxuICAgICAgICAgIDogZmlyc3RcbiAgICAgICAgOiBDT05WRVJUX1RPX1NUUklOR1xuICAgICAgICAgID8gc3RyaW5nU2xpY2UoUywgcG9zaXRpb24sIHBvc2l0aW9uICsgMilcbiAgICAgICAgICA6IChmaXJzdCAtIDB4RDgwMCA8PCAxMCkgKyAoc2Vjb25kIC0gMHhEQzAwKSArIDB4MTAwMDA7XG4gIH07XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgLy8gYFN0cmluZy5wcm90b3R5cGUuY29kZVBvaW50QXRgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuY29kZXBvaW50YXRcbiAgY29kZUF0OiBjcmVhdGVNZXRob2QoZmFsc2UpLFxuICAvLyBgU3RyaW5nLnByb3RvdHlwZS5hdGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tYXRoaWFzYnluZW5zL1N0cmluZy5wcm90b3R5cGUuYXRcbiAgY2hhckF0OiBjcmVhdGVNZXRob2QodHJ1ZSlcbn07XG4iLCJ2YXIgUFJPUEVSX0ZVTkNUSU9OX05BTUUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLlBST1BFUjtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHdoaXRlc3BhY2VzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3doaXRlc3BhY2VzJyk7XG5cbnZhciBub24gPSAnXFx1MjAwQlxcdTAwODVcXHUxODBFJztcblxuLy8gY2hlY2sgdGhhdCBhIG1ldGhvZCB3b3JrcyB3aXRoIHRoZSBjb3JyZWN0IGxpc3Rcbi8vIG9mIHdoaXRlc3BhY2VzIGFuZCBoYXMgYSBjb3JyZWN0IG5hbWVcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKE1FVEhPRF9OQU1FKSB7XG4gIHJldHVybiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuICEhd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdKClcbiAgICAgIHx8IG5vbltNRVRIT0RfTkFNRV0oKSAhPT0gbm9uXG4gICAgICB8fCAoUFJPUEVSX0ZVTkNUSU9OX05BTUUgJiYgd2hpdGVzcGFjZXNbTUVUSE9EX05BTUVdLm5hbWUgIT09IE1FVEhPRF9OQU1FKTtcbiAgfSk7XG59O1xuIiwidmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgd2hpdGVzcGFjZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2hpdGVzcGFjZXMnKTtcblxudmFyIHJlcGxhY2UgPSB1bmN1cnJ5VGhpcygnJy5yZXBsYWNlKTtcbnZhciB3aGl0ZXNwYWNlID0gJ1snICsgd2hpdGVzcGFjZXMgKyAnXSc7XG52YXIgbHRyaW0gPSBSZWdFeHAoJ14nICsgd2hpdGVzcGFjZSArIHdoaXRlc3BhY2UgKyAnKicpO1xudmFyIHJ0cmltID0gUmVnRXhwKHdoaXRlc3BhY2UgKyB3aGl0ZXNwYWNlICsgJyokJyk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbSwgdHJpbVN0YXJ0LCB0cmltRW5kLCB0cmltTGVmdCwgdHJpbVJpZ2h0IH1gIG1ldGhvZHMgaW1wbGVtZW50YXRpb25cbnZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoVFlQRSkge1xuICByZXR1cm4gZnVuY3Rpb24gKCR0aGlzKSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUoJHRoaXMpKTtcbiAgICBpZiAoVFlQRSAmIDEpIHN0cmluZyA9IHJlcGxhY2Uoc3RyaW5nLCBsdHJpbSwgJycpO1xuICAgIGlmIChUWVBFICYgMikgc3RyaW5nID0gcmVwbGFjZShzdHJpbmcsIHJ0cmltLCAnJyk7XG4gICAgcmV0dXJuIHN0cmluZztcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICAvLyBgU3RyaW5nLnByb3RvdHlwZS57IHRyaW1MZWZ0LCB0cmltU3RhcnQgfWAgbWV0aG9kc1xuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbXN0YXJ0XG4gIHN0YXJ0OiBjcmVhdGVNZXRob2QoMSksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnsgdHJpbVJpZ2h0LCB0cmltRW5kIH1gIG1ldGhvZHNcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLnRyaW1lbmRcbiAgZW5kOiBjcmVhdGVNZXRob2QoMiksXG4gIC8vIGBTdHJpbmcucHJvdG90eXBlLnRyaW1gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUudHJpbVxuICB0cmltOiBjcmVhdGVNZXRob2QoMylcbn07XG4iLCJ2YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgZ2V0QnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtYnVpbHQtaW4nKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIFN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpO1xuICB2YXIgU3ltYm9sUHJvdG90eXBlID0gU3ltYm9sICYmIFN5bWJvbC5wcm90b3R5cGU7XG4gIHZhciB2YWx1ZU9mID0gU3ltYm9sUHJvdG90eXBlICYmIFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mO1xuICB2YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4gIGlmIChTeW1ib2xQcm90b3R5cGUgJiYgIVN5bWJvbFByb3RvdHlwZVtUT19QUklNSVRJVkVdKSB7XG4gICAgLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1ByaW1pdGl2ZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciAubGVuZ3RoXG4gICAgZGVmaW5lQnVpbHRJbihTeW1ib2xQcm90b3R5cGUsIFRPX1BSSU1JVElWRSwgZnVuY3Rpb24gKGhpbnQpIHtcbiAgICAgIHJldHVybiBjYWxsKHZhbHVlT2YsIHRoaXMpO1xuICAgIH0sIHsgYXJpdHk6IDEgfSk7XG4gIH1cbn07XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGh0bWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaHRtbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBjcmVhdGVFbGVtZW50ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvY3VtZW50LWNyZWF0ZS1lbGVtZW50Jyk7XG52YXIgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdmFsaWRhdGUtYXJndW1lbnRzLWxlbmd0aCcpO1xudmFyIElTX0lPUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtaW9zJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xuXG52YXIgc2V0ID0gZ2xvYmFsLnNldEltbWVkaWF0ZTtcbnZhciBjbGVhciA9IGdsb2JhbC5jbGVhckltbWVkaWF0ZTtcbnZhciBwcm9jZXNzID0gZ2xvYmFsLnByb2Nlc3M7XG52YXIgRGlzcGF0Y2ggPSBnbG9iYWwuRGlzcGF0Y2g7XG52YXIgRnVuY3Rpb24gPSBnbG9iYWwuRnVuY3Rpb247XG52YXIgTWVzc2FnZUNoYW5uZWwgPSBnbG9iYWwuTWVzc2FnZUNoYW5uZWw7XG52YXIgU3RyaW5nID0gZ2xvYmFsLlN0cmluZztcbnZhciBjb3VudGVyID0gMDtcbnZhciBxdWV1ZSA9IHt9O1xudmFyIE9OUkVBRFlTVEFURUNIQU5HRSA9ICdvbnJlYWR5c3RhdGVjaGFuZ2UnO1xudmFyIGxvY2F0aW9uLCBkZWZlciwgY2hhbm5lbCwgcG9ydDtcblxudHJ5IHtcbiAgLy8gRGVubyB0aHJvd3MgYSBSZWZlcmVuY2VFcnJvciBvbiBgbG9jYXRpb25gIGFjY2VzcyB3aXRob3V0IGAtLWxvY2F0aW9uYCBmbGFnXG4gIGxvY2F0aW9uID0gZ2xvYmFsLmxvY2F0aW9uO1xufSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG52YXIgcnVuID0gZnVuY3Rpb24gKGlkKSB7XG4gIGlmIChoYXNPd24ocXVldWUsIGlkKSkge1xuICAgIHZhciBmbiA9IHF1ZXVlW2lkXTtcbiAgICBkZWxldGUgcXVldWVbaWRdO1xuICAgIGZuKCk7XG4gIH1cbn07XG5cbnZhciBydW5uZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBydW4oaWQpO1xuICB9O1xufTtcblxudmFyIGxpc3RlbmVyID0gZnVuY3Rpb24gKGV2ZW50KSB7XG4gIHJ1bihldmVudC5kYXRhKTtcbn07XG5cbnZhciBwb3N0ID0gZnVuY3Rpb24gKGlkKSB7XG4gIC8vIG9sZCBlbmdpbmVzIGhhdmUgbm90IGxvY2F0aW9uLm9yaWdpblxuICBnbG9iYWwucG9zdE1lc3NhZ2UoU3RyaW5nKGlkKSwgbG9jYXRpb24ucHJvdG9jb2wgKyAnLy8nICsgbG9jYXRpb24uaG9zdCk7XG59O1xuXG4vLyBOb2RlLmpzIDAuOSsgJiBJRTEwKyBoYXMgc2V0SW1tZWRpYXRlLCBvdGhlcndpc2U6XG5pZiAoIXNldCB8fCAhY2xlYXIpIHtcbiAgc2V0ID0gZnVuY3Rpb24gc2V0SW1tZWRpYXRlKGhhbmRsZXIpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZm4gPSBpc0NhbGxhYmxlKGhhbmRsZXIpID8gaGFuZGxlciA6IEZ1bmN0aW9uKGhhbmRsZXIpO1xuICAgIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMsIDEpO1xuICAgIHF1ZXVlWysrY291bnRlcl0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICBhcHBseShmbiwgdW5kZWZpbmVkLCBhcmdzKTtcbiAgICB9O1xuICAgIGRlZmVyKGNvdW50ZXIpO1xuICAgIHJldHVybiBjb3VudGVyO1xuICB9O1xuICBjbGVhciA9IGZ1bmN0aW9uIGNsZWFySW1tZWRpYXRlKGlkKSB7XG4gICAgZGVsZXRlIHF1ZXVlW2lkXTtcbiAgfTtcbiAgLy8gTm9kZS5qcyAwLjgtXG4gIGlmIChJU19OT0RFKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socnVubmVyKGlkKSk7XG4gICAgfTtcbiAgLy8gU3BoZXJlIChKUyBnYW1lIGVuZ2luZSkgRGlzcGF0Y2ggQVBJXG4gIH0gZWxzZSBpZiAoRGlzcGF0Y2ggJiYgRGlzcGF0Y2gubm93KSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIERpc3BhdGNoLm5vdyhydW5uZXIoaWQpKTtcbiAgICB9O1xuICAvLyBCcm93c2VycyB3aXRoIE1lc3NhZ2VDaGFubmVsLCBpbmNsdWRlcyBXZWJXb3JrZXJzXG4gIC8vIGV4Y2VwdCBpT1MgLSBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjI0XG4gIH0gZWxzZSBpZiAoTWVzc2FnZUNoYW5uZWwgJiYgIUlTX0lPUykge1xuICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTtcbiAgICBwb3J0ID0gY2hhbm5lbC5wb3J0MjtcbiAgICBjaGFubmVsLnBvcnQxLm9ubWVzc2FnZSA9IGxpc3RlbmVyO1xuICAgIGRlZmVyID0gYmluZChwb3J0LnBvc3RNZXNzYWdlLCBwb3J0KTtcbiAgLy8gQnJvd3NlcnMgd2l0aCBwb3N0TWVzc2FnZSwgc2tpcCBXZWJXb3JrZXJzXG4gIC8vIElFOCBoYXMgcG9zdE1lc3NhZ2UsIGJ1dCBpdCdzIHN5bmMgJiB0eXBlb2YgaXRzIHBvc3RNZXNzYWdlIGlzICdvYmplY3QnXG4gIH0gZWxzZSBpZiAoXG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIgJiZcbiAgICBpc0NhbGxhYmxlKGdsb2JhbC5wb3N0TWVzc2FnZSkgJiZcbiAgICAhZ2xvYmFsLmltcG9ydFNjcmlwdHMgJiZcbiAgICBsb2NhdGlvbiAmJiBsb2NhdGlvbi5wcm90b2NvbCAhPT0gJ2ZpbGU6JyAmJlxuICAgICFmYWlscyhwb3N0KVxuICApIHtcbiAgICBkZWZlciA9IHBvc3Q7XG4gICAgZ2xvYmFsLmFkZEV2ZW50TGlzdGVuZXIoJ21lc3NhZ2UnLCBsaXN0ZW5lciwgZmFsc2UpO1xuICAvLyBJRTgtXG4gIH0gZWxzZSBpZiAoT05SRUFEWVNUQVRFQ0hBTkdFIGluIGNyZWF0ZUVsZW1lbnQoJ3NjcmlwdCcpKSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIGh0bWwuYXBwZW5kQ2hpbGQoY3JlYXRlRWxlbWVudCgnc2NyaXB0JykpW09OUkVBRFlTVEFURUNIQU5HRV0gPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGh0bWwucmVtb3ZlQ2hpbGQodGhpcyk7XG4gICAgICAgIHJ1bihpZCk7XG4gICAgICB9O1xuICAgIH07XG4gIC8vIFJlc3Qgb2xkIGJyb3dzZXJzXG4gIH0gZWxzZSB7XG4gICAgZGVmZXIgPSBmdW5jdGlvbiAoaWQpIHtcbiAgICAgIHNldFRpbWVvdXQocnVubmVyKGlkKSwgMCk7XG4gICAgfTtcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0OiBzZXQsXG4gIGNsZWFyOiBjbGVhclxufTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyIG1heCA9IE1hdGgubWF4O1xudmFyIG1pbiA9IE1hdGgubWluO1xuXG4vLyBIZWxwZXIgZm9yIGEgcG9wdWxhciByZXBlYXRpbmcgY2FzZSBvZiB0aGUgc3BlYzpcbi8vIExldCBpbnRlZ2VyIGJlID8gVG9JbnRlZ2VyKGluZGV4KS5cbi8vIElmIGludGVnZXIgPCAwLCBsZXQgcmVzdWx0IGJlIG1heCgobGVuZ3RoICsgaW50ZWdlciksIDApOyBlbHNlIGxldCByZXN1bHQgYmUgbWluKGludGVnZXIsIGxlbmd0aCkuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbmRleCwgbGVuZ3RoKSB7XG4gIHZhciBpbnRlZ2VyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpbmRleCk7XG4gIHJldHVybiBpbnRlZ2VyIDwgMCA/IG1heChpbnRlZ2VyICsgbGVuZ3RoLCAwKSA6IG1pbihpbnRlZ2VyLCBsZW5ndGgpO1xufTtcbiIsInZhciB0b1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcmltaXRpdmUnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbi8vIGBUb0JpZ0ludGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvYmlnaW50XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgcHJpbSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnbnVtYmVyJyk7XG4gIGlmICh0eXBlb2YgcHJpbSA9PSAnbnVtYmVyJykgdGhyb3cgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgbnVtYmVyIHRvIGJpZ2ludFwiKTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tYmlnaW50IC0tIHNhZmVcbiAgcmV0dXJuIEJpZ0ludChwcmltKTtcbn07XG4iLCJ2YXIgdG9JbnRlZ2VyT3JJbmZpbml0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbnRlZ2VyLW9yLWluZmluaXR5Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG5cbnZhciAkUmFuZ2VFcnJvciA9IFJhbmdlRXJyb3I7XG5cbi8vIGBUb0luZGV4YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9pbmRleFxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgaWYgKGl0ID09PSB1bmRlZmluZWQpIHJldHVybiAwO1xuICB2YXIgbnVtYmVyID0gdG9JbnRlZ2VyT3JJbmZpbml0eShpdCk7XG4gIHZhciBsZW5ndGggPSB0b0xlbmd0aChudW1iZXIpO1xuICBpZiAobnVtYmVyICE9PSBsZW5ndGgpIHRocm93ICRSYW5nZUVycm9yKCdXcm9uZyBsZW5ndGggb3IgaW5kZXgnKTtcbiAgcmV0dXJuIGxlbmd0aDtcbn07XG4iLCIvLyB0b09iamVjdCB3aXRoIGZhbGxiYWNrIGZvciBub24tYXJyYXktbGlrZSBFUzMgc3RyaW5nc1xudmFyIEluZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5kZXhlZC1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gSW5kZXhlZE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGl0KSk7XG59O1xuIiwidmFyIHRydW5jID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL21hdGgtdHJ1bmMnKTtcblxuLy8gYFRvSW50ZWdlck9ySW5maW5pdHlgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b2ludGVnZXJvcmluZmluaXR5XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICB2YXIgbnVtYmVyID0gK2FyZ3VtZW50O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICByZXR1cm4gbnVtYmVyICE9PSBudW1iZXIgfHwgbnVtYmVyID09PSAwID8gMCA6IHRydW5jKG51bWJlcik7XG59O1xuIiwidmFyIHRvSW50ZWdlck9ySW5maW5pdHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW50ZWdlci1vci1pbmZpbml0eScpO1xuXG52YXIgbWluID0gTWF0aC5taW47XG5cbi8vIGBUb0xlbmd0aGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvbGVuZ3RoXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gYXJndW1lbnQgPiAwID8gbWluKHRvSW50ZWdlck9ySW5maW5pdHkoYXJndW1lbnQpLCAweDFGRkZGRkZGRkZGRkZGKSA6IDA7IC8vIDIgKiogNTMgLSAxID09IDkwMDcxOTkyNTQ3NDA5OTFcbn07XG4iLCJ2YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcblxudmFyICRPYmplY3QgPSBPYmplY3Q7XG5cbi8vIGBUb09iamVjdGAgYWJzdHJhY3Qgb3BlcmF0aW9uXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXRvb2JqZWN0XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICByZXR1cm4gJE9iamVjdChyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKGFyZ3VtZW50KSk7XG59O1xuIiwidmFyIHRvUG9zaXRpdmVJbnRlZ2VyID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXBvc2l0aXZlLWludGVnZXInKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQsIEJZVEVTKSB7XG4gIHZhciBvZmZzZXQgPSB0b1Bvc2l0aXZlSW50ZWdlcihpdCk7XG4gIGlmIChvZmZzZXQgJSBCWVRFUykgdGhyb3cgJFJhbmdlRXJyb3IoJ1dyb25nIG9mZnNldCcpO1xuICByZXR1cm4gb2Zmc2V0O1xufTtcbiIsInZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcblxudmFyICRSYW5nZUVycm9yID0gUmFuZ2VFcnJvcjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHJlc3VsdCA9IHRvSW50ZWdlck9ySW5maW5pdHkoaXQpO1xuICBpZiAocmVzdWx0IDwgMCkgdGhyb3cgJFJhbmdlRXJyb3IoXCJUaGUgYXJndW1lbnQgY2FuJ3QgYmUgbGVzcyB0aGFuIDBcIik7XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgb3JkaW5hcnlUb1ByaW1pdGl2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vcmRpbmFyeS10by1wcmltaXRpdmUnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG52YXIgVE9fUFJJTUlUSVZFID0gd2VsbEtub3duU3ltYm9sKCd0b1ByaW1pdGl2ZScpO1xuXG4vLyBgVG9QcmltaXRpdmVgIGFic3RyYWN0IG9wZXJhdGlvblxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy10b3ByaW1pdGl2ZVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaW5wdXQsIHByZWYpIHtcbiAgaWYgKCFpc09iamVjdChpbnB1dCkgfHwgaXNTeW1ib2woaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG4gIHZhciBleG90aWNUb1ByaW0gPSBnZXRNZXRob2QoaW5wdXQsIFRPX1BSSU1JVElWRSk7XG4gIHZhciByZXN1bHQ7XG4gIGlmIChleG90aWNUb1ByaW0pIHtcbiAgICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ2RlZmF1bHQnO1xuICAgIHJlc3VsdCA9IGNhbGwoZXhvdGljVG9QcmltLCBpbnB1dCwgcHJlZik7XG4gICAgaWYgKCFpc09iamVjdChyZXN1bHQpIHx8IGlzU3ltYm9sKHJlc3VsdCkpIHJldHVybiByZXN1bHQ7XG4gICAgdGhyb3cgJFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbiAgfVxuICBpZiAocHJlZiA9PT0gdW5kZWZpbmVkKSBwcmVmID0gJ251bWJlcic7XG4gIHJldHVybiBvcmRpbmFyeVRvUHJpbWl0aXZlKGlucHV0LCBwcmVmKTtcbn07XG4iLCJ2YXIgdG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tcHJpbWl0aXZlJyk7XG52YXIgaXNTeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtc3ltYm9sJyk7XG5cbi8vIGBUb1Byb3BlcnR5S2V5YCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdG9wcm9wZXJ0eWtleVxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdmFyIGtleSA9IHRvUHJpbWl0aXZlKGFyZ3VtZW50LCAnc3RyaW5nJyk7XG4gIHJldHVybiBpc1N5bWJvbChrZXkpID8ga2V5IDoga2V5ICsgJyc7XG59O1xuIiwidmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xuXG52YXIgVE9fU1RSSU5HX1RBRyA9IHdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcbnZhciB0ZXN0ID0ge307XG5cbnRlc3RbVE9fU1RSSU5HX1RBR10gPSAneic7XG5cbm1vZHVsZS5leHBvcnRzID0gU3RyaW5nKHRlc3QpID09PSAnW29iamVjdCB6XSc7XG4iLCJ2YXIgY2xhc3NvZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jbGFzc29mJyk7XG5cbnZhciAkU3RyaW5nID0gU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChhcmd1bWVudCkge1xuICBpZiAoY2xhc3NvZihhcmd1bWVudCkgPT09ICdTeW1ib2wnKSB0aHJvdyBUeXBlRXJyb3IoJ0Nhbm5vdCBjb252ZXJ0IGEgU3ltYm9sIHZhbHVlIHRvIGEgc3RyaW5nJyk7XG4gIHJldHVybiAkU3RyaW5nKGFyZ3VtZW50KTtcbn07XG4iLCJ2YXIgJFN0cmluZyA9IFN0cmluZztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoYXJndW1lbnQpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gJFN0cmluZyhhcmd1bWVudCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuICdPYmplY3QnO1xuICB9XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcnMtcmVxdWlyZS13cmFwcGVycycpO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIEFycmF5QnVmZmVyTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlcicpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG52YXIgaXNJbnRlZ3JhbE51bWJlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1pbnRlZ3JhbC1udW1iZXInKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4Jyk7XG52YXIgdG9PZmZzZXQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2Zmc2V0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGNyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtY3JlYXRlJyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LXNldC1wcm90b3R5cGUtb2YnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eU5hbWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LW5hbWVzJykuZjtcbnZhciB0eXBlZEFycmF5RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tJyk7XG52YXIgZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xudmFyIHNldFNwZWNpZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXNwZWNpZXMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBJbnRlcm5hbFN0YXRlTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJyk7XG52YXIgaW5oZXJpdElmUmVxdWlyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW5oZXJpdC1pZi1yZXF1aXJlZCcpO1xuXG52YXIgZ2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0O1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBlbmZvcmNlSW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZW5mb3JjZTtcbnZhciBuYXRpdmVEZWZpbmVQcm9wZXJ0eSA9IGRlZmluZVByb3BlcnR5TW9kdWxlLmY7XG52YXIgbmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlLmY7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xudmFyIFJhbmdlRXJyb3IgPSBnbG9iYWwuUmFuZ2VFcnJvcjtcbnZhciBBcnJheUJ1ZmZlciA9IEFycmF5QnVmZmVyTW9kdWxlLkFycmF5QnVmZmVyO1xudmFyIEFycmF5QnVmZmVyUHJvdG90eXBlID0gQXJyYXlCdWZmZXIucHJvdG90eXBlO1xudmFyIERhdGFWaWV3ID0gQXJyYXlCdWZmZXJNb2R1bGUuRGF0YVZpZXc7XG52YXIgTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyA9IEFycmF5QnVmZmVyVmlld0NvcmUuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUztcbnZhciBUWVBFRF9BUlJBWV9UQUcgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLlRZUEVEX0FSUkFZX1RBRztcbnZhciBUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5UeXBlZEFycmF5O1xudmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLlR5cGVkQXJyYXlQcm90b3R5cGU7XG52YXIgYVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcbnZhciBpc1R5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmlzVHlwZWRBcnJheTtcbnZhciBCWVRFU19QRVJfRUxFTUVOVCA9ICdCWVRFU19QRVJfRUxFTUVOVCc7XG52YXIgV1JPTkdfTEVOR1RIID0gJ1dyb25nIGxlbmd0aCc7XG5cbnZhciBmcm9tTGlzdCA9IGZ1bmN0aW9uIChDLCBsaXN0KSB7XG4gIGFUeXBlZEFycmF5Q29uc3RydWN0b3IoQyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIHZhciBsZW5ndGggPSBsaXN0Lmxlbmd0aDtcbiAgdmFyIHJlc3VsdCA9IG5ldyBDKGxlbmd0aCk7XG4gIHdoaWxlIChsZW5ndGggPiBpbmRleCkgcmVzdWx0W2luZGV4XSA9IGxpc3RbaW5kZXgrK107XG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG52YXIgYWRkR2V0dGVyID0gZnVuY3Rpb24gKGl0LCBrZXkpIHtcbiAgbmF0aXZlRGVmaW5lUHJvcGVydHkoaXQsIGtleSwgeyBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKVtrZXldO1xuICB9IH0pO1xufTtcblxudmFyIGlzQXJyYXlCdWZmZXIgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIGtsYXNzO1xuICByZXR1cm4gaXNQcm90b3R5cGVPZihBcnJheUJ1ZmZlclByb3RvdHlwZSwgaXQpIHx8IChrbGFzcyA9IGNsYXNzb2YoaXQpKSA9PSAnQXJyYXlCdWZmZXInIHx8IGtsYXNzID09ICdTaGFyZWRBcnJheUJ1ZmZlcic7XG59O1xuXG52YXIgaXNUeXBlZEFycmF5SW5kZXggPSBmdW5jdGlvbiAodGFyZ2V0LCBrZXkpIHtcbiAgcmV0dXJuIGlzVHlwZWRBcnJheSh0YXJnZXQpXG4gICAgJiYgIWlzU3ltYm9sKGtleSlcbiAgICAmJiBrZXkgaW4gdGFyZ2V0XG4gICAgJiYgaXNJbnRlZ3JhbE51bWJlcigra2V5KVxuICAgICYmIGtleSA+PSAwO1xufTtcblxudmFyIHdyYXBwZWRHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpIHtcbiAga2V5ID0gdG9Qcm9wZXJ0eUtleShrZXkpO1xuICByZXR1cm4gaXNUeXBlZEFycmF5SW5kZXgodGFyZ2V0LCBrZXkpXG4gICAgPyBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMiwgdGFyZ2V0W2tleV0pXG4gICAgOiBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBrZXkpO1xufTtcblxudmFyIHdyYXBwZWREZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKSB7XG4gIGtleSA9IHRvUHJvcGVydHlLZXkoa2V5KTtcbiAgaWYgKGlzVHlwZWRBcnJheUluZGV4KHRhcmdldCwga2V5KVxuICAgICYmIGlzT2JqZWN0KGRlc2NyaXB0b3IpXG4gICAgJiYgaGFzT3duKGRlc2NyaXB0b3IsICd2YWx1ZScpXG4gICAgJiYgIWhhc093bihkZXNjcmlwdG9yLCAnZ2V0JylcbiAgICAmJiAhaGFzT3duKGRlc2NyaXB0b3IsICdzZXQnKVxuICAgIC8vIFRPRE86IGFkZCB2YWxpZGF0aW9uIGRlc2NyaXB0b3Igdy9vIGNhbGxpbmcgYWNjZXNzb3JzXG4gICAgJiYgIWRlc2NyaXB0b3IuY29uZmlndXJhYmxlXG4gICAgJiYgKCFoYXNPd24oZGVzY3JpcHRvciwgJ3dyaXRhYmxlJykgfHwgZGVzY3JpcHRvci53cml0YWJsZSlcbiAgICAmJiAoIWhhc093bihkZXNjcmlwdG9yLCAnZW51bWVyYWJsZScpIHx8IGRlc2NyaXB0b3IuZW51bWVyYWJsZSlcbiAgKSB7XG4gICAgdGFyZ2V0W2tleV0gPSBkZXNjcmlwdG9yLnZhbHVlO1xuICAgIHJldHVybiB0YXJnZXQ7XG4gIH0gcmV0dXJuIG5hdGl2ZURlZmluZVByb3BlcnR5KHRhcmdldCwga2V5LCBkZXNjcmlwdG9yKTtcbn07XG5cbmlmIChERVNDUklQVE9SUykge1xuICBpZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIHtcbiAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9IHdyYXBwZWRHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gICAgZGVmaW5lUHJvcGVydHlNb2R1bGUuZiA9IHdyYXBwZWREZWZpbmVQcm9wZXJ0eTtcbiAgICBhZGRHZXR0ZXIoVHlwZWRBcnJheVByb3RvdHlwZSwgJ2J1ZmZlcicpO1xuICAgIGFkZEdldHRlcihUeXBlZEFycmF5UHJvdG90eXBlLCAnYnl0ZU9mZnNldCcpO1xuICAgIGFkZEdldHRlcihUeXBlZEFycmF5UHJvdG90eXBlLCAnYnl0ZUxlbmd0aCcpO1xuICAgIGFkZEdldHRlcihUeXBlZEFycmF5UHJvdG90eXBlLCAnbGVuZ3RoJyk7XG4gIH1cblxuICAkKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB9LCB7XG4gICAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOiB3cmFwcGVkR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLFxuICAgIGRlZmluZVByb3BlcnR5OiB3cmFwcGVkRGVmaW5lUHJvcGVydHlcbiAgfSk7XG5cbiAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoVFlQRSwgd3JhcHBlciwgQ0xBTVBFRCkge1xuICAgIHZhciBCWVRFUyA9IFRZUEUubWF0Y2goL1xcZCskLylbMF0gLyA4O1xuICAgIHZhciBDT05TVFJVQ1RPUl9OQU1FID0gVFlQRSArIChDTEFNUEVEID8gJ0NsYW1wZWQnIDogJycpICsgJ0FycmF5JztcbiAgICB2YXIgR0VUVEVSID0gJ2dldCcgKyBUWVBFO1xuICAgIHZhciBTRVRURVIgPSAnc2V0JyArIFRZUEU7XG4gICAgdmFyIE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IGdsb2JhbFtDT05TVFJVQ1RPUl9OQU1FXTtcbiAgICB2YXIgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuICAgIHZhciBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3IgJiYgVHlwZWRBcnJheUNvbnN0cnVjdG9yLnByb3RvdHlwZTtcbiAgICB2YXIgZXhwb3J0ZWQgPSB7fTtcblxuICAgIHZhciBnZXR0ZXIgPSBmdW5jdGlvbiAodGhhdCwgaW5kZXgpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIHJldHVybiBkYXRhLnZpZXdbR0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5ieXRlT2Zmc2V0LCB0cnVlKTtcbiAgICB9O1xuXG4gICAgdmFyIHNldHRlciA9IGZ1bmN0aW9uICh0aGF0LCBpbmRleCwgdmFsdWUpIHtcbiAgICAgIHZhciBkYXRhID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGF0KTtcbiAgICAgIGlmIChDTEFNUEVEKSB2YWx1ZSA9ICh2YWx1ZSA9IHJvdW5kKHZhbHVlKSkgPCAwID8gMCA6IHZhbHVlID4gMHhGRiA/IDB4RkYgOiB2YWx1ZSAmIDB4RkY7XG4gICAgICBkYXRhLnZpZXdbU0VUVEVSXShpbmRleCAqIEJZVEVTICsgZGF0YS5ieXRlT2Zmc2V0LCB2YWx1ZSwgdHJ1ZSk7XG4gICAgfTtcblxuICAgIHZhciBhZGRFbGVtZW50ID0gZnVuY3Rpb24gKHRoYXQsIGluZGV4KSB7XG4gICAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eSh0aGF0LCBpbmRleCwge1xuICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0dGVyKHRoaXMsIGluZGV4KTtcbiAgICAgICAgfSxcbiAgICAgICAgc2V0OiBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgICAgICByZXR1cm4gc2V0dGVyKHRoaXMsIGluZGV4LCB2YWx1ZSk7XG4gICAgICAgIH0sXG4gICAgICAgIGVudW1lcmFibGU6IHRydWVcbiAgICAgIH0pO1xuICAgIH07XG5cbiAgICBpZiAoIU5BVElWRV9BUlJBWV9CVUZGRVJfVklFV1MpIHtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHdyYXBwZXIoZnVuY3Rpb24gKHRoYXQsIGRhdGEsIG9mZnNldCwgJGxlbmd0aCkge1xuICAgICAgICBhbkluc3RhbmNlKHRoYXQsIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSk7XG4gICAgICAgIHZhciBpbmRleCA9IDA7XG4gICAgICAgIHZhciBieXRlT2Zmc2V0ID0gMDtcbiAgICAgICAgdmFyIGJ1ZmZlciwgYnl0ZUxlbmd0aCwgbGVuZ3RoO1xuICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSB7XG4gICAgICAgICAgbGVuZ3RoID0gdG9JbmRleChkYXRhKTtcbiAgICAgICAgICBieXRlTGVuZ3RoID0gbGVuZ3RoICogQllURVM7XG4gICAgICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVMZW5ndGgpO1xuICAgICAgICB9IGVsc2UgaWYgKGlzQXJyYXlCdWZmZXIoZGF0YSkpIHtcbiAgICAgICAgICBidWZmZXIgPSBkYXRhO1xuICAgICAgICAgIGJ5dGVPZmZzZXQgPSB0b09mZnNldChvZmZzZXQsIEJZVEVTKTtcbiAgICAgICAgICB2YXIgJGxlbiA9IGRhdGEuYnl0ZUxlbmd0aDtcbiAgICAgICAgICBpZiAoJGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICBpZiAoJGxlbiAlIEJZVEVTKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgICBieXRlTGVuZ3RoID0gJGxlbiAtIGJ5dGVPZmZzZXQ7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCA8IDApIHRocm93IFJhbmdlRXJyb3IoV1JPTkdfTEVOR1RIKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYnl0ZUxlbmd0aCA9IHRvTGVuZ3RoKCRsZW5ndGgpICogQllURVM7XG4gICAgICAgICAgICBpZiAoYnl0ZUxlbmd0aCArIGJ5dGVPZmZzZXQgPiAkbGVuKSB0aHJvdyBSYW5nZUVycm9yKFdST05HX0xFTkdUSCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGxlbmd0aCA9IGJ5dGVMZW5ndGggLyBCWVRFUztcbiAgICAgICAgfSBlbHNlIGlmIChpc1R5cGVkQXJyYXkoZGF0YSkpIHtcbiAgICAgICAgICByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm4gY2FsbCh0eXBlZEFycmF5RnJvbSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBzZXRJbnRlcm5hbFN0YXRlKHRoYXQsIHtcbiAgICAgICAgICBidWZmZXI6IGJ1ZmZlcixcbiAgICAgICAgICBieXRlT2Zmc2V0OiBieXRlT2Zmc2V0LFxuICAgICAgICAgIGJ5dGVMZW5ndGg6IGJ5dGVMZW5ndGgsXG4gICAgICAgICAgbGVuZ3RoOiBsZW5ndGgsXG4gICAgICAgICAgdmlldzogbmV3IERhdGFWaWV3KGJ1ZmZlcilcbiAgICAgICAgfSk7XG4gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgYWRkRWxlbWVudCh0aGF0LCBpbmRleCsrKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgVHlwZWRBcnJheSk7XG4gICAgICBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3IucHJvdG90eXBlID0gY3JlYXRlKFR5cGVkQXJyYXlQcm90b3R5cGUpO1xuICAgIH0gZWxzZSBpZiAoVFlQRURfQVJSQVlTX0NPTlNUUlVDVE9SU19SRVFVSVJFU19XUkFQUEVSUykge1xuICAgICAgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gd3JhcHBlcihmdW5jdGlvbiAoZHVtbXksIGRhdGEsIHR5cGVkQXJyYXlPZmZzZXQsICRsZW5ndGgpIHtcbiAgICAgICAgYW5JbnN0YW5jZShkdW1teSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlKTtcbiAgICAgICAgcmV0dXJuIGluaGVyaXRJZlJlcXVpcmVkKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBpZiAoIWlzT2JqZWN0KGRhdGEpKSByZXR1cm4gbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3Rvcih0b0luZGV4KGRhdGEpKTtcbiAgICAgICAgICBpZiAoaXNBcnJheUJ1ZmZlcihkYXRhKSkgcmV0dXJuICRsZW5ndGggIT09IHVuZGVmaW5lZFxuICAgICAgICAgICAgPyBuZXcgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKGRhdGEsIHRvT2Zmc2V0KHR5cGVkQXJyYXlPZmZzZXQsIEJZVEVTKSwgJGxlbmd0aClcbiAgICAgICAgICAgIDogdHlwZWRBcnJheU9mZnNldCAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgID8gbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihkYXRhLCB0b09mZnNldCh0eXBlZEFycmF5T2Zmc2V0LCBCWVRFUykpXG4gICAgICAgICAgICAgIDogbmV3IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcihkYXRhKTtcbiAgICAgICAgICBpZiAoaXNUeXBlZEFycmF5KGRhdGEpKSByZXR1cm4gZnJvbUxpc3QoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgICByZXR1cm4gY2FsbCh0eXBlZEFycmF5RnJvbSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBkYXRhKTtcbiAgICAgICAgfSgpLCBkdW1teSwgVHlwZWRBcnJheUNvbnN0cnVjdG9yKTtcbiAgICAgIH0pO1xuXG4gICAgICBpZiAoc2V0UHJvdG90eXBlT2YpIHNldFByb3RvdHlwZU9mKFR5cGVkQXJyYXlDb25zdHJ1Y3RvciwgVHlwZWRBcnJheSk7XG4gICAgICBmb3JFYWNoKGdldE93blByb3BlcnR5TmFtZXMoTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yKSwgZnVuY3Rpb24gKGtleSkge1xuICAgICAgICBpZiAoIShrZXkgaW4gVHlwZWRBcnJheUNvbnN0cnVjdG9yKSkge1xuICAgICAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3IsIGtleSwgTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yW2tleV0pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIFR5cGVkQXJyYXlDb25zdHJ1Y3Rvci5wcm90b3R5cGUgPSBUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGU7XG4gICAgfVxuXG4gICAgaWYgKFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZS5jb25zdHJ1Y3RvciAhPT0gVHlwZWRBcnJheUNvbnN0cnVjdG9yKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlLCAnY29uc3RydWN0b3InLCBUeXBlZEFycmF5Q29uc3RydWN0b3IpO1xuICAgIH1cblxuICAgIGVuZm9yY2VJbnRlcm5hbFN0YXRlKFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSkuVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4gICAgaWYgKFRZUEVEX0FSUkFZX1RBRykge1xuICAgICAgY3JlYXRlTm9uRW51bWVyYWJsZVByb3BlcnR5KFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSwgVFlQRURfQVJSQVlfVEFHLCBDT05TVFJVQ1RPUl9OQU1FKTtcbiAgICB9XG5cbiAgICB2YXIgRk9SQ0VEID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yICE9IE5hdGl2ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvcjtcblxuICAgIGV4cG9ydGVkW0NPTlNUUlVDVE9SX05BTUVdID0gVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4gICAgJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB9LCBleHBvcnRlZCk7XG5cbiAgICBpZiAoIShCWVRFU19QRVJfRUxFTUVOVCBpbiBUeXBlZEFycmF5Q29uc3RydWN0b3IpKSB7XG4gICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoVHlwZWRBcnJheUNvbnN0cnVjdG9yLCBCWVRFU19QRVJfRUxFTUVOVCwgQllURVMpO1xuICAgIH1cblxuICAgIGlmICghKEJZVEVTX1BFUl9FTEVNRU5UIGluIFR5cGVkQXJyYXlDb25zdHJ1Y3RvclByb3RvdHlwZSkpIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShUeXBlZEFycmF5Q29uc3RydWN0b3JQcm90b3R5cGUsIEJZVEVTX1BFUl9FTEVNRU5ULCBCWVRFUyk7XG4gICAgfVxuXG4gICAgc2V0U3BlY2llcyhDT05TVFJVQ1RPUl9OQU1FKTtcbiAgfTtcbn0gZWxzZSBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIG5vLW5ldyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZyAqL1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcbnZhciBOQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKS5OQVRJVkVfQVJSQVlfQlVGRkVSX1ZJRVdTO1xuXG52YXIgQXJyYXlCdWZmZXIgPSBnbG9iYWwuQXJyYXlCdWZmZXI7XG52YXIgSW50OEFycmF5ID0gZ2xvYmFsLkludDhBcnJheTtcblxubW9kdWxlLmV4cG9ydHMgPSAhTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBJbnQ4QXJyYXkoMSk7XG59KSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuZXcgSW50OEFycmF5KC0xKTtcbn0pIHx8ICFjaGVja0NvcnJlY3RuZXNzT2ZJdGVyYXRpb24oZnVuY3Rpb24gKGl0ZXJhYmxlKSB7XG4gIG5ldyBJbnQ4QXJyYXkoKTtcbiAgbmV3IEludDhBcnJheShudWxsKTtcbiAgbmV3IEludDhBcnJheSgxLjUpO1xuICBuZXcgSW50OEFycmF5KGl0ZXJhYmxlKTtcbn0sIHRydWUpIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gU2FmYXJpICgxMSspIGJ1ZyAtIGEgcmVhc29uIHdoeSBldmVuIFNhZmFyaSAxMyBzaG91bGQgbG9hZCBhIHR5cGVkIGFycmF5IHBvbHlmaWxsXG4gIHJldHVybiBuZXcgSW50OEFycmF5KG5ldyBBcnJheUJ1ZmZlcigyKSwgMSwgdW5kZWZpbmVkKS5sZW5ndGggIT09IDE7XG59KTtcbiIsInZhciBhcnJheUZyb21Db25zdHJ1Y3RvckFuZExpc3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbS1jb25zdHJ1Y3Rvci1hbmQtbGlzdCcpO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpbnN0YW5jZSwgbGlzdCkge1xuICByZXR1cm4gYXJyYXlGcm9tQ29uc3RydWN0b3JBbmRMaXN0KHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IoaW5zdGFuY2UpLCBsaXN0KTtcbn07XG4iLCJ2YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kLWNvbnRleHQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jb25zdHJ1Y3RvcicpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIGxlbmd0aE9mQXJyYXlMaWtlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2xlbmd0aC1vZi1hcnJheS1saWtlJyk7XG52YXIgZ2V0SXRlcmF0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yJyk7XG52YXIgZ2V0SXRlcmF0b3JNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWl0ZXJhdG9yLW1ldGhvZCcpO1xudmFyIGlzQXJyYXlJdGVyYXRvck1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheS1pdGVyYXRvci1tZXRob2QnKTtcbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGZyb20oc291cmNlIC8qICwgbWFwZm4sIHRoaXNBcmcgKi8pIHtcbiAgdmFyIEMgPSBhQ29uc3RydWN0b3IodGhpcyk7XG4gIHZhciBPID0gdG9PYmplY3Qoc291cmNlKTtcbiAgdmFyIGFyZ3VtZW50c0xlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHZhciBtYXBmbiA9IGFyZ3VtZW50c0xlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBtYXBwaW5nID0gbWFwZm4gIT09IHVuZGVmaW5lZDtcbiAgdmFyIGl0ZXJhdG9yTWV0aG9kID0gZ2V0SXRlcmF0b3JNZXRob2QoTyk7XG4gIHZhciBpLCBsZW5ndGgsIHJlc3VsdCwgc3RlcCwgaXRlcmF0b3IsIG5leHQ7XG4gIGlmIChpdGVyYXRvck1ldGhvZCAmJiAhaXNBcnJheUl0ZXJhdG9yTWV0aG9kKGl0ZXJhdG9yTWV0aG9kKSkge1xuICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoTywgaXRlcmF0b3JNZXRob2QpO1xuICAgIG5leHQgPSBpdGVyYXRvci5uZXh0O1xuICAgIE8gPSBbXTtcbiAgICB3aGlsZSAoIShzdGVwID0gY2FsbChuZXh0LCBpdGVyYXRvcikpLmRvbmUpIHtcbiAgICAgIE8ucHVzaChzdGVwLnZhbHVlKTtcbiAgICB9XG4gIH1cbiAgaWYgKG1hcHBpbmcgJiYgYXJndW1lbnRzTGVuZ3RoID4gMikge1xuICAgIG1hcGZuID0gYmluZChtYXBmbiwgYXJndW1lbnRzWzJdKTtcbiAgfVxuICBsZW5ndGggPSBsZW5ndGhPZkFycmF5TGlrZShPKTtcbiAgcmVzdWx0ID0gbmV3IChhVHlwZWRBcnJheUNvbnN0cnVjdG9yKEMpKShsZW5ndGgpO1xuICBmb3IgKGkgPSAwOyBsZW5ndGggPiBpOyBpKyspIHtcbiAgICByZXN1bHRbaV0gPSBtYXBwaW5nID8gbWFwZm4oT1tpXSwgaSkgOiBPW2ldO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59O1xuIiwidmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbnZhciBhVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheUNvbnN0cnVjdG9yO1xudmFyIGdldFR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IEFycmF5QnVmZmVyVmlld0NvcmUuZ2V0VHlwZWRBcnJheUNvbnN0cnVjdG9yO1xuXG4vLyBhIHBhcnQgb2YgYFR5cGVkQXJyYXlTcGVjaWVzQ3JlYXRlYCBhYnN0cmFjdCBvcGVyYXRpb25cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyN0eXBlZGFycmF5LXNwZWNpZXMtY3JlYXRlXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChvcmlnaW5hbEFycmF5KSB7XG4gIHJldHVybiBhVHlwZWRBcnJheUNvbnN0cnVjdG9yKHNwZWNpZXNDb25zdHJ1Y3RvcihvcmlnaW5hbEFycmF5LCBnZXRUeXBlZEFycmF5Q29uc3RydWN0b3Iob3JpZ2luYWxBcnJheSkpKTtcbn07XG4iLCJ2YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBpZCA9IDA7XG52YXIgcG9zdGZpeCA9IE1hdGgucmFuZG9tKCk7XG52YXIgdG9TdHJpbmcgPSB1bmN1cnJ5VGhpcygxLjAudG9TdHJpbmcpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChrZXkpIHtcbiAgcmV0dXJuICdTeW1ib2woJyArIChrZXkgPT09IHVuZGVmaW5lZCA/ICcnIDoga2V5KSArICcpXycgKyB0b1N0cmluZygrK2lkICsgcG9zdGZpeCwgMzYpO1xufTtcbiIsIi8qIGVzbGludC1kaXNhYmxlIGVzLXgvbm8tc3ltYm9sIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nICovXG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gTkFUSVZFX1NZTUJPTFxuICAmJiAhU3ltYm9sLnNoYW1cbiAgJiYgdHlwZW9mIFN5bWJvbC5pdGVyYXRvciA9PSAnc3ltYm9sJztcbiIsInZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbi8vIFY4IH4gQ2hyb21lIDM2LVxuLy8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL3Y4L2lzc3Vlcy9kZXRhaWw/aWQ9MzMzNFxubW9kdWxlLmV4cG9ydHMgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLW9iamVjdC1kZWZpbmVwcm9wZXJ0eSAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGZ1bmN0aW9uICgpIHsgLyogZW1wdHkgKi8gfSwgJ3Byb3RvdHlwZScsIHtcbiAgICB2YWx1ZTogNDIsXG4gICAgd3JpdGFibGU6IGZhbHNlXG4gIH0pLnByb3RvdHlwZSAhPSA0Mjtcbn0pO1xuIiwidmFyICRUeXBlRXJyb3IgPSBUeXBlRXJyb3I7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHBhc3NlZCwgcmVxdWlyZWQpIHtcbiAgaWYgKHBhc3NlZCA8IHJlcXVpcmVkKSB0aHJvdyAkVHlwZUVycm9yKCdOb3QgZW5vdWdoIGFyZ3VtZW50cycpO1xuICByZXR1cm4gcGFzc2VkO1xufTtcbiIsInZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuZXhwb3J0cy5mID0gd2VsbEtub3duU3ltYm9sO1xuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzaGFyZWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2hhcmVkJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciB1aWQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdWlkJyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgVVNFX1NZTUJPTF9BU19VSUQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdXNlLXN5bWJvbC1hcy11aWQnKTtcblxudmFyIFdlbGxLbm93blN5bWJvbHNTdG9yZSA9IHNoYXJlZCgnd2tzJyk7XG52YXIgU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBzeW1ib2xGb3IgPSBTeW1ib2wgJiYgU3ltYm9sWydmb3InXTtcbnZhciBjcmVhdGVXZWxsS25vd25TeW1ib2wgPSBVU0VfU1lNQk9MX0FTX1VJRCA/IFN5bWJvbCA6IFN5bWJvbCAmJiBTeW1ib2wud2l0aG91dFNldHRlciB8fCB1aWQ7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgaWYgKCFoYXNPd24oV2VsbEtub3duU3ltYm9sc1N0b3JlLCBuYW1lKSB8fCAhKE5BVElWRV9TWU1CT0wgfHwgdHlwZW9mIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9PSAnc3RyaW5nJykpIHtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAnU3ltYm9sLicgKyBuYW1lO1xuICAgIGlmIChOQVRJVkVfU1lNQk9MICYmIGhhc093bihTeW1ib2wsIG5hbWUpKSB7XG4gICAgICBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV0gPSBTeW1ib2xbbmFtZV07XG4gICAgfSBlbHNlIGlmIChVU0VfU1lNQk9MX0FTX1VJRCAmJiBzeW1ib2xGb3IpIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IHN5bWJvbEZvcihkZXNjcmlwdGlvbik7XG4gICAgfSBlbHNlIHtcbiAgICAgIFdlbGxLbm93blN5bWJvbHNTdG9yZVtuYW1lXSA9IGNyZWF0ZVdlbGxLbm93blN5bWJvbChkZXNjcmlwdGlvbik7XG4gICAgfVxuICB9IHJldHVybiBXZWxsS25vd25TeW1ib2xzU3RvcmVbbmFtZV07XG59O1xuIiwiLy8gYSBzdHJpbmcgb2YgYWxsIHZhbGlkIHVuaWNvZGUgd2hpdGVzcGFjZXNcbm1vZHVsZS5leHBvcnRzID0gJ1xcdTAwMDlcXHUwMDBBXFx1MDAwQlxcdTAwMENcXHUwMDBEXFx1MDAyMFxcdTAwQTBcXHUxNjgwXFx1MjAwMFxcdTIwMDFcXHUyMDAyJyArXG4gICdcXHUyMDAzXFx1MjAwNFxcdTIwMDVcXHUyMDA2XFx1MjAwN1xcdTIwMDhcXHUyMDA5XFx1MjAwQVxcdTIwMkZcXHUyMDVGXFx1MzAwMFxcdTIwMjhcXHUyMDI5XFx1RkVGRic7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgYXJyYXlCdWZmZXJNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyJyk7XG52YXIgc2V0U3BlY2llcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtc3BlY2llcycpO1xuXG52YXIgQVJSQVlfQlVGRkVSID0gJ0FycmF5QnVmZmVyJztcbnZhciBBcnJheUJ1ZmZlciA9IGFycmF5QnVmZmVyTW9kdWxlW0FSUkFZX0JVRkZFUl07XG52YXIgTmF0aXZlQXJyYXlCdWZmZXIgPSBnbG9iYWxbQVJSQVlfQlVGRkVSXTtcblxuLy8gYEFycmF5QnVmZmVyYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheWJ1ZmZlci1jb25zdHJ1Y3RvclxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIGZvcmNlZDogTmF0aXZlQXJyYXlCdWZmZXIgIT09IEFycmF5QnVmZmVyIH0sIHtcbiAgQXJyYXlCdWZmZXI6IEFycmF5QnVmZmVyXG59KTtcblxuc2V0U3BlY2llcyhBUlJBWV9CVUZGRVIpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgdG9PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tb2JqZWN0Jyk7XG52YXIgbGVuZ3RoT2ZBcnJheUxpa2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbGVuZ3RoLW9mLWFycmF5LWxpa2UnKTtcbnZhciBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZG9lcy1ub3QtZXhjZWVkLXNhZmUtaW50ZWdlcicpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIGFycmF5U3BlY2llc0NyZWF0ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zcGVjaWVzLWNyZWF0ZScpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBWOF9WRVJTSU9OID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2VuZ2luZS12OC12ZXJzaW9uJyk7XG5cbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRSA9IHdlbGxLbm93blN5bWJvbCgnaXNDb25jYXRTcHJlYWRhYmxlJyk7XG5cbi8vIFdlIGNhbid0IHVzZSB0aGlzIGZlYXR1cmUgZGV0ZWN0aW9uIGluIFY4IHNpbmNlIGl0IGNhdXNlc1xuLy8gZGVvcHRpbWl6YXRpb24gYW5kIHNlcmlvdXMgcGVyZm9ybWFuY2UgZGVncmFkYXRpb25cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy82NzlcbnZhciBJU19DT05DQVRfU1BSRUFEQUJMRV9TVVBQT1JUID0gVjhfVkVSU0lPTiA+PSA1MSB8fCAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICB2YXIgYXJyYXkgPSBbXTtcbiAgYXJyYXlbSVNfQ09OQ0FUX1NQUkVBREFCTEVdID0gZmFsc2U7XG4gIHJldHVybiBhcnJheS5jb25jYXQoKVswXSAhPT0gYXJyYXk7XG59KTtcblxudmFyIFNQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2NvbmNhdCcpO1xuXG52YXIgaXNDb25jYXRTcHJlYWRhYmxlID0gZnVuY3Rpb24gKE8pIHtcbiAgaWYgKCFpc09iamVjdChPKSkgcmV0dXJuIGZhbHNlO1xuICB2YXIgc3ByZWFkYWJsZSA9IE9bSVNfQ09OQ0FUX1NQUkVBREFCTEVdO1xuICByZXR1cm4gc3ByZWFkYWJsZSAhPT0gdW5kZWZpbmVkID8gISFzcHJlYWRhYmxlIDogaXNBcnJheShPKTtcbn07XG5cbnZhciBGT1JDRUQgPSAhSVNfQ09OQ0FUX1NQUkVBREFCTEVfU1VQUE9SVCB8fCAhU1BFQ0lFU19TVVBQT1JUO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmNvbmNhdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5jb25jYXRcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBpc0NvbmNhdFNwcmVhZGFibGUgYW5kIEBAc3BlY2llc1xuJCh7IHRhcmdldDogJ0FycmF5JywgcHJvdG86IHRydWUsIGFyaXR5OiAxLCBmb3JjZWQ6IEZPUkNFRCB9LCB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIGNvbmNhdDogZnVuY3Rpb24gY29uY2F0KGFyZykge1xuICAgIHZhciBPID0gdG9PYmplY3QodGhpcyk7XG4gICAgdmFyIEEgPSBhcnJheVNwZWNpZXNDcmVhdGUoTywgMCk7XG4gICAgdmFyIG4gPSAwO1xuICAgIHZhciBpLCBrLCBsZW5ndGgsIGxlbiwgRTtcbiAgICBmb3IgKGkgPSAtMSwgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDsgaSA8IGxlbmd0aDsgaSsrKSB7XG4gICAgICBFID0gaSA9PT0gLTEgPyBPIDogYXJndW1lbnRzW2ldO1xuICAgICAgaWYgKGlzQ29uY2F0U3ByZWFkYWJsZShFKSkge1xuICAgICAgICBsZW4gPSBsZW5ndGhPZkFycmF5TGlrZShFKTtcbiAgICAgICAgZG9lc05vdEV4Y2VlZFNhZmVJbnRlZ2VyKG4gKyBsZW4pO1xuICAgICAgICBmb3IgKGsgPSAwOyBrIDwgbGVuOyBrKyssIG4rKykgaWYgKGsgaW4gRSkgY3JlYXRlUHJvcGVydHkoQSwgbiwgRVtrXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkb2VzTm90RXhjZWVkU2FmZUludGVnZXIobiArIDEpO1xuICAgICAgICBjcmVhdGVQcm9wZXJ0eShBLCBuKyssIEUpO1xuICAgICAgfVxuICAgIH1cbiAgICBBLmxlbmd0aCA9IG47XG4gICAgcmV0dXJuIEE7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaGFzLXNwZWNpZXMtc3VwcG9ydCcpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ2ZpbHRlcicpO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5maWx0ZXJcbi8vIHdpdGggYWRkaW5nIHN1cHBvcnQgb2YgQEBzcGVjaWVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhSEFTX1NQRUNJRVNfU1VQUE9SVCB9LCB7XG4gIGZpbHRlcjogZnVuY3Rpb24gZmlsdGVyKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICAgcmV0dXJuICRmaWx0ZXIodGhpcywgY2FsbGJhY2tmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGZyb20gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZnJvbScpO1xudmFyIGNoZWNrQ29ycmVjdG5lc3NPZkl0ZXJhdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jaGVjay1jb3JyZWN0bmVzcy1vZi1pdGVyYXRpb24nKTtcblxudmFyIElOQ09SUkVDVF9JVEVSQVRJT04gPSAhY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uKGZ1bmN0aW9uIChpdGVyYWJsZSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1hcnJheS1mcm9tIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIEFycmF5LmZyb20oaXRlcmFibGUpO1xufSk7XG5cbi8vIGBBcnJheS5mcm9tYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkuZnJvbVxuJCh7IHRhcmdldDogJ0FycmF5Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBJTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgZnJvbTogZnJvbVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkaW5jbHVkZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaW5jbHVkZXMnKS5pbmNsdWRlcztcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFkZFRvVW5zY29wYWJsZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYWRkLXRvLXVuc2NvcGFibGVzJyk7XG5cbi8vIEZGOTkrIGJ1Z1xudmFyIEJST0tFTl9PTl9TUEFSU0UgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAhQXJyYXkoMSkuaW5jbHVkZXMoKTtcbn0pO1xuXG4vLyBgQXJyYXkucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmluY2x1ZGVzXG4kKHsgdGFyZ2V0OiAnQXJyYXknLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBCUk9LRU5fT05fU1BBUlNFIH0sIHtcbiAgaW5jbHVkZXM6IGZ1bmN0aW9uIGluY2x1ZGVzKGVsIC8qICwgZnJvbUluZGV4ID0gMCAqLykge1xuICAgIHJldHVybiAkaW5jbHVkZXModGhpcywgZWwsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgfVxufSk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2luY2x1ZGVzJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYWRkVG9VbnNjb3BhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZGQtdG8tdW5zY29wYWJsZXMnKTtcbnZhciBJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXRlcmF0b3JzJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGRlZmluZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1kZWZpbmUtcHJvcGVydHknKS5mO1xudmFyIGRlZmluZUl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1pdGVyYXRvcicpO1xudmFyIElTX1BVUkUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtcHVyZScpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG5cbnZhciBBUlJBWV9JVEVSQVRPUiA9ICdBcnJheSBJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihBUlJBWV9JVEVSQVRPUik7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuZW50cmllc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWFycmF5LnByb3RvdHlwZS5lbnRyaWVzXG4vLyBgQXJyYXkucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUua2V5c1xuLy8gYEFycmF5LnByb3RvdHlwZS52YWx1ZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUudmFsdWVzXG4vLyBgQXJyYXkucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAaXRlcmF0b3Jcbi8vIGBDcmVhdGVBcnJheUl0ZXJhdG9yYCBpbnRlcm5hbCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtY3JlYXRlYXJyYXlpdGVyYXRvclxubW9kdWxlLmV4cG9ydHMgPSBkZWZpbmVJdGVyYXRvcihBcnJheSwgJ0FycmF5JywgZnVuY3Rpb24gKGl0ZXJhdGVkLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IEFSUkFZX0lURVJBVE9SLFxuICAgIHRhcmdldDogdG9JbmRleGVkT2JqZWN0KGl0ZXJhdGVkKSwgLy8gdGFyZ2V0XG4gICAgaW5kZXg6IDAsICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBuZXh0IGluZGV4XG4gICAga2luZDoga2luZCAgICAgICAgICAgICAgICAgICAgICAgICAvLyBraW5kXG4gIH0pO1xuLy8gYCVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJWFycmF5aXRlcmF0b3Jwcm90b3R5cGUlLm5leHRcbn0sIGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgdmFyIHRhcmdldCA9IHN0YXRlLnRhcmdldDtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleCsrO1xuICBpZiAoIXRhcmdldCB8fCBpbmRleCA+PSB0YXJnZXQubGVuZ3RoKSB7XG4gICAgc3RhdGUudGFyZ2V0ID0gdW5kZWZpbmVkO1xuICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfTtcbiAgfVxuICBpZiAoa2luZCA9PSAna2V5cycpIHJldHVybiB7IHZhbHVlOiBpbmRleCwgZG9uZTogZmFsc2UgfTtcbiAgaWYgKGtpbmQgPT0gJ3ZhbHVlcycpIHJldHVybiB7IHZhbHVlOiB0YXJnZXRbaW5kZXhdLCBkb25lOiBmYWxzZSB9O1xuICByZXR1cm4geyB2YWx1ZTogW2luZGV4LCB0YXJnZXRbaW5kZXhdXSwgZG9uZTogZmFsc2UgfTtcbn0sICd2YWx1ZXMnKTtcblxuLy8gYXJndW1lbnRzTGlzdFtAQGl0ZXJhdG9yXSBpcyAlQXJyYXlQcm90b192YWx1ZXMlXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZXVubWFwcGVkYXJndW1lbnRzb2JqZWN0XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWNyZWF0ZW1hcHBlZGFyZ3VtZW50c29iamVjdFxudmFyIHZhbHVlcyA9IEl0ZXJhdG9ycy5Bcmd1bWVudHMgPSBJdGVyYXRvcnMuQXJyYXk7XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLUBAdW5zY29wYWJsZXNcbmFkZFRvVW5zY29wYWJsZXMoJ2tleXMnKTtcbmFkZFRvVW5zY29wYWJsZXMoJ3ZhbHVlcycpO1xuYWRkVG9VbnNjb3BhYmxlcygnZW50cmllcycpO1xuXG4vLyBWOCB+IENocm9tZSA0NS0gYnVnXG5pZiAoIUlTX1BVUkUgJiYgREVTQ1JJUFRPUlMgJiYgdmFsdWVzLm5hbWUgIT09ICd2YWx1ZXMnKSB0cnkge1xuICBkZWZpbmVQcm9wZXJ0eSh2YWx1ZXMsICduYW1lJywgeyB2YWx1ZTogJ3ZhbHVlcycgfSk7XG59IGNhdGNoIChlcnJvcikgeyAvKiBlbXB0eSAqLyB9XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBJbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2luZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgYXJyYXlNZXRob2RJc1N0cmljdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1tZXRob2QtaXMtc3RyaWN0Jyk7XG5cbnZhciB1biRKb2luID0gdW5jdXJyeVRoaXMoW10uam9pbik7XG5cbnZhciBFUzNfU1RSSU5HUyA9IEluZGV4ZWRPYmplY3QgIT0gT2JqZWN0O1xudmFyIFNUUklDVF9NRVRIT0QgPSBhcnJheU1ldGhvZElzU3RyaWN0KCdqb2luJywgJywnKTtcblxuLy8gYEFycmF5LnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLmpvaW5cbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6IEVTM19TVFJJTkdTIHx8ICFTVFJJQ1RfTUVUSE9EIH0sIHtcbiAgam9pbjogZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgICByZXR1cm4gdW4kSm9pbih0b0luZGV4ZWRPYmplY3QodGhpcyksIHNlcGFyYXRvciA9PT0gdW5kZWZpbmVkID8gJywnIDogc2VwYXJhdG9yKTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciAkbWFwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLm1hcDtcbnZhciBhcnJheU1ldGhvZEhhc1NwZWNpZXNTdXBwb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LW1ldGhvZC1oYXMtc3BlY2llcy1zdXBwb3J0Jyk7XG5cbnZhciBIQVNfU1BFQ0lFU19TVVBQT1JUID0gYXJyYXlNZXRob2RIYXNTcGVjaWVzU3VwcG9ydCgnbWFwJyk7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUubWFwYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtYXJyYXkucHJvdG90eXBlLm1hcFxuLy8gd2l0aCBhZGRpbmcgc3VwcG9ydCBvZiBAQHNwZWNpZXNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgbWFwOiBmdW5jdGlvbiBtYXAoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICByZXR1cm4gJG1hcCh0aGlzLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1hcnJheScpO1xudmFyIGlzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY29uc3RydWN0b3InKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciB0b0Fic29sdXRlSW5kZXggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYWJzb2x1dGUtaW5kZXgnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGNyZWF0ZVByb3BlcnR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eScpO1xudmFyIHdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy93ZWxsLWtub3duLXN5bWJvbCcpO1xudmFyIGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbWV0aG9kLWhhcy1zcGVjaWVzLXN1cHBvcnQnKTtcbnZhciB1biRTbGljZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1zbGljZScpO1xuXG52YXIgSEFTX1NQRUNJRVNfU1VQUE9SVCA9IGFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQoJ3NsaWNlJyk7XG5cbnZhciBTUEVDSUVTID0gd2VsbEtub3duU3ltYm9sKCdzcGVjaWVzJyk7XG52YXIgJEFycmF5ID0gQXJyYXk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG5cbi8vIGBBcnJheS5wcm90b3R5cGUuc2xpY2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1hcnJheS5wcm90b3R5cGUuc2xpY2Vcbi8vIGZhbGxiYWNrIGZvciBub3QgYXJyYXktbGlrZSBFUzMgc3RyaW5ncyBhbmQgRE9NIG9iamVjdHNcbiQoeyB0YXJnZXQ6ICdBcnJheScsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFIQVNfU1BFQ0lFU19TVVBQT1JUIH0sIHtcbiAgc2xpY2U6IGZ1bmN0aW9uIHNsaWNlKHN0YXJ0LCBlbmQpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdCh0aGlzKTtcbiAgICB2YXIgbGVuZ3RoID0gbGVuZ3RoT2ZBcnJheUxpa2UoTyk7XG4gICAgdmFyIGsgPSB0b0Fic29sdXRlSW5kZXgoc3RhcnQsIGxlbmd0aCk7XG4gICAgdmFyIGZpbiA9IHRvQWJzb2x1dGVJbmRleChlbmQgPT09IHVuZGVmaW5lZCA/IGxlbmd0aCA6IGVuZCwgbGVuZ3RoKTtcbiAgICAvLyBpbmxpbmUgYEFycmF5U3BlY2llc0NyZWF0ZWAgZm9yIHVzYWdlIG5hdGl2ZSBgQXJyYXkjc2xpY2VgIHdoZXJlIGl0J3MgcG9zc2libGVcbiAgICB2YXIgQ29uc3RydWN0b3IsIHJlc3VsdCwgbjtcbiAgICBpZiAoaXNBcnJheShPKSkge1xuICAgICAgQ29uc3RydWN0b3IgPSBPLmNvbnN0cnVjdG9yO1xuICAgICAgLy8gY3Jvc3MtcmVhbG0gZmFsbGJhY2tcbiAgICAgIGlmIChpc0NvbnN0cnVjdG9yKENvbnN0cnVjdG9yKSAmJiAoQ29uc3RydWN0b3IgPT09ICRBcnJheSB8fCBpc0FycmF5KENvbnN0cnVjdG9yLnByb3RvdHlwZSkpKSB7XG4gICAgICAgIENvbnN0cnVjdG9yID0gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChpc09iamVjdChDb25zdHJ1Y3RvcikpIHtcbiAgICAgICAgQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcltTUEVDSUVTXTtcbiAgICAgICAgaWYgKENvbnN0cnVjdG9yID09PSBudWxsKSBDb25zdHJ1Y3RvciA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChDb25zdHJ1Y3RvciA9PT0gJEFycmF5IHx8IENvbnN0cnVjdG9yID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIHVuJFNsaWNlKE8sIGssIGZpbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IG5ldyAoQ29uc3RydWN0b3IgPT09IHVuZGVmaW5lZCA/ICRBcnJheSA6IENvbnN0cnVjdG9yKShtYXgoZmluIC0gaywgMCkpO1xuICAgIGZvciAobiA9IDA7IGsgPCBmaW47IGsrKywgbisrKSBpZiAoayBpbiBPKSBjcmVhdGVQcm9wZXJ0eShyZXN1bHQsIG4sIE9ba10pO1xuICAgIHJlc3VsdC5sZW5ndGggPSBuO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn0pO1xuIiwidmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgRlVOQ1RJT05fTkFNRV9FWElTVFMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tbmFtZScpLkVYSVNUUztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcblxudmFyIEZ1bmN0aW9uUHJvdG90eXBlID0gRnVuY3Rpb24ucHJvdG90eXBlO1xudmFyIGZ1bmN0aW9uVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhGdW5jdGlvblByb3RvdHlwZS50b1N0cmluZyk7XG52YXIgbmFtZVJFID0gL2Z1bmN0aW9uXFxiKD86XFxzfFxcL1xcKltcXFNcXHNdKj9cXCpcXC98XFwvXFwvW15cXG5cXHJdKltcXG5cXHJdKykqKFteXFxzKC9dKikvO1xudmFyIHJlZ0V4cEV4ZWMgPSB1bmN1cnJ5VGhpcyhuYW1lUkUuZXhlYyk7XG52YXIgTkFNRSA9ICduYW1lJztcblxuLy8gRnVuY3Rpb24gaW5zdGFuY2VzIGAubmFtZWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZnVuY3Rpb24taW5zdGFuY2VzLW5hbWVcbmlmIChERVNDUklQVE9SUyAmJiAhRlVOQ1RJT05fTkFNRV9FWElTVFMpIHtcbiAgZGVmaW5lUHJvcGVydHkoRnVuY3Rpb25Qcm90b3R5cGUsIE5BTUUsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gcmVnRXhwRXhlYyhuYW1lUkUsIGZ1bmN0aW9uVG9TdHJpbmcodGhpcykpWzFdO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgcmV0dXJuICcnO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG5cbi8vIGBnbG9iYWxUaGlzYCBvYmplY3Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZ2xvYmFsdGhpc1xuJCh7IGdsb2JhbDogdHJ1ZSB9LCB7XG4gIGdsb2JhbFRoaXM6IGdsb2JhbFxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBpc0FycmF5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWFycmF5Jyk7XG52YXIgaXNDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1jYWxsYWJsZScpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXN5bWJvbCcpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcblxudmFyICRzdHJpbmdpZnkgPSBnZXRCdWlsdEluKCdKU09OJywgJ3N0cmluZ2lmeScpO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgY2hhckF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckF0KTtcbnZhciBjaGFyQ29kZUF0ID0gdW5jdXJyeVRoaXMoJycuY2hhckNvZGVBdCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIG51bWJlclRvU3RyaW5nID0gdW5jdXJyeVRoaXMoMS4wLnRvU3RyaW5nKTtcblxudmFyIHRlc3RlciA9IC9bXFx1RDgwMC1cXHVERkZGXS9nO1xudmFyIGxvdyA9IC9eW1xcdUQ4MDAtXFx1REJGRl0kLztcbnZhciBoaSA9IC9eW1xcdURDMDAtXFx1REZGRl0kLztcblxudmFyIFdST05HX1NZTUJPTFNfQ09OVkVSU0lPTiA9ICFOQVRJVkVfU1lNQk9MIHx8IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHN5bWJvbCA9IGdldEJ1aWx0SW4oJ1N5bWJvbCcpKCk7XG4gIC8vIE1TIEVkZ2UgY29udmVydHMgc3ltYm9sIHZhbHVlcyB0byBKU09OIGFzIHt9XG4gIHJldHVybiAkc3RyaW5naWZ5KFtzeW1ib2xdKSAhPSAnW251bGxdJ1xuICAgIC8vIFdlYktpdCBjb252ZXJ0cyBzeW1ib2wgdmFsdWVzIHRvIEpTT04gYXMgbnVsbFxuICAgIHx8ICRzdHJpbmdpZnkoeyBhOiBzeW1ib2wgfSkgIT0gJ3t9J1xuICAgIC8vIFY4IHRocm93cyBvbiBib3hlZCBzeW1ib2xzXG4gICAgfHwgJHN0cmluZ2lmeShPYmplY3Qoc3ltYm9sKSkgIT0gJ3t9Jztcbn0pO1xuXG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9wcm9wb3NhbC13ZWxsLWZvcm1lZC1zdHJpbmdpZnlcbnZhciBJTExfRk9STUVEX1VOSUNPREUgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiAkc3RyaW5naWZ5KCdcXHVERjA2XFx1RDgzNCcpICE9PSAnXCJcXFxcdWRmMDZcXFxcdWQ4MzRcIidcbiAgICB8fCAkc3RyaW5naWZ5KCdcXHVERUFEJykgIT09ICdcIlxcXFx1ZGVhZFwiJztcbn0pO1xuXG52YXIgc3RyaW5naWZ5V2l0aFN5bWJvbHNGaXggPSBmdW5jdGlvbiAoaXQsIHJlcGxhY2VyKSB7XG4gIHZhciBhcmdzID0gYXJyYXlTbGljZShhcmd1bWVudHMpO1xuICB2YXIgJHJlcGxhY2VyID0gcmVwbGFjZXI7XG4gIGlmICghaXNPYmplY3QocmVwbGFjZXIpICYmIGl0ID09PSB1bmRlZmluZWQgfHwgaXNTeW1ib2woaXQpKSByZXR1cm47IC8vIElFOCByZXR1cm5zIHN0cmluZyBvbiB1bmRlZmluZWRcbiAgaWYgKCFpc0FycmF5KHJlcGxhY2VyKSkgcmVwbGFjZXIgPSBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgIGlmIChpc0NhbGxhYmxlKCRyZXBsYWNlcikpIHZhbHVlID0gY2FsbCgkcmVwbGFjZXIsIHRoaXMsIGtleSwgdmFsdWUpO1xuICAgIGlmICghaXNTeW1ib2wodmFsdWUpKSByZXR1cm4gdmFsdWU7XG4gIH07XG4gIGFyZ3NbMV0gPSByZXBsYWNlcjtcbiAgcmV0dXJuIGFwcGx5KCRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xufTtcblxudmFyIGZpeElsbEZvcm1lZCA9IGZ1bmN0aW9uIChtYXRjaCwgb2Zmc2V0LCBzdHJpbmcpIHtcbiAgdmFyIHByZXYgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgLSAxKTtcbiAgdmFyIG5leHQgPSBjaGFyQXQoc3RyaW5nLCBvZmZzZXQgKyAxKTtcbiAgaWYgKChleGVjKGxvdywgbWF0Y2gpICYmICFleGVjKGhpLCBuZXh0KSkgfHwgKGV4ZWMoaGksIG1hdGNoKSAmJiAhZXhlYyhsb3csIHByZXYpKSkge1xuICAgIHJldHVybiAnXFxcXHUnICsgbnVtYmVyVG9TdHJpbmcoY2hhckNvZGVBdChtYXRjaCwgMCksIDE2KTtcbiAgfSByZXR1cm4gbWF0Y2g7XG59O1xuXG5pZiAoJHN0cmluZ2lmeSkge1xuICAvLyBgSlNPTi5zdHJpbmdpZnlgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24uc3RyaW5naWZ5XG4gICQoeyB0YXJnZXQ6ICdKU09OJywgc3RhdDogdHJ1ZSwgYXJpdHk6IDMsIGZvcmNlZDogV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIHx8IElMTF9GT1JNRURfVU5JQ09ERSB9LCB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzIC0tIHJlcXVpcmVkIGZvciBgLmxlbmd0aGBcbiAgICBzdHJpbmdpZnk6IGZ1bmN0aW9uIHN0cmluZ2lmeShpdCwgcmVwbGFjZXIsIHNwYWNlKSB7XG4gICAgICB2YXIgYXJncyA9IGFycmF5U2xpY2UoYXJndW1lbnRzKTtcbiAgICAgIHZhciByZXN1bHQgPSBhcHBseShXUk9OR19TWU1CT0xTX0NPTlZFUlNJT04gPyBzdHJpbmdpZnlXaXRoU3ltYm9sc0ZpeCA6ICRzdHJpbmdpZnksIG51bGwsIGFyZ3MpO1xuICAgICAgcmV0dXJuIElMTF9GT1JNRURfVU5JQ09ERSAmJiB0eXBlb2YgcmVzdWx0ID09ICdzdHJpbmcnID8gcmVwbGFjZShyZXN1bHQsIHRlc3RlciwgZml4SWxsRm9ybWVkKSA6IHJlc3VsdDtcbiAgICB9XG4gIH0pO1xufVxuIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBKU09OW0BAdG9TdHJpbmdUYWddIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLWpzb24tQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2xvYmFsLkpTT04sICdKU09OJywgdHJ1ZSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgY29sbGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uJyk7XG52YXIgY29sbGVjdGlvblN0cm9uZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb2xsZWN0aW9uLXN0cm9uZycpO1xuXG4vLyBgTWFwYCBjb25zdHJ1Y3RvclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1tYXAtb2JqZWN0c1xuY29sbGVjdGlvbignTWFwJywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIE1hcCgpIHsgcmV0dXJuIGluaXQodGhpcywgYXJndW1lbnRzLmxlbmd0aCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZCk7IH07XG59LCBjb2xsZWN0aW9uU3Ryb25nKTtcbiIsIi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLm1hcC5jb25zdHJ1Y3RvcicpO1xuIiwidmFyIHNldFRvU3RyaW5nVGFnID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC10by1zdHJpbmctdGFnJyk7XG5cbi8vIE1hdGhbQEB0b1N0cmluZ1RhZ10gcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtbWF0aC1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZyhNYXRoLCAnTWF0aCcsIHRydWUpO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciB0b0luZGV4ZWRPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8taW5kZXhlZC1vYmplY3QnKTtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktZGVzY3JpcHRvcicpLmY7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcigxKTsgfSk7XG52YXIgRk9SQ0VEID0gIURFU0NSSVBUT1JTIHx8IEZBSUxTX09OX1BSSU1JVElWRVM7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldG93bnByb3BlcnR5ZGVzY3JpcHRvclxuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRk9SQ0VELCBzaGFtOiAhREVTQ1JJUFRPUlMgfSwge1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcih0b0luZGV4ZWRPYmplY3QoaXQpLCBrZXkpO1xuICB9XG59KTtcbiIsInZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIERFU0NSSVBUT1JTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Rlc2NyaXB0b3JzJyk7XG52YXIgb3duS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vd24ta2V5cycpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1pbmRleGVkLW9iamVjdCcpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgY3JlYXRlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLXByb3BlcnR5Jyk7XG5cbi8vIGBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczogZnVuY3Rpb24gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhvYmplY3QpIHtcbiAgICB2YXIgTyA9IHRvSW5kZXhlZE9iamVjdChvYmplY3QpO1xuICAgIHZhciBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZjtcbiAgICB2YXIga2V5cyA9IG93bktleXMoTyk7XG4gICAgdmFyIHJlc3VsdCA9IHt9O1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgdmFyIGtleSwgZGVzY3JpcHRvcjtcbiAgICB3aGlsZSAoa2V5cy5sZW5ndGggPiBpbmRleCkge1xuICAgICAgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBrZXkgPSBrZXlzW2luZGV4KytdKTtcbiAgICAgIGlmIChkZXNjcmlwdG9yICE9PSB1bmRlZmluZWQpIGNyZWF0ZVByb3BlcnR5KHJlc3VsdCwga2V5LCBkZXNjcmlwdG9yKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktbmFtZXMtZXh0ZXJuYWwnKS5mO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby1vYmplY3QtZ2V0b3ducHJvcGVydHluYW1lcyAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IHJldHVybiAhT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGdldE93blByb3BlcnR5TmFtZXM6IGdldE93blByb3BlcnR5TmFtZXNcbn0pO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgTkFUSVZFX1NZTUJPTCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uYXRpdmUtc3ltYm9sJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnZXRPd25Qcm9wZXJ0eVN5bWJvbHNNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xuXG4vLyBWOCB+IENocm9tZSAzOCBhbmQgMzkgYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIGZhaWxzIG9uIHByaW1pdGl2ZXNcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTM0NDNcbnZhciBGT1JDRUQgPSAhTkFUSVZFX1NZTUJPTCB8fCBmYWlscyhmdW5jdGlvbiAoKSB7IGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mKDEpOyB9KTtcblxuLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHlzeW1ib2xzXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQgfSwge1xuICBnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6IGZ1bmN0aW9uIGdldE93blByb3BlcnR5U3ltYm9scyhpdCkge1xuICAgIHZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZ2V0T3duUHJvcGVydHlTeW1ib2xzTW9kdWxlLmY7XG4gICAgcmV0dXJuICRnZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPyAkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHRvT2JqZWN0KGl0KSkgOiBbXTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIHRvT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9iamVjdCcpO1xudmFyIG5hdGl2ZUdldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcnJlY3QtcHJvdG90eXBlLWdldHRlcicpO1xuXG52YXIgRkFJTFNfT05fUFJJTUlUSVZFUyA9IGZhaWxzKGZ1bmN0aW9uICgpIHsgbmF0aXZlR2V0UHJvdG90eXBlT2YoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmdldFByb3RvdHlwZU9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LmdldHByb3RvdHlwZW9mXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGQUlMU19PTl9QUklNSVRJVkVTLCBzaGFtOiAhQ09SUkVDVF9QUk9UT1RZUEVfR0VUVEVSIH0sIHtcbiAgZ2V0UHJvdG90eXBlT2Y6IGZ1bmN0aW9uIGdldFByb3RvdHlwZU9mKGl0KSB7XG4gICAgcmV0dXJuIG5hdGl2ZUdldFByb3RvdHlwZU9mKHRvT2JqZWN0KGl0KSk7XG4gIH1cbn0pO1xuXG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciB0b09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBuYXRpdmVLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIEZBSUxTX09OX1BSSU1JVElWRVMgPSBmYWlscyhmdW5jdGlvbiAoKSB7IG5hdGl2ZUtleXMoMSk7IH0pO1xuXG4vLyBgT2JqZWN0LmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3Qua2V5c1xuJCh7IHRhcmdldDogJ09iamVjdCcsIHN0YXQ6IHRydWUsIGZvcmNlZDogRkFJTFNfT05fUFJJTUlUSVZFUyB9LCB7XG4gIGtleXM6IGZ1bmN0aW9uIGtleXMoaXQpIHtcbiAgICByZXR1cm4gbmF0aXZlS2V5cyh0b09iamVjdChpdCkpO1xuICB9XG59KTtcbiIsInZhciBUT19TVFJJTkdfVEFHX1NVUFBPUlQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nLXRhZy1zdXBwb3J0Jyk7XG52YXIgZGVmaW5lQnVpbHRJbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW4nKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtdG8tc3RyaW5nJyk7XG5cbi8vIGBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtb2JqZWN0LnByb3RvdHlwZS50b3N0cmluZ1xuaWYgKCFUT19TVFJJTkdfVEFHX1NVUFBPUlQpIHtcbiAgZGVmaW5lQnVpbHRJbihPYmplY3QucHJvdG90eXBlLCAndG9TdHJpbmcnLCB0b1N0cmluZywgeyB1bnNhZmU6IHRydWUgfSk7XG59XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5hbGxgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLmFsbFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6IFBST01JU0VfU1RBVElDU19JTkNPUlJFQ1RfSVRFUkFUSU9OIH0sIHtcbiAgYWxsOiBmdW5jdGlvbiBhbGwoaXRlcmFibGUpIHtcbiAgICB2YXIgQyA9IHRoaXM7XG4gICAgdmFyIGNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZS5mKEMpO1xuICAgIHZhciByZXNvbHZlID0gY2FwYWJpbGl0eS5yZXNvbHZlO1xuICAgIHZhciByZWplY3QgPSBjYXBhYmlsaXR5LnJlamVjdDtcbiAgICB2YXIgcmVzdWx0ID0gcGVyZm9ybShmdW5jdGlvbiAoKSB7XG4gICAgICB2YXIgJHByb21pc2VSZXNvbHZlID0gYUNhbGxhYmxlKEMucmVzb2x2ZSk7XG4gICAgICB2YXIgdmFsdWVzID0gW107XG4gICAgICB2YXIgY291bnRlciA9IDA7XG4gICAgICB2YXIgcmVtYWluaW5nID0gMTtcbiAgICAgIGl0ZXJhdGUoaXRlcmFibGUsIGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICAgIHZhciBpbmRleCA9IGNvdW50ZXIrKztcbiAgICAgICAgdmFyIGFscmVhZHlDYWxsZWQgPSBmYWxzZTtcbiAgICAgICAgcmVtYWluaW5nKys7XG4gICAgICAgIGNhbGwoJHByb21pc2VSZXNvbHZlLCBDLCBwcm9taXNlKS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgICAgIGlmIChhbHJlYWR5Q2FsbGVkKSByZXR1cm47XG4gICAgICAgICAgYWxyZWFkeUNhbGxlZCA9IHRydWU7XG4gICAgICAgICAgdmFsdWVzW2luZGV4XSA9IHZhbHVlO1xuICAgICAgICAgIC0tcmVtYWluaW5nIHx8IHJlc29sdmUodmFsdWVzKTtcbiAgICAgICAgfSwgcmVqZWN0KTtcbiAgICAgIH0pO1xuICAgICAgLS1yZW1haW5pbmcgfHwgcmVzb2x2ZSh2YWx1ZXMpO1xuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuZXJyb3IpIHJlamVjdChyZXN1bHQudmFsdWUpO1xuICAgIHJldHVybiBjYXBhYmlsaXR5LnByb21pc2U7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1uYXRpdmUtY29uc3RydWN0b3InKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xuXG52YXIgTmF0aXZlUHJvbWlzZVByb3RvdHlwZSA9IE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciAmJiBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4vLyBgUHJvbWlzZS5wcm90b3R5cGUuY2F0Y2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9taXNlLnByb3RvdHlwZS5jYXRjaFxuJCh7IHRhcmdldDogJ1Byb21pc2UnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiwgcmVhbDogdHJ1ZSB9LCB7XG4gICdjYXRjaCc6IGZ1bmN0aW9uIChvblJlamVjdGVkKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbih1bmRlZmluZWQsIG9uUmVqZWN0ZWQpO1xuICB9XG59KTtcblxuLy8gbWFrZXMgc3VyZSB0aGF0IG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXMgYFByb21pc2UjY2F0Y2hgIHByb3Blcmx5IHdvcmtzIHdpdGggcGF0Y2hlZCBgUHJvbWlzZSN0aGVuYFxuaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSkge1xuICB2YXIgbWV0aG9kID0gZ2V0QnVpbHRJbignUHJvbWlzZScpLnByb3RvdHlwZVsnY2F0Y2gnXTtcbiAgaWYgKE5hdGl2ZVByb21pc2VQcm90b3R5cGVbJ2NhdGNoJ10gIT09IG1ldGhvZCkge1xuICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ2NhdGNoJywgbWV0aG9kLCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgfVxufVxuIiwiJ3VzZSBzdHJpY3QnO1xudmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgSVNfTk9ERSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtaXMtbm9kZScpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIHNldFByb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1zZXQtcHJvdG90eXBlLW9mJyk7XG52YXIgc2V0VG9TdHJpbmdUYWcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc2V0LXRvLXN0cmluZy10YWcnKTtcbnZhciBzZXRTcGVjaWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NldC1zcGVjaWVzJyk7XG52YXIgYUNhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY2FsbGFibGUnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtb2JqZWN0Jyk7XG52YXIgYW5JbnN0YW5jZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1pbnN0YW5jZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90YXNrJykuc2V0O1xudmFyIG1pY3JvdGFzayA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9taWNyb3Rhc2snKTtcbnZhciBob3N0UmVwb3J0RXJyb3JzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hvc3QtcmVwb3J0LWVycm9ycycpO1xudmFyIHBlcmZvcm0gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcGVyZm9ybScpO1xudmFyIFF1ZXVlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3F1ZXVlJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLW5hdGl2ZS1jb25zdHJ1Y3RvcicpO1xudmFyIFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLWNvbnN0cnVjdG9yLWRldGVjdGlvbicpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcblxudmFyIFBST01JU0UgPSAnUHJvbWlzZSc7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSBQcm9taXNlQ29uc3RydWN0b3JEZXRlY3Rpb24uQ09OU1RSVUNUT1I7XG52YXIgTkFUSVZFX1BST01JU0VfUkVKRUNUSU9OX0VWRU5UID0gUHJvbWlzZUNvbnN0cnVjdG9yRGV0ZWN0aW9uLlJFSkVDVElPTl9FVkVOVDtcbnZhciBOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyA9IFByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbi5TVUJDTEFTU0lORztcbnZhciBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuZ2V0dGVyRm9yKFBST01JU0UpO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBOYXRpdmVQcm9taXNlUHJvdG90eXBlID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yICYmIE5hdGl2ZVByb21pc2VDb25zdHJ1Y3Rvci5wcm90b3R5cGU7XG52YXIgUHJvbWlzZUNvbnN0cnVjdG9yID0gTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yO1xudmFyIFByb21pc2VQcm90b3R5cGUgPSBOYXRpdmVQcm9taXNlUHJvdG90eXBlO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgZG9jdW1lbnQgPSBnbG9iYWwuZG9jdW1lbnQ7XG52YXIgcHJvY2VzcyA9IGdsb2JhbC5wcm9jZXNzO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZjtcbnZhciBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkgPSBuZXdQcm9taXNlQ2FwYWJpbGl0eTtcblxudmFyIERJU1BBVENIX0VWRU5UID0gISEoZG9jdW1lbnQgJiYgZG9jdW1lbnQuY3JlYXRlRXZlbnQgJiYgZ2xvYmFsLmRpc3BhdGNoRXZlbnQpO1xudmFyIFVOSEFORExFRF9SRUpFQ1RJT04gPSAndW5oYW5kbGVkcmVqZWN0aW9uJztcbnZhciBSRUpFQ1RJT05fSEFORExFRCA9ICdyZWplY3Rpb25oYW5kbGVkJztcbnZhciBQRU5ESU5HID0gMDtcbnZhciBGVUxGSUxMRUQgPSAxO1xudmFyIFJFSkVDVEVEID0gMjtcbnZhciBIQU5ETEVEID0gMTtcbnZhciBVTkhBTkRMRUQgPSAyO1xuXG52YXIgSW50ZXJuYWwsIE93blByb21pc2VDYXBhYmlsaXR5LCBQcm9taXNlV3JhcHBlciwgbmF0aXZlVGhlbjtcblxuLy8gaGVscGVyc1xudmFyIGlzVGhlbmFibGUgPSBmdW5jdGlvbiAoaXQpIHtcbiAgdmFyIHRoZW47XG4gIHJldHVybiBpc09iamVjdChpdCkgJiYgaXNDYWxsYWJsZSh0aGVuID0gaXQudGhlbikgPyB0aGVuIDogZmFsc2U7XG59O1xuXG52YXIgY2FsbFJlYWN0aW9uID0gZnVuY3Rpb24gKHJlYWN0aW9uLCBzdGF0ZSkge1xuICB2YXIgdmFsdWUgPSBzdGF0ZS52YWx1ZTtcbiAgdmFyIG9rID0gc3RhdGUuc3RhdGUgPT0gRlVMRklMTEVEO1xuICB2YXIgaGFuZGxlciA9IG9rID8gcmVhY3Rpb24ub2sgOiByZWFjdGlvbi5mYWlsO1xuICB2YXIgcmVzb2x2ZSA9IHJlYWN0aW9uLnJlc29sdmU7XG4gIHZhciByZWplY3QgPSByZWFjdGlvbi5yZWplY3Q7XG4gIHZhciBkb21haW4gPSByZWFjdGlvbi5kb21haW47XG4gIHZhciByZXN1bHQsIHRoZW4sIGV4aXRlZDtcbiAgdHJ5IHtcbiAgICBpZiAoaGFuZGxlcikge1xuICAgICAgaWYgKCFvaykge1xuICAgICAgICBpZiAoc3RhdGUucmVqZWN0aW9uID09PSBVTkhBTkRMRUQpIG9uSGFuZGxlVW5oYW5kbGVkKHN0YXRlKTtcbiAgICAgICAgc3RhdGUucmVqZWN0aW9uID0gSEFORExFRDtcbiAgICAgIH1cbiAgICAgIGlmIChoYW5kbGVyID09PSB0cnVlKSByZXN1bHQgPSB2YWx1ZTtcbiAgICAgIGVsc2Uge1xuICAgICAgICBpZiAoZG9tYWluKSBkb21haW4uZW50ZXIoKTtcbiAgICAgICAgcmVzdWx0ID0gaGFuZGxlcih2YWx1ZSk7IC8vIGNhbiB0aHJvd1xuICAgICAgICBpZiAoZG9tYWluKSB7XG4gICAgICAgICAgZG9tYWluLmV4aXQoKTtcbiAgICAgICAgICBleGl0ZWQgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAocmVzdWx0ID09PSByZWFjdGlvbi5wcm9taXNlKSB7XG4gICAgICAgIHJlamVjdChUeXBlRXJyb3IoJ1Byb21pc2UtY2hhaW4gY3ljbGUnKSk7XG4gICAgICB9IGVsc2UgaWYgKHRoZW4gPSBpc1RoZW5hYmxlKHJlc3VsdCkpIHtcbiAgICAgICAgY2FsbCh0aGVuLCByZXN1bHQsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9IGVsc2UgcmVzb2x2ZShyZXN1bHQpO1xuICAgIH0gZWxzZSByZWplY3QodmFsdWUpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGlmIChkb21haW4gJiYgIWV4aXRlZCkgZG9tYWluLmV4aXQoKTtcbiAgICByZWplY3QoZXJyb3IpO1xuICB9XG59O1xuXG52YXIgbm90aWZ5ID0gZnVuY3Rpb24gKHN0YXRlLCBpc1JlamVjdCkge1xuICBpZiAoc3RhdGUubm90aWZpZWQpIHJldHVybjtcbiAgc3RhdGUubm90aWZpZWQgPSB0cnVlO1xuICBtaWNyb3Rhc2soZnVuY3Rpb24gKCkge1xuICAgIHZhciByZWFjdGlvbnMgPSBzdGF0ZS5yZWFjdGlvbnM7XG4gICAgdmFyIHJlYWN0aW9uO1xuICAgIHdoaWxlIChyZWFjdGlvbiA9IHJlYWN0aW9ucy5nZXQoKSkge1xuICAgICAgY2FsbFJlYWN0aW9uKHJlYWN0aW9uLCBzdGF0ZSk7XG4gICAgfVxuICAgIHN0YXRlLm5vdGlmaWVkID0gZmFsc2U7XG4gICAgaWYgKGlzUmVqZWN0ICYmICFzdGF0ZS5yZWplY3Rpb24pIG9uVW5oYW5kbGVkKHN0YXRlKTtcbiAgfSk7XG59O1xuXG52YXIgZGlzcGF0Y2hFdmVudCA9IGZ1bmN0aW9uIChuYW1lLCBwcm9taXNlLCByZWFzb24pIHtcbiAgdmFyIGV2ZW50LCBoYW5kbGVyO1xuICBpZiAoRElTUEFUQ0hfRVZFTlQpIHtcbiAgICBldmVudCA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCdFdmVudCcpO1xuICAgIGV2ZW50LnByb21pc2UgPSBwcm9taXNlO1xuICAgIGV2ZW50LnJlYXNvbiA9IHJlYXNvbjtcbiAgICBldmVudC5pbml0RXZlbnQobmFtZSwgZmFsc2UsIHRydWUpO1xuICAgIGdsb2JhbC5kaXNwYXRjaEV2ZW50KGV2ZW50KTtcbiAgfSBlbHNlIGV2ZW50ID0geyBwcm9taXNlOiBwcm9taXNlLCByZWFzb246IHJlYXNvbiB9O1xuICBpZiAoIU5BVElWRV9QUk9NSVNFX1JFSkVDVElPTl9FVkVOVCAmJiAoaGFuZGxlciA9IGdsb2JhbFsnb24nICsgbmFtZV0pKSBoYW5kbGVyKGV2ZW50KTtcbiAgZWxzZSBpZiAobmFtZSA9PT0gVU5IQU5ETEVEX1JFSkVDVElPTikgaG9zdFJlcG9ydEVycm9ycygnVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uJywgcmVhc29uKTtcbn07XG5cbnZhciBvblVuaGFuZGxlZCA9IGZ1bmN0aW9uIChzdGF0ZSkge1xuICBjYWxsKHRhc2ssIGdsb2JhbCwgZnVuY3Rpb24gKCkge1xuICAgIHZhciBwcm9taXNlID0gc3RhdGUuZmFjYWRlO1xuICAgIHZhciB2YWx1ZSA9IHN0YXRlLnZhbHVlO1xuICAgIHZhciBJU19VTkhBTkRMRUQgPSBpc1VuaGFuZGxlZChzdGF0ZSk7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBpZiAoSVNfVU5IQU5ETEVEKSB7XG4gICAgICByZXN1bHQgPSBwZXJmb3JtKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKElTX05PREUpIHtcbiAgICAgICAgICBwcm9jZXNzLmVtaXQoJ3VuaGFuZGxlZFJlamVjdGlvbicsIHZhbHVlLCBwcm9taXNlKTtcbiAgICAgICAgfSBlbHNlIGRpc3BhdGNoRXZlbnQoVU5IQU5ETEVEX1JFSkVDVElPTiwgcHJvbWlzZSwgdmFsdWUpO1xuICAgICAgfSk7XG4gICAgICAvLyBCcm93c2VycyBzaG91bGQgbm90IHRyaWdnZXIgYHJlamVjdGlvbkhhbmRsZWRgIGV2ZW50IGlmIGl0IHdhcyBoYW5kbGVkIGhlcmUsIE5vZGVKUyAtIHNob3VsZFxuICAgICAgc3RhdGUucmVqZWN0aW9uID0gSVNfTk9ERSB8fCBpc1VuaGFuZGxlZChzdGF0ZSkgPyBVTkhBTkRMRUQgOiBIQU5ETEVEO1xuICAgICAgaWYgKHJlc3VsdC5lcnJvcikgdGhyb3cgcmVzdWx0LnZhbHVlO1xuICAgIH1cbiAgfSk7XG59O1xuXG52YXIgaXNVbmhhbmRsZWQgPSBmdW5jdGlvbiAoc3RhdGUpIHtcbiAgcmV0dXJuIHN0YXRlLnJlamVjdGlvbiAhPT0gSEFORExFRCAmJiAhc3RhdGUucGFyZW50O1xufTtcblxudmFyIG9uSGFuZGxlVW5oYW5kbGVkID0gZnVuY3Rpb24gKHN0YXRlKSB7XG4gIGNhbGwodGFzaywgZ2xvYmFsLCBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBzdGF0ZS5mYWNhZGU7XG4gICAgaWYgKElTX05PREUpIHtcbiAgICAgIHByb2Nlc3MuZW1pdCgncmVqZWN0aW9uSGFuZGxlZCcsIHByb21pc2UpO1xuICAgIH0gZWxzZSBkaXNwYXRjaEV2ZW50KFJFSkVDVElPTl9IQU5ETEVELCBwcm9taXNlLCBzdGF0ZS52YWx1ZSk7XG4gIH0pO1xufTtcblxudmFyIGJpbmQgPSBmdW5jdGlvbiAoZm4sIHN0YXRlLCB1bndyYXApIHtcbiAgcmV0dXJuIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgIGZuKHN0YXRlLCB2YWx1ZSwgdW53cmFwKTtcbiAgfTtcbn07XG5cbnZhciBpbnRlcm5hbFJlamVjdCA9IGZ1bmN0aW9uIChzdGF0ZSwgdmFsdWUsIHVud3JhcCkge1xuICBpZiAoc3RhdGUuZG9uZSkgcmV0dXJuO1xuICBzdGF0ZS5kb25lID0gdHJ1ZTtcbiAgaWYgKHVud3JhcCkgc3RhdGUgPSB1bndyYXA7XG4gIHN0YXRlLnZhbHVlID0gdmFsdWU7XG4gIHN0YXRlLnN0YXRlID0gUkVKRUNURUQ7XG4gIG5vdGlmeShzdGF0ZSwgdHJ1ZSk7XG59O1xuXG52YXIgaW50ZXJuYWxSZXNvbHZlID0gZnVuY3Rpb24gKHN0YXRlLCB2YWx1ZSwgdW53cmFwKSB7XG4gIGlmIChzdGF0ZS5kb25lKSByZXR1cm47XG4gIHN0YXRlLmRvbmUgPSB0cnVlO1xuICBpZiAodW53cmFwKSBzdGF0ZSA9IHVud3JhcDtcbiAgdHJ5IHtcbiAgICBpZiAoc3RhdGUuZmFjYWRlID09PSB2YWx1ZSkgdGhyb3cgVHlwZUVycm9yKFwiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGZcIik7XG4gICAgdmFyIHRoZW4gPSBpc1RoZW5hYmxlKHZhbHVlKTtcbiAgICBpZiAodGhlbikge1xuICAgICAgbWljcm90YXNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHdyYXBwZXIgPSB7IGRvbmU6IGZhbHNlIH07XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY2FsbCh0aGVuLCB2YWx1ZSxcbiAgICAgICAgICAgIGJpbmQoaW50ZXJuYWxSZXNvbHZlLCB3cmFwcGVyLCBzdGF0ZSksXG4gICAgICAgICAgICBiaW5kKGludGVybmFsUmVqZWN0LCB3cmFwcGVyLCBzdGF0ZSlcbiAgICAgICAgICApO1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGludGVybmFsUmVqZWN0KHdyYXBwZXIsIGVycm9yLCBzdGF0ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzdGF0ZS52YWx1ZSA9IHZhbHVlO1xuICAgICAgc3RhdGUuc3RhdGUgPSBGVUxGSUxMRUQ7XG4gICAgICBub3RpZnkoc3RhdGUsIGZhbHNlKTtcbiAgICB9XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaW50ZXJuYWxSZWplY3QoeyBkb25lOiBmYWxzZSB9LCBlcnJvciwgc3RhdGUpO1xuICB9XG59O1xuXG4vLyBjb25zdHJ1Y3RvciBwb2x5ZmlsbFxuaWYgKEZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SKSB7XG4gIC8vIDI1LjQuMy4xIFByb21pc2UoZXhlY3V0b3IpXG4gIFByb21pc2VDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFByb21pc2UoZXhlY3V0b3IpIHtcbiAgICBhbkluc3RhbmNlKHRoaXMsIFByb21pc2VQcm90b3R5cGUpO1xuICAgIGFDYWxsYWJsZShleGVjdXRvcik7XG4gICAgY2FsbChJbnRlcm5hbCwgdGhpcyk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQcm9taXNlU3RhdGUodGhpcyk7XG4gICAgdHJ5IHtcbiAgICAgIGV4ZWN1dG9yKGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSksIGJpbmQoaW50ZXJuYWxSZWplY3QsIHN0YXRlKSk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGludGVybmFsUmVqZWN0KHN0YXRlLCBlcnJvcik7XG4gICAgfVxuICB9O1xuXG4gIFByb21pc2VQcm90b3R5cGUgPSBQcm9taXNlQ29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFycyAtLSByZXF1aXJlZCBmb3IgYC5sZW5ndGhgXG4gIEludGVybmFsID0gZnVuY3Rpb24gUHJvbWlzZShleGVjdXRvcikge1xuICAgIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgICAgdHlwZTogUFJPTUlTRSxcbiAgICAgIGRvbmU6IGZhbHNlLFxuICAgICAgbm90aWZpZWQ6IGZhbHNlLFxuICAgICAgcGFyZW50OiBmYWxzZSxcbiAgICAgIHJlYWN0aW9uczogbmV3IFF1ZXVlKCksXG4gICAgICByZWplY3Rpb246IGZhbHNlLFxuICAgICAgc3RhdGU6IFBFTkRJTkcsXG4gICAgICB2YWx1ZTogdW5kZWZpbmVkXG4gICAgfSk7XG4gIH07XG5cbiAgLy8gYFByb21pc2UucHJvdG90eXBlLnRoZW5gIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXByb21pc2UucHJvdG90eXBlLnRoZW5cbiAgSW50ZXJuYWwucHJvdG90eXBlID0gZGVmaW5lQnVpbHRJbihQcm9taXNlUHJvdG90eXBlLCAndGhlbicsIGZ1bmN0aW9uIHRoZW4ob25GdWxmaWxsZWQsIG9uUmVqZWN0ZWQpIHtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZSh0aGlzKTtcbiAgICB2YXIgcmVhY3Rpb24gPSBuZXdQcm9taXNlQ2FwYWJpbGl0eShzcGVjaWVzQ29uc3RydWN0b3IodGhpcywgUHJvbWlzZUNvbnN0cnVjdG9yKSk7XG4gICAgc3RhdGUucGFyZW50ID0gdHJ1ZTtcbiAgICByZWFjdGlvbi5vayA9IGlzQ2FsbGFibGUob25GdWxmaWxsZWQpID8gb25GdWxmaWxsZWQgOiB0cnVlO1xuICAgIHJlYWN0aW9uLmZhaWwgPSBpc0NhbGxhYmxlKG9uUmVqZWN0ZWQpICYmIG9uUmVqZWN0ZWQ7XG4gICAgcmVhY3Rpb24uZG9tYWluID0gSVNfTk9ERSA/IHByb2Nlc3MuZG9tYWluIDogdW5kZWZpbmVkO1xuICAgIGlmIChzdGF0ZS5zdGF0ZSA9PSBQRU5ESU5HKSBzdGF0ZS5yZWFjdGlvbnMuYWRkKHJlYWN0aW9uKTtcbiAgICBlbHNlIG1pY3JvdGFzayhmdW5jdGlvbiAoKSB7XG4gICAgICBjYWxsUmVhY3Rpb24ocmVhY3Rpb24sIHN0YXRlKTtcbiAgICB9KTtcbiAgICByZXR1cm4gcmVhY3Rpb24ucHJvbWlzZTtcbiAgfSk7XG5cbiAgT3duUHJvbWlzZUNhcGFiaWxpdHkgPSBmdW5jdGlvbiAoKSB7XG4gICAgdmFyIHByb21pc2UgPSBuZXcgSW50ZXJuYWwoKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFByb21pc2VTdGF0ZShwcm9taXNlKTtcbiAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlO1xuICAgIHRoaXMucmVzb2x2ZSA9IGJpbmQoaW50ZXJuYWxSZXNvbHZlLCBzdGF0ZSk7XG4gICAgdGhpcy5yZWplY3QgPSBiaW5kKGludGVybmFsUmVqZWN0LCBzdGF0ZSk7XG4gIH07XG5cbiAgbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZiA9IG5ld1Byb21pc2VDYXBhYmlsaXR5ID0gZnVuY3Rpb24gKEMpIHtcbiAgICByZXR1cm4gQyA9PT0gUHJvbWlzZUNvbnN0cnVjdG9yIHx8IEMgPT09IFByb21pc2VXcmFwcGVyXG4gICAgICA/IG5ldyBPd25Qcm9taXNlQ2FwYWJpbGl0eShDKVxuICAgICAgOiBuZXdHZW5lcmljUHJvbWlzZUNhcGFiaWxpdHkoQyk7XG4gIH07XG5cbiAgaWYgKCFJU19QVVJFICYmIGlzQ2FsbGFibGUoTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yKSAmJiBOYXRpdmVQcm9taXNlUHJvdG90eXBlICE9PSBPYmplY3QucHJvdG90eXBlKSB7XG4gICAgbmF0aXZlVGhlbiA9IE5hdGl2ZVByb21pc2VQcm90b3R5cGUudGhlbjtcblxuICAgIGlmICghTkFUSVZFX1BST01JU0VfU1VCQ0xBU1NJTkcpIHtcbiAgICAgIC8vIG1ha2UgYFByb21pc2UjdGhlbmAgcmV0dXJuIGEgcG9seWZpbGxlZCBgUHJvbWlzZWAgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICAgIGRlZmluZUJ1aWx0SW4oTmF0aXZlUHJvbWlzZVByb3RvdHlwZSwgJ3RoZW4nLCBmdW5jdGlvbiB0aGVuKG9uRnVsZmlsbGVkLCBvblJlamVjdGVkKSB7XG4gICAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlQ29uc3RydWN0b3IoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgIGNhbGwobmF0aXZlVGhlbiwgdGhhdCwgcmVzb2x2ZSwgcmVqZWN0KTtcbiAgICAgICAgfSkudGhlbihvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCk7XG4gICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvNjQwXG4gICAgICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICAvLyBtYWtlIGAuY29uc3RydWN0b3IgPT09IFByb21pc2VgIHdvcmsgZm9yIG5hdGl2ZSBwcm9taXNlLWJhc2VkIEFQSXNcbiAgICB0cnkge1xuICAgICAgZGVsZXRlIE5hdGl2ZVByb21pc2VQcm90b3R5cGUuY29uc3RydWN0b3I7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHsgLyogZW1wdHkgKi8gfVxuXG4gICAgLy8gbWFrZSBgaW5zdGFuY2VvZiBQcm9taXNlYCB3b3JrIGZvciBuYXRpdmUgcHJvbWlzZS1iYXNlZCBBUElzXG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICBzZXRQcm90b3R5cGVPZihOYXRpdmVQcm9taXNlUHJvdG90eXBlLCBQcm9taXNlUHJvdG90eXBlKTtcbiAgICB9XG4gIH1cbn1cblxuJCh7IGdsb2JhbDogdHJ1ZSwgY29uc3RydWN0b3I6IHRydWUsIHdyYXA6IHRydWUsIGZvcmNlZDogRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgfSwge1xuICBQcm9taXNlOiBQcm9taXNlQ29uc3RydWN0b3Jcbn0pO1xuXG5zZXRUb1N0cmluZ1RhZyhQcm9taXNlQ29uc3RydWN0b3IsIFBST01JU0UsIGZhbHNlLCB0cnVlKTtcbnNldFNwZWNpZXMoUFJPTUlTRSk7XG4iLCIvLyBUT0RPOiBSZW1vdmUgdGhpcyBtb2R1bGUgZnJvbSBgY29yZS1qc0A0YCBzaW5jZSBpdCdzIHNwbGl0IHRvIG1vZHVsZXMgbGlzdGVkIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnByb21pc2UuY29uc3RydWN0b3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5hbGwnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5jYXRjaCcpO1xucmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5wcm9taXNlLnJhY2UnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZWplY3QnKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucHJvbWlzZS5yZXNvbHZlJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBhQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYS1jYWxsYWJsZScpO1xudmFyIG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25ldy1wcm9taXNlLWNhcGFiaWxpdHknKTtcbnZhciBwZXJmb3JtID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3BlcmZvcm0nKTtcbnZhciBpdGVyYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2l0ZXJhdGUnKTtcbnZhciBQUk9NSVNFX1NUQVRJQ1NfSU5DT1JSRUNUX0lURVJBVElPTiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXN0YXRpY3MtaW5jb3JyZWN0LWl0ZXJhdGlvbicpO1xuXG4vLyBgUHJvbWlzZS5yYWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yYWNlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogUFJPTUlTRV9TVEFUSUNTX0lOQ09SUkVDVF9JVEVSQVRJT04gfSwge1xuICByYWNlOiBmdW5jdGlvbiByYWNlKGl0ZXJhYmxlKSB7XG4gICAgdmFyIEMgPSB0aGlzO1xuICAgIHZhciBjYXBhYmlsaXR5ID0gbmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUuZihDKTtcbiAgICB2YXIgcmVqZWN0ID0gY2FwYWJpbGl0eS5yZWplY3Q7XG4gICAgdmFyIHJlc3VsdCA9IHBlcmZvcm0oZnVuY3Rpb24gKCkge1xuICAgICAgdmFyICRwcm9taXNlUmVzb2x2ZSA9IGFDYWxsYWJsZShDLnJlc29sdmUpO1xuICAgICAgaXRlcmF0ZShpdGVyYWJsZSwgZnVuY3Rpb24gKHByb21pc2UpIHtcbiAgICAgICAgY2FsbCgkcHJvbWlzZVJlc29sdmUsIEMsIHByb21pc2UpLnRoZW4oY2FwYWJpbGl0eS5yZXNvbHZlLCByZWplY3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5lcnJvcikgcmVqZWN0KHJlc3VsdC52YWx1ZSk7XG4gICAgcmV0dXJuIGNhcGFiaWxpdHkucHJvbWlzZTtcbiAgfVxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBuZXdQcm9taXNlQ2FwYWJpbGl0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9uZXctcHJvbWlzZS1jYXBhYmlsaXR5Jyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcblxuLy8gYFByb21pc2UucmVqZWN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZWplY3RcbiQoeyB0YXJnZXQ6ICdQcm9taXNlJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlamVjdDogZnVuY3Rpb24gcmVqZWN0KHIpIHtcbiAgICB2YXIgY2FwYWJpbGl0eSA9IG5ld1Byb21pc2VDYXBhYmlsaXR5TW9kdWxlLmYodGhpcyk7XG4gICAgY2FsbChjYXBhYmlsaXR5LnJlamVjdCwgdW5kZWZpbmVkLCByKTtcbiAgICByZXR1cm4gY2FwYWJpbGl0eS5wcm9taXNlO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdldEJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2V0LWJ1aWx0LWluJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgTmF0aXZlUHJvbWlzZUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3Byb21pc2UtbmF0aXZlLWNvbnN0cnVjdG9yJyk7XG52YXIgRk9SQ0VEX1BST01JU0VfQ09OU1RSVUNUT1IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcHJvbWlzZS1jb25zdHJ1Y3Rvci1kZXRlY3Rpb24nKS5DT05TVFJVQ1RPUjtcbnZhciBwcm9taXNlUmVzb2x2ZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9wcm9taXNlLXJlc29sdmUnKTtcblxudmFyIFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPSBnZXRCdWlsdEluKCdQcm9taXNlJyk7XG52YXIgQ0hFQ0tfV1JBUFBFUiA9IElTX1BVUkUgJiYgIUZPUkNFRF9QUk9NSVNFX0NPTlNUUlVDVE9SO1xuXG4vLyBgUHJvbWlzZS5yZXNvbHZlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvbWlzZS5yZXNvbHZlXG4kKHsgdGFyZ2V0OiAnUHJvbWlzZScsIHN0YXQ6IHRydWUsIGZvcmNlZDogSVNfUFVSRSB8fCBGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiB9LCB7XG4gIHJlc29sdmU6IGZ1bmN0aW9uIHJlc29sdmUoeCkge1xuICAgIHJldHVybiBwcm9taXNlUmVzb2x2ZShDSEVDS19XUkFQUEVSICYmIHRoaXMgPT09IFByb21pc2VDb25zdHJ1Y3RvcldyYXBwZXIgPyBOYXRpdmVQcm9taXNlQ29uc3RydWN0b3IgOiB0aGlzLCB4KTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgYmluZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1iaW5kJyk7XG52YXIgYUNvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2EtY29uc3RydWN0b3InKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBuYXRpdmVDb25zdHJ1Y3QgPSBnZXRCdWlsdEluKCdSZWZsZWN0JywgJ2NvbnN0cnVjdCcpO1xudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdC5wcm90b3R5cGU7XG52YXIgcHVzaCA9IFtdLnB1c2g7XG5cbi8vIGBSZWZsZWN0LmNvbnN0cnVjdGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZmxlY3QuY29uc3RydWN0XG4vLyBNUyBFZGdlIHN1cHBvcnRzIG9ubHkgMiBhcmd1bWVudHMgYW5kIGFyZ3VtZW50c0xpc3QgYXJndW1lbnQgaXMgb3B0aW9uYWxcbi8vIEZGIE5pZ2h0bHkgc2V0cyB0aGlyZCBhcmd1bWVudCBhcyBgbmV3LnRhcmdldGAsIGJ1dCBkb2VzIG5vdCBjcmVhdGUgYHRoaXNgIGZyb20gaXRcbnZhciBORVdfVEFSR0VUX0JVRyA9IGZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgZnVuY3Rpb24gRigpIHsgLyogZW1wdHkgKi8gfVxuICByZXR1cm4gIShuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9LCBbXSwgRikgaW5zdGFuY2VvZiBGKTtcbn0pO1xuXG52YXIgQVJHU19CVUcgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICBuYXRpdmVDb25zdHJ1Y3QoZnVuY3Rpb24gKCkgeyAvKiBlbXB0eSAqLyB9KTtcbn0pO1xuXG52YXIgRk9SQ0VEID0gTkVXX1RBUkdFVF9CVUcgfHwgQVJHU19CVUc7XG5cbiQoeyB0YXJnZXQ6ICdSZWZsZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiBGT1JDRUQsIHNoYW06IEZPUkNFRCB9LCB7XG4gIGNvbnN0cnVjdDogZnVuY3Rpb24gY29uc3RydWN0KFRhcmdldCwgYXJncyAvKiAsIG5ld1RhcmdldCAqLykge1xuICAgIGFDb25zdHJ1Y3RvcihUYXJnZXQpO1xuICAgIGFuT2JqZWN0KGFyZ3MpO1xuICAgIHZhciBuZXdUYXJnZXQgPSBhcmd1bWVudHMubGVuZ3RoIDwgMyA/IFRhcmdldCA6IGFDb25zdHJ1Y3Rvcihhcmd1bWVudHNbMl0pO1xuICAgIGlmIChBUkdTX0JVRyAmJiAhTkVXX1RBUkdFVF9CVUcpIHJldHVybiBuYXRpdmVDb25zdHJ1Y3QoVGFyZ2V0LCBhcmdzLCBuZXdUYXJnZXQpO1xuICAgIGlmIChUYXJnZXQgPT0gbmV3VGFyZ2V0KSB7XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIG9wdGltaXphdGlvbiBmb3IgMC00IGFyZ3VtZW50c1xuICAgICAgc3dpdGNoIChhcmdzLmxlbmd0aCkge1xuICAgICAgICBjYXNlIDA6IHJldHVybiBuZXcgVGFyZ2V0KCk7XG4gICAgICAgIGNhc2UgMTogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSk7XG4gICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAgIGNhc2UgMzogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSk7XG4gICAgICAgIGNhc2UgNDogcmV0dXJuIG5ldyBUYXJnZXQoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSk7XG4gICAgICB9XG4gICAgICAvLyB3L28gYWx0ZXJlZCBuZXdUYXJnZXQsIGxvdCBvZiBhcmd1bWVudHMgY2FzZVxuICAgICAgdmFyICRhcmdzID0gW251bGxdO1xuICAgICAgYXBwbHkocHVzaCwgJGFyZ3MsIGFyZ3MpO1xuICAgICAgcmV0dXJuIG5ldyAoYXBwbHkoYmluZCwgVGFyZ2V0LCAkYXJncykpKCk7XG4gICAgfVxuICAgIC8vIHdpdGggYWx0ZXJlZCBuZXdUYXJnZXQsIG5vdCBzdXBwb3J0IGJ1aWx0LWluIGNvbnN0cnVjdG9yc1xuICAgIHZhciBwcm90byA9IG5ld1RhcmdldC5wcm90b3R5cGU7XG4gICAgdmFyIGluc3RhbmNlID0gY3JlYXRlKGlzT2JqZWN0KHByb3RvKSA/IHByb3RvIDogT2JqZWN0UHJvdG90eXBlKTtcbiAgICB2YXIgcmVzdWx0ID0gYXBwbHkoVGFyZ2V0LCBpbnN0YW5jZSwgYXJncyk7XG4gICAgcmV0dXJuIGlzT2JqZWN0KHJlc3VsdCkgPyByZXN1bHQgOiBpbnN0YW5jZTtcbiAgfVxufSk7XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciBpc0RhdGFEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWRhdGEtZGVzY3JpcHRvcicpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgZ2V0UHJvdG90eXBlT2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWdldC1wcm90b3R5cGUtb2YnKTtcblxuLy8gYFJlZmxlY3QuZ2V0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVmbGVjdC5nZXRcbmZ1bmN0aW9uIGdldCh0YXJnZXQsIHByb3BlcnR5S2V5IC8qICwgcmVjZWl2ZXIgKi8pIHtcbiAgdmFyIHJlY2VpdmVyID0gYXJndW1lbnRzLmxlbmd0aCA8IDMgPyB0YXJnZXQgOiBhcmd1bWVudHNbMl07XG4gIHZhciBkZXNjcmlwdG9yLCBwcm90b3R5cGU7XG4gIGlmIChhbk9iamVjdCh0YXJnZXQpID09PSByZWNlaXZlcikgcmV0dXJuIHRhcmdldFtwcm9wZXJ0eUtleV07XG4gIGRlc2NyaXB0b3IgPSBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZih0YXJnZXQsIHByb3BlcnR5S2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IpIHJldHVybiBpc0RhdGFEZXNjcmlwdG9yKGRlc2NyaXB0b3IpXG4gICAgPyBkZXNjcmlwdG9yLnZhbHVlXG4gICAgOiBkZXNjcmlwdG9yLmdldCA9PT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogY2FsbChkZXNjcmlwdG9yLmdldCwgcmVjZWl2ZXIpO1xuICBpZiAoaXNPYmplY3QocHJvdG90eXBlID0gZ2V0UHJvdG90eXBlT2YodGFyZ2V0KSkpIHJldHVybiBnZXQocHJvdG90eXBlLCBwcm9wZXJ0eUtleSwgcmVjZWl2ZXIpO1xufVxuXG4kKHsgdGFyZ2V0OiAnUmVmbGVjdCcsIHN0YXQ6IHRydWUgfSwge1xuICBnZXQ6IGdldFxufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBleGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjJyk7XG5cbi8vIGBSZWdFeHAucHJvdG90eXBlLmV4ZWNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1yZWdleHAucHJvdG90eXBlLmV4ZWNcbiQoeyB0YXJnZXQ6ICdSZWdFeHAnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAvLi8uZXhlYyAhPT0gZXhlYyB9LCB7XG4gIGV4ZWM6IGV4ZWNcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogUmVtb3ZlIGZyb20gYGNvcmUtanNANGAgc2luY2UgaXQncyBtb3ZlZCB0byBlbnRyeSBwb2ludHNcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMucmVnZXhwLmV4ZWMnKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1vYmplY3QnKTtcblxudmFyIERFTEVHQVRFU19UT19FWEVDID0gZnVuY3Rpb24gKCkge1xuICB2YXIgZXhlY0NhbGxlZCA9IGZhbHNlO1xuICB2YXIgcmUgPSAvW2FjXS87XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7XG4gICAgZXhlY0NhbGxlZCA9IHRydWU7XG4gICAgcmV0dXJuIC8uLy5leGVjLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gIH07XG4gIHJldHVybiByZS50ZXN0KCdhYmMnKSA9PT0gdHJ1ZSAmJiBleGVjQ2FsbGVkO1xufSgpO1xuXG52YXIgJFR5cGVFcnJvciA9IFR5cGVFcnJvcjtcbnZhciB1biRUZXN0ID0gdW5jdXJyeVRoaXMoLy4vLnRlc3QpO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50ZXN0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS50ZXN0XG4kKHsgdGFyZ2V0OiAnUmVnRXhwJywgcHJvdG86IHRydWUsIGZvcmNlZDogIURFTEVHQVRFU19UT19FWEVDIH0sIHtcbiAgdGVzdDogZnVuY3Rpb24gKHN0cikge1xuICAgIHZhciBleGVjID0gdGhpcy5leGVjO1xuICAgIGlmICghaXNDYWxsYWJsZShleGVjKSkgcmV0dXJuIHVuJFRlc3QodGhpcywgc3RyKTtcbiAgICB2YXIgcmVzdWx0ID0gY2FsbChleGVjLCB0aGlzLCBzdHIpO1xuICAgIGlmIChyZXN1bHQgIT09IG51bGwgJiYgIWlzT2JqZWN0KHJlc3VsdCkpIHtcbiAgICAgIHRocm93IG5ldyAkVHlwZUVycm9yKCdSZWdFeHAgZXhlYyBtZXRob2QgcmV0dXJuZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gT2JqZWN0IG9yIG51bGwnKTtcbiAgICB9XG4gICAgcmV0dXJuICEhcmVzdWx0O1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBQUk9QRVJfRlVOQ1RJT05fTkFNRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1uYW1lJykuUFJPUEVSO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgJHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgZ2V0UmVnRXhwRmxhZ3MgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLWdldC1mbGFncycpO1xuXG52YXIgVE9fU1RSSU5HID0gJ3RvU3RyaW5nJztcbnZhciBSZWdFeHBQcm90b3R5cGUgPSBSZWdFeHAucHJvdG90eXBlO1xudmFyIG4kVG9TdHJpbmcgPSBSZWdFeHBQcm90b3R5cGVbVE9fU1RSSU5HXTtcblxudmFyIE5PVF9HRU5FUklDID0gZmFpbHMoZnVuY3Rpb24gKCkgeyByZXR1cm4gbiRUb1N0cmluZy5jYWxsKHsgc291cmNlOiAnYScsIGZsYWdzOiAnYicgfSkgIT0gJy9hL2InOyB9KTtcbi8vIEZGNDQtIFJlZ0V4cCN0b1N0cmluZyBoYXMgYSB3cm9uZyBuYW1lXG52YXIgSU5DT1JSRUNUX05BTUUgPSBQUk9QRVJfRlVOQ1RJT05fTkFNRSAmJiBuJFRvU3RyaW5nLm5hbWUgIT0gVE9fU1RSSU5HO1xuXG4vLyBgUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZ2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUudG9zdHJpbmdcbmlmIChOT1RfR0VORVJJQyB8fCBJTkNPUlJFQ1RfTkFNRSkge1xuICBkZWZpbmVCdWlsdEluKFJlZ0V4cC5wcm90b3R5cGUsIFRPX1NUUklORywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gICAgdmFyIFIgPSBhbk9iamVjdCh0aGlzKTtcbiAgICB2YXIgcGF0dGVybiA9ICR0b1N0cmluZyhSLnNvdXJjZSk7XG4gICAgdmFyIGZsYWdzID0gJHRvU3RyaW5nKGdldFJlZ0V4cEZsYWdzKFIpKTtcbiAgICByZXR1cm4gJy8nICsgcGF0dGVybiArICcvJyArIGZsYWdzO1xuICB9LCB7IHVuc2FmZTogdHJ1ZSB9KTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tc3RyaW5nLXByb3RvdHlwZS1lbmRzd2l0aCAtLSBzYWZlXG52YXIgdW4kRW5kc1dpdGggPSB1bmN1cnJ5VGhpcygnJy5lbmRzV2l0aCk7XG52YXIgc2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdlbmRzV2l0aCcpO1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvcHVsbC83MDJcbnZhciBNRE5fUE9MWUZJTExfQlVHID0gIUlTX1BVUkUgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDICYmICEhZnVuY3Rpb24gKCkge1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihTdHJpbmcucHJvdG90eXBlLCAnZW5kc1dpdGgnKTtcbiAgcmV0dXJuIGRlc2NyaXB0b3IgJiYgIWRlc2NyaXB0b3Iud3JpdGFibGU7XG59KCk7XG5cbi8vIGBTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5lbmRzd2l0aFxuJCh7IHRhcmdldDogJ1N0cmluZycsIHByb3RvOiB0cnVlLCBmb3JjZWQ6ICFNRE5fUE9MWUZJTExfQlVHICYmICFDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyB9LCB7XG4gIGVuZHNXaXRoOiBmdW5jdGlvbiBlbmRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBlbmRQb3NpdGlvbiA9IEBsZW5ndGggKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgZW5kUG9zaXRpb24gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZDtcbiAgICB2YXIgbGVuID0gdGhhdC5sZW5ndGg7XG4gICAgdmFyIGVuZCA9IGVuZFBvc2l0aW9uID09PSB1bmRlZmluZWQgPyBsZW4gOiBtaW4odG9MZW5ndGgoZW5kUG9zaXRpb24pLCBsZW4pO1xuICAgIHZhciBzZWFyY2ggPSB0b1N0cmluZyhzZWFyY2hTdHJpbmcpO1xuICAgIHJldHVybiB1biRFbmRzV2l0aFxuICAgICAgPyB1biRFbmRzV2l0aCh0aGF0LCBzZWFyY2gsIGVuZClcbiAgICAgIDogc2xpY2UodGhhdCwgZW5kIC0gc2VhcmNoLmxlbmd0aCwgZW5kKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIG5vdEFSZWdFeHAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbm90LWEtcmVnZXhwJyk7XG52YXIgcmVxdWlyZU9iamVjdENvZXJjaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZXF1aXJlLW9iamVjdC1jb2VyY2libGUnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjb3JyZWN0SXNSZWdFeHBMb2dpYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jb3JyZWN0LWlzLXJlZ2V4cC1sb2dpYycpO1xuXG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5pbmNsdWRlc2AgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXNcbiQoeyB0YXJnZXQ6ICdTdHJpbmcnLCBwcm90bzogdHJ1ZSwgZm9yY2VkOiAhY29ycmVjdElzUmVnRXhwTG9naWMoJ2luY2x1ZGVzJykgfSwge1xuICBpbmNsdWRlczogZnVuY3Rpb24gaW5jbHVkZXMoc2VhcmNoU3RyaW5nIC8qICwgcG9zaXRpb24gPSAwICovKSB7XG4gICAgcmV0dXJuICEhfnN0cmluZ0luZGV4T2YoXG4gICAgICB0b1N0cmluZyhyZXF1aXJlT2JqZWN0Q29lcmNpYmxlKHRoaXMpKSxcbiAgICAgIHRvU3RyaW5nKG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKSksXG4gICAgICBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZFxuICAgICk7XG4gIH1cbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGNoYXJBdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zdHJpbmctbXVsdGlieXRlJykuY2hhckF0O1xudmFyIHRvU3RyaW5nID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLXN0cmluZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciBkZWZpbmVJdGVyYXRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtaXRlcmF0b3InKTtcblxudmFyIFNUUklOR19JVEVSQVRPUiA9ICdTdHJpbmcgSXRlcmF0b3InO1xudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1RSSU5HX0lURVJBVE9SKTtcblxuLy8gYFN0cmluZy5wcm90b3R5cGVbQEBpdGVyYXRvcl1gIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zdHJpbmcucHJvdG90eXBlLUBAaXRlcmF0b3JcbmRlZmluZUl0ZXJhdG9yKFN0cmluZywgJ1N0cmluZycsIGZ1bmN0aW9uIChpdGVyYXRlZCkge1xuICBzZXRJbnRlcm5hbFN0YXRlKHRoaXMsIHtcbiAgICB0eXBlOiBTVFJJTkdfSVRFUkFUT1IsXG4gICAgc3RyaW5nOiB0b1N0cmluZyhpdGVyYXRlZCksXG4gICAgaW5kZXg6IDBcbiAgfSk7XG4vLyBgJVN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlJS5uZXh0YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXN0cmluZ2l0ZXJhdG9ycHJvdG90eXBlJS5uZXh0XG59LCBmdW5jdGlvbiBuZXh0KCkge1xuICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICB2YXIgc3RyaW5nID0gc3RhdGUuc3RyaW5nO1xuICB2YXIgaW5kZXggPSBzdGF0ZS5pbmRleDtcbiAgdmFyIHBvaW50O1xuICBpZiAoaW5kZXggPj0gc3RyaW5nLmxlbmd0aCkgcmV0dXJuIHsgdmFsdWU6IHVuZGVmaW5lZCwgZG9uZTogdHJ1ZSB9O1xuICBwb2ludCA9IGNoYXJBdChzdHJpbmcsIGluZGV4KTtcbiAgc3RhdGUuaW5kZXggKz0gcG9pbnQubGVuZ3RoO1xuICByZXR1cm4geyB2YWx1ZTogcG9pbnQsIGRvbmU6IGZhbHNlIH07XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciB0b0ludGVnZXJPckluZmluaXR5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWludGVnZXItb3ItaW5maW5pdHknKTtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIGFkdmFuY2VTdHJpbmdJbmRleCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hZHZhbmNlLXN0cmluZy1pbmRleCcpO1xudmFyIGdldE1ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nZXQtbWV0aG9kJyk7XG52YXIgZ2V0U3Vic3RpdHV0aW9uID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1zdWJzdGl0dXRpb24nKTtcbnZhciByZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBSRVBMQUNFID0gd2VsbEtub3duU3ltYm9sKCdyZXBsYWNlJyk7XG52YXIgbWF4ID0gTWF0aC5tYXg7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgY29uY2F0ID0gdW5jdXJyeVRoaXMoW10uY29uY2F0KTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgc3RyaW5nSW5kZXhPZiA9IHVuY3VycnlUaGlzKCcnLmluZGV4T2YpO1xudmFyIHN0cmluZ1NsaWNlID0gdW5jdXJyeVRoaXMoJycuc2xpY2UpO1xuXG52YXIgbWF5YmVUb1N0cmluZyA9IGZ1bmN0aW9uIChpdCkge1xuICByZXR1cm4gaXQgPT09IHVuZGVmaW5lZCA/IGl0IDogU3RyaW5nKGl0KTtcbn07XG5cbi8vIElFIDw9IDExIHJlcGxhY2VzICQwIHdpdGggdGhlIHdob2xlIG1hdGNoLCBhcyBpZiBpdCB3YXMgJCZcbi8vIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzYwMjQ2NjYvZ2V0dGluZy1pZS10by1yZXBsYWNlLWEtcmVnZXgtd2l0aC10aGUtbGl0ZXJhbC1zdHJpbmctMFxudmFyIFJFUExBQ0VfS0VFUFNfJDAgPSAoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL3ByZWZlci1lc2NhcGUtcmVwbGFjZW1lbnQtZG9sbGFyLWNoYXIgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgcmV0dXJuICdhJy5yZXBsYWNlKC8uLywgJyQwJykgPT09ICckMCc7XG59KSgpO1xuXG4vLyBTYWZhcmkgPD0gMTMuMC4zKD8pIHN1YnN0aXR1dGVzIG50aCBjYXB0dXJlIHdoZXJlIG4+bSB3aXRoIGFuIGVtcHR5IHN0cmluZ1xudmFyIFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID0gKGZ1bmN0aW9uICgpIHtcbiAgaWYgKC8uL1tSRVBMQUNFXSkge1xuICAgIHJldHVybiAvLi9bUkVQTEFDRV0oJ2EnLCAnJDAnKSA9PT0gJyc7XG4gIH1cbiAgcmV0dXJuIGZhbHNlO1xufSkoKTtcblxudmFyIFJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgdmFyIHJlID0gLy4vO1xuICByZS5leGVjID0gZnVuY3Rpb24gKCkge1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICByZXN1bHQuZ3JvdXBzID0geyBhOiAnNycgfTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLXVzZWxlc3MtZG9sbGFyLXJlcGxhY2VtZW50cyAtLSBmYWxzZSBwb3NpdGl2ZVxuICByZXR1cm4gJycucmVwbGFjZShyZSwgJyQ8YT4nKSAhPT0gJzcnO1xufSk7XG5cbi8vIEBAcmVwbGFjZSBsb2dpY1xuZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMoJ3JlcGxhY2UnLCBmdW5jdGlvbiAoXywgbmF0aXZlUmVwbGFjZSwgbWF5YmVDYWxsTmF0aXZlKSB7XG4gIHZhciBVTlNBRkVfU1VCU1RJVFVURSA9IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFID8gJyQnIDogJyQwJztcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnJlcGxhY2VgIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlXG4gICAgZnVuY3Rpb24gcmVwbGFjZShzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgcmVwbGFjZXIgPSBzZWFyY2hWYWx1ZSA9PSB1bmRlZmluZWQgPyB1bmRlZmluZWQgOiBnZXRNZXRob2Qoc2VhcmNoVmFsdWUsIFJFUExBQ0UpO1xuICAgICAgcmV0dXJuIHJlcGxhY2VyXG4gICAgICAgID8gY2FsbChyZXBsYWNlciwgc2VhcmNoVmFsdWUsIE8sIHJlcGxhY2VWYWx1ZSlcbiAgICAgICAgOiBjYWxsKG5hdGl2ZVJlcGxhY2UsIHRvU3RyaW5nKE8pLCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAcmVwbGFjZV1gIG1ldGhvZFxuICAgIC8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcmVnZXhwLnByb3RvdHlwZS1AQHJlcGxhY2VcbiAgICBmdW5jdGlvbiAoc3RyaW5nLCByZXBsYWNlVmFsdWUpIHtcbiAgICAgIHZhciByeCA9IGFuT2JqZWN0KHRoaXMpO1xuICAgICAgdmFyIFMgPSB0b1N0cmluZyhzdHJpbmcpO1xuXG4gICAgICBpZiAoXG4gICAgICAgIHR5cGVvZiByZXBsYWNlVmFsdWUgPT0gJ3N0cmluZycgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsIFVOU0FGRV9TVUJTVElUVVRFKSA9PT0gLTEgJiZcbiAgICAgICAgc3RyaW5nSW5kZXhPZihyZXBsYWNlVmFsdWUsICckPCcpID09PSAtMVxuICAgICAgKSB7XG4gICAgICAgIHZhciByZXMgPSBtYXliZUNhbGxOYXRpdmUobmF0aXZlUmVwbGFjZSwgcngsIFMsIHJlcGxhY2VWYWx1ZSk7XG4gICAgICAgIGlmIChyZXMuZG9uZSkgcmV0dXJuIHJlcy52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdmFyIGZ1bmN0aW9uYWxSZXBsYWNlID0gaXNDYWxsYWJsZShyZXBsYWNlVmFsdWUpO1xuICAgICAgaWYgKCFmdW5jdGlvbmFsUmVwbGFjZSkgcmVwbGFjZVZhbHVlID0gdG9TdHJpbmcocmVwbGFjZVZhbHVlKTtcblxuICAgICAgdmFyIGdsb2JhbCA9IHJ4Lmdsb2JhbDtcbiAgICAgIGlmIChnbG9iYWwpIHtcbiAgICAgICAgdmFyIGZ1bGxVbmljb2RlID0gcngudW5pY29kZTtcbiAgICAgICAgcngubGFzdEluZGV4ID0gMDtcbiAgICAgIH1cbiAgICAgIHZhciByZXN1bHRzID0gW107XG4gICAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVnRXhwRXhlYyhyeCwgUyk7XG4gICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwpIGJyZWFrO1xuXG4gICAgICAgIHB1c2gocmVzdWx0cywgcmVzdWx0KTtcbiAgICAgICAgaWYgKCFnbG9iYWwpIGJyZWFrO1xuXG4gICAgICAgIHZhciBtYXRjaFN0ciA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIGlmIChtYXRjaFN0ciA9PT0gJycpIHJ4Lmxhc3RJbmRleCA9IGFkdmFuY2VTdHJpbmdJbmRleChTLCB0b0xlbmd0aChyeC5sYXN0SW5kZXgpLCBmdWxsVW5pY29kZSk7XG4gICAgICB9XG5cbiAgICAgIHZhciBhY2N1bXVsYXRlZFJlc3VsdCA9ICcnO1xuICAgICAgdmFyIG5leHRTb3VyY2VQb3NpdGlvbiA9IDA7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlc3VsdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgcmVzdWx0ID0gcmVzdWx0c1tpXTtcblxuICAgICAgICB2YXIgbWF0Y2hlZCA9IHRvU3RyaW5nKHJlc3VsdFswXSk7XG4gICAgICAgIHZhciBwb3NpdGlvbiA9IG1heChtaW4odG9JbnRlZ2VyT3JJbmZpbml0eShyZXN1bHQuaW5kZXgpLCBTLmxlbmd0aCksIDApO1xuICAgICAgICB2YXIgY2FwdHVyZXMgPSBbXTtcbiAgICAgICAgLy8gTk9URTogVGhpcyBpcyBlcXVpdmFsZW50IHRvXG4gICAgICAgIC8vICAgY2FwdHVyZXMgPSByZXN1bHQuc2xpY2UoMSkubWFwKG1heWJlVG9TdHJpbmcpXG4gICAgICAgIC8vIGJ1dCBmb3Igc29tZSByZWFzb24gYG5hdGl2ZVNsaWNlLmNhbGwocmVzdWx0LCAxLCByZXN1bHQubGVuZ3RoKWAgKGNhbGxlZCBpblxuICAgICAgICAvLyB0aGUgc2xpY2UgcG9seWZpbGwgd2hlbiBzbGljaW5nIG5hdGl2ZSBhcnJheXMpIFwiZG9lc24ndCB3b3JrXCIgaW4gc2FmYXJpIDkgYW5kXG4gICAgICAgIC8vIGNhdXNlcyBhIGNyYXNoIChodHRwczovL3Bhc3RlYmluLmNvbS9OMjFRemVRQSkgd2hlbiB0cnlpbmcgdG8gZGVidWcgaXQuXG4gICAgICAgIGZvciAodmFyIGogPSAxOyBqIDwgcmVzdWx0Lmxlbmd0aDsgaisrKSBwdXNoKGNhcHR1cmVzLCBtYXliZVRvU3RyaW5nKHJlc3VsdFtqXSkpO1xuICAgICAgICB2YXIgbmFtZWRDYXB0dXJlcyA9IHJlc3VsdC5ncm91cHM7XG4gICAgICAgIGlmIChmdW5jdGlvbmFsUmVwbGFjZSkge1xuICAgICAgICAgIHZhciByZXBsYWNlckFyZ3MgPSBjb25jYXQoW21hdGNoZWRdLCBjYXB0dXJlcywgcG9zaXRpb24sIFMpO1xuICAgICAgICAgIGlmIChuYW1lZENhcHR1cmVzICE9PSB1bmRlZmluZWQpIHB1c2gocmVwbGFjZXJBcmdzLCBuYW1lZENhcHR1cmVzKTtcbiAgICAgICAgICB2YXIgcmVwbGFjZW1lbnQgPSB0b1N0cmluZyhhcHBseShyZXBsYWNlVmFsdWUsIHVuZGVmaW5lZCwgcmVwbGFjZXJBcmdzKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVwbGFjZW1lbnQgPSBnZXRTdWJzdGl0dXRpb24obWF0Y2hlZCwgUywgcG9zaXRpb24sIGNhcHR1cmVzLCBuYW1lZENhcHR1cmVzLCByZXBsYWNlVmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwb3NpdGlvbiA+PSBuZXh0U291cmNlUG9zaXRpb24pIHtcbiAgICAgICAgICBhY2N1bXVsYXRlZFJlc3VsdCArPSBzdHJpbmdTbGljZShTLCBuZXh0U291cmNlUG9zaXRpb24sIHBvc2l0aW9uKSArIHJlcGxhY2VtZW50O1xuICAgICAgICAgIG5leHRTb3VyY2VQb3NpdGlvbiA9IHBvc2l0aW9uICsgbWF0Y2hlZC5sZW5ndGg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBhY2N1bXVsYXRlZFJlc3VsdCArIHN0cmluZ1NsaWNlKFMsIG5leHRTb3VyY2VQb3NpdGlvbik7XG4gICAgfVxuICBdO1xufSwgIVJFUExBQ0VfU1VQUE9SVFNfTkFNRURfR1JPVVBTIHx8ICFSRVBMQUNFX0tFRVBTXyQwIHx8IFJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBhcHBseSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1hcHBseScpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZpeFJlZ0V4cFdlbGxLbm93blN5bWJvbExvZ2ljID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZpeC1yZWdleHAtd2VsbC1rbm93bi1zeW1ib2wtbG9naWMnKTtcbnZhciBpc1JlZ0V4cCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1yZWdleHAnKTtcbnZhciBhbk9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hbi1vYmplY3QnKTtcbnZhciByZXF1aXJlT2JqZWN0Q29lcmNpYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlcXVpcmUtb2JqZWN0LWNvZXJjaWJsZScpO1xudmFyIHNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG52YXIgYWR2YW5jZVN0cmluZ0luZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FkdmFuY2Utc3RyaW5nLWluZGV4Jyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgZ2V0TWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1tZXRob2QnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlLXNpbXBsZScpO1xudmFyIGNhbGxSZWdFeHBFeGVjID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3JlZ2V4cC1leGVjLWFic3RyYWN0Jyk7XG52YXIgcmVnZXhwRXhlYyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9yZWdleHAtZXhlYycpO1xudmFyIHN0aWNreUhlbHBlcnMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVnZXhwLXN0aWNreS1oZWxwZXJzJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcblxudmFyIFVOU1VQUE9SVEVEX1kgPSBzdGlja3lIZWxwZXJzLlVOU1VQUE9SVEVEX1k7XG52YXIgTUFYX1VJTlQzMiA9IDB4RkZGRkZGRkY7XG52YXIgbWluID0gTWF0aC5taW47XG52YXIgJHB1c2ggPSBbXS5wdXNoO1xudmFyIGV4ZWMgPSB1bmN1cnJ5VGhpcygvLi8uZXhlYyk7XG52YXIgcHVzaCA9IHVuY3VycnlUaGlzKCRwdXNoKTtcbnZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuLy8gQ2hyb21lIDUxIGhhcyBhIGJ1Z2d5IFwic3BsaXRcIiBpbXBsZW1lbnRhdGlvbiB3aGVuIFJlZ0V4cCNleGVjICE9PSBuYXRpdmVFeGVjXG4vLyBXZWV4IEpTIGhhcyBmcm96ZW4gYnVpbHQtaW4gcHJvdG90eXBlcywgc28gdXNlIHRyeSAvIGNhdGNoIHdyYXBwZXJcbnZhciBTUExJVF9XT1JLU19XSVRIX09WRVJXUklUVEVOX0VYRUMgPSAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciByZSA9IC8oPzopLztcbiAgdmFyIG9yaWdpbmFsRXhlYyA9IHJlLmV4ZWM7XG4gIHJlLmV4ZWMgPSBmdW5jdGlvbiAoKSB7IHJldHVybiBvcmlnaW5hbEV4ZWMuYXBwbHkodGhpcywgYXJndW1lbnRzKTsgfTtcbiAgdmFyIHJlc3VsdCA9ICdhYicuc3BsaXQocmUpO1xuICByZXR1cm4gcmVzdWx0Lmxlbmd0aCAhPT0gMiB8fCByZXN1bHRbMF0gIT09ICdhJyB8fCByZXN1bHRbMV0gIT09ICdiJztcbn0pO1xuXG4vLyBAQHNwbGl0IGxvZ2ljXG5maXhSZWdFeHBXZWxsS25vd25TeW1ib2xMb2dpYygnc3BsaXQnLCBmdW5jdGlvbiAoU1BMSVQsIG5hdGl2ZVNwbGl0LCBtYXliZUNhbGxOYXRpdmUpIHtcbiAgdmFyIGludGVybmFsU3BsaXQ7XG4gIGlmIChcbiAgICAnYWJiYycuc3BsaXQoLyhiKSovKVsxXSA9PSAnYycgfHxcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcmVnZXhwL25vLWVtcHR5LWdyb3VwIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gICAgJ3Rlc3QnLnNwbGl0KC8oPzopLywgLTEpLmxlbmd0aCAhPSA0IHx8XG4gICAgJ2FiJy5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aCAhPSAyIHx8XG4gICAgJy4nLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aCAhPSA0IHx8XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHJlZ2V4cC9uby1lbXB0eS1jYXB0dXJpbmctZ3JvdXAsIHJlZ2V4cC9uby1lbXB0eS1ncm91cCAtLSByZXF1aXJlZCBmb3IgdGVzdGluZ1xuICAgICcuJy5zcGxpdCgvKCkoKS8pLmxlbmd0aCA+IDEgfHxcbiAgICAnJy5zcGxpdCgvLj8vKS5sZW5ndGhcbiAgKSB7XG4gICAgLy8gYmFzZWQgb24gZXM1LXNoaW0gaW1wbGVtZW50YXRpb24sIG5lZWQgdG8gcmV3b3JrIGl0XG4gICAgaW50ZXJuYWxTcGxpdCA9IGZ1bmN0aW9uIChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgc3RyaW5nID0gdG9TdHJpbmcocmVxdWlyZU9iamVjdENvZXJjaWJsZSh0aGlzKSk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCkgcmV0dXJuIFtzdHJpbmddO1xuICAgICAgLy8gSWYgYHNlcGFyYXRvcmAgaXMgbm90IGEgcmVnZXgsIHVzZSBuYXRpdmUgc3BsaXRcbiAgICAgIGlmICghaXNSZWdFeHAoc2VwYXJhdG9yKSkge1xuICAgICAgICByZXR1cm4gY2FsbChuYXRpdmVTcGxpdCwgc3RyaW5nLCBzZXBhcmF0b3IsIGxpbSk7XG4gICAgICB9XG4gICAgICB2YXIgb3V0cHV0ID0gW107XG4gICAgICB2YXIgZmxhZ3MgPSAoc2VwYXJhdG9yLmlnbm9yZUNhc2UgPyAnaScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHNlcGFyYXRvci51bmljb2RlID8gJ3UnIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChzZXBhcmF0b3Iuc3RpY2t5ID8gJ3knIDogJycpO1xuICAgICAgdmFyIGxhc3RMYXN0SW5kZXggPSAwO1xuICAgICAgLy8gTWFrZSBgZ2xvYmFsYCBhbmQgYXZvaWQgYGxhc3RJbmRleGAgaXNzdWVzIGJ5IHdvcmtpbmcgd2l0aCBhIGNvcHlcbiAgICAgIHZhciBzZXBhcmF0b3JDb3B5ID0gbmV3IFJlZ0V4cChzZXBhcmF0b3Iuc291cmNlLCBmbGFncyArICdnJyk7XG4gICAgICB2YXIgbWF0Y2gsIGxhc3RJbmRleCwgbGFzdExlbmd0aDtcbiAgICAgIHdoaWxlIChtYXRjaCA9IGNhbGwocmVnZXhwRXhlYywgc2VwYXJhdG9yQ29weSwgc3RyaW5nKSkge1xuICAgICAgICBsYXN0SW5kZXggPSBzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleDtcbiAgICAgICAgaWYgKGxhc3RJbmRleCA+IGxhc3RMYXN0SW5kZXgpIHtcbiAgICAgICAgICBwdXNoKG91dHB1dCwgc3RyaW5nU2xpY2Uoc3RyaW5nLCBsYXN0TGFzdEluZGV4LCBtYXRjaC5pbmRleCkpO1xuICAgICAgICAgIGlmIChtYXRjaC5sZW5ndGggPiAxICYmIG1hdGNoLmluZGV4IDwgc3RyaW5nLmxlbmd0aCkgYXBwbHkoJHB1c2gsIG91dHB1dCwgYXJyYXlTbGljZShtYXRjaCwgMSkpO1xuICAgICAgICAgIGxhc3RMZW5ndGggPSBtYXRjaFswXS5sZW5ndGg7XG4gICAgICAgICAgbGFzdExhc3RJbmRleCA9IGxhc3RJbmRleDtcbiAgICAgICAgICBpZiAob3V0cHV0Lmxlbmd0aCA+PSBsaW0pIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzZXBhcmF0b3JDb3B5Lmxhc3RJbmRleCA9PT0gbWF0Y2guaW5kZXgpIHNlcGFyYXRvckNvcHkubGFzdEluZGV4Kys7IC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3BcbiAgICAgIH1cbiAgICAgIGlmIChsYXN0TGFzdEluZGV4ID09PSBzdHJpbmcubGVuZ3RoKSB7XG4gICAgICAgIGlmIChsYXN0TGVuZ3RoIHx8ICFleGVjKHNlcGFyYXRvckNvcHksICcnKSkgcHVzaChvdXRwdXQsICcnKTtcbiAgICAgIH0gZWxzZSBwdXNoKG91dHB1dCwgc3RyaW5nU2xpY2Uoc3RyaW5nLCBsYXN0TGFzdEluZGV4KSk7XG4gICAgICByZXR1cm4gb3V0cHV0Lmxlbmd0aCA+IGxpbSA/IGFycmF5U2xpY2Uob3V0cHV0LCAwLCBsaW0pIDogb3V0cHV0O1xuICAgIH07XG4gIC8vIENoYWtyYSwgVjhcbiAgfSBlbHNlIGlmICgnMCcuc3BsaXQodW5kZWZpbmVkLCAwKS5sZW5ndGgpIHtcbiAgICBpbnRlcm5hbFNwbGl0ID0gZnVuY3Rpb24gKHNlcGFyYXRvciwgbGltaXQpIHtcbiAgICAgIHJldHVybiBzZXBhcmF0b3IgPT09IHVuZGVmaW5lZCAmJiBsaW1pdCA9PT0gMCA/IFtdIDogY2FsbChuYXRpdmVTcGxpdCwgdGhpcywgc2VwYXJhdG9yLCBsaW1pdCk7XG4gICAgfTtcbiAgfSBlbHNlIGludGVybmFsU3BsaXQgPSBuYXRpdmVTcGxpdDtcblxuICByZXR1cm4gW1xuICAgIC8vIGBTdHJpbmcucHJvdG90eXBlLnNwbGl0YCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN0cmluZy5wcm90b3R5cGUuc3BsaXRcbiAgICBmdW5jdGlvbiBzcGxpdChzZXBhcmF0b3IsIGxpbWl0KSB7XG4gICAgICB2YXIgTyA9IHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcyk7XG4gICAgICB2YXIgc3BsaXR0ZXIgPSBzZXBhcmF0b3IgPT0gdW5kZWZpbmVkID8gdW5kZWZpbmVkIDogZ2V0TWV0aG9kKHNlcGFyYXRvciwgU1BMSVQpO1xuICAgICAgcmV0dXJuIHNwbGl0dGVyXG4gICAgICAgID8gY2FsbChzcGxpdHRlciwgc2VwYXJhdG9yLCBPLCBsaW1pdClcbiAgICAgICAgOiBjYWxsKGludGVybmFsU3BsaXQsIHRvU3RyaW5nKE8pLCBzZXBhcmF0b3IsIGxpbWl0KTtcbiAgICB9LFxuICAgIC8vIGBSZWdFeHAucHJvdG90eXBlW0BAc3BsaXRdYCBtZXRob2RcbiAgICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXJlZ2V4cC5wcm90b3R5cGUtQEBzcGxpdFxuICAgIC8vXG4gICAgLy8gTk9URTogVGhpcyBjYW5ub3QgYmUgcHJvcGVybHkgcG9seWZpbGxlZCBpbiBlbmdpbmVzIHRoYXQgZG9uJ3Qgc3VwcG9ydFxuICAgIC8vIHRoZSAneScgZmxhZy5cbiAgICBmdW5jdGlvbiAoc3RyaW5nLCBsaW1pdCkge1xuICAgICAgdmFyIHJ4ID0gYW5PYmplY3QodGhpcyk7XG4gICAgICB2YXIgUyA9IHRvU3RyaW5nKHN0cmluZyk7XG4gICAgICB2YXIgcmVzID0gbWF5YmVDYWxsTmF0aXZlKGludGVybmFsU3BsaXQsIHJ4LCBTLCBsaW1pdCwgaW50ZXJuYWxTcGxpdCAhPT0gbmF0aXZlU3BsaXQpO1xuXG4gICAgICBpZiAocmVzLmRvbmUpIHJldHVybiByZXMudmFsdWU7XG5cbiAgICAgIHZhciBDID0gc3BlY2llc0NvbnN0cnVjdG9yKHJ4LCBSZWdFeHApO1xuXG4gICAgICB2YXIgdW5pY29kZU1hdGNoaW5nID0gcngudW5pY29kZTtcbiAgICAgIHZhciBmbGFncyA9IChyeC5pZ25vcmVDYXNlID8gJ2knIDogJycpICtcbiAgICAgICAgICAgICAgICAgIChyeC5tdWx0aWxpbmUgPyAnbScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKHJ4LnVuaWNvZGUgPyAndScgOiAnJykgK1xuICAgICAgICAgICAgICAgICAgKFVOU1VQUE9SVEVEX1kgPyAnZycgOiAneScpO1xuXG4gICAgICAvLyBeKD8gKyByeCArICkgaXMgbmVlZGVkLCBpbiBjb21iaW5hdGlvbiB3aXRoIHNvbWUgUyBzbGljaW5nLCB0b1xuICAgICAgLy8gc2ltdWxhdGUgdGhlICd5JyBmbGFnLlxuICAgICAgdmFyIHNwbGl0dGVyID0gbmV3IEMoVU5TVVBQT1JURURfWSA/ICdeKD86JyArIHJ4LnNvdXJjZSArICcpJyA6IHJ4LCBmbGFncyk7XG4gICAgICB2YXIgbGltID0gbGltaXQgPT09IHVuZGVmaW5lZCA/IE1BWF9VSU5UMzIgOiBsaW1pdCA+Pj4gMDtcbiAgICAgIGlmIChsaW0gPT09IDApIHJldHVybiBbXTtcbiAgICAgIGlmIChTLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBTKSA9PT0gbnVsbCA/IFtTXSA6IFtdO1xuICAgICAgdmFyIHAgPSAwO1xuICAgICAgdmFyIHEgPSAwO1xuICAgICAgdmFyIEEgPSBbXTtcbiAgICAgIHdoaWxlIChxIDwgUy5sZW5ndGgpIHtcbiAgICAgICAgc3BsaXR0ZXIubGFzdEluZGV4ID0gVU5TVVBQT1JURURfWSA/IDAgOiBxO1xuICAgICAgICB2YXIgeiA9IGNhbGxSZWdFeHBFeGVjKHNwbGl0dGVyLCBVTlNVUFBPUlRFRF9ZID8gc3RyaW5nU2xpY2UoUywgcSkgOiBTKTtcbiAgICAgICAgdmFyIGU7XG4gICAgICAgIGlmIChcbiAgICAgICAgICB6ID09PSBudWxsIHx8XG4gICAgICAgICAgKGUgPSBtaW4odG9MZW5ndGgoc3BsaXR0ZXIubGFzdEluZGV4ICsgKFVOU1VQUE9SVEVEX1kgPyBxIDogMCkpLCBTLmxlbmd0aCkpID09PSBwXG4gICAgICAgICkge1xuICAgICAgICAgIHEgPSBhZHZhbmNlU3RyaW5nSW5kZXgoUywgcSwgdW5pY29kZU1hdGNoaW5nKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBwdXNoKEEsIHN0cmluZ1NsaWNlKFMsIHAsIHEpKTtcbiAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gei5sZW5ndGggLSAxOyBpKyspIHtcbiAgICAgICAgICAgIHB1c2goQSwgeltpXSk7XG4gICAgICAgICAgICBpZiAoQS5sZW5ndGggPT09IGxpbSkgcmV0dXJuIEE7XG4gICAgICAgICAgfVxuICAgICAgICAgIHEgPSBwID0gZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcHVzaChBLCBzdHJpbmdTbGljZShTLCBwKSk7XG4gICAgICByZXR1cm4gQTtcbiAgICB9XG4gIF07XG59LCAhU1BMSVRfV09SS1NfV0lUSF9PVkVSV1JJVFRFTl9FWEVDLCBVTlNVUFBPUlRFRF9ZKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1kZXNjcmlwdG9yJykuZjtcbnZhciB0b0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1sZW5ndGgnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBub3RBUmVnRXhwID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25vdC1hLXJlZ2V4cCcpO1xudmFyIHJlcXVpcmVPYmplY3RDb2VyY2libGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvcmVxdWlyZS1vYmplY3QtY29lcmNpYmxlJyk7XG52YXIgY29ycmVjdElzUmVnRXhwTG9naWMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29ycmVjdC1pcy1yZWdleHAtbG9naWMnKTtcbnZhciBJU19QVVJFID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLXB1cmUnKTtcblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tc3RyaW5nLXByb3RvdHlwZS1zdGFydHN3aXRoIC0tIHNhZmVcbnZhciB1biRTdGFydHNXaXRoID0gdW5jdXJyeVRoaXMoJycuc3RhcnRzV2l0aCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG52YXIgbWluID0gTWF0aC5taW47XG5cbnZhciBDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyA9IGNvcnJlY3RJc1JlZ0V4cExvZ2ljKCdzdGFydHNXaXRoJyk7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9wdWxsLzcwMlxudmFyIE1ETl9QT0xZRklMTF9CVUcgPSAhSVNfUFVSRSAmJiAhQ09SUkVDVF9JU19SRUdFWFBfTE9HSUMgJiYgISFmdW5jdGlvbiAoKSB7XG4gIHZhciBkZXNjcmlwdG9yID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKFN0cmluZy5wcm90b3R5cGUsICdzdGFydHNXaXRoJyk7XG4gIHJldHVybiBkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLndyaXRhYmxlO1xufSgpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRoYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS5zdGFydHN3aXRoXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogIU1ETl9QT0xZRklMTF9CVUcgJiYgIUNPUlJFQ1RfSVNfUkVHRVhQX0xPR0lDIH0sIHtcbiAgc3RhcnRzV2l0aDogZnVuY3Rpb24gc3RhcnRzV2l0aChzZWFyY2hTdHJpbmcgLyogLCBwb3NpdGlvbiA9IDAgKi8pIHtcbiAgICB2YXIgdGhhdCA9IHRvU3RyaW5nKHJlcXVpcmVPYmplY3RDb2VyY2libGUodGhpcykpO1xuICAgIG5vdEFSZWdFeHAoc2VhcmNoU3RyaW5nKTtcbiAgICB2YXIgaW5kZXggPSB0b0xlbmd0aChtaW4oYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIHRoYXQubGVuZ3RoKSk7XG4gICAgdmFyIHNlYXJjaCA9IHRvU3RyaW5nKHNlYXJjaFN0cmluZyk7XG4gICAgcmV0dXJuIHVuJFN0YXJ0c1dpdGhcbiAgICAgID8gdW4kU3RhcnRzV2l0aCh0aGF0LCBzZWFyY2gsIGluZGV4KVxuICAgICAgOiBzdHJpbmdTbGljZSh0aGF0LCBpbmRleCwgaW5kZXggKyBzZWFyY2gubGVuZ3RoKSA9PT0gc2VhcmNoO1xuICB9XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyICR0cmltID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltJykudHJpbTtcbnZhciBmb3JjZWRTdHJpbmdUcmltTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3N0cmluZy10cmltLWZvcmNlZCcpO1xuXG4vLyBgU3RyaW5nLnByb3RvdHlwZS50cmltYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3RyaW5nLnByb3RvdHlwZS50cmltXG4kKHsgdGFyZ2V0OiAnU3RyaW5nJywgcHJvdG86IHRydWUsIGZvcmNlZDogZm9yY2VkU3RyaW5nVHJpbU1ldGhvZCgndHJpbScpIH0sIHtcbiAgdHJpbTogZnVuY3Rpb24gdHJpbSgpIHtcbiAgICByZXR1cm4gJHRyaW0odGhpcyk7XG4gIH1cbn0pO1xuIiwidmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcblxuLy8gYFN5bWJvbC5hc3luY0l0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuYXN5bmNpdGVyYXRvclxuZGVmaW5lV2VsbEtub3duU3ltYm9sKCdhc3luY0l0ZXJhdG9yJyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgY2FsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi1jYWxsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgSVNfUFVSRSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1wdXJlJyk7XG52YXIgREVTQ1JJUFRPUlMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVzY3JpcHRvcnMnKTtcbnZhciBOQVRJVkVfU1lNQk9MID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS1zeW1ib2wnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgaXNQcm90b3R5cGVPZiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtcHJvdG90eXBlLW9mJyk7XG52YXIgYW5PYmplY3QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4tb2JqZWN0Jyk7XG52YXIgdG9JbmRleGVkT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWluZGV4ZWQtb2JqZWN0Jyk7XG52YXIgdG9Qcm9wZXJ0eUtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1wcm9wZXJ0eS1rZXknKTtcbnZhciAkdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgY3JlYXRlUHJvcGVydHlEZXNjcmlwdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NyZWF0ZS1wcm9wZXJ0eS1kZXNjcmlwdG9yJyk7XG52YXIgbmF0aXZlT2JqZWN0Q3JlYXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1jcmVhdGUnKTtcbnZhciBvYmplY3RLZXlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1rZXlzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlOYW1lc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcycpO1xudmFyIGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1uYW1lcy1leHRlcm5hbCcpO1xudmFyIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZ2V0LW93bi1wcm9wZXJ0eS1zeW1ib2xzJyk7XG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1nZXQtb3duLXByb3BlcnR5LWRlc2NyaXB0b3InKTtcbnZhciBkZWZpbmVQcm9wZXJ0eU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5Jyk7XG52YXIgZGVmaW5lUHJvcGVydGllc01vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnRpZXMnKTtcbnZhciBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtcHJvcGVydHktaXMtZW51bWVyYWJsZScpO1xudmFyIGRlZmluZUJ1aWx0SW4gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLWJ1aWx0LWluJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIHNoYXJlZEtleSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zaGFyZWQta2V5Jyk7XG52YXIgaGlkZGVuS2V5cyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oaWRkZW4ta2V5cycpO1xudmFyIHVpZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy91aWQnKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sLXdyYXBwZWQnKTtcbnZhciBkZWZpbmVXZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZGVmaW5lLXdlbGwta25vd24tc3ltYm9sJyk7XG52YXIgZGVmaW5lU3ltYm9sVG9QcmltaXRpdmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvc3ltYm9sLWRlZmluZS10by1wcmltaXRpdmUnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIEludGVybmFsU3RhdGVNb2R1bGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaW50ZXJuYWwtc3RhdGUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgSElEREVOID0gc2hhcmVkS2V5KCdoaWRkZW4nKTtcbnZhciBTWU1CT0wgPSAnU3ltYm9sJztcbnZhciBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyIHNldEludGVybmFsU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLnNldDtcbnZhciBnZXRJbnRlcm5hbFN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoU1lNQk9MKTtcblxudmFyIE9iamVjdFByb3RvdHlwZSA9IE9iamVjdFtQUk9UT1RZUEVdO1xudmFyICRTeW1ib2wgPSBnbG9iYWwuU3ltYm9sO1xudmFyIFN5bWJvbFByb3RvdHlwZSA9ICRTeW1ib2wgJiYgJFN5bWJvbFtQUk9UT1RZUEVdO1xudmFyIFR5cGVFcnJvciA9IGdsb2JhbC5UeXBlRXJyb3I7XG52YXIgUU9iamVjdCA9IGdsb2JhbC5RT2JqZWN0O1xudmFyIG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvck1vZHVsZS5mO1xudmFyIG5hdGl2ZURlZmluZVByb3BlcnR5ID0gZGVmaW5lUHJvcGVydHlNb2R1bGUuZjtcbnZhciBuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzID0gZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsLmY7XG52YXIgbmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUgPSBwcm9wZXJ0eUlzRW51bWVyYWJsZU1vZHVsZS5mO1xudmFyIHB1c2ggPSB1bmN1cnJ5VGhpcyhbXS5wdXNoKTtcblxudmFyIEFsbFN5bWJvbHMgPSBzaGFyZWQoJ3N5bWJvbHMnKTtcbnZhciBPYmplY3RQcm90b3R5cGVTeW1ib2xzID0gc2hhcmVkKCdvcC1zeW1ib2xzJyk7XG52YXIgV2VsbEtub3duU3ltYm9sc1N0b3JlID0gc2hhcmVkKCd3a3MnKTtcblxuLy8gRG9uJ3QgdXNlIHNldHRlcnMgaW4gUXQgU2NyaXB0LCBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvMTczXG52YXIgVVNFX1NFVFRFUiA9ICFRT2JqZWN0IHx8ICFRT2JqZWN0W1BST1RPVFlQRV0gfHwgIVFPYmplY3RbUFJPVE9UWVBFXS5maW5kQ2hpbGQ7XG5cbi8vIGZhbGxiYWNrIGZvciBvbGQgQW5kcm9pZCwgaHR0cHM6Ly9jb2RlLmdvb2dsZS5jb20vcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTY4N1xudmFyIHNldFN5bWJvbERlc2NyaXB0b3IgPSBERVNDUklQVE9SUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBuYXRpdmVPYmplY3RDcmVhdGUobmF0aXZlRGVmaW5lUHJvcGVydHkoe30sICdhJywge1xuICAgIGdldDogZnVuY3Rpb24gKCkgeyByZXR1cm4gbmF0aXZlRGVmaW5lUHJvcGVydHkodGhpcywgJ2EnLCB7IHZhbHVlOiA3IH0pLmE7IH1cbiAgfSkpLmEgIT0gNztcbn0pID8gZnVuY3Rpb24gKE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgdmFyIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IgPSBuYXRpdmVHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0UHJvdG90eXBlLCBQKTtcbiAgaWYgKE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpIGRlbGV0ZSBPYmplY3RQcm90b3R5cGVbUF07XG4gIG5hdGl2ZURlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpO1xuICBpZiAoT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciAmJiBPICE9PSBPYmplY3RQcm90b3R5cGUpIHtcbiAgICBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPYmplY3RQcm90b3R5cGUsIFAsIE9iamVjdFByb3RvdHlwZURlc2NyaXB0b3IpO1xuICB9XG59IDogbmF0aXZlRGVmaW5lUHJvcGVydHk7XG5cbnZhciB3cmFwID0gZnVuY3Rpb24gKHRhZywgZGVzY3JpcHRpb24pIHtcbiAgdmFyIHN5bWJvbCA9IEFsbFN5bWJvbHNbdGFnXSA9IG5hdGl2ZU9iamVjdENyZWF0ZShTeW1ib2xQcm90b3R5cGUpO1xuICBzZXRJbnRlcm5hbFN0YXRlKHN5bWJvbCwge1xuICAgIHR5cGU6IFNZTUJPTCxcbiAgICB0YWc6IHRhZyxcbiAgICBkZXNjcmlwdGlvbjogZGVzY3JpcHRpb25cbiAgfSk7XG4gIGlmICghREVTQ1JJUFRPUlMpIHN5bWJvbC5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICByZXR1cm4gc3ltYm9sO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0eSA9IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpIHtcbiAgaWYgKE8gPT09IE9iamVjdFByb3RvdHlwZSkgJGRlZmluZVByb3BlcnR5KE9iamVjdFByb3RvdHlwZVN5bWJvbHMsIFAsIEF0dHJpYnV0ZXMpO1xuICBhbk9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGFuT2JqZWN0KEF0dHJpYnV0ZXMpO1xuICBpZiAoaGFzT3duKEFsbFN5bWJvbHMsIGtleSkpIHtcbiAgICBpZiAoIUF0dHJpYnV0ZXMuZW51bWVyYWJsZSkge1xuICAgICAgaWYgKCFoYXNPd24oTywgSElEREVOKSkgbmF0aXZlRGVmaW5lUHJvcGVydHkoTywgSElEREVOLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwge30pKTtcbiAgICAgIE9bSElEREVOXVtrZXldID0gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKGhhc093bihPLCBISURERU4pICYmIE9bSElEREVOXVtrZXldKSBPW0hJRERFTl1ba2V5XSA9IGZhbHNlO1xuICAgICAgQXR0cmlidXRlcyA9IG5hdGl2ZU9iamVjdENyZWF0ZShBdHRyaWJ1dGVzLCB7IGVudW1lcmFibGU6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBmYWxzZSkgfSk7XG4gICAgfSByZXR1cm4gc2V0U3ltYm9sRGVzY3JpcHRvcihPLCBrZXksIEF0dHJpYnV0ZXMpO1xuICB9IHJldHVybiBuYXRpdmVEZWZpbmVQcm9wZXJ0eShPLCBrZXksIEF0dHJpYnV0ZXMpO1xufTtcblxudmFyICRkZWZpbmVQcm9wZXJ0aWVzID0gZnVuY3Rpb24gZGVmaW5lUHJvcGVydGllcyhPLCBQcm9wZXJ0aWVzKSB7XG4gIGFuT2JqZWN0KE8pO1xuICB2YXIgcHJvcGVydGllcyA9IHRvSW5kZXhlZE9iamVjdChQcm9wZXJ0aWVzKTtcbiAgdmFyIGtleXMgPSBvYmplY3RLZXlzKHByb3BlcnRpZXMpLmNvbmNhdCgkZ2V0T3duUHJvcGVydHlTeW1ib2xzKHByb3BlcnRpZXMpKTtcbiAgJGZvckVhY2goa2V5cywgZnVuY3Rpb24gKGtleSkge1xuICAgIGlmICghREVTQ1JJUFRPUlMgfHwgY2FsbCgkcHJvcGVydHlJc0VudW1lcmFibGUsIHByb3BlcnRpZXMsIGtleSkpICRkZWZpbmVQcm9wZXJ0eShPLCBrZXksIHByb3BlcnRpZXNba2V5XSk7XG4gIH0pO1xuICByZXR1cm4gTztcbn07XG5cbnZhciAkY3JlYXRlID0gZnVuY3Rpb24gY3JlYXRlKE8sIFByb3BlcnRpZXMpIHtcbiAgcmV0dXJuIFByb3BlcnRpZXMgPT09IHVuZGVmaW5lZCA/IG5hdGl2ZU9iamVjdENyZWF0ZShPKSA6ICRkZWZpbmVQcm9wZXJ0aWVzKG5hdGl2ZU9iamVjdENyZWF0ZShPKSwgUHJvcGVydGllcyk7XG59O1xuXG52YXIgJHByb3BlcnR5SXNFbnVtZXJhYmxlID0gZnVuY3Rpb24gcHJvcGVydHlJc0VudW1lcmFibGUoVikge1xuICB2YXIgUCA9IHRvUHJvcGVydHlLZXkoVik7XG4gIHZhciBlbnVtZXJhYmxlID0gY2FsbChuYXRpdmVQcm9wZXJ0eUlzRW51bWVyYWJsZSwgdGhpcywgUCk7XG4gIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUgJiYgaGFzT3duKEFsbFN5bWJvbHMsIFApICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywgUCkpIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIGVudW1lcmFibGUgfHwgIWhhc093bih0aGlzLCBQKSB8fCAhaGFzT3duKEFsbFN5bWJvbHMsIFApIHx8IGhhc093bih0aGlzLCBISURERU4pICYmIHRoaXNbSElEREVOXVtQXVxuICAgID8gZW51bWVyYWJsZSA6IHRydWU7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5RGVzY3JpcHRvciA9IGZ1bmN0aW9uIGdldE93blByb3BlcnR5RGVzY3JpcHRvcihPLCBQKSB7XG4gIHZhciBpdCA9IHRvSW5kZXhlZE9iamVjdChPKTtcbiAgdmFyIGtleSA9IHRvUHJvcGVydHlLZXkoUCk7XG4gIGlmIChpdCA9PT0gT2JqZWN0UHJvdG90eXBlICYmIGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICFoYXNPd24oT2JqZWN0UHJvdG90eXBlU3ltYm9scywga2V5KSkgcmV0dXJuO1xuICB2YXIgZGVzY3JpcHRvciA9IG5hdGl2ZUdldE93blByb3BlcnR5RGVzY3JpcHRvcihpdCwga2V5KTtcbiAgaWYgKGRlc2NyaXB0b3IgJiYgaGFzT3duKEFsbFN5bWJvbHMsIGtleSkgJiYgIShoYXNPd24oaXQsIEhJRERFTikgJiYgaXRbSElEREVOXVtrZXldKSkge1xuICAgIGRlc2NyaXB0b3IuZW51bWVyYWJsZSA9IHRydWU7XG4gIH1cbiAgcmV0dXJuIGRlc2NyaXB0b3I7XG59O1xuXG52YXIgJGdldE93blByb3BlcnR5TmFtZXMgPSBmdW5jdGlvbiBnZXRPd25Qcm9wZXJ0eU5hbWVzKE8pIHtcbiAgdmFyIG5hbWVzID0gbmF0aXZlR2V0T3duUHJvcGVydHlOYW1lcyh0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKCFoYXNPd24oQWxsU3ltYm9scywga2V5KSAmJiAhaGFzT3duKGhpZGRlbktleXMsIGtleSkpIHB1c2gocmVzdWx0LCBrZXkpO1xuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbnZhciAkZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gZnVuY3Rpb24gKE8pIHtcbiAgdmFyIElTX09CSkVDVF9QUk9UT1RZUEUgPSBPID09PSBPYmplY3RQcm90b3R5cGU7XG4gIHZhciBuYW1lcyA9IG5hdGl2ZUdldE93blByb3BlcnR5TmFtZXMoSVNfT0JKRUNUX1BST1RPVFlQRSA/IE9iamVjdFByb3RvdHlwZVN5bWJvbHMgOiB0b0luZGV4ZWRPYmplY3QoTykpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gICRmb3JFYWNoKG5hbWVzLCBmdW5jdGlvbiAoa2V5KSB7XG4gICAgaWYgKGhhc093bihBbGxTeW1ib2xzLCBrZXkpICYmICghSVNfT0JKRUNUX1BST1RPVFlQRSB8fCBoYXNPd24oT2JqZWN0UHJvdG90eXBlLCBrZXkpKSkge1xuICAgICAgcHVzaChyZXN1bHQsIEFsbFN5bWJvbHNba2V5XSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbi8vIGBTeW1ib2xgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC1jb25zdHJ1Y3RvclxuaWYgKCFOQVRJVkVfU1lNQk9MKSB7XG4gICRTeW1ib2wgPSBmdW5jdGlvbiBTeW1ib2woKSB7XG4gICAgaWYgKGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKSkgdGhyb3cgVHlwZUVycm9yKCdTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3InKTtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSAhYXJndW1lbnRzLmxlbmd0aCB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6ICR0b1N0cmluZyhhcmd1bWVudHNbMF0pO1xuICAgIHZhciB0YWcgPSB1aWQoZGVzY3JpcHRpb24pO1xuICAgIHZhciBzZXR0ZXIgPSBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIGlmICh0aGlzID09PSBPYmplY3RQcm90b3R5cGUpIGNhbGwoc2V0dGVyLCBPYmplY3RQcm90b3R5cGVTeW1ib2xzLCB2YWx1ZSk7XG4gICAgICBpZiAoaGFzT3duKHRoaXMsIEhJRERFTikgJiYgaGFzT3duKHRoaXNbSElEREVOXSwgdGFnKSkgdGhpc1tISURERU5dW3RhZ10gPSBmYWxzZTtcbiAgICAgIHNldFN5bWJvbERlc2NyaXB0b3IodGhpcywgdGFnLCBjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IoMSwgdmFsdWUpKTtcbiAgICB9O1xuICAgIGlmIChERVNDUklQVE9SUyAmJiBVU0VfU0VUVEVSKSBzZXRTeW1ib2xEZXNjcmlwdG9yKE9iamVjdFByb3RvdHlwZSwgdGFnLCB7IGNvbmZpZ3VyYWJsZTogdHJ1ZSwgc2V0OiBzZXR0ZXIgfSk7XG4gICAgcmV0dXJuIHdyYXAodGFnLCBkZXNjcmlwdGlvbik7XG4gIH07XG5cbiAgU3ltYm9sUHJvdG90eXBlID0gJFN5bWJvbFtQUk9UT1RZUEVdO1xuXG4gIGRlZmluZUJ1aWx0SW4oU3ltYm9sUHJvdG90eXBlLCAndG9TdHJpbmcnLCBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS50YWc7XG4gIH0pO1xuXG4gIGRlZmluZUJ1aWx0SW4oJFN5bWJvbCwgJ3dpdGhvdXRTZXR0ZXInLCBmdW5jdGlvbiAoZGVzY3JpcHRpb24pIHtcbiAgICByZXR1cm4gd3JhcCh1aWQoZGVzY3JpcHRpb24pLCBkZXNjcmlwdGlvbik7XG4gIH0pO1xuXG4gIHByb3BlcnR5SXNFbnVtZXJhYmxlTW9kdWxlLmYgPSAkcHJvcGVydHlJc0VudW1lcmFibGU7XG4gIGRlZmluZVByb3BlcnR5TW9kdWxlLmYgPSAkZGVmaW5lUHJvcGVydHk7XG4gIGRlZmluZVByb3BlcnRpZXNNb2R1bGUuZiA9ICRkZWZpbmVQcm9wZXJ0aWVzO1xuICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JNb2R1bGUuZiA9ICRnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7XG4gIGdldE93blByb3BlcnR5TmFtZXNNb2R1bGUuZiA9IGdldE93blByb3BlcnR5TmFtZXNFeHRlcm5hbC5mID0gJGdldE93blByb3BlcnR5TmFtZXM7XG4gIGdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZS5mID0gJGdldE93blByb3BlcnR5U3ltYm9scztcblxuICB3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlLmYgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHJldHVybiB3cmFwKHdlbGxLbm93blN5bWJvbChuYW1lKSwgbmFtZSk7XG4gIH07XG5cbiAgaWYgKERFU0NSSVBUT1JTKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtU3ltYm9sLWRlc2NyaXB0aW9uXG4gICAgbmF0aXZlRGVmaW5lUHJvcGVydHkoU3ltYm9sUHJvdG90eXBlLCAnZGVzY3JpcHRpb24nLCB7XG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICBnZXQ6IGZ1bmN0aW9uIGRlc2NyaXB0aW9uKCkge1xuICAgICAgICByZXR1cm4gZ2V0SW50ZXJuYWxTdGF0ZSh0aGlzKS5kZXNjcmlwdGlvbjtcbiAgICAgIH1cbiAgICB9KTtcbiAgICBpZiAoIUlTX1BVUkUpIHtcbiAgICAgIGRlZmluZUJ1aWx0SW4oT2JqZWN0UHJvdG90eXBlLCAncHJvcGVydHlJc0VudW1lcmFibGUnLCAkcHJvcGVydHlJc0VudW1lcmFibGUsIHsgdW5zYWZlOiB0cnVlIH0pO1xuICAgIH1cbiAgfVxufVxuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgd3JhcDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIU5BVElWRV9TWU1CT0wgfSwge1xuICBTeW1ib2w6ICRTeW1ib2xcbn0pO1xuXG4kZm9yRWFjaChvYmplY3RLZXlzKFdlbGxLbm93blN5bWJvbHNTdG9yZSksIGZ1bmN0aW9uIChuYW1lKSB7XG4gIGRlZmluZVdlbGxLbm93blN5bWJvbChuYW1lKTtcbn0pO1xuXG4kKHsgdGFyZ2V0OiBTWU1CT0wsIHN0YXQ6IHRydWUsIGZvcmNlZDogIU5BVElWRV9TWU1CT0wgfSwge1xuICB1c2VTZXR0ZXI6IGZ1bmN0aW9uICgpIHsgVVNFX1NFVFRFUiA9IHRydWU7IH0sXG4gIHVzZVNpbXBsZTogZnVuY3Rpb24gKCkgeyBVU0VfU0VUVEVSID0gZmFsc2U7IH1cbn0pO1xuXG4kKHsgdGFyZ2V0OiAnT2JqZWN0Jywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTCwgc2hhbTogIURFU0NSSVBUT1JTIH0sIHtcbiAgLy8gYE9iamVjdC5jcmVhdGVgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5jcmVhdGVcbiAgY3JlYXRlOiAkY3JlYXRlLFxuICAvLyBgT2JqZWN0LmRlZmluZVByb3BlcnR5YCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydHlcbiAgZGVmaW5lUHJvcGVydHk6ICRkZWZpbmVQcm9wZXJ0eSxcbiAgLy8gYE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZGVmaW5lcHJvcGVydGllc1xuICBkZWZpbmVQcm9wZXJ0aWVzOiAkZGVmaW5lUHJvcGVydGllcyxcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JgIG1ldGhvZFxuICAvLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLW9iamVjdC5nZXRvd25wcm9wZXJ0eWRlc2NyaXB0b3JzXG4gIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogJGdldE93blByb3BlcnR5RGVzY3JpcHRvclxufSk7XG5cbiQoeyB0YXJnZXQ6ICdPYmplY3QnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MIH0sIHtcbiAgLy8gYE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1vYmplY3QuZ2V0b3ducHJvcGVydHluYW1lc1xuICBnZXRPd25Qcm9wZXJ0eU5hbWVzOiAkZ2V0T3duUHJvcGVydHlOYW1lc1xufSk7XG5cbi8vIGBTeW1ib2wucHJvdG90eXBlW0BAdG9QcmltaXRpdmVdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvcHJpbWl0aXZlXG5kZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSgpO1xuXG4vLyBgU3ltYm9sLnByb3RvdHlwZVtAQHRvU3RyaW5nVGFnXWAgcHJvcGVydHlcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtc3ltYm9sLnByb3RvdHlwZS1AQHRvc3RyaW5ndGFnXG5zZXRUb1N0cmluZ1RhZygkU3ltYm9sLCBTWU1CT0wpO1xuXG5oaWRkZW5LZXlzW0hJRERFTl0gPSB0cnVlO1xuIiwiLy8gYFN5bWJvbC5wcm90b3R5cGUuZGVzY3JpcHRpb25gIGdldHRlclxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wucHJvdG90eXBlLmRlc2NyaXB0aW9uXG4ndXNlIHN0cmljdCc7XG52YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBoYXNPd24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaGFzLW93bi1wcm9wZXJ0eScpO1xudmFyIGlzQ2FsbGFibGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvaXMtY2FsbGFibGUnKTtcbnZhciBpc1Byb3RvdHlwZU9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL29iamVjdC1pcy1wcm90b3R5cGUtb2YnKTtcbnZhciB0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBkZWZpbmVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtZGVmaW5lLXByb3BlcnR5JykuZjtcbnZhciBjb3B5Q29uc3RydWN0b3JQcm9wZXJ0aWVzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvcHktY29uc3RydWN0b3ItcHJvcGVydGllcycpO1xuXG52YXIgTmF0aXZlU3ltYm9sID0gZ2xvYmFsLlN5bWJvbDtcbnZhciBTeW1ib2xQcm90b3R5cGUgPSBOYXRpdmVTeW1ib2wgJiYgTmF0aXZlU3ltYm9sLnByb3RvdHlwZTtcblxuaWYgKERFU0NSSVBUT1JTICYmIGlzQ2FsbGFibGUoTmF0aXZlU3ltYm9sKSAmJiAoISgnZGVzY3JpcHRpb24nIGluIFN5bWJvbFByb3RvdHlwZSkgfHxcbiAgLy8gU2FmYXJpIDEyIGJ1Z1xuICBOYXRpdmVTeW1ib2woKS5kZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkXG4pKSB7XG4gIHZhciBFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUgPSB7fTtcbiAgLy8gd3JhcCBTeW1ib2wgY29uc3RydWN0b3IgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHVuZGVmaW5lZCBkZXNjcmlwdGlvblxuICB2YXIgU3ltYm9sV3JhcHBlciA9IGZ1bmN0aW9uIFN5bWJvbCgpIHtcbiAgICB2YXIgZGVzY3JpcHRpb24gPSBhcmd1bWVudHMubGVuZ3RoIDwgMSB8fCBhcmd1bWVudHNbMF0gPT09IHVuZGVmaW5lZCA/IHVuZGVmaW5lZCA6IHRvU3RyaW5nKGFyZ3VtZW50c1swXSk7XG4gICAgdmFyIHJlc3VsdCA9IGlzUHJvdG90eXBlT2YoU3ltYm9sUHJvdG90eXBlLCB0aGlzKVxuICAgICAgPyBuZXcgTmF0aXZlU3ltYm9sKGRlc2NyaXB0aW9uKVxuICAgICAgLy8gaW4gRWRnZSAxMywgU3RyaW5nKFN5bWJvbCh1bmRlZmluZWQpKSA9PT0gJ1N5bWJvbCh1bmRlZmluZWQpJ1xuICAgICAgOiBkZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkID8gTmF0aXZlU3ltYm9sKCkgOiBOYXRpdmVTeW1ib2woZGVzY3JpcHRpb24pO1xuICAgIGlmIChkZXNjcmlwdGlvbiA9PT0gJycpIEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZVtyZXN1bHRdID0gdHJ1ZTtcbiAgICByZXR1cm4gcmVzdWx0O1xuICB9O1xuXG4gIGNvcHlDb25zdHJ1Y3RvclByb3BlcnRpZXMoU3ltYm9sV3JhcHBlciwgTmF0aXZlU3ltYm9sKTtcbiAgU3ltYm9sV3JhcHBlci5wcm90b3R5cGUgPSBTeW1ib2xQcm90b3R5cGU7XG4gIFN5bWJvbFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFN5bWJvbFdyYXBwZXI7XG5cbiAgdmFyIE5BVElWRV9TWU1CT0wgPSBTdHJpbmcoTmF0aXZlU3ltYm9sKCd0ZXN0JykpID09ICdTeW1ib2wodGVzdCknO1xuICB2YXIgc3ltYm9sVG9TdHJpbmcgPSB1bmN1cnJ5VGhpcyhTeW1ib2xQcm90b3R5cGUudG9TdHJpbmcpO1xuICB2YXIgc3ltYm9sVmFsdWVPZiA9IHVuY3VycnlUaGlzKFN5bWJvbFByb3RvdHlwZS52YWx1ZU9mKTtcbiAgdmFyIHJlZ2V4cCA9IC9eU3ltYm9sXFwoKC4qKVxcKVteKV0rJC87XG4gIHZhciByZXBsYWNlID0gdW5jdXJyeVRoaXMoJycucmVwbGFjZSk7XG4gIHZhciBzdHJpbmdTbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuICBkZWZpbmVQcm9wZXJ0eShTeW1ib2xQcm90b3R5cGUsICdkZXNjcmlwdGlvbicsIHtcbiAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgZ2V0OiBmdW5jdGlvbiBkZXNjcmlwdGlvbigpIHtcbiAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xWYWx1ZU9mKHRoaXMpO1xuICAgICAgdmFyIHN0cmluZyA9IHN5bWJvbFRvU3RyaW5nKHN5bWJvbCk7XG4gICAgICBpZiAoaGFzT3duKEVtcHR5U3RyaW5nRGVzY3JpcHRpb25TdG9yZSwgc3ltYm9sKSkgcmV0dXJuICcnO1xuICAgICAgdmFyIGRlc2MgPSBOQVRJVkVfU1lNQk9MID8gc3RyaW5nU2xpY2Uoc3RyaW5nLCA3LCAtMSkgOiByZXBsYWNlKHN0cmluZywgcmVnZXhwLCAnJDEnKTtcbiAgICAgIHJldHVybiBkZXNjID09PSAnJyA/IHVuZGVmaW5lZCA6IGRlc2M7XG4gICAgfVxuICB9KTtcblxuICAkKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICBTeW1ib2w6IFN5bWJvbFdyYXBwZXJcbiAgfSk7XG59XG4iLCJ2YXIgJCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9leHBvcnQnKTtcbnZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGhhc093biA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9oYXMtb3duLXByb3BlcnR5Jyk7XG52YXIgdG9TdHJpbmcgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC1yZWdpc3RyeScpO1xuXG52YXIgU3RyaW5nVG9TeW1ib2xSZWdpc3RyeSA9IHNoYXJlZCgnc3RyaW5nLXRvLXN5bWJvbC1yZWdpc3RyeScpO1xudmFyIFN5bWJvbFRvU3RyaW5nUmVnaXN0cnkgPSBzaGFyZWQoJ3N5bWJvbC10by1zdHJpbmctcmVnaXN0cnknKTtcblxuLy8gYFN5bWJvbC5mb3JgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuZm9yXG4kKHsgdGFyZ2V0OiAnU3ltYm9sJywgc3RhdDogdHJ1ZSwgZm9yY2VkOiAhTkFUSVZFX1NZTUJPTF9SRUdJU1RSWSB9LCB7XG4gICdmb3InOiBmdW5jdGlvbiAoa2V5KSB7XG4gICAgdmFyIHN0cmluZyA9IHRvU3RyaW5nKGtleSk7XG4gICAgaWYgKGhhc093bihTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5LCBzdHJpbmcpKSByZXR1cm4gU3RyaW5nVG9TeW1ib2xSZWdpc3RyeVtzdHJpbmddO1xuICAgIHZhciBzeW1ib2wgPSBnZXRCdWlsdEluKCdTeW1ib2wnKShzdHJpbmcpO1xuICAgIFN0cmluZ1RvU3ltYm9sUmVnaXN0cnlbc3RyaW5nXSA9IHN5bWJvbDtcbiAgICBTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5W3N5bWJvbF0gPSBzdHJpbmc7XG4gICAgcmV0dXJuIHN5bWJvbDtcbiAgfVxufSk7XG4iLCJ2YXIgZGVmaW5lV2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS13ZWxsLWtub3duLXN5bWJvbCcpO1xuXG4vLyBgU3ltYm9sLml0ZXJhdG9yYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wuaXRlcmF0b3JcbmRlZmluZVdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbiIsIi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3Mgc3BsaXQgdG8gbW9kdWxlcyBsaXN0ZWQgYmVsb3dcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmNvbnN0cnVjdG9yJyk7XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLnN5bWJvbC5mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuc3ltYm9sLmtleS1mb3InKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuanNvbi5zdHJpbmdpZnknKTtcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMub2JqZWN0LmdldC1vd24tcHJvcGVydHktc3ltYm9scycpO1xuIiwidmFyICQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZXhwb3J0Jyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBpc1N5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pcy1zeW1ib2wnKTtcbnZhciB0cnlUb1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90cnktdG8tc3RyaW5nJyk7XG52YXIgc2hhcmVkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3NoYXJlZCcpO1xudmFyIE5BVElWRV9TWU1CT0xfUkVHSVNUUlkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXN5bWJvbC1yZWdpc3RyeScpO1xuXG52YXIgU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSA9IHNoYXJlZCgnc3ltYm9sLXRvLXN0cmluZy1yZWdpc3RyeScpO1xuXG4vLyBgU3ltYm9sLmtleUZvcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5rZXlmb3JcbiQoeyB0YXJnZXQ6ICdTeW1ib2wnLCBzdGF0OiB0cnVlLCBmb3JjZWQ6ICFOQVRJVkVfU1lNQk9MX1JFR0lTVFJZIH0sIHtcbiAga2V5Rm9yOiBmdW5jdGlvbiBrZXlGb3Ioc3ltKSB7XG4gICAgaWYgKCFpc1N5bWJvbChzeW0pKSB0aHJvdyBUeXBlRXJyb3IodHJ5VG9TdHJpbmcoc3ltKSArICcgaXMgbm90IGEgc3ltYm9sJyk7XG4gICAgaWYgKGhhc093bihTeW1ib2xUb1N0cmluZ1JlZ2lzdHJ5LCBzeW0pKSByZXR1cm4gU3ltYm9sVG9TdHJpbmdSZWdpc3RyeVtzeW1dO1xuICB9XG59KTtcbiIsInZhciBnZXRCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1idWlsdC1pbicpO1xudmFyIGRlZmluZVdlbGxLbm93blN5bWJvbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtd2VsbC1rbm93bi1zeW1ib2wnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xuXG4vLyBgU3ltYm9sLnRvU3RyaW5nVGFnYCB3ZWxsLWtub3duIHN5bWJvbFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1zeW1ib2wudG9zdHJpbmd0YWdcbmRlZmluZVdlbGxLbm93blN5bWJvbCgndG9TdHJpbmdUYWcnKTtcblxuLy8gYFN5bWJvbC5wcm90b3R5cGVbQEB0b1N0cmluZ1RhZ11gIHByb3BlcnR5XG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXN5bWJvbC5wcm90b3R5cGUtQEB0b3N0cmluZ3RhZ1xuc2V0VG9TdHJpbmdUYWcoZ2V0QnVpbHRJbignU3ltYm9sJyksICdTeW1ib2wnKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkQXJyYXlDb3B5V2l0aGluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWNvcHktd2l0aGluJyk7XG5cbnZhciB1JEFycmF5Q29weVdpdGhpbiA9IHVuY3VycnlUaGlzKCRBcnJheUNvcHlXaXRoaW4pO1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5jb3B5V2l0aGluYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5jb3B5d2l0aGluXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdjb3B5V2l0aGluJywgZnVuY3Rpb24gY29weVdpdGhpbih0YXJnZXQsIHN0YXJ0IC8qICwgZW5kICovKSB7XG4gIHJldHVybiB1JEFycmF5Q29weVdpdGhpbihhVHlwZWRBcnJheSh0aGlzKSwgdGFyZ2V0LCBzdGFydCwgYXJndW1lbnRzLmxlbmd0aCA+IDIgPyBhcmd1bWVudHNbMl0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGV2ZXJ5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmV2ZXJ5O1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmV2ZXJ5YCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5ldmVyeVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZXZlcnknLCBmdW5jdGlvbiBldmVyeShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJGV2ZXJ5KGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZmlsbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1maWxsJyk7XG52YXIgdG9CaWdJbnQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tYmlnLWludCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGNhbGwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tY2FsbCcpO1xudmFyIHVuY3VycnlUaGlzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLXVuY3VycnktdGhpcycpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciBzbGljZSA9IHVuY3VycnlUaGlzKCcnLnNsaWNlKTtcblxuLy8gVjggfiBDaHJvbWUgPCA1OSwgU2FmYXJpIDwgMTQuMSwgRkYgPCA1NSwgRWRnZSA8PTE4XG52YXIgQ09OVkVSU0lPTl9CVUcgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBjb3VudCA9IDA7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcy14L25vLXR5cGVkLWFycmF5cyAtLSBzYWZlXG4gIG5ldyBJbnQ4QXJyYXkoMikuZmlsbCh7IHZhbHVlT2Y6IGZ1bmN0aW9uICgpIHsgcmV0dXJuIGNvdW50Kys7IH0gfSk7XG4gIHJldHVybiBjb3VudCAhPT0gMTtcbn0pO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maWxsYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5maWxsXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaWxsJywgZnVuY3Rpb24gZmlsbCh2YWx1ZSAvKiAsIHN0YXJ0LCBlbmQgKi8pIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIGFUeXBlZEFycmF5KHRoaXMpO1xuICB2YXIgYWN0dWFsVmFsdWUgPSBzbGljZShjbGFzc29mKHRoaXMpLCAwLCAzKSA9PT0gJ0JpZycgPyB0b0JpZ0ludCh2YWx1ZSkgOiArdmFsdWU7XG4gIHJldHVybiBjYWxsKCRmaWxsLCB0aGlzLCBhY3R1YWxWYWx1ZSwgbGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCwgbGVuZ3RoID4gMiA/IGFyZ3VtZW50c1syXSA6IHVuZGVmaW5lZCk7XG59LCBDT05WRVJTSU9OX0JVRyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbHRlciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5maWx0ZXI7XG52YXIgZnJvbVNwZWNpZXNBbmRMaXN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWZyb20tc3BlY2llcy1hbmQtbGlzdCcpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZpbHRlcmAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuZmlsdGVyXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaWx0ZXInLCBmdW5jdGlvbiBmaWx0ZXIoY2FsbGJhY2tmbiAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgdmFyIGxpc3QgPSAkZmlsdGVyKGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG4gIHJldHVybiBmcm9tU3BlY2llc0FuZExpc3QodGhpcywgbGlzdCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZmluZEluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWl0ZXJhdGlvbicpLmZpbmRJbmRleDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maW5kSW5kZXhgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZpbmRpbmRleFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnZmluZEluZGV4JywgZnVuY3Rpb24gZmluZEluZGV4KHByZWRpY2F0ZSAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgcmV0dXJuICRmaW5kSW5kZXgoYVR5cGVkQXJyYXkodGhpcyksIHByZWRpY2F0ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJGZpbmQgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuZmluZDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5maW5kYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5maW5kXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdmaW5kJywgZnVuY3Rpb24gZmluZChwcmVkaWNhdGUgLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkZmluZChhVHlwZWRBcnJheSh0aGlzKSwgcHJlZGljYXRlLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciAkZm9yRWFjaCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pdGVyYXRpb24nKS5mb3JFYWNoO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmZvckVhY2hgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmZvcmVhY2hcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2ZvckVhY2gnLCBmdW5jdGlvbiBmb3JFYWNoKGNhbGxiYWNrZm4gLyogLCB0aGlzQXJnICovKSB7XG4gICRmb3JFYWNoKGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBhcmd1bWVudHMubGVuZ3RoID4gMSA/IGFyZ3VtZW50c1sxXSA6IHVuZGVmaW5lZCk7XG59KTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBUWVBFRF9BUlJBWVNfQ09OU1RSVUNUT1JTX1JFUVVJUkVTX1dSQVBQRVJTID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LWNvbnN0cnVjdG9ycy1yZXF1aXJlLXdyYXBwZXJzJyk7XG52YXIgZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJykuZXhwb3J0VHlwZWRBcnJheVN0YXRpY01ldGhvZDtcbnZhciB0eXBlZEFycmF5RnJvbSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1mcm9tJyk7XG5cbi8vIGAlVHlwZWRBcnJheSUuZnJvbWAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5mcm9tXG5leHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kKCdmcm9tJywgdHlwZWRBcnJheUZyb20sIFRZUEVEX0FSUkFZU19DT05TVFJVQ1RPUlNfUkVRVUlSRVNfV1JBUFBFUlMpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1pbmNsdWRlcycpLmluY2x1ZGVzO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmluY2x1ZGVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5pbmNsdWRlc1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnaW5jbHVkZXMnLCBmdW5jdGlvbiBpbmNsdWRlcyhzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHJldHVybiAkaW5jbHVkZXMoYVR5cGVkQXJyYXkodGhpcyksIHNlYXJjaEVsZW1lbnQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRpbmRleE9mID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWluY2x1ZGVzJykuaW5kZXhPZjtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5pbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5pbmRleG9mXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdpbmRleE9mJywgZnVuY3Rpb24gaW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHJldHVybiAkaW5kZXhPZihhVHlwZWRBcnJheSh0aGlzKSwgc2VhcmNoRWxlbWVudCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGZhaWxzID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ZhaWxzJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgQXJyYXlJdGVyYXRvcnMgPSByZXF1aXJlKCcuLi9tb2R1bGVzL2VzLmFycmF5Lml0ZXJhdG9yJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG5cbnZhciBJVEVSQVRPUiA9IHdlbGxLbm93blN5bWJvbCgnaXRlcmF0b3InKTtcbnZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG52YXIgYXJyYXlWYWx1ZXMgPSB1bmN1cnJ5VGhpcyhBcnJheUl0ZXJhdG9ycy52YWx1ZXMpO1xudmFyIGFycmF5S2V5cyA9IHVuY3VycnlUaGlzKEFycmF5SXRlcmF0b3JzLmtleXMpO1xudmFyIGFycmF5RW50cmllcyA9IHVuY3VycnlUaGlzKEFycmF5SXRlcmF0b3JzLmVudHJpZXMpO1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIFR5cGVkQXJyYXlQcm90b3R5cGUgPSBVaW50OEFycmF5ICYmIFVpbnQ4QXJyYXkucHJvdG90eXBlO1xuXG52YXIgR0VORVJJQyA9ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIFR5cGVkQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdLmNhbGwoWzFdKTtcbn0pO1xuXG52YXIgSVRFUkFUT1JfSVNfVkFMVUVTID0gISFUeXBlZEFycmF5UHJvdG90eXBlXG4gICYmIFR5cGVkQXJyYXlQcm90b3R5cGUudmFsdWVzXG4gICYmIFR5cGVkQXJyYXlQcm90b3R5cGVbSVRFUkFUT1JdID09PSBUeXBlZEFycmF5UHJvdG90eXBlLnZhbHVlc1xuICAmJiBUeXBlZEFycmF5UHJvdG90eXBlLnZhbHVlcy5uYW1lID09PSAndmFsdWVzJztcblxudmFyIHR5cGVkQXJyYXlWYWx1ZXMgPSBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gIHJldHVybiBhcnJheVZhbHVlcyhhVHlwZWRBcnJheSh0aGlzKSk7XG59O1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5lbnRyaWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5lbnRyaWVzXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdlbnRyaWVzJywgZnVuY3Rpb24gZW50cmllcygpIHtcbiAgcmV0dXJuIGFycmF5RW50cmllcyhhVHlwZWRBcnJheSh0aGlzKSk7XG59LCBHRU5FUklDKTtcbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLmtleXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ2tleXMnLCBmdW5jdGlvbiBrZXlzKCkge1xuICByZXR1cm4gYXJyYXlLZXlzKGFUeXBlZEFycmF5KHRoaXMpKTtcbn0sIEdFTkVSSUMpO1xuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudmFsdWVzYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS52YWx1ZXNcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3ZhbHVlcycsIHR5cGVkQXJyYXlWYWx1ZXMsIEdFTkVSSUMgfHwgIUlURVJBVE9SX0lTX1ZBTFVFUywgeyBuYW1lOiAndmFsdWVzJyB9KTtcbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlW0BAaXRlcmF0b3JdYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS1AQGl0ZXJhdG9yXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKElURVJBVE9SLCB0eXBlZEFycmF5VmFsdWVzLCBHRU5FUklDIHx8ICFJVEVSQVRPUl9JU19WQUxVRVMsIHsgbmFtZTogJ3ZhbHVlcycgfSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciAkam9pbiA9IHVuY3VycnlUaGlzKFtdLmpvaW4pO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5qb2luYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5qb2luXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdqb2luJywgZnVuY3Rpb24gam9pbihzZXBhcmF0b3IpIHtcbiAgcmV0dXJuICRqb2luKGFUeXBlZEFycmF5KHRoaXMpLCBzZXBhcmF0b3IpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgYXBwbHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tYXBwbHknKTtcbnZhciAkbGFzdEluZGV4T2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktbGFzdC1pbmRleC1vZicpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLmxhc3RJbmRleE9mYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5sYXN0aW5kZXhvZlxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnbGFzdEluZGV4T2YnLCBmdW5jdGlvbiBsYXN0SW5kZXhPZihzZWFyY2hFbGVtZW50IC8qICwgZnJvbUluZGV4ICovKSB7XG4gIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoO1xuICByZXR1cm4gYXBwbHkoJGxhc3RJbmRleE9mLCBhVHlwZWRBcnJheSh0aGlzKSwgbGVuZ3RoID4gMSA/IFtzZWFyY2hFbGVtZW50LCBhcmd1bWVudHNbMV1dIDogW3NlYXJjaEVsZW1lbnRdKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRtYXAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykubWFwO1xudmFyIHR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdHlwZWQtYXJyYXktc3BlY2llcy1jb25zdHJ1Y3RvcicpO1xuXG52YXIgYVR5cGVkQXJyYXkgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmFUeXBlZEFycmF5O1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSBBcnJheUJ1ZmZlclZpZXdDb3JlLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLm1hcGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUubWFwXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdtYXAnLCBmdW5jdGlvbiBtYXAobWFwZm4gLyogLCB0aGlzQXJnICovKSB7XG4gIHJldHVybiAkbWFwKGFUeXBlZEFycmF5KHRoaXMpLCBtYXBmbiwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQsIGZ1bmN0aW9uIChPLCBsZW5ndGgpIHtcbiAgICByZXR1cm4gbmV3ICh0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKE8pKShsZW5ndGgpO1xuICB9KTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRyZWR1Y2VSaWdodCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1yZWR1Y2UnKS5yaWdodDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5yZWR1Y2VSaWNodGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUucmVkdWNlcmlnaHRcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3JlZHVjZVJpZ2h0JywgZnVuY3Rpb24gcmVkdWNlUmlnaHQoY2FsbGJhY2tmbiAvKiAsIGluaXRpYWxWYWx1ZSAqLykge1xuICB2YXIgbGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aDtcbiAgcmV0dXJuICRyZWR1Y2VSaWdodChhVHlwZWRBcnJheSh0aGlzKSwgY2FsbGJhY2tmbiwgbGVuZ3RoLCBsZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIEFycmF5QnVmZmVyVmlld0NvcmUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpO1xudmFyICRyZWR1Y2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktcmVkdWNlJykubGVmdDtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5yZWR1Y2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnJlZHVjZVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgncmVkdWNlJywgZnVuY3Rpb24gcmVkdWNlKGNhbGxiYWNrZm4gLyogLCBpbml0aWFsVmFsdWUgKi8pIHtcbiAgdmFyIGxlbmd0aCA9IGFyZ3VtZW50cy5sZW5ndGg7XG4gIHJldHVybiAkcmVkdWNlKGFUeXBlZEFycmF5KHRoaXMpLCBjYWxsYmFja2ZuLCBsZW5ndGgsIGxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcbnZhciBmbG9vciA9IE1hdGguZmxvb3I7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnJldmVyc2VgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnJldmVyc2VcbmV4cG9ydFR5cGVkQXJyYXlNZXRob2QoJ3JldmVyc2UnLCBmdW5jdGlvbiByZXZlcnNlKCkge1xuICB2YXIgdGhhdCA9IHRoaXM7XG4gIHZhciBsZW5ndGggPSBhVHlwZWRBcnJheSh0aGF0KS5sZW5ndGg7XG4gIHZhciBtaWRkbGUgPSBmbG9vcihsZW5ndGggLyAyKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIHZhbHVlO1xuICB3aGlsZSAoaW5kZXggPCBtaWRkbGUpIHtcbiAgICB2YWx1ZSA9IHRoYXRbaW5kZXhdO1xuICAgIHRoYXRbaW5kZXgrK10gPSB0aGF0Wy0tbGVuZ3RoXTtcbiAgICB0aGF0W2xlbmd0aF0gPSB2YWx1ZTtcbiAgfSByZXR1cm4gdGhhdDtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciBsZW5ndGhPZkFycmF5TGlrZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9sZW5ndGgtb2YtYXJyYXktbGlrZScpO1xudmFyIHRvT2Zmc2V0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLW9mZnNldCcpO1xudmFyIHRvSW5kZXhlZE9iamVjdCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1vYmplY3QnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xuXG52YXIgUmFuZ2VFcnJvciA9IGdsb2JhbC5SYW5nZUVycm9yO1xudmFyIEludDhBcnJheSA9IGdsb2JhbC5JbnQ4QXJyYXk7XG52YXIgSW50OEFycmF5UHJvdG90eXBlID0gSW50OEFycmF5ICYmIEludDhBcnJheS5wcm90b3R5cGU7XG52YXIgJHNldCA9IEludDhBcnJheVByb3RvdHlwZSAmJiBJbnQ4QXJyYXlQcm90b3R5cGUuc2V0O1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG52YXIgV09SS1NfV0lUSF9PQkpFQ1RTX0FORF9HRUVSSUNfT05fVFlQRURfQVJSQVlTID0gIWZhaWxzKGZ1bmN0aW9uICgpIHtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tdHlwZWQtYXJyYXlzIC0tIHJlcXVpcmVkIGZvciB0ZXN0aW5nXG4gIHZhciBhcnJheSA9IG5ldyBVaW50OENsYW1wZWRBcnJheSgyKTtcbiAgY2FsbCgkc2V0LCBhcnJheSwgeyBsZW5ndGg6IDEsIDA6IDMgfSwgMSk7XG4gIHJldHVybiBhcnJheVsxXSAhPT0gMztcbn0pO1xuXG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0xMTI5NCBhbmQgb3RoZXJcbnZhciBUT19PQkpFQ1RfQlVHID0gV09SS1NfV0lUSF9PQkpFQ1RTX0FORF9HRUVSSUNfT05fVFlQRURfQVJSQVlTICYmIEFycmF5QnVmZmVyVmlld0NvcmUuTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHZhciBhcnJheSA9IG5ldyBJbnQ4QXJyYXkoMik7XG4gIGFycmF5LnNldCgxKTtcbiAgYXJyYXkuc2V0KCcyJywgMSk7XG4gIHJldHVybiBhcnJheVswXSAhPT0gMCB8fCBhcnJheVsxXSAhPT0gMjtcbn0pO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5zZXRgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnNldFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc2V0JywgZnVuY3Rpb24gc2V0KGFycmF5TGlrZSAvKiAsIG9mZnNldCAqLykge1xuICBhVHlwZWRBcnJheSh0aGlzKTtcbiAgdmFyIG9mZnNldCA9IHRvT2Zmc2V0KGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkLCAxKTtcbiAgdmFyIHNyYyA9IHRvSW5kZXhlZE9iamVjdChhcnJheUxpa2UpO1xuICBpZiAoV09SS1NfV0lUSF9PQkpFQ1RTX0FORF9HRUVSSUNfT05fVFlQRURfQVJSQVlTKSByZXR1cm4gY2FsbCgkc2V0LCB0aGlzLCBzcmMsIG9mZnNldCk7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aDtcbiAgdmFyIGxlbiA9IGxlbmd0aE9mQXJyYXlMaWtlKHNyYyk7XG4gIHZhciBpbmRleCA9IDA7XG4gIGlmIChsZW4gKyBvZmZzZXQgPiBsZW5ndGgpIHRocm93IFJhbmdlRXJyb3IoJ1dyb25nIGxlbmd0aCcpO1xuICB3aGlsZSAoaW5kZXggPCBsZW4pIHRoaXNbb2Zmc2V0ICsgaW5kZXhdID0gc3JjW2luZGV4KytdO1xufSwgIVdPUktTX1dJVEhfT0JKRUNUU19BTkRfR0VFUklDX09OX1RZUEVEX0FSUkFZUyB8fCBUT19PQkpFQ1RfQlVHKTtcbiIsIid1c2Ugc3RyaWN0JztcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3R5cGVkLWFycmF5LXNwZWNpZXMtY29uc3RydWN0b3InKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFycmF5U2xpY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktc2xpY2UnKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG52YXIgRk9SQ0VEID0gZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXMteC9uby10eXBlZC1hcnJheXMgLS0gcmVxdWlyZWQgZm9yIHRlc3RpbmdcbiAgbmV3IEludDhBcnJheSgxKS5zbGljZSgpO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnNsaWNlYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zbGljZVxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc2xpY2UnLCBmdW5jdGlvbiBzbGljZShzdGFydCwgZW5kKSB7XG4gIHZhciBsaXN0ID0gYXJyYXlTbGljZShhVHlwZWRBcnJheSh0aGlzKSwgc3RhcnQsIGVuZCk7XG4gIHZhciBDID0gdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3Rvcih0aGlzKTtcbiAgdmFyIGluZGV4ID0gMDtcbiAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICB2YXIgcmVzdWx0ID0gbmV3IEMobGVuZ3RoKTtcbiAgd2hpbGUgKGxlbmd0aCA+IGluZGV4KSByZXN1bHRbaW5kZXhdID0gbGlzdFtpbmRleCsrXTtcbiAgcmV0dXJuIHJlc3VsdDtcbn0sIEZPUkNFRCk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgJHNvbWUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktaXRlcmF0aW9uJykuc29tZTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xuXG4vLyBgJVR5cGVkQXJyYXklLnByb3RvdHlwZS5zb21lYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS5zb21lXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzb21lJywgZnVuY3Rpb24gc29tZShjYWxsYmFja2ZuIC8qICwgdGhpc0FyZyAqLykge1xuICByZXR1cm4gJHNvbWUoYVR5cGVkQXJyYXkodGhpcyksIGNhbGxiYWNrZm4sIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBmYWlscyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mYWlscycpO1xudmFyIGFDYWxsYWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hLWNhbGxhYmxlJyk7XG52YXIgaW50ZXJuYWxTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcbnZhciBBcnJheUJ1ZmZlclZpZXdDb3JlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LWJ1ZmZlci12aWV3LWNvcmUnKTtcbnZhciBGRiA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtZmYtdmVyc2lvbicpO1xudmFyIElFX09SX0VER0UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZW5naW5lLWlzLWllLW9yLWVkZ2UnKTtcbnZhciBWOCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtdjgtdmVyc2lvbicpO1xudmFyIFdFQktJVCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9lbmdpbmUtd2Via2l0LXZlcnNpb24nKTtcblxudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyIFVpbnQxNkFycmF5ID0gZ2xvYmFsLlVpbnQxNkFycmF5O1xudmFyIHVuJFNvcnQgPSBVaW50MTZBcnJheSAmJiB1bmN1cnJ5VGhpcyhVaW50MTZBcnJheS5wcm90b3R5cGUuc29ydCk7XG5cbi8vIFdlYktpdFxudmFyIEFDQ0VQVF9JTkNPUlJFQ1RfQVJHVU1FTlRTID0gISF1biRTb3J0ICYmICEoZmFpbHMoZnVuY3Rpb24gKCkge1xuICB1biRTb3J0KG5ldyBVaW50MTZBcnJheSgyKSwgbnVsbCk7XG59KSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHVuJFNvcnQobmV3IFVpbnQxNkFycmF5KDIpLCB7fSk7XG59KSk7XG5cbnZhciBTVEFCTEVfU09SVCA9ICEhdW4kU29ydCAmJiAhZmFpbHMoZnVuY3Rpb24gKCkge1xuICAvLyBmZWF0dXJlIGRldGVjdGlvbiBjYW4gYmUgdG9vIHNsb3csIHNvIGNoZWNrIGVuZ2luZXMgdmVyc2lvbnNcbiAgaWYgKFY4KSByZXR1cm4gVjggPCA3NDtcbiAgaWYgKEZGKSByZXR1cm4gRkYgPCA2NztcbiAgaWYgKElFX09SX0VER0UpIHJldHVybiB0cnVlO1xuICBpZiAoV0VCS0lUKSByZXR1cm4gV0VCS0lUIDwgNjAyO1xuXG4gIHZhciBhcnJheSA9IG5ldyBVaW50MTZBcnJheSg1MTYpO1xuICB2YXIgZXhwZWN0ZWQgPSBBcnJheSg1MTYpO1xuICB2YXIgaW5kZXgsIG1vZDtcblxuICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCA1MTY7IGluZGV4KyspIHtcbiAgICBtb2QgPSBpbmRleCAlIDQ7XG4gICAgYXJyYXlbaW5kZXhdID0gNTE1IC0gaW5kZXg7XG4gICAgZXhwZWN0ZWRbaW5kZXhdID0gaW5kZXggLSAyICogbW9kICsgMztcbiAgfVxuXG4gIHVuJFNvcnQoYXJyYXksIGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIChhIC8gNCB8IDApIC0gKGIgLyA0IHwgMCk7XG4gIH0pO1xuXG4gIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IDUxNjsgaW5kZXgrKykge1xuICAgIGlmIChhcnJheVtpbmRleF0gIT09IGV4cGVjdGVkW2luZGV4XSkgcmV0dXJuIHRydWU7XG4gIH1cbn0pO1xuXG52YXIgZ2V0U29ydENvbXBhcmUgPSBmdW5jdGlvbiAoY29tcGFyZWZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiAoeCwgeSkge1xuICAgIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgcmV0dXJuICtjb21wYXJlZm4oeCwgeSkgfHwgMDtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tc2VsZi1jb21wYXJlIC0tIE5hTiBjaGVja1xuICAgIGlmICh5ICE9PSB5KSByZXR1cm4gLTE7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXNlbGYtY29tcGFyZSAtLSBOYU4gY2hlY2tcbiAgICBpZiAoeCAhPT0geCkgcmV0dXJuIDE7XG4gICAgaWYgKHggPT09IDAgJiYgeSA9PT0gMCkgcmV0dXJuIDEgLyB4ID4gMCAmJiAxIC8geSA8IDAgPyAxIDogLTE7XG4gICAgcmV0dXJuIHggPiB5O1xuICB9O1xufTtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLSV0eXBlZGFycmF5JS5wcm90b3R5cGUuc29ydFxuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgnc29ydCcsIGZ1bmN0aW9uIHNvcnQoY29tcGFyZWZuKSB7XG4gIGlmIChjb21wYXJlZm4gIT09IHVuZGVmaW5lZCkgYUNhbGxhYmxlKGNvbXBhcmVmbik7XG4gIGlmIChTVEFCTEVfU09SVCkgcmV0dXJuIHVuJFNvcnQodGhpcywgY29tcGFyZWZuKTtcblxuICByZXR1cm4gaW50ZXJuYWxTb3J0KGFUeXBlZEFycmF5KHRoaXMpLCBnZXRTb3J0Q29tcGFyZShjb21wYXJlZm4pKTtcbn0sICFTVEFCTEVfU09SVCB8fCBBQ0NFUFRfSU5DT1JSRUNUX0FSR1VNRU5UUyk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgdG9MZW5ndGggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvdG8tbGVuZ3RoJyk7XG52YXIgdG9BYnNvbHV0ZUluZGV4ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3RvLWFic29sdXRlLWluZGV4Jyk7XG52YXIgdHlwZWRBcnJheVNwZWNpZXNDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1zcGVjaWVzLWNvbnN0cnVjdG9yJyk7XG5cbnZhciBhVHlwZWRBcnJheSA9IEFycmF5QnVmZmVyVmlld0NvcmUuYVR5cGVkQXJyYXk7XG52YXIgZXhwb3J0VHlwZWRBcnJheU1ldGhvZCA9IEFycmF5QnVmZmVyVmlld0NvcmUuZXhwb3J0VHlwZWRBcnJheU1ldGhvZDtcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUuc3ViYXJyYXlgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnN1YmFycmF5XG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCdzdWJhcnJheScsIGZ1bmN0aW9uIHN1YmFycmF5KGJlZ2luLCBlbmQpIHtcbiAgdmFyIE8gPSBhVHlwZWRBcnJheSh0aGlzKTtcbiAgdmFyIGxlbmd0aCA9IE8ubGVuZ3RoO1xuICB2YXIgYmVnaW5JbmRleCA9IHRvQWJzb2x1dGVJbmRleChiZWdpbiwgbGVuZ3RoKTtcbiAgdmFyIEMgPSB0eXBlZEFycmF5U3BlY2llc0NvbnN0cnVjdG9yKE8pO1xuICByZXR1cm4gbmV3IEMoXG4gICAgTy5idWZmZXIsXG4gICAgTy5ieXRlT2Zmc2V0ICsgYmVnaW5JbmRleCAqIE8uQllURVNfUEVSX0VMRU1FTlQsXG4gICAgdG9MZW5ndGgoKGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuZ3RoIDogdG9BYnNvbHV0ZUluZGV4KGVuZCwgbGVuZ3RoKSkgLSBiZWdpbkluZGV4KVxuICApO1xufSk7XG4iLCIndXNlIHN0cmljdCc7XG52YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIGFwcGx5ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWFwcGx5Jyk7XG52YXIgQXJyYXlCdWZmZXJWaWV3Q29yZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9hcnJheS1idWZmZXItdmlldy1jb3JlJyk7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBhcnJheVNsaWNlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNsaWNlJyk7XG5cbnZhciBJbnQ4QXJyYXkgPSBnbG9iYWwuSW50OEFycmF5O1xudmFyIGFUeXBlZEFycmF5ID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5hVHlwZWRBcnJheTtcbnZhciBleHBvcnRUeXBlZEFycmF5TWV0aG9kID0gQXJyYXlCdWZmZXJWaWV3Q29yZS5leHBvcnRUeXBlZEFycmF5TWV0aG9kO1xudmFyICR0b0xvY2FsZVN0cmluZyA9IFtdLnRvTG9jYWxlU3RyaW5nO1xuXG4vLyBpT1MgU2FmYXJpIDYueCBmYWlscyBoZXJlXG52YXIgVE9fTE9DQUxFX1NUUklOR19CVUcgPSAhIUludDhBcnJheSAmJiBmYWlscyhmdW5jdGlvbiAoKSB7XG4gICR0b0xvY2FsZVN0cmluZy5jYWxsKG5ldyBJbnQ4QXJyYXkoMSkpO1xufSk7XG5cbnZhciBGT1JDRUQgPSBmYWlscyhmdW5jdGlvbiAoKSB7XG4gIHJldHVybiBbMSwgMl0udG9Mb2NhbGVTdHJpbmcoKSAhPSBuZXcgSW50OEFycmF5KFsxLCAyXSkudG9Mb2NhbGVTdHJpbmcoKTtcbn0pIHx8ICFmYWlscyhmdW5jdGlvbiAoKSB7XG4gIEludDhBcnJheS5wcm90b3R5cGUudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwgMl0pO1xufSk7XG5cbi8vIGAlVHlwZWRBcnJheSUucHJvdG90eXBlLnRvTG9jYWxlU3RyaW5nYCBtZXRob2Rcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJXR5cGVkYXJyYXklLnByb3RvdHlwZS50b2xvY2FsZXN0cmluZ1xuZXhwb3J0VHlwZWRBcnJheU1ldGhvZCgndG9Mb2NhbGVTdHJpbmcnLCBmdW5jdGlvbiB0b0xvY2FsZVN0cmluZygpIHtcbiAgcmV0dXJuIGFwcGx5KFxuICAgICR0b0xvY2FsZVN0cmluZyxcbiAgICBUT19MT0NBTEVfU1RSSU5HX0JVRyA/IGFycmF5U2xpY2UoYVR5cGVkQXJyYXkodGhpcykpIDogYVR5cGVkQXJyYXkodGhpcyksXG4gICAgYXJyYXlTbGljZShhcmd1bWVudHMpXG4gICk7XG59LCBGT1JDRUQpO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGV4cG9ydFR5cGVkQXJyYXlNZXRob2QgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktYnVmZmVyLXZpZXctY29yZScpLmV4cG9ydFR5cGVkQXJyYXlNZXRob2Q7XG52YXIgZmFpbHMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZmFpbHMnKTtcbnZhciBnbG9iYWwgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZ2xvYmFsJyk7XG52YXIgdW5jdXJyeVRoaXMgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvZnVuY3Rpb24tdW5jdXJyeS10aGlzJyk7XG5cbnZhciBVaW50OEFycmF5ID0gZ2xvYmFsLlVpbnQ4QXJyYXk7XG52YXIgVWludDhBcnJheVByb3RvdHlwZSA9IFVpbnQ4QXJyYXkgJiYgVWludDhBcnJheS5wcm90b3R5cGUgfHwge307XG52YXIgYXJyYXlUb1N0cmluZyA9IFtdLnRvU3RyaW5nO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcblxuaWYgKGZhaWxzKGZ1bmN0aW9uICgpIHsgYXJyYXlUb1N0cmluZy5jYWxsKHt9KTsgfSkpIHtcbiAgYXJyYXlUb1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiBqb2luKHRoaXMpO1xuICB9O1xufVxuXG52YXIgSVNfTk9UX0FSUkFZX01FVEhPRCA9IFVpbnQ4QXJyYXlQcm90b3R5cGUudG9TdHJpbmcgIT0gYXJyYXlUb1N0cmluZztcblxuLy8gYCVUeXBlZEFycmF5JS5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy0ldHlwZWRhcnJheSUucHJvdG90eXBlLnRvc3RyaW5nXG5leHBvcnRUeXBlZEFycmF5TWV0aG9kKCd0b1N0cmluZycsIGFycmF5VG9TdHJpbmcsIElTX05PVF9BUlJBWV9NRVRIT0QpO1xuIiwidmFyIGNyZWF0ZVR5cGVkQXJyYXlDb25zdHJ1Y3RvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90eXBlZC1hcnJheS1jb25zdHJ1Y3RvcicpO1xuXG4vLyBgVWludDhBcnJheWAgY29uc3RydWN0b3Jcbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtdHlwZWRhcnJheS1vYmplY3RzXG5jcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IoJ1VpbnQ4JywgZnVuY3Rpb24gKGluaXQpIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIFVpbnQ4QXJyYXkoZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gICAgcmV0dXJuIGluaXQodGhpcywgZGF0YSwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcbiAgfTtcbn0pO1xuIiwiJ3VzZSBzdHJpY3QnO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBkZWZpbmVCdWlsdElucyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZWZpbmUtYnVpbHQtaW5zJyk7XG52YXIgSW50ZXJuYWxNZXRhZGF0YU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1tZXRhZGF0YScpO1xudmFyIGNvbGxlY3Rpb24gPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY29sbGVjdGlvbicpO1xudmFyIGNvbGxlY3Rpb25XZWFrID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2NvbGxlY3Rpb24td2VhaycpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyIGlzRXh0ZW5zaWJsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9vYmplY3QtaXMtZXh0ZW5zaWJsZScpO1xudmFyIGVuZm9yY2VJbnRlcm5hbFN0YXRlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2ludGVybmFsLXN0YXRlJykuZW5mb3JjZTtcbnZhciBOQVRJVkVfV0VBS19NQVAgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvbmF0aXZlLXdlYWstbWFwJyk7XG5cbnZhciBJU19JRTExID0gIWdsb2JhbC5BY3RpdmVYT2JqZWN0ICYmICdBY3RpdmVYT2JqZWN0JyBpbiBnbG9iYWw7XG52YXIgSW50ZXJuYWxXZWFrTWFwO1xuXG52YXIgd3JhcHBlciA9IGZ1bmN0aW9uIChpbml0KSB7XG4gIHJldHVybiBmdW5jdGlvbiBXZWFrTWFwKCkge1xuICAgIHJldHVybiBpbml0KHRoaXMsIGFyZ3VtZW50cy5sZW5ndGggPyBhcmd1bWVudHNbMF0gOiB1bmRlZmluZWQpO1xuICB9O1xufTtcblxuLy8gYFdlYWtNYXBgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3RjMzkuZXMvZWNtYTI2Mi8jc2VjLXdlYWttYXAtY29uc3RydWN0b3JcbnZhciAkV2Vha01hcCA9IGNvbGxlY3Rpb24oJ1dlYWtNYXAnLCB3cmFwcGVyLCBjb2xsZWN0aW9uV2Vhayk7XG5cbi8vIElFMTEgV2Vha01hcCBmcm96ZW4ga2V5cyBmaXhcbi8vIFdlIGNhbid0IHVzZSBmZWF0dXJlIGRldGVjdGlvbiBiZWNhdXNlIGl0IGNyYXNoIHNvbWUgb2xkIElFIGJ1aWxkc1xuLy8gaHR0cHM6Ly9naXRodWIuY29tL3psb2lyb2NrL2NvcmUtanMvaXNzdWVzLzQ4NVxuaWYgKE5BVElWRV9XRUFLX01BUCAmJiBJU19JRTExKSB7XG4gIEludGVybmFsV2Vha01hcCA9IGNvbGxlY3Rpb25XZWFrLmdldENvbnN0cnVjdG9yKHdyYXBwZXIsICdXZWFrTWFwJywgdHJ1ZSk7XG4gIEludGVybmFsTWV0YWRhdGFNb2R1bGUuZW5hYmxlKCk7XG4gIHZhciBXZWFrTWFwUHJvdG90eXBlID0gJFdlYWtNYXAucHJvdG90eXBlO1xuICB2YXIgbmF0aXZlRGVsZXRlID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZVsnZGVsZXRlJ10pO1xuICB2YXIgbmF0aXZlSGFzID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5oYXMpO1xuICB2YXIgbmF0aXZlR2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5nZXQpO1xuICB2YXIgbmF0aXZlU2V0ID0gdW5jdXJyeVRoaXMoV2Vha01hcFByb3RvdHlwZS5zZXQpO1xuICBkZWZpbmVCdWlsdElucyhXZWFrTWFwUHJvdG90eXBlLCB7XG4gICAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIGlmIChpc09iamVjdChrZXkpICYmICFpc0V4dGVuc2libGUoa2V5KSkge1xuICAgICAgICB2YXIgc3RhdGUgPSBlbmZvcmNlSW50ZXJuYWxTdGF0ZSh0aGlzKTtcbiAgICAgICAgaWYgKCFzdGF0ZS5mcm96ZW4pIHN0YXRlLmZyb3plbiA9IG5ldyBJbnRlcm5hbFdlYWtNYXAoKTtcbiAgICAgICAgcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpIHx8IHN0YXRlLmZyb3plblsnZGVsZXRlJ10oa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZURlbGV0ZSh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgaGFzOiBmdW5jdGlvbiBoYXMoa2V5KSB7XG4gICAgICBpZiAoaXNPYmplY3Qoa2V5KSAmJiAhaXNFeHRlbnNpYmxlKGtleSkpIHtcbiAgICAgICAgdmFyIHN0YXRlID0gZW5mb3JjZUludGVybmFsU3RhdGUodGhpcyk7XG4gICAgICAgIGlmICghc3RhdGUuZnJvemVuKSBzdGF0ZS5mcm96ZW4gPSBuZXcgSW50ZXJuYWxXZWFrTWFwKCk7XG4gICAgICAgIHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KSB8fCBzdGF0ZS5mcm96ZW4uaGFzKGtleSk7XG4gICAgICB9IHJldHVybiBuYXRpdmVIYXModGhpcywga2V5KTtcbiAgICB9LFxuICAgIGdldDogZnVuY3Rpb24gZ2V0KGtleSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICByZXR1cm4gbmF0aXZlSGFzKHRoaXMsIGtleSkgPyBuYXRpdmVHZXQodGhpcywga2V5KSA6IHN0YXRlLmZyb3plbi5nZXQoa2V5KTtcbiAgICAgIH0gcmV0dXJuIG5hdGl2ZUdldCh0aGlzLCBrZXkpO1xuICAgIH0sXG4gICAgc2V0OiBmdW5jdGlvbiBzZXQoa2V5LCB2YWx1ZSkge1xuICAgICAgaWYgKGlzT2JqZWN0KGtleSkgJiYgIWlzRXh0ZW5zaWJsZShrZXkpKSB7XG4gICAgICAgIHZhciBzdGF0ZSA9IGVuZm9yY2VJbnRlcm5hbFN0YXRlKHRoaXMpO1xuICAgICAgICBpZiAoIXN0YXRlLmZyb3plbikgc3RhdGUuZnJvemVuID0gbmV3IEludGVybmFsV2Vha01hcCgpO1xuICAgICAgICBuYXRpdmVIYXModGhpcywga2V5KSA/IG5hdGl2ZVNldCh0aGlzLCBrZXksIHZhbHVlKSA6IHN0YXRlLmZyb3plbi5zZXQoa2V5LCB2YWx1ZSk7XG4gICAgICB9IGVsc2UgbmF0aXZlU2V0KHRoaXMsIGtleSwgdmFsdWUpO1xuICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICB9KTtcbn1cbiIsIi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL2VzLndlYWstbWFwLmNvbnN0cnVjdG9yJyk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIGZvckVhY2ggPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYXJyYXktZm9yLWVhY2gnKTtcbnZhciBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLW5vbi1lbnVtZXJhYmxlLXByb3BlcnR5Jyk7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSkge1xuICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGUgJiYgQ29sbGVjdGlvblByb3RvdHlwZS5mb3JFYWNoICE9PSBmb3JFYWNoKSB0cnkge1xuICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCAnZm9yRWFjaCcsIGZvckVhY2gpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIENvbGxlY3Rpb25Qcm90b3R5cGUuZm9yRWFjaCA9IGZvckVhY2g7XG4gIH1cbn07XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgaWYgKERPTUl0ZXJhYmxlc1tDT0xMRUNUSU9OX05BTUVdKSB7XG4gICAgaGFuZGxlUHJvdG90eXBlKGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdLnByb3RvdHlwZSk7XG4gIH1cbn1cblxuaGFuZGxlUHJvdG90eXBlKERPTVRva2VuTGlzdFByb3RvdHlwZSk7XG4iLCJ2YXIgZ2xvYmFsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dsb2JhbCcpO1xudmFyIERPTUl0ZXJhYmxlcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kb20taXRlcmFibGVzJyk7XG52YXIgRE9NVG9rZW5MaXN0UHJvdG90eXBlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RvbS10b2tlbi1saXN0LXByb3RvdHlwZScpO1xudmFyIEFycmF5SXRlcmF0b3JNZXRob2RzID0gcmVxdWlyZSgnLi4vbW9kdWxlcy9lcy5hcnJheS5pdGVyYXRvcicpO1xudmFyIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtbm9uLWVudW1lcmFibGUtcHJvcGVydHknKTtcbnZhciB3ZWxsS25vd25TeW1ib2wgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvd2VsbC1rbm93bi1zeW1ib2wnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFRPX1NUUklOR19UQUcgPSB3ZWxsS25vd25TeW1ib2woJ3RvU3RyaW5nVGFnJyk7XG52YXIgQXJyYXlWYWx1ZXMgPSBBcnJheUl0ZXJhdG9yTWV0aG9kcy52YWx1ZXM7XG5cbnZhciBoYW5kbGVQcm90b3R5cGUgPSBmdW5jdGlvbiAoQ29sbGVjdGlvblByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKSB7XG4gIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlKSB7XG4gICAgLy8gc29tZSBDaHJvbWUgdmVyc2lvbnMgaGF2ZSBub24tY29uZmlndXJhYmxlIG1ldGhvZHMgb24gRE9NVG9rZW5MaXN0XG4gICAgaWYgKENvbGxlY3Rpb25Qcm90b3R5cGVbSVRFUkFUT1JdICE9PSBBcnJheVZhbHVlcykgdHJ5IHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBJVEVSQVRPUiwgQXJyYXlWYWx1ZXMpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW0lURVJBVE9SXSA9IEFycmF5VmFsdWVzO1xuICAgIH1cbiAgICBpZiAoIUNvbGxlY3Rpb25Qcm90b3R5cGVbVE9fU1RSSU5HX1RBR10pIHtcbiAgICAgIGNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eShDb2xsZWN0aW9uUHJvdG90eXBlLCBUT19TVFJJTkdfVEFHLCBDT0xMRUNUSU9OX05BTUUpO1xuICAgIH1cbiAgICBpZiAoRE9NSXRlcmFibGVzW0NPTExFQ1RJT05fTkFNRV0pIGZvciAodmFyIE1FVEhPRF9OQU1FIGluIEFycmF5SXRlcmF0b3JNZXRob2RzKSB7XG4gICAgICAvLyBzb21lIENocm9tZSB2ZXJzaW9ucyBoYXZlIG5vbi1jb25maWd1cmFibGUgbWV0aG9kcyBvbiBET01Ub2tlbkxpc3RcbiAgICAgIGlmIChDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSAhPT0gQXJyYXlJdGVyYXRvck1ldGhvZHNbTUVUSE9EX05BTUVdKSB0cnkge1xuICAgICAgICBjcmVhdGVOb25FbnVtZXJhYmxlUHJvcGVydHkoQ29sbGVjdGlvblByb3RvdHlwZSwgTUVUSE9EX05BTUUsIEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICBDb2xsZWN0aW9uUHJvdG90eXBlW01FVEhPRF9OQU1FXSA9IEFycmF5SXRlcmF0b3JNZXRob2RzW01FVEhPRF9OQU1FXTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn07XG5cbmZvciAodmFyIENPTExFQ1RJT05fTkFNRSBpbiBET01JdGVyYWJsZXMpIHtcbiAgaGFuZGxlUHJvdG90eXBlKGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdICYmIGdsb2JhbFtDT0xMRUNUSU9OX05BTUVdLnByb3RvdHlwZSwgQ09MTEVDVElPTl9OQU1FKTtcbn1cblxuaGFuZGxlUHJvdG90eXBlKERPTVRva2VuTGlzdFByb3RvdHlwZSwgJ0RPTVRva2VuTGlzdCcpO1xuIiwiJ3VzZSBzdHJpY3QnO1xuLy8gVE9ETzogaW4gY29yZS1qc0A0LCBtb3ZlIC9tb2R1bGVzLyBkZXBlbmRlbmNpZXMgdG8gcHVibGljIGVudHJpZXMgZm9yIGJldHRlciBvcHRpbWl6YXRpb24gYnkgdG9vbHMgbGlrZSBgcHJlc2V0LWVudmBcbnJlcXVpcmUoJy4uL21vZHVsZXMvZXMuYXJyYXkuaXRlcmF0b3InKTtcbnZhciAkID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2V4cG9ydCcpO1xudmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9nbG9iYWwnKTtcbnZhciBjYWxsID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWNhbGwnKTtcbnZhciB1bmN1cnJ5VGhpcyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9mdW5jdGlvbi11bmN1cnJ5LXRoaXMnKTtcbnZhciBERVNDUklQVE9SUyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9kZXNjcmlwdG9ycycpO1xudmFyIFVTRV9OQVRJVkVfVVJMID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL25hdGl2ZS11cmwnKTtcbnZhciBkZWZpbmVCdWlsdEluID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbicpO1xudmFyIGRlZmluZUJ1aWx0SW5zID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2RlZmluZS1idWlsdC1pbnMnKTtcbnZhciBzZXRUb1N0cmluZ1RhZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9zZXQtdG8tc3RyaW5nLXRhZycpO1xudmFyIGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY3JlYXRlLWl0ZXJhdG9yLWNvbnN0cnVjdG9yJyk7XG52YXIgSW50ZXJuYWxTdGF0ZU1vZHVsZSA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9pbnRlcm5hbC1zdGF0ZScpO1xudmFyIGFuSW5zdGFuY2UgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvYW4taW5zdGFuY2UnKTtcbnZhciBpc0NhbGxhYmxlID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLWNhbGxhYmxlJyk7XG52YXIgaGFzT3duID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2hhcy1vd24tcHJvcGVydHknKTtcbnZhciBiaW5kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2Z1bmN0aW9uLWJpbmQtY29udGV4dCcpO1xudmFyIGNsYXNzb2YgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvY2xhc3NvZicpO1xudmFyIGFuT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FuLW9iamVjdCcpO1xudmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2lzLW9iamVjdCcpO1xudmFyICR0b1N0cmluZyA9IHJlcXVpcmUoJy4uL2ludGVybmFscy90by1zdHJpbmcnKTtcbnZhciBjcmVhdGUgPSByZXF1aXJlKCcuLi9pbnRlcm5hbHMvb2JqZWN0LWNyZWF0ZScpO1xudmFyIGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvciA9IHJlcXVpcmUoJy4uL2ludGVybmFscy9jcmVhdGUtcHJvcGVydHktZGVzY3JpcHRvcicpO1xudmFyIGdldEl0ZXJhdG9yID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvcicpO1xudmFyIGdldEl0ZXJhdG9yTWV0aG9kID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2dldC1pdGVyYXRvci1tZXRob2QnKTtcbnZhciB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aCA9IHJlcXVpcmUoJy4uL2ludGVybmFscy92YWxpZGF0ZS1hcmd1bWVudHMtbGVuZ3RoJyk7XG52YXIgd2VsbEtub3duU3ltYm9sID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL3dlbGwta25vd24tc3ltYm9sJyk7XG52YXIgYXJyYXlTb3J0ID0gcmVxdWlyZSgnLi4vaW50ZXJuYWxzL2FycmF5LXNvcnQnKTtcblxudmFyIElURVJBVE9SID0gd2VsbEtub3duU3ltYm9sKCdpdGVyYXRvcicpO1xudmFyIFVSTF9TRUFSQ0hfUEFSQU1TID0gJ1VSTFNlYXJjaFBhcmFtcyc7XG52YXIgVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IgPSBVUkxfU0VBUkNIX1BBUkFNUyArICdJdGVyYXRvcic7XG52YXIgc2V0SW50ZXJuYWxTdGF0ZSA9IEludGVybmFsU3RhdGVNb2R1bGUuc2V0O1xudmFyIGdldEludGVybmFsUGFyYW1zU3RhdGUgPSBJbnRlcm5hbFN0YXRlTW9kdWxlLmdldHRlckZvcihVUkxfU0VBUkNIX1BBUkFNUyk7XG52YXIgZ2V0SW50ZXJuYWxJdGVyYXRvclN0YXRlID0gSW50ZXJuYWxTdGF0ZU1vZHVsZS5nZXR0ZXJGb3IoVVJMX1NFQVJDSF9QQVJBTVNfSVRFUkFUT1IpO1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVzLXgvbm8tb2JqZWN0LWdldG93bnByb3BlcnR5ZGVzY3JpcHRvciAtLSBzYWZlXG52YXIgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtcblxuLy8gQXZvaWQgTm9kZUpTIGV4cGVyaW1lbnRhbCB3YXJuaW5nXG52YXIgc2FmZUdldEJ1aWx0SW4gPSBmdW5jdGlvbiAobmFtZSkge1xuICBpZiAoIURFU0NSSVBUT1JTKSByZXR1cm4gZ2xvYmFsW25hbWVdO1xuICB2YXIgZGVzY3JpcHRvciA9IGdldE93blByb3BlcnR5RGVzY3JpcHRvcihnbG9iYWwsIG5hbWUpO1xuICByZXR1cm4gZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLnZhbHVlO1xufTtcblxudmFyIG5hdGl2ZUZldGNoID0gc2FmZUdldEJ1aWx0SW4oJ2ZldGNoJyk7XG52YXIgTmF0aXZlUmVxdWVzdCA9IHNhZmVHZXRCdWlsdEluKCdSZXF1ZXN0Jyk7XG52YXIgSGVhZGVycyA9IHNhZmVHZXRCdWlsdEluKCdIZWFkZXJzJyk7XG52YXIgUmVxdWVzdFByb3RvdHlwZSA9IE5hdGl2ZVJlcXVlc3QgJiYgTmF0aXZlUmVxdWVzdC5wcm90b3R5cGU7XG52YXIgSGVhZGVyc1Byb3RvdHlwZSA9IEhlYWRlcnMgJiYgSGVhZGVycy5wcm90b3R5cGU7XG52YXIgUmVnRXhwID0gZ2xvYmFsLlJlZ0V4cDtcbnZhciBUeXBlRXJyb3IgPSBnbG9iYWwuVHlwZUVycm9yO1xudmFyIGRlY29kZVVSSUNvbXBvbmVudCA9IGdsb2JhbC5kZWNvZGVVUklDb21wb25lbnQ7XG52YXIgZW5jb2RlVVJJQ29tcG9uZW50ID0gZ2xvYmFsLmVuY29kZVVSSUNvbXBvbmVudDtcbnZhciBjaGFyQXQgPSB1bmN1cnJ5VGhpcygnJy5jaGFyQXQpO1xudmFyIGpvaW4gPSB1bmN1cnJ5VGhpcyhbXS5qb2luKTtcbnZhciBwdXNoID0gdW5jdXJyeVRoaXMoW10ucHVzaCk7XG52YXIgcmVwbGFjZSA9IHVuY3VycnlUaGlzKCcnLnJlcGxhY2UpO1xudmFyIHNoaWZ0ID0gdW5jdXJyeVRoaXMoW10uc2hpZnQpO1xudmFyIHNwbGljZSA9IHVuY3VycnlUaGlzKFtdLnNwbGljZSk7XG52YXIgc3BsaXQgPSB1bmN1cnJ5VGhpcygnJy5zcGxpdCk7XG52YXIgc3RyaW5nU2xpY2UgPSB1bmN1cnJ5VGhpcygnJy5zbGljZSk7XG5cbnZhciBwbHVzID0gL1xcKy9nO1xudmFyIHNlcXVlbmNlcyA9IEFycmF5KDQpO1xuXG52YXIgcGVyY2VudFNlcXVlbmNlID0gZnVuY3Rpb24gKGJ5dGVzKSB7XG4gIHJldHVybiBzZXF1ZW5jZXNbYnl0ZXMgLSAxXSB8fCAoc2VxdWVuY2VzW2J5dGVzIC0gMV0gPSBSZWdFeHAoJygoPzolW1xcXFxkYS1mXXsyfSl7JyArIGJ5dGVzICsgJ30pJywgJ2dpJykpO1xufTtcblxudmFyIHBlcmNlbnREZWNvZGUgPSBmdW5jdGlvbiAoc2VxdWVuY2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHNlcXVlbmNlKTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gc2VxdWVuY2U7XG4gIH1cbn07XG5cbnZhciBkZXNlcmlhbGl6ZSA9IGZ1bmN0aW9uIChpdCkge1xuICB2YXIgcmVzdWx0ID0gcmVwbGFjZShpdCwgcGx1cywgJyAnKTtcbiAgdmFyIGJ5dGVzID0gNDtcbiAgdHJ5IHtcbiAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHJlc3VsdCk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgd2hpbGUgKGJ5dGVzKSB7XG4gICAgICByZXN1bHQgPSByZXBsYWNlKHJlc3VsdCwgcGVyY2VudFNlcXVlbmNlKGJ5dGVzLS0pLCBwZXJjZW50RGVjb2RlKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufTtcblxudmFyIGZpbmQgPSAvWyEnKCl+XXwlMjAvZztcblxudmFyIHJlcGxhY2VtZW50cyA9IHtcbiAgJyEnOiAnJTIxJyxcbiAgXCInXCI6ICclMjcnLFxuICAnKCc6ICclMjgnLFxuICAnKSc6ICclMjknLFxuICAnfic6ICclN0UnLFxuICAnJTIwJzogJysnXG59O1xuXG52YXIgcmVwbGFjZXIgPSBmdW5jdGlvbiAobWF0Y2gpIHtcbiAgcmV0dXJuIHJlcGxhY2VtZW50c1ttYXRjaF07XG59O1xuXG52YXIgc2VyaWFsaXplID0gZnVuY3Rpb24gKGl0KSB7XG4gIHJldHVybiByZXBsYWNlKGVuY29kZVVSSUNvbXBvbmVudChpdCksIGZpbmQsIHJlcGxhY2VyKTtcbn07XG5cbnZhciBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvciA9IGNyZWF0ZUl0ZXJhdG9yQ29uc3RydWN0b3IoZnVuY3Rpb24gSXRlcmF0b3IocGFyYW1zLCBraW5kKSB7XG4gIHNldEludGVybmFsU3RhdGUodGhpcywge1xuICAgIHR5cGU6IFVSTF9TRUFSQ0hfUEFSQU1TX0lURVJBVE9SLFxuICAgIGl0ZXJhdG9yOiBnZXRJdGVyYXRvcihnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHBhcmFtcykuZW50cmllcyksXG4gICAga2luZDoga2luZFxuICB9KTtcbn0sICdJdGVyYXRvcicsIGZ1bmN0aW9uIG5leHQoKSB7XG4gIHZhciBzdGF0ZSA9IGdldEludGVybmFsSXRlcmF0b3JTdGF0ZSh0aGlzKTtcbiAgdmFyIGtpbmQgPSBzdGF0ZS5raW5kO1xuICB2YXIgc3RlcCA9IHN0YXRlLml0ZXJhdG9yLm5leHQoKTtcbiAgdmFyIGVudHJ5ID0gc3RlcC52YWx1ZTtcbiAgaWYgKCFzdGVwLmRvbmUpIHtcbiAgICBzdGVwLnZhbHVlID0ga2luZCA9PT0gJ2tleXMnID8gZW50cnkua2V5IDoga2luZCA9PT0gJ3ZhbHVlcycgPyBlbnRyeS52YWx1ZSA6IFtlbnRyeS5rZXksIGVudHJ5LnZhbHVlXTtcbiAgfSByZXR1cm4gc3RlcDtcbn0sIHRydWUpO1xuXG52YXIgVVJMU2VhcmNoUGFyYW1zU3RhdGUgPSBmdW5jdGlvbiAoaW5pdCkge1xuICB0aGlzLmVudHJpZXMgPSBbXTtcbiAgdGhpcy51cmwgPSBudWxsO1xuXG4gIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaXNPYmplY3QoaW5pdCkpIHRoaXMucGFyc2VPYmplY3QoaW5pdCk7XG4gICAgZWxzZSB0aGlzLnBhcnNlUXVlcnkodHlwZW9mIGluaXQgPT0gJ3N0cmluZycgPyBjaGFyQXQoaW5pdCwgMCkgPT09ICc/JyA/IHN0cmluZ1NsaWNlKGluaXQsIDEpIDogaW5pdCA6ICR0b1N0cmluZyhpbml0KSk7XG4gIH1cbn07XG5cblVSTFNlYXJjaFBhcmFtc1N0YXRlLnByb3RvdHlwZSA9IHtcbiAgdHlwZTogVVJMX1NFQVJDSF9QQVJBTVMsXG4gIGJpbmRVUkw6IGZ1bmN0aW9uICh1cmwpIHtcbiAgICB0aGlzLnVybCA9IHVybDtcbiAgICB0aGlzLnVwZGF0ZSgpO1xuICB9LFxuICBwYXJzZU9iamVjdDogZnVuY3Rpb24gKG9iamVjdCkge1xuICAgIHZhciBpdGVyYXRvck1ldGhvZCA9IGdldEl0ZXJhdG9yTWV0aG9kKG9iamVjdCk7XG4gICAgdmFyIGl0ZXJhdG9yLCBuZXh0LCBzdGVwLCBlbnRyeUl0ZXJhdG9yLCBlbnRyeU5leHQsIGZpcnN0LCBzZWNvbmQ7XG5cbiAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgIGl0ZXJhdG9yID0gZ2V0SXRlcmF0b3Iob2JqZWN0LCBpdGVyYXRvck1ldGhvZCk7XG4gICAgICBuZXh0ID0gaXRlcmF0b3IubmV4dDtcbiAgICAgIHdoaWxlICghKHN0ZXAgPSBjYWxsKG5leHQsIGl0ZXJhdG9yKSkuZG9uZSkge1xuICAgICAgICBlbnRyeUl0ZXJhdG9yID0gZ2V0SXRlcmF0b3IoYW5PYmplY3Qoc3RlcC52YWx1ZSkpO1xuICAgICAgICBlbnRyeU5leHQgPSBlbnRyeUl0ZXJhdG9yLm5leHQ7XG4gICAgICAgIGlmIChcbiAgICAgICAgICAoZmlyc3QgPSBjYWxsKGVudHJ5TmV4dCwgZW50cnlJdGVyYXRvcikpLmRvbmUgfHxcbiAgICAgICAgICAoc2Vjb25kID0gY2FsbChlbnRyeU5leHQsIGVudHJ5SXRlcmF0b3IpKS5kb25lIHx8XG4gICAgICAgICAgIWNhbGwoZW50cnlOZXh0LCBlbnRyeUl0ZXJhdG9yKS5kb25lXG4gICAgICAgICkgdGhyb3cgVHlwZUVycm9yKCdFeHBlY3RlZCBzZXF1ZW5jZSB3aXRoIGxlbmd0aCAyJyk7XG4gICAgICAgIHB1c2godGhpcy5lbnRyaWVzLCB7IGtleTogJHRvU3RyaW5nKGZpcnN0LnZhbHVlKSwgdmFsdWU6ICR0b1N0cmluZyhzZWNvbmQudmFsdWUpIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSBmb3IgKHZhciBrZXkgaW4gb2JqZWN0KSBpZiAoaGFzT3duKG9iamVjdCwga2V5KSkge1xuICAgICAgcHVzaCh0aGlzLmVudHJpZXMsIHsga2V5OiBrZXksIHZhbHVlOiAkdG9TdHJpbmcob2JqZWN0W2tleV0pIH0pO1xuICAgIH1cbiAgfSxcbiAgcGFyc2VRdWVyeTogZnVuY3Rpb24gKHF1ZXJ5KSB7XG4gICAgaWYgKHF1ZXJ5KSB7XG4gICAgICB2YXIgYXR0cmlidXRlcyA9IHNwbGl0KHF1ZXJ5LCAnJicpO1xuICAgICAgdmFyIGluZGV4ID0gMDtcbiAgICAgIHZhciBhdHRyaWJ1dGUsIGVudHJ5O1xuICAgICAgd2hpbGUgKGluZGV4IDwgYXR0cmlidXRlcy5sZW5ndGgpIHtcbiAgICAgICAgYXR0cmlidXRlID0gYXR0cmlidXRlc1tpbmRleCsrXTtcbiAgICAgICAgaWYgKGF0dHJpYnV0ZS5sZW5ndGgpIHtcbiAgICAgICAgICBlbnRyeSA9IHNwbGl0KGF0dHJpYnV0ZSwgJz0nKTtcbiAgICAgICAgICBwdXNoKHRoaXMuZW50cmllcywge1xuICAgICAgICAgICAga2V5OiBkZXNlcmlhbGl6ZShzaGlmdChlbnRyeSkpLFxuICAgICAgICAgICAgdmFsdWU6IGRlc2VyaWFsaXplKGpvaW4oZW50cnksICc9JykpXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0sXG4gIHNlcmlhbGl6ZTogZnVuY3Rpb24gKCkge1xuICAgIHZhciBlbnRyaWVzID0gdGhpcy5lbnRyaWVzO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgcHVzaChyZXN1bHQsIHNlcmlhbGl6ZShlbnRyeS5rZXkpICsgJz0nICsgc2VyaWFsaXplKGVudHJ5LnZhbHVlKSk7XG4gICAgfSByZXR1cm4gam9pbihyZXN1bHQsICcmJyk7XG4gIH0sXG4gIHVwZGF0ZTogZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZW50cmllcy5sZW5ndGggPSAwO1xuICAgIHRoaXMucGFyc2VRdWVyeSh0aGlzLnVybC5xdWVyeSk7XG4gIH0sXG4gIHVwZGF0ZVVSTDogZnVuY3Rpb24gKCkge1xuICAgIGlmICh0aGlzLnVybCkgdGhpcy51cmwudXBkYXRlKCk7XG4gIH1cbn07XG5cbi8vIGBVUkxTZWFyY2hQYXJhbXNgIGNvbnN0cnVjdG9yXG4vLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2ludGVyZmFjZS11cmxzZWFyY2hwYXJhbXNcbnZhciBVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uIFVSTFNlYXJjaFBhcmFtcygvKiBpbml0ICovKSB7XG4gIGFuSW5zdGFuY2UodGhpcywgVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlKTtcbiAgdmFyIGluaXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMCA/IGFyZ3VtZW50c1swXSA6IHVuZGVmaW5lZDtcbiAgc2V0SW50ZXJuYWxTdGF0ZSh0aGlzLCBuZXcgVVJMU2VhcmNoUGFyYW1zU3RhdGUoaW5pdCkpO1xufTtcblxudmFyIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSA9IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLnByb3RvdHlwZTtcblxuZGVmaW5lQnVpbHRJbnMoVVJMU2VhcmNoUGFyYW1zUHJvdG90eXBlLCB7XG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmFwcGVuZGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1hcHBlbmRcbiAgYXBwZW5kOiBmdW5jdGlvbiBhcHBlbmQobmFtZSwgdmFsdWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAyKTtcbiAgICB2YXIgc3RhdGUgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpO1xuICAgIHB1c2goc3RhdGUuZW50cmllcywgeyBrZXk6ICR0b1N0cmluZyhuYW1lKSwgdmFsdWU6ICR0b1N0cmluZyh2YWx1ZSkgfSk7XG4gICAgc3RhdGUudXBkYXRlVVJMKCk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmRlbGV0ZWAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1kZWxldGVcbiAgJ2RlbGV0ZSc6IGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHdoaWxlIChpbmRleCA8IGVudHJpZXMubGVuZ3RoKSB7XG4gICAgICBpZiAoZW50cmllc1tpbmRleF0ua2V5ID09PSBrZXkpIHNwbGljZShlbnRyaWVzLCBpbmRleCwgMSk7XG4gICAgICBlbHNlIGluZGV4Kys7XG4gICAgfVxuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5nZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtZ2V0XG4gIGdldDogZnVuY3Rpb24gZ2V0KG5hbWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgZm9yICg7IGluZGV4IDwgZW50cmllcy5sZW5ndGg7IGluZGV4KyspIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4XS5rZXkgPT09IGtleSkgcmV0dXJuIGVudHJpZXNbaW5kZXhdLnZhbHVlO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuZ2V0QWxsYCBtZXRob2RcbiAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNkb20tdXJsc2VhcmNocGFyYW1zLWdldGFsbFxuICBnZXRBbGw6IGZ1bmN0aW9uIGdldEFsbChuYW1lKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIGVudHJpZXMgPSBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLmVudHJpZXM7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgcmVzdWx0ID0gW107XG4gICAgdmFyIGluZGV4ID0gMDtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgaWYgKGVudHJpZXNbaW5kZXhdLmtleSA9PT0ga2V5KSBwdXNoKHJlc3VsdCwgZW50cmllc1tpbmRleF0udmFsdWUpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5oYXNgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtaGFzXG4gIGhhczogZnVuY3Rpb24gaGFzKG5hbWUpIHtcbiAgICB2YWxpZGF0ZUFyZ3VtZW50c0xlbmd0aChhcmd1bWVudHMubGVuZ3RoLCAxKTtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIga2V5ID0gJHRvU3RyaW5nKG5hbWUpO1xuICAgIHZhciBpbmRleCA9IDA7XG4gICAgd2hpbGUgKGluZGV4IDwgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgIGlmIChlbnRyaWVzW2luZGV4KytdLmtleSA9PT0ga2V5KSByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5zZXRgIG1ldGhvZFxuICAvLyBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2RvbS11cmxzZWFyY2hwYXJhbXMtc2V0XG4gIHNldDogZnVuY3Rpb24gc2V0KG5hbWUsIHZhbHVlKSB7XG4gICAgdmFsaWRhdGVBcmd1bWVudHNMZW5ndGgoYXJndW1lbnRzLmxlbmd0aCwgMSk7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICB2YXIgZW50cmllcyA9IHN0YXRlLmVudHJpZXM7XG4gICAgdmFyIGZvdW5kID0gZmFsc2U7XG4gICAgdmFyIGtleSA9ICR0b1N0cmluZyhuYW1lKTtcbiAgICB2YXIgdmFsID0gJHRvU3RyaW5nKHZhbHVlKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICBmb3IgKDsgaW5kZXggPCBlbnRyaWVzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4XTtcbiAgICAgIGlmIChlbnRyeS5rZXkgPT09IGtleSkge1xuICAgICAgICBpZiAoZm91bmQpIHNwbGljZShlbnRyaWVzLCBpbmRleC0tLCAxKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgIGVudHJ5LnZhbHVlID0gdmFsO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGlmICghZm91bmQpIHB1c2goZW50cmllcywgeyBrZXk6IGtleSwgdmFsdWU6IHZhbCB9KTtcbiAgICBzdGF0ZS51cGRhdGVVUkwoKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUuc29ydGAgbWV0aG9kXG4gIC8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jZG9tLXVybHNlYXJjaHBhcmFtcy1zb3J0XG4gIHNvcnQ6IGZ1bmN0aW9uIHNvcnQoKSB7XG4gICAgdmFyIHN0YXRlID0gZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZSh0aGlzKTtcbiAgICBhcnJheVNvcnQoc3RhdGUuZW50cmllcywgZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgIHJldHVybiBhLmtleSA+IGIua2V5ID8gMSA6IC0xO1xuICAgIH0pO1xuICAgIHN0YXRlLnVwZGF0ZVVSTCgpO1xuICB9LFxuICAvLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5mb3JFYWNoYCBtZXRob2RcbiAgZm9yRWFjaDogZnVuY3Rpb24gZm9yRWFjaChjYWxsYmFjayAvKiAsIHRoaXNBcmcgKi8pIHtcbiAgICB2YXIgZW50cmllcyA9IGdldEludGVybmFsUGFyYW1zU3RhdGUodGhpcykuZW50cmllcztcbiAgICB2YXIgYm91bmRGdW5jdGlvbiA9IGJpbmQoY2FsbGJhY2ssIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gYXJndW1lbnRzWzFdIDogdW5kZWZpbmVkKTtcbiAgICB2YXIgaW5kZXggPSAwO1xuICAgIHZhciBlbnRyeTtcbiAgICB3aGlsZSAoaW5kZXggPCBlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgZW50cnkgPSBlbnRyaWVzW2luZGV4KytdO1xuICAgICAgYm91bmRGdW5jdGlvbihlbnRyeS52YWx1ZSwgZW50cnkua2V5LCB0aGlzKTtcbiAgICB9XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmtleXNgIG1ldGhvZFxuICBrZXlzOiBmdW5jdGlvbiBrZXlzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2tleXMnKTtcbiAgfSxcbiAgLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudmFsdWVzYCBtZXRob2RcbiAgdmFsdWVzOiBmdW5jdGlvbiB2YWx1ZXMoKSB7XG4gICAgcmV0dXJuIG5ldyBVUkxTZWFyY2hQYXJhbXNJdGVyYXRvcih0aGlzLCAndmFsdWVzJyk7XG4gIH0sXG4gIC8vIGBVUkxTZWFyY2hQYXJhbXMucHJvdG90eXBlLmVudHJpZXNgIG1ldGhvZFxuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKCkge1xuICAgIHJldHVybiBuZXcgVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IodGhpcywgJ2VudHJpZXMnKTtcbiAgfVxufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG4vLyBgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZVtAQGl0ZXJhdG9yXWAgbWV0aG9kXG5kZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgSVRFUkFUT1IsIFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZS5lbnRyaWVzLCB7IG5hbWU6ICdlbnRyaWVzJyB9KTtcblxuLy8gYFVSTFNlYXJjaFBhcmFtcy5wcm90b3R5cGUudG9TdHJpbmdgIG1ldGhvZFxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyN1cmxzZWFyY2hwYXJhbXMtc3RyaW5naWZpY2F0aW9uLWJlaGF2aW9yXG5kZWZpbmVCdWlsdEluKFVSTFNlYXJjaFBhcmFtc1Byb3RvdHlwZSwgJ3RvU3RyaW5nJywgZnVuY3Rpb24gdG9TdHJpbmcoKSB7XG4gIHJldHVybiBnZXRJbnRlcm5hbFBhcmFtc1N0YXRlKHRoaXMpLnNlcmlhbGl6ZSgpO1xufSwgeyBlbnVtZXJhYmxlOiB0cnVlIH0pO1xuXG5zZXRUb1N0cmluZ1RhZyhVUkxTZWFyY2hQYXJhbXNDb25zdHJ1Y3RvciwgVVJMX1NFQVJDSF9QQVJBTVMpO1xuXG4kKHsgZ2xvYmFsOiB0cnVlLCBjb25zdHJ1Y3RvcjogdHJ1ZSwgZm9yY2VkOiAhVVNFX05BVElWRV9VUkwgfSwge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yXG59KTtcblxuLy8gV3JhcCBgZmV0Y2hgIGFuZCBgUmVxdWVzdGAgZm9yIGNvcnJlY3Qgd29yayB3aXRoIHBvbHlmaWxsZWQgYFVSTFNlYXJjaFBhcmFtc2BcbmlmICghVVNFX05BVElWRV9VUkwgJiYgaXNDYWxsYWJsZShIZWFkZXJzKSkge1xuICB2YXIgaGVhZGVyc0hhcyA9IHVuY3VycnlUaGlzKEhlYWRlcnNQcm90b3R5cGUuaGFzKTtcbiAgdmFyIGhlYWRlcnNTZXQgPSB1bmN1cnJ5VGhpcyhIZWFkZXJzUHJvdG90eXBlLnNldCk7XG5cbiAgdmFyIHdyYXBSZXF1ZXN0T3B0aW9ucyA9IGZ1bmN0aW9uIChpbml0KSB7XG4gICAgaWYgKGlzT2JqZWN0KGluaXQpKSB7XG4gICAgICB2YXIgYm9keSA9IGluaXQuYm9keTtcbiAgICAgIHZhciBoZWFkZXJzO1xuICAgICAgaWYgKGNsYXNzb2YoYm9keSkgPT09IFVSTF9TRUFSQ0hfUEFSQU1TKSB7XG4gICAgICAgIGhlYWRlcnMgPSBpbml0LmhlYWRlcnMgPyBuZXcgSGVhZGVycyhpbml0LmhlYWRlcnMpIDogbmV3IEhlYWRlcnMoKTtcbiAgICAgICAgaWYgKCFoZWFkZXJzSGFzKGhlYWRlcnMsICdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgIGhlYWRlcnNTZXQoaGVhZGVycywgJ2NvbnRlbnQtdHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCcpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjcmVhdGUoaW5pdCwge1xuICAgICAgICAgIGJvZHk6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCAkdG9TdHJpbmcoYm9keSkpLFxuICAgICAgICAgIGhlYWRlcnM6IGNyZWF0ZVByb3BlcnR5RGVzY3JpcHRvcigwLCBoZWFkZXJzKVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IHJldHVybiBpbml0O1xuICB9O1xuXG4gIGlmIChpc0NhbGxhYmxlKG5hdGl2ZUZldGNoKSkge1xuICAgICQoeyBnbG9iYWw6IHRydWUsIGVudW1lcmFibGU6IHRydWUsIGRvbnRDYWxsR2V0U2V0OiB0cnVlLCBmb3JjZWQ6IHRydWUgfSwge1xuICAgICAgZmV0Y2g6IGZ1bmN0aW9uIGZldGNoKGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgICByZXR1cm4gbmF0aXZlRmV0Y2goaW5wdXQsIGFyZ3VtZW50cy5sZW5ndGggPiAxID8gd3JhcFJlcXVlc3RPcHRpb25zKGFyZ3VtZW50c1sxXSkgOiB7fSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBpZiAoaXNDYWxsYWJsZShOYXRpdmVSZXF1ZXN0KSkge1xuICAgIHZhciBSZXF1ZXN0Q29uc3RydWN0b3IgPSBmdW5jdGlvbiBSZXF1ZXN0KGlucHV0IC8qICwgaW5pdCAqLykge1xuICAgICAgYW5JbnN0YW5jZSh0aGlzLCBSZXF1ZXN0UHJvdG90eXBlKTtcbiAgICAgIHJldHVybiBuZXcgTmF0aXZlUmVxdWVzdChpbnB1dCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyB3cmFwUmVxdWVzdE9wdGlvbnMoYXJndW1lbnRzWzFdKSA6IHt9KTtcbiAgICB9O1xuXG4gICAgUmVxdWVzdFByb3RvdHlwZS5jb25zdHJ1Y3RvciA9IFJlcXVlc3RDb25zdHJ1Y3RvcjtcbiAgICBSZXF1ZXN0Q29uc3RydWN0b3IucHJvdG90eXBlID0gUmVxdWVzdFByb3RvdHlwZTtcblxuICAgICQoeyBnbG9iYWw6IHRydWUsIGNvbnN0cnVjdG9yOiB0cnVlLCBkb250Q2FsbEdldFNldDogdHJ1ZSwgZm9yY2VkOiB0cnVlIH0sIHtcbiAgICAgIFJlcXVlc3Q6IFJlcXVlc3RDb25zdHJ1Y3RvclxuICAgIH0pO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBVUkxTZWFyY2hQYXJhbXM6IFVSTFNlYXJjaFBhcmFtc0NvbnN0cnVjdG9yLFxuICBnZXRTdGF0ZTogZ2V0SW50ZXJuYWxQYXJhbXNTdGF0ZVxufTtcbiIsIi8vIFRPRE86IFJlbW92ZSB0aGlzIG1vZHVsZSBmcm9tIGBjb3JlLWpzQDRgIHNpbmNlIGl0J3MgcmVwbGFjZWQgdG8gbW9kdWxlIGJlbG93XG5yZXF1aXJlKCcuLi9tb2R1bGVzL3dlYi51cmwtc2VhcmNoLXBhcmFtcy5jb25zdHJ1Y3RvcicpO1xuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uL25vZGVfbW9kdWxlcy9jc3MtbG9hZGVyL2Rpc3QvcnVudGltZS9zb3VyY2VNYXBzLmpzXCI7XG5pbXBvcnQgX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fIGZyb20gXCIuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvYXBpLmpzXCI7XG52YXIgX19fQ1NTX0xPQURFUl9FWFBPUlRfX18gPSBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18oX19fQ1NTX0xPQURFUl9BUElfU09VUkNFTUFQX0lNUE9SVF9fXyk7XG4vLyBNb2R1bGVcbl9fX0NTU19MT0FERVJfRVhQT1JUX19fLnB1c2goW21vZHVsZS5pZCwgXCIjcGF5LXRoZW9yeS1iYWRnZS13cmFwcGVyIHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXFx0YWxpZ24tY29udGVudDogY2VudGVyO1xcblxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uY29tYmluZWQge1xcblxcdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG5cXHRhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4jZmllbGQtd3JhcHBlci1jYXJkLW51bWJlciB7XFxuXFx0bWluLXdpZHRoOiAyMTNweDtcXG5cXHRmbGV4LWdyb3c6IDE7XFxufVxcblxcbiNmaWVsZC13cmFwcGVyLWNhcmQtZXhwIHtcXG5cXHRtaW4td2lkdGg6IDc1cHg7XFxufVxcblxcbiNmaWVsZC13cmFwcGVyLWNhcmQtY3Z2IHtcXG5cXHRtaW4td2lkdGg6IDc1cHg7XFxufVxcblxcbiNmaWVsZC13cmFwcGVyLWFkZHJlc3MtcG9zdGFsX2NvZGUge1xcblxcdG1pbi13aWR0aDogNzVweDtcXG59XFxuXFxuLmZpZWxkLXdyYXBwZXIge1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmZpZWxkLXdyYXBwZXIgaWZyYW1lIHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdG1heC1oZWlnaHQ6IDcycHg7XFxuXFx0bWluLWhlaWdodDogMThweDtcXG5cXHRoZWlnaHQ6IGF1dG87XFxufVxcblxcbi5wYXktdGhlb3J5LWZpZWxkIHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuXFx0d2lkdGg6IGF1dG87XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4jcGF5LXRoZW9yeS1jcmVkaXQtY2FyZCB7XFxuXFx0d2lkdGg6IDQwMHB4O1xcbn1cXG5cXG4jcGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1udW1iZXIge1xcblxcdHdpZHRoOiAzNDBweDtcXG59XFxuXFxuLnBheS10aGVvcnktZmllbGQgZGl2IHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLmZyYW1lZCB7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuXCIsIFwiXCIse1widmVyc2lvblwiOjMsXCJzb3VyY2VzXCI6W1wid2VicGFjazovLy4vc3JjL3N0eWxlLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtDQUNDLGFBQWE7Q0FDYixzQkFBc0I7Q0FDdEIscUJBQXFCO0NBQ3JCLHVCQUF1QjtBQUN4Qjs7QUFFQTtDQUNDLDJCQUEyQjtDQUMzQixtQkFBbUI7QUFDcEI7O0FBRUE7Q0FDQyxnQkFBZ0I7Q0FDaEIsWUFBWTtBQUNiOztBQUVBO0NBQ0MsZUFBZTtBQUNoQjs7QUFFQTtDQUNDLGVBQWU7QUFDaEI7O0FBRUE7Q0FDQyxlQUFlO0FBQ2hCOztBQUVBO0NBQ0MsYUFBYTtDQUNiLHVCQUF1QjtDQUN2QixzQkFBc0I7QUFDdkI7O0FBRUE7Q0FDQyxXQUFXO0NBQ1gscUJBQXFCO0NBQ3JCLFlBQVk7Q0FDWixnQkFBZ0I7Q0FDaEIsZ0JBQWdCO0NBQ2hCLFlBQVk7QUFDYjs7QUFFQTtDQUNDLGFBQWE7Q0FDYixtQkFBbUI7Q0FDbkIsV0FBVztDQUNYLFlBQVk7QUFDYjs7QUFFQTtDQUNDLFlBQVk7QUFDYjs7QUFFQTtDQUNDLFlBQVk7QUFDYjs7QUFFQTtDQUNDLGFBQWE7Q0FDYixZQUFZO0FBQ2I7O0FBRUE7Q0FDQyxhQUFhO0NBQ2Isc0JBQXNCO0NBQ3RCLFlBQVk7QUFDYlwiLFwic291cmNlc0NvbnRlbnRcIjpbXCIjcGF5LXRoZW9yeS1iYWRnZS13cmFwcGVyIHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XFxuXFx0YWxpZ24tY29udGVudDogY2VudGVyO1xcblxcdGp1c3RpZnktY29udGVudDogY2VudGVyO1xcbn1cXG5cXG4uY29tYmluZWQge1xcblxcdGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDtcXG5cXHRhbGlnbi1pdGVtczogY2VudGVyO1xcbn1cXG5cXG4jZmllbGQtd3JhcHBlci1jYXJkLW51bWJlciB7XFxuXFx0bWluLXdpZHRoOiAyMTNweDtcXG5cXHRmbGV4LWdyb3c6IDE7XFxufVxcblxcbiNmaWVsZC13cmFwcGVyLWNhcmQtZXhwIHtcXG5cXHRtaW4td2lkdGg6IDc1cHg7XFxufVxcblxcbiNmaWVsZC13cmFwcGVyLWNhcmQtY3Z2IHtcXG5cXHRtaW4td2lkdGg6IDc1cHg7XFxufVxcblxcbiNmaWVsZC13cmFwcGVyLWFkZHJlc3MtcG9zdGFsX2NvZGUge1xcblxcdG1pbi13aWR0aDogNzVweDtcXG59XFxuXFxuLmZpZWxkLXdyYXBwZXIge1xcblxcdGRpc3BsYXk6IGZsZXg7XFxuXFx0anVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuXFx0ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcXG59XFxuXFxuLmZpZWxkLXdyYXBwZXIgaWZyYW1lIHtcXG5cXHR3aWR0aDogMTAwJTtcXG5cXHRkaXNwbGF5OiBpbmxpbmUtYmxvY2s7XFxuXFx0Ym9yZGVyOiBub25lO1xcblxcdG1heC1oZWlnaHQ6IDcycHg7XFxuXFx0bWluLWhlaWdodDogMThweDtcXG5cXHRoZWlnaHQ6IGF1dG87XFxufVxcblxcbi5wYXktdGhlb3J5LWZpZWxkIHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuXFx0d2lkdGg6IGF1dG87XFxuXFx0aGVpZ2h0OiAxMDAlO1xcbn1cXG5cXG4jcGF5LXRoZW9yeS1jcmVkaXQtY2FyZCB7XFxuXFx0d2lkdGg6IDQwMHB4O1xcbn1cXG5cXG4jcGF5LXRoZW9yeS1jcmVkaXQtY2FyZC1udW1iZXIge1xcblxcdHdpZHRoOiAzNDBweDtcXG59XFxuXFxuLnBheS10aGVvcnktZmllbGQgZGl2IHtcXG5cXHRkaXNwbGF5OiBmbGV4O1xcblxcdGZsZXgtZ3JvdzogMTtcXG59XFxuXFxuLmZyYW1lZCB7XFxuXFx0ZGlzcGxheTogZmxleDtcXG5cXHRmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xcblxcdGhlaWdodDogMTAwJTtcXG59XFxuXCJdLFwic291cmNlUm9vdFwiOlwiXCJ9XSk7XG4vLyBFeHBvcnRzXG5leHBvcnQgZGVmYXVsdCBfX19DU1NfTE9BREVSX0VYUE9SVF9fXztcbiIsIlwidXNlIHN0cmljdFwiO1xuXG4vKlxuICBNSVQgTGljZW5zZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL21pdC1saWNlbnNlLnBocFxuICBBdXRob3IgVG9iaWFzIEtvcHBlcnMgQHNva3JhXG4qL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoY3NzV2l0aE1hcHBpbmdUb1N0cmluZykge1xuICB2YXIgbGlzdCA9IFtdOyAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG5cbiAgbGlzdC50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nKCkge1xuICAgIHJldHVybiB0aGlzLm1hcChmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgdmFyIGNvbnRlbnQgPSBcIlwiO1xuICAgICAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBpdGVtWzVdICE9PSBcInVuZGVmaW5lZFwiO1xuXG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQoaXRlbVs0XSwgXCIpIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIkBsYXllclwiLmNvbmNhdChpdGVtWzVdLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQoaXRlbVs1XSkgOiBcIlwiLCBcIiB7XCIpO1xuICAgICAgfVxuXG4gICAgICBjb250ZW50ICs9IGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcoaXRlbSk7XG5cbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bMl0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgaWYgKGl0ZW1bNF0pIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTsgLy8gaW1wb3J0IGEgbGlzdCBvZiBtb2R1bGVzIGludG8gdGhlIGxpc3RcblxuXG4gIGxpc3QuaSA9IGZ1bmN0aW9uIGkobW9kdWxlcywgbWVkaWEsIGRlZHVwZSwgc3VwcG9ydHMsIGxheWVyKSB7XG4gICAgaWYgKHR5cGVvZiBtb2R1bGVzID09PSBcInN0cmluZ1wiKSB7XG4gICAgICBtb2R1bGVzID0gW1tudWxsLCBtb2R1bGVzLCB1bmRlZmluZWRdXTtcbiAgICB9XG5cbiAgICB2YXIgYWxyZWFkeUltcG9ydGVkTW9kdWxlcyA9IHt9O1xuXG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG5cbiAgICAgICAgaWYgKGlkICE9IG51bGwpIHtcbiAgICAgICAgICBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2lkXSA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBmb3IgKHZhciBfayA9IDA7IF9rIDwgbW9kdWxlcy5sZW5ndGg7IF9rKyspIHtcbiAgICAgIHZhciBpdGVtID0gW10uY29uY2F0KG1vZHVsZXNbX2tdKTtcblxuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGxheWVyICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgICAgIGlmICh0eXBlb2YgaXRlbVs1XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNV0gPSBsYXllcjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAobWVkaWEpIHtcbiAgICAgICAgaWYgKCFpdGVtWzJdKSB7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGl0ZW1bMV0gPSBcIkBtZWRpYSBcIi5jb25jYXQoaXRlbVsyXSwgXCIge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bMl0gPSBtZWRpYTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBsaXN0LnB1c2goaXRlbSk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiBsaXN0O1xufTsiLCJcInVzZSBzdHJpY3RcIjtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoaXRlbSkge1xuICB2YXIgY29udGVudCA9IGl0ZW1bMV07XG4gIHZhciBjc3NNYXBwaW5nID0gaXRlbVszXTtcblxuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuXG4gIGlmICh0eXBlb2YgYnRvYSA9PT0gXCJmdW5jdGlvblwiKSB7XG4gICAgdmFyIGJhc2U2NCA9IGJ0b2EodW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEpTT04uc3RyaW5naWZ5KGNzc01hcHBpbmcpKSkpO1xuICAgIHZhciBkYXRhID0gXCJzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PXV0Zi04O2Jhc2U2NCxcIi5jb25jYXQoYmFzZTY0KTtcbiAgICB2YXIgc291cmNlTWFwcGluZyA9IFwiLyojIFwiLmNvbmNhdChkYXRhLCBcIiAqL1wiKTtcbiAgICB2YXIgc291cmNlVVJMcyA9IGNzc01hcHBpbmcuc291cmNlcy5tYXAoZnVuY3Rpb24gKHNvdXJjZSkge1xuICAgICAgcmV0dXJuIFwiLyojIHNvdXJjZVVSTD1cIi5jb25jYXQoY3NzTWFwcGluZy5zb3VyY2VSb290IHx8IFwiXCIpLmNvbmNhdChzb3VyY2UsIFwiICovXCIpO1xuICAgIH0pO1xuICAgIHJldHVybiBbY29udGVudF0uY29uY2F0KHNvdXJjZVVSTHMpLmNvbmNhdChbc291cmNlTWFwcGluZ10pLmpvaW4oXCJcXG5cIik7XG4gIH1cblxuICByZXR1cm4gW2NvbnRlbnRdLmpvaW4oXCJcXG5cIik7XG59OyIsIi8qISBAbGljZW5zZSBET01QdXJpZnkgMi4zLjggfCAoYykgQ3VyZTUzIGFuZCBvdGhlciBjb250cmlidXRvcnMgfCBSZWxlYXNlZCB1bmRlciB0aGUgQXBhY2hlIGxpY2Vuc2UgMi4wIGFuZCBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIDIuMCB8IGdpdGh1Yi5jb20vY3VyZTUzL0RPTVB1cmlmeS9ibG9iLzIuMy44L0xJQ0VOU0UgKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgdHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnICYmIHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnID8gbW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCkgOlxuICB0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQgPyBkZWZpbmUoZmFjdG9yeSkgOlxuICAoZ2xvYmFsID0gdHlwZW9mIGdsb2JhbFRoaXMgIT09ICd1bmRlZmluZWQnID8gZ2xvYmFsVGhpcyA6IGdsb2JhbCB8fCBzZWxmLCBnbG9iYWwuRE9NUHVyaWZ5ID0gZmFjdG9yeSgpKTtcbn0pKHRoaXMsIChmdW5jdGlvbiAoKSB7ICd1c2Ugc3RyaWN0JztcblxuICBmdW5jdGlvbiBfdHlwZW9mKG9iaikge1xuICAgIFwiQGJhYmVsL2hlbHBlcnMgLSB0eXBlb2ZcIjtcblxuICAgIHJldHVybiBfdHlwZW9mID0gXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgXCJzeW1ib2xcIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24gKG9iaikge1xuICAgICAgcmV0dXJuIHR5cGVvZiBvYmo7XG4gICAgfSA6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHJldHVybiBvYmogJiYgXCJmdW5jdGlvblwiID09IHR5cGVvZiBTeW1ib2wgJiYgb2JqLmNvbnN0cnVjdG9yID09PSBTeW1ib2wgJiYgb2JqICE9PSBTeW1ib2wucHJvdG90eXBlID8gXCJzeW1ib2xcIiA6IHR5cGVvZiBvYmo7XG4gICAgfSwgX3R5cGVvZihvYmopO1xuICB9XG5cbiAgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICBfc2V0UHJvdG90eXBlT2YgPSBPYmplY3Quc2V0UHJvdG90eXBlT2YgfHwgZnVuY3Rpb24gX3NldFByb3RvdHlwZU9mKG8sIHApIHtcbiAgICAgIG8uX19wcm90b19fID0gcDtcbiAgICAgIHJldHVybiBvO1xuICAgIH07XG5cbiAgICByZXR1cm4gX3NldFByb3RvdHlwZU9mKG8sIHApO1xuICB9XG5cbiAgZnVuY3Rpb24gX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpIHtcbiAgICBpZiAodHlwZW9mIFJlZmxlY3QgPT09IFwidW5kZWZpbmVkXCIgfHwgIVJlZmxlY3QuY29uc3RydWN0KSByZXR1cm4gZmFsc2U7XG4gICAgaWYgKFJlZmxlY3QuY29uc3RydWN0LnNoYW0pIHJldHVybiBmYWxzZTtcbiAgICBpZiAodHlwZW9mIFByb3h5ID09PSBcImZ1bmN0aW9uXCIpIHJldHVybiB0cnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIEJvb2xlYW4ucHJvdG90eXBlLnZhbHVlT2YuY2FsbChSZWZsZWN0LmNvbnN0cnVjdChCb29sZWFuLCBbXSwgZnVuY3Rpb24gKCkge30pKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICBpZiAoX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCgpKSB7XG4gICAgICBfY29uc3RydWN0ID0gUmVmbGVjdC5jb25zdHJ1Y3Q7XG4gICAgfSBlbHNlIHtcbiAgICAgIF9jb25zdHJ1Y3QgPSBmdW5jdGlvbiBfY29uc3RydWN0KFBhcmVudCwgYXJncywgQ2xhc3MpIHtcbiAgICAgICAgdmFyIGEgPSBbbnVsbF07XG4gICAgICAgIGEucHVzaC5hcHBseShhLCBhcmdzKTtcbiAgICAgICAgdmFyIENvbnN0cnVjdG9yID0gRnVuY3Rpb24uYmluZC5hcHBseShQYXJlbnQsIGEpO1xuICAgICAgICB2YXIgaW5zdGFuY2UgPSBuZXcgQ29uc3RydWN0b3IoKTtcbiAgICAgICAgaWYgKENsYXNzKSBfc2V0UHJvdG90eXBlT2YoaW5zdGFuY2UsIENsYXNzLnByb3RvdHlwZSk7XG4gICAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIF9jb25zdHJ1Y3QuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIF90b0NvbnN1bWFibGVBcnJheShhcnIpIHtcbiAgICByZXR1cm4gX2FycmF5V2l0aG91dEhvbGVzKGFycikgfHwgX2l0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShhcnIpIHx8IF9ub25JdGVyYWJsZVNwcmVhZCgpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKGFycikge1xuICAgIGlmIChBcnJheS5pc0FycmF5KGFycikpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShhcnIpO1xuICB9XG5cbiAgZnVuY3Rpb24gX2l0ZXJhYmxlVG9BcnJheShpdGVyKSB7XG4gICAgaWYgKHR5cGVvZiBTeW1ib2wgIT09IFwidW5kZWZpbmVkXCIgJiYgaXRlcltTeW1ib2wuaXRlcmF0b3JdICE9IG51bGwgfHwgaXRlcltcIkBAaXRlcmF0b3JcIl0gIT0gbnVsbCkgcmV0dXJuIEFycmF5LmZyb20oaXRlcik7XG4gIH1cblxuICBmdW5jdGlvbiBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkobywgbWluTGVuKSB7XG4gICAgaWYgKCFvKSByZXR1cm47XG4gICAgaWYgKHR5cGVvZiBvID09PSBcInN0cmluZ1wiKSByZXR1cm4gX2FycmF5TGlrZVRvQXJyYXkobywgbWluTGVuKTtcbiAgICB2YXIgbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKS5zbGljZSg4LCAtMSk7XG4gICAgaWYgKG4gPT09IFwiT2JqZWN0XCIgJiYgby5jb25zdHJ1Y3RvcikgbiA9IG8uY29uc3RydWN0b3IubmFtZTtcbiAgICBpZiAobiA9PT0gXCJNYXBcIiB8fCBuID09PSBcIlNldFwiKSByZXR1cm4gQXJyYXkuZnJvbShvKTtcbiAgICBpZiAobiA9PT0gXCJBcmd1bWVudHNcIiB8fCAvXig/OlVpfEkpbnQoPzo4fDE2fDMyKSg/OkNsYW1wZWQpP0FycmF5JC8udGVzdChuKSkgcmV0dXJuIF9hcnJheUxpa2VUb0FycmF5KG8sIG1pbkxlbik7XG4gIH1cblxuICBmdW5jdGlvbiBfYXJyYXlMaWtlVG9BcnJheShhcnIsIGxlbikge1xuICAgIGlmIChsZW4gPT0gbnVsbCB8fCBsZW4gPiBhcnIubGVuZ3RoKSBsZW4gPSBhcnIubGVuZ3RoO1xuXG4gICAgZm9yICh2YXIgaSA9IDAsIGFycjIgPSBuZXcgQXJyYXkobGVuKTsgaSA8IGxlbjsgaSsrKSBhcnIyW2ldID0gYXJyW2ldO1xuXG4gICAgcmV0dXJuIGFycjI7XG4gIH1cblxuICBmdW5jdGlvbiBfbm9uSXRlcmFibGVTcHJlYWQoKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgYXR0ZW1wdCB0byBzcHJlYWQgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxcbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC5cIik7XG4gIH1cblxuICB2YXIgaGFzT3duUHJvcGVydHkgPSBPYmplY3QuaGFzT3duUHJvcGVydHksXG4gICAgICBzZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZixcbiAgICAgIGlzRnJvemVuID0gT2JqZWN0LmlzRnJvemVuLFxuICAgICAgZ2V0UHJvdG90eXBlT2YgPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YsXG4gICAgICBnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO1xuICB2YXIgZnJlZXplID0gT2JqZWN0LmZyZWV6ZSxcbiAgICAgIHNlYWwgPSBPYmplY3Quc2VhbCxcbiAgICAgIGNyZWF0ZSA9IE9iamVjdC5jcmVhdGU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgaW1wb3J0L25vLW11dGFibGUtZXhwb3J0c1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIFJlZmxlY3QgIT09ICd1bmRlZmluZWQnICYmIFJlZmxlY3QsXG4gICAgICBhcHBseSA9IF9yZWYuYXBwbHksXG4gICAgICBjb25zdHJ1Y3QgPSBfcmVmLmNvbnN0cnVjdDtcblxuICBpZiAoIWFwcGx5KSB7XG4gICAgYXBwbHkgPSBmdW5jdGlvbiBhcHBseShmdW4sIHRoaXNWYWx1ZSwgYXJncykge1xuICAgICAgcmV0dXJuIGZ1bi5hcHBseSh0aGlzVmFsdWUsIGFyZ3MpO1xuICAgIH07XG4gIH1cblxuICBpZiAoIWZyZWV6ZSkge1xuICAgIGZyZWV6ZSA9IGZ1bmN0aW9uIGZyZWV6ZSh4KSB7XG4gICAgICByZXR1cm4geDtcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFzZWFsKSB7XG4gICAgc2VhbCA9IGZ1bmN0aW9uIHNlYWwoeCkge1xuICAgICAgcmV0dXJuIHg7XG4gICAgfTtcbiAgfVxuXG4gIGlmICghY29uc3RydWN0KSB7XG4gICAgY29uc3RydWN0ID0gZnVuY3Rpb24gY29uc3RydWN0KEZ1bmMsIGFyZ3MpIHtcbiAgICAgIHJldHVybiBfY29uc3RydWN0KEZ1bmMsIF90b0NvbnN1bWFibGVBcnJheShhcmdzKSk7XG4gICAgfTtcbiAgfVxuXG4gIHZhciBhcnJheUZvckVhY2ggPSB1bmFwcGx5KEFycmF5LnByb3RvdHlwZS5mb3JFYWNoKTtcbiAgdmFyIGFycmF5UG9wID0gdW5hcHBseShBcnJheS5wcm90b3R5cGUucG9wKTtcbiAgdmFyIGFycmF5UHVzaCA9IHVuYXBwbHkoQXJyYXkucHJvdG90eXBlLnB1c2gpO1xuICB2YXIgc3RyaW5nVG9Mb3dlckNhc2UgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUudG9Mb3dlckNhc2UpO1xuICB2YXIgc3RyaW5nTWF0Y2ggPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUubWF0Y2gpO1xuICB2YXIgc3RyaW5nUmVwbGFjZSA9IHVuYXBwbHkoU3RyaW5nLnByb3RvdHlwZS5yZXBsYWNlKTtcbiAgdmFyIHN0cmluZ0luZGV4T2YgPSB1bmFwcGx5KFN0cmluZy5wcm90b3R5cGUuaW5kZXhPZik7XG4gIHZhciBzdHJpbmdUcmltID0gdW5hcHBseShTdHJpbmcucHJvdG90eXBlLnRyaW0pO1xuICB2YXIgcmVnRXhwVGVzdCA9IHVuYXBwbHkoUmVnRXhwLnByb3RvdHlwZS50ZXN0KTtcbiAgdmFyIHR5cGVFcnJvckNyZWF0ZSA9IHVuY29uc3RydWN0KFR5cGVFcnJvcik7XG4gIGZ1bmN0aW9uIHVuYXBwbHkoZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbiAodGhpc0FyZykge1xuICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiA+IDEgPyBfbGVuIC0gMSA6IDApLCBfa2V5ID0gMTsgX2tleSA8IF9sZW47IF9rZXkrKykge1xuICAgICAgICBhcmdzW19rZXkgLSAxXSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGFwcGx5KGZ1bmMsIHRoaXNBcmcsIGFyZ3MpO1xuICAgIH07XG4gIH1cbiAgZnVuY3Rpb24gdW5jb25zdHJ1Y3QoZnVuYykge1xuICAgIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgICBmb3IgKHZhciBfbGVuMiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbjIpLCBfa2V5MiA9IDA7IF9rZXkyIDwgX2xlbjI7IF9rZXkyKyspIHtcbiAgICAgICAgYXJnc1tfa2V5Ml0gPSBhcmd1bWVudHNbX2tleTJdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gY29uc3RydWN0KGZ1bmMsIGFyZ3MpO1xuICAgIH07XG4gIH1cbiAgLyogQWRkIHByb3BlcnRpZXMgdG8gYSBsb29rdXAgdGFibGUgKi9cblxuICBmdW5jdGlvbiBhZGRUb1NldChzZXQsIGFycmF5KSB7XG4gICAgaWYgKHNldFByb3RvdHlwZU9mKSB7XG4gICAgICAvLyBNYWtlICdpbicgYW5kIHRydXRoeSBjaGVja3MgbGlrZSBCb29sZWFuKHNldC5jb25zdHJ1Y3RvcilcbiAgICAgIC8vIGluZGVwZW5kZW50IG9mIGFueSBwcm9wZXJ0aWVzIGRlZmluZWQgb24gT2JqZWN0LnByb3RvdHlwZS5cbiAgICAgIC8vIFByZXZlbnQgcHJvdG90eXBlIHNldHRlcnMgZnJvbSBpbnRlcmNlcHRpbmcgc2V0IGFzIGEgdGhpcyB2YWx1ZS5cbiAgICAgIHNldFByb3RvdHlwZU9mKHNldCwgbnVsbCk7XG4gICAgfVxuXG4gICAgdmFyIGwgPSBhcnJheS5sZW5ndGg7XG5cbiAgICB3aGlsZSAobC0tKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IGFycmF5W2xdO1xuXG4gICAgICBpZiAodHlwZW9mIGVsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHZhciBsY0VsZW1lbnQgPSBzdHJpbmdUb0xvd2VyQ2FzZShlbGVtZW50KTtcblxuICAgICAgICBpZiAobGNFbGVtZW50ICE9PSBlbGVtZW50KSB7XG4gICAgICAgICAgLy8gQ29uZmlnIHByZXNldHMgKGUuZy4gdGFncy5qcywgYXR0cnMuanMpIGFyZSBpbW11dGFibGUuXG4gICAgICAgICAgaWYgKCFpc0Zyb3plbihhcnJheSkpIHtcbiAgICAgICAgICAgIGFycmF5W2xdID0gbGNFbGVtZW50O1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGVsZW1lbnQgPSBsY0VsZW1lbnQ7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgc2V0W2VsZW1lbnRdID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gc2V0O1xuICB9XG4gIC8qIFNoYWxsb3cgY2xvbmUgYW4gb2JqZWN0ICovXG5cbiAgZnVuY3Rpb24gY2xvbmUob2JqZWN0KSB7XG4gICAgdmFyIG5ld09iamVjdCA9IGNyZWF0ZShudWxsKTtcbiAgICB2YXIgcHJvcGVydHk7XG5cbiAgICBmb3IgKHByb3BlcnR5IGluIG9iamVjdCkge1xuICAgICAgaWYgKGFwcGx5KGhhc093blByb3BlcnR5LCBvYmplY3QsIFtwcm9wZXJ0eV0pKSB7XG4gICAgICAgIG5ld09iamVjdFtwcm9wZXJ0eV0gPSBvYmplY3RbcHJvcGVydHldO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBuZXdPYmplY3Q7XG4gIH1cbiAgLyogSUUxMCBkb2Vzbid0IHN1cHBvcnQgX19sb29rdXBHZXR0ZXJfXyBzbyBsZXRzJ1xuICAgKiBzaW11bGF0ZSBpdC4gSXQgYWxzbyBhdXRvbWF0aWNhbGx5IGNoZWNrc1xuICAgKiBpZiB0aGUgcHJvcCBpcyBmdW5jdGlvbiBvciBnZXR0ZXIgYW5kIGJlaGF2ZXNcbiAgICogYWNjb3JkaW5nbHkuICovXG5cbiAgZnVuY3Rpb24gbG9va3VwR2V0dGVyKG9iamVjdCwgcHJvcCkge1xuICAgIHdoaWxlIChvYmplY3QgIT09IG51bGwpIHtcbiAgICAgIHZhciBkZXNjID0gZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG9iamVjdCwgcHJvcCk7XG5cbiAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgIGlmIChkZXNjLmdldCkge1xuICAgICAgICAgIHJldHVybiB1bmFwcGx5KGRlc2MuZ2V0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVzYy52YWx1ZSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgIHJldHVybiB1bmFwcGx5KGRlc2MudmFsdWUpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG9iamVjdCA9IGdldFByb3RvdHlwZU9mKG9iamVjdCk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gZmFsbGJhY2tWYWx1ZShlbGVtZW50KSB7XG4gICAgICBjb25zb2xlLndhcm4oJ2ZhbGxiYWNrIHZhbHVlIGZvcicsIGVsZW1lbnQpO1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbGxiYWNrVmFsdWU7XG4gIH1cblxuICB2YXIgaHRtbCQxID0gZnJlZXplKFsnYScsICdhYmJyJywgJ2Fjcm9ueW0nLCAnYWRkcmVzcycsICdhcmVhJywgJ2FydGljbGUnLCAnYXNpZGUnLCAnYXVkaW8nLCAnYicsICdiZGknLCAnYmRvJywgJ2JpZycsICdibGluaycsICdibG9ja3F1b3RlJywgJ2JvZHknLCAnYnInLCAnYnV0dG9uJywgJ2NhbnZhcycsICdjYXB0aW9uJywgJ2NlbnRlcicsICdjaXRlJywgJ2NvZGUnLCAnY29sJywgJ2NvbGdyb3VwJywgJ2NvbnRlbnQnLCAnZGF0YScsICdkYXRhbGlzdCcsICdkZCcsICdkZWNvcmF0b3InLCAnZGVsJywgJ2RldGFpbHMnLCAnZGZuJywgJ2RpYWxvZycsICdkaXInLCAnZGl2JywgJ2RsJywgJ2R0JywgJ2VsZW1lbnQnLCAnZW0nLCAnZmllbGRzZXQnLCAnZmlnY2FwdGlvbicsICdmaWd1cmUnLCAnZm9udCcsICdmb290ZXInLCAnZm9ybScsICdoMScsICdoMicsICdoMycsICdoNCcsICdoNScsICdoNicsICdoZWFkJywgJ2hlYWRlcicsICdoZ3JvdXAnLCAnaHInLCAnaHRtbCcsICdpJywgJ2ltZycsICdpbnB1dCcsICdpbnMnLCAna2JkJywgJ2xhYmVsJywgJ2xlZ2VuZCcsICdsaScsICdtYWluJywgJ21hcCcsICdtYXJrJywgJ21hcnF1ZWUnLCAnbWVudScsICdtZW51aXRlbScsICdtZXRlcicsICduYXYnLCAnbm9icicsICdvbCcsICdvcHRncm91cCcsICdvcHRpb24nLCAnb3V0cHV0JywgJ3AnLCAncGljdHVyZScsICdwcmUnLCAncHJvZ3Jlc3MnLCAncScsICdycCcsICdydCcsICdydWJ5JywgJ3MnLCAnc2FtcCcsICdzZWN0aW9uJywgJ3NlbGVjdCcsICdzaGFkb3cnLCAnc21hbGwnLCAnc291cmNlJywgJ3NwYWNlcicsICdzcGFuJywgJ3N0cmlrZScsICdzdHJvbmcnLCAnc3R5bGUnLCAnc3ViJywgJ3N1bW1hcnknLCAnc3VwJywgJ3RhYmxlJywgJ3Rib2R5JywgJ3RkJywgJ3RlbXBsYXRlJywgJ3RleHRhcmVhJywgJ3Rmb290JywgJ3RoJywgJ3RoZWFkJywgJ3RpbWUnLCAndHInLCAndHJhY2snLCAndHQnLCAndScsICd1bCcsICd2YXInLCAndmlkZW8nLCAnd2JyJ10pOyAvLyBTVkdcblxuICB2YXIgc3ZnJDEgPSBmcmVlemUoWydzdmcnLCAnYScsICdhbHRnbHlwaCcsICdhbHRnbHlwaGRlZicsICdhbHRnbHlwaGl0ZW0nLCAnYW5pbWF0ZWNvbG9yJywgJ2FuaW1hdGVtb3Rpb24nLCAnYW5pbWF0ZXRyYW5zZm9ybScsICdjaXJjbGUnLCAnY2xpcHBhdGgnLCAnZGVmcycsICdkZXNjJywgJ2VsbGlwc2UnLCAnZmlsdGVyJywgJ2ZvbnQnLCAnZycsICdnbHlwaCcsICdnbHlwaHJlZicsICdoa2VybicsICdpbWFnZScsICdsaW5lJywgJ2xpbmVhcmdyYWRpZW50JywgJ21hcmtlcicsICdtYXNrJywgJ21ldGFkYXRhJywgJ21wYXRoJywgJ3BhdGgnLCAncGF0dGVybicsICdwb2x5Z29uJywgJ3BvbHlsaW5lJywgJ3JhZGlhbGdyYWRpZW50JywgJ3JlY3QnLCAnc3RvcCcsICdzdHlsZScsICdzd2l0Y2gnLCAnc3ltYm9sJywgJ3RleHQnLCAndGV4dHBhdGgnLCAndGl0bGUnLCAndHJlZicsICd0c3BhbicsICd2aWV3JywgJ3ZrZXJuJ10pO1xuICB2YXIgc3ZnRmlsdGVycyA9IGZyZWV6ZShbJ2ZlQmxlbmQnLCAnZmVDb2xvck1hdHJpeCcsICdmZUNvbXBvbmVudFRyYW5zZmVyJywgJ2ZlQ29tcG9zaXRlJywgJ2ZlQ29udm9sdmVNYXRyaXgnLCAnZmVEaWZmdXNlTGlnaHRpbmcnLCAnZmVEaXNwbGFjZW1lbnRNYXAnLCAnZmVEaXN0YW50TGlnaHQnLCAnZmVGbG9vZCcsICdmZUZ1bmNBJywgJ2ZlRnVuY0InLCAnZmVGdW5jRycsICdmZUZ1bmNSJywgJ2ZlR2F1c3NpYW5CbHVyJywgJ2ZlSW1hZ2UnLCAnZmVNZXJnZScsICdmZU1lcmdlTm9kZScsICdmZU1vcnBob2xvZ3knLCAnZmVPZmZzZXQnLCAnZmVQb2ludExpZ2h0JywgJ2ZlU3BlY3VsYXJMaWdodGluZycsICdmZVNwb3RMaWdodCcsICdmZVRpbGUnLCAnZmVUdXJidWxlbmNlJ10pOyAvLyBMaXN0IG9mIFNWRyBlbGVtZW50cyB0aGF0IGFyZSBkaXNhbGxvd2VkIGJ5IGRlZmF1bHQuXG4gIC8vIFdlIHN0aWxsIG5lZWQgdG8ga25vdyB0aGVtIHNvIHRoYXQgd2UgY2FuIGRvIG5hbWVzcGFjZVxuICAvLyBjaGVja3MgcHJvcGVybHkgaW4gY2FzZSBvbmUgd2FudHMgdG8gYWRkIHRoZW0gdG9cbiAgLy8gYWxsb3ctbGlzdC5cblxuICB2YXIgc3ZnRGlzYWxsb3dlZCA9IGZyZWV6ZShbJ2FuaW1hdGUnLCAnY29sb3ItcHJvZmlsZScsICdjdXJzb3InLCAnZGlzY2FyZCcsICdmZWRyb3BzaGFkb3cnLCAnZm9udC1mYWNlJywgJ2ZvbnQtZmFjZS1mb3JtYXQnLCAnZm9udC1mYWNlLW5hbWUnLCAnZm9udC1mYWNlLXNyYycsICdmb250LWZhY2UtdXJpJywgJ2ZvcmVpZ25vYmplY3QnLCAnaGF0Y2gnLCAnaGF0Y2hwYXRoJywgJ21lc2gnLCAnbWVzaGdyYWRpZW50JywgJ21lc2hwYXRjaCcsICdtZXNocm93JywgJ21pc3NpbmctZ2x5cGgnLCAnc2NyaXB0JywgJ3NldCcsICdzb2xpZGNvbG9yJywgJ3Vua25vd24nLCAndXNlJ10pO1xuICB2YXIgbWF0aE1sJDEgPSBmcmVlemUoWydtYXRoJywgJ21lbmNsb3NlJywgJ21lcnJvcicsICdtZmVuY2VkJywgJ21mcmFjJywgJ21nbHlwaCcsICdtaScsICdtbGFiZWxlZHRyJywgJ21tdWx0aXNjcmlwdHMnLCAnbW4nLCAnbW8nLCAnbW92ZXInLCAnbXBhZGRlZCcsICdtcGhhbnRvbScsICdtcm9vdCcsICdtcm93JywgJ21zJywgJ21zcGFjZScsICdtc3FydCcsICdtc3R5bGUnLCAnbXN1YicsICdtc3VwJywgJ21zdWJzdXAnLCAnbXRhYmxlJywgJ210ZCcsICdtdGV4dCcsICdtdHInLCAnbXVuZGVyJywgJ211bmRlcm92ZXInXSk7IC8vIFNpbWlsYXJseSB0byBTVkcsIHdlIHdhbnQgdG8ga25vdyBhbGwgTWF0aE1MIGVsZW1lbnRzLFxuICAvLyBldmVuIHRob3NlIHRoYXQgd2UgZGlzYWxsb3cgYnkgZGVmYXVsdC5cblxuICB2YXIgbWF0aE1sRGlzYWxsb3dlZCA9IGZyZWV6ZShbJ21hY3Rpb24nLCAnbWFsaWduZ3JvdXAnLCAnbWFsaWdubWFyaycsICdtbG9uZ2RpdicsICdtc2NhcnJpZXMnLCAnbXNjYXJyeScsICdtc2dyb3VwJywgJ21zdGFjaycsICdtc2xpbmUnLCAnbXNyb3cnLCAnc2VtYW50aWNzJywgJ2Fubm90YXRpb24nLCAnYW5ub3RhdGlvbi14bWwnLCAnbXByZXNjcmlwdHMnLCAnbm9uZSddKTtcbiAgdmFyIHRleHQgPSBmcmVlemUoWycjdGV4dCddKTtcblxuICB2YXIgaHRtbCA9IGZyZWV6ZShbJ2FjY2VwdCcsICdhY3Rpb24nLCAnYWxpZ24nLCAnYWx0JywgJ2F1dG9jYXBpdGFsaXplJywgJ2F1dG9jb21wbGV0ZScsICdhdXRvcGljdHVyZWlucGljdHVyZScsICdhdXRvcGxheScsICdiYWNrZ3JvdW5kJywgJ2JnY29sb3InLCAnYm9yZGVyJywgJ2NhcHR1cmUnLCAnY2VsbHBhZGRpbmcnLCAnY2VsbHNwYWNpbmcnLCAnY2hlY2tlZCcsICdjaXRlJywgJ2NsYXNzJywgJ2NsZWFyJywgJ2NvbG9yJywgJ2NvbHMnLCAnY29sc3BhbicsICdjb250cm9scycsICdjb250cm9sc2xpc3QnLCAnY29vcmRzJywgJ2Nyb3Nzb3JpZ2luJywgJ2RhdGV0aW1lJywgJ2RlY29kaW5nJywgJ2RlZmF1bHQnLCAnZGlyJywgJ2Rpc2FibGVkJywgJ2Rpc2FibGVwaWN0dXJlaW5waWN0dXJlJywgJ2Rpc2FibGVyZW1vdGVwbGF5YmFjaycsICdkb3dubG9hZCcsICdkcmFnZ2FibGUnLCAnZW5jdHlwZScsICdlbnRlcmtleWhpbnQnLCAnZmFjZScsICdmb3InLCAnaGVhZGVycycsICdoZWlnaHQnLCAnaGlkZGVuJywgJ2hpZ2gnLCAnaHJlZicsICdocmVmbGFuZycsICdpZCcsICdpbnB1dG1vZGUnLCAnaW50ZWdyaXR5JywgJ2lzbWFwJywgJ2tpbmQnLCAnbGFiZWwnLCAnbGFuZycsICdsaXN0JywgJ2xvYWRpbmcnLCAnbG9vcCcsICdsb3cnLCAnbWF4JywgJ21heGxlbmd0aCcsICdtZWRpYScsICdtZXRob2QnLCAnbWluJywgJ21pbmxlbmd0aCcsICdtdWx0aXBsZScsICdtdXRlZCcsICduYW1lJywgJ25vbmNlJywgJ25vc2hhZGUnLCAnbm92YWxpZGF0ZScsICdub3dyYXAnLCAnb3BlbicsICdvcHRpbXVtJywgJ3BhdHRlcm4nLCAncGxhY2Vob2xkZXInLCAncGxheXNpbmxpbmUnLCAncG9zdGVyJywgJ3ByZWxvYWQnLCAncHViZGF0ZScsICdyYWRpb2dyb3VwJywgJ3JlYWRvbmx5JywgJ3JlbCcsICdyZXF1aXJlZCcsICdyZXYnLCAncmV2ZXJzZWQnLCAncm9sZScsICdyb3dzJywgJ3Jvd3NwYW4nLCAnc3BlbGxjaGVjaycsICdzY29wZScsICdzZWxlY3RlZCcsICdzaGFwZScsICdzaXplJywgJ3NpemVzJywgJ3NwYW4nLCAnc3JjbGFuZycsICdzdGFydCcsICdzcmMnLCAnc3Jjc2V0JywgJ3N0ZXAnLCAnc3R5bGUnLCAnc3VtbWFyeScsICd0YWJpbmRleCcsICd0aXRsZScsICd0cmFuc2xhdGUnLCAndHlwZScsICd1c2VtYXAnLCAndmFsaWduJywgJ3ZhbHVlJywgJ3dpZHRoJywgJ3htbG5zJywgJ3Nsb3QnXSk7XG4gIHZhciBzdmcgPSBmcmVlemUoWydhY2NlbnQtaGVpZ2h0JywgJ2FjY3VtdWxhdGUnLCAnYWRkaXRpdmUnLCAnYWxpZ25tZW50LWJhc2VsaW5lJywgJ2FzY2VudCcsICdhdHRyaWJ1dGVuYW1lJywgJ2F0dHJpYnV0ZXR5cGUnLCAnYXppbXV0aCcsICdiYXNlZnJlcXVlbmN5JywgJ2Jhc2VsaW5lLXNoaWZ0JywgJ2JlZ2luJywgJ2JpYXMnLCAnYnknLCAnY2xhc3MnLCAnY2xpcCcsICdjbGlwcGF0aHVuaXRzJywgJ2NsaXAtcGF0aCcsICdjbGlwLXJ1bGUnLCAnY29sb3InLCAnY29sb3ItaW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCAnY29sb3ItcHJvZmlsZScsICdjb2xvci1yZW5kZXJpbmcnLCAnY3gnLCAnY3knLCAnZCcsICdkeCcsICdkeScsICdkaWZmdXNlY29uc3RhbnQnLCAnZGlyZWN0aW9uJywgJ2Rpc3BsYXknLCAnZGl2aXNvcicsICdkdXInLCAnZWRnZW1vZGUnLCAnZWxldmF0aW9uJywgJ2VuZCcsICdmaWxsJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZmlsdGVyJywgJ2ZpbHRlcnVuaXRzJywgJ2Zsb29kLWNvbG9yJywgJ2Zsb29kLW9wYWNpdHknLCAnZm9udC1mYW1pbHknLCAnZm9udC1zaXplJywgJ2ZvbnQtc2l6ZS1hZGp1c3QnLCAnZm9udC1zdHJldGNoJywgJ2ZvbnQtc3R5bGUnLCAnZm9udC12YXJpYW50JywgJ2ZvbnQtd2VpZ2h0JywgJ2Z4JywgJ2Z5JywgJ2cxJywgJ2cyJywgJ2dseXBoLW5hbWUnLCAnZ2x5cGhyZWYnLCAnZ3JhZGllbnR1bml0cycsICdncmFkaWVudHRyYW5zZm9ybScsICdoZWlnaHQnLCAnaHJlZicsICdpZCcsICdpbWFnZS1yZW5kZXJpbmcnLCAnaW4nLCAnaW4yJywgJ2snLCAnazEnLCAnazInLCAnazMnLCAnazQnLCAna2VybmluZycsICdrZXlwb2ludHMnLCAna2V5c3BsaW5lcycsICdrZXl0aW1lcycsICdsYW5nJywgJ2xlbmd0aGFkanVzdCcsICdsZXR0ZXItc3BhY2luZycsICdrZXJuZWxtYXRyaXgnLCAna2VybmVsdW5pdGxlbmd0aCcsICdsaWdodGluZy1jb2xvcicsICdsb2NhbCcsICdtYXJrZXItZW5kJywgJ21hcmtlci1taWQnLCAnbWFya2VyLXN0YXJ0JywgJ21hcmtlcmhlaWdodCcsICdtYXJrZXJ1bml0cycsICdtYXJrZXJ3aWR0aCcsICdtYXNrY29udGVudHVuaXRzJywgJ21hc2t1bml0cycsICdtYXgnLCAnbWFzaycsICdtZWRpYScsICdtZXRob2QnLCAnbW9kZScsICdtaW4nLCAnbmFtZScsICdudW1vY3RhdmVzJywgJ29mZnNldCcsICdvcGVyYXRvcicsICdvcGFjaXR5JywgJ29yZGVyJywgJ29yaWVudCcsICdvcmllbnRhdGlvbicsICdvcmlnaW4nLCAnb3ZlcmZsb3cnLCAncGFpbnQtb3JkZXInLCAncGF0aCcsICdwYXRobGVuZ3RoJywgJ3BhdHRlcm5jb250ZW50dW5pdHMnLCAncGF0dGVybnRyYW5zZm9ybScsICdwYXR0ZXJudW5pdHMnLCAncG9pbnRzJywgJ3ByZXNlcnZlYWxwaGEnLCAncHJlc2VydmVhc3BlY3RyYXRpbycsICdwcmltaXRpdmV1bml0cycsICdyJywgJ3J4JywgJ3J5JywgJ3JhZGl1cycsICdyZWZ4JywgJ3JlZnknLCAncmVwZWF0Y291bnQnLCAncmVwZWF0ZHVyJywgJ3Jlc3RhcnQnLCAncmVzdWx0JywgJ3JvdGF0ZScsICdzY2FsZScsICdzZWVkJywgJ3NoYXBlLXJlbmRlcmluZycsICdzcGVjdWxhcmNvbnN0YW50JywgJ3NwZWN1bGFyZXhwb25lbnQnLCAnc3ByZWFkbWV0aG9kJywgJ3N0YXJ0b2Zmc2V0JywgJ3N0ZGRldmlhdGlvbicsICdzdGl0Y2h0aWxlcycsICdzdG9wLWNvbG9yJywgJ3N0b3Atb3BhY2l0eScsICdzdHJva2UtZGFzaGFycmF5JywgJ3N0cm9rZS1kYXNob2Zmc2V0JywgJ3N0cm9rZS1saW5lY2FwJywgJ3N0cm9rZS1saW5lam9pbicsICdzdHJva2UtbWl0ZXJsaW1pdCcsICdzdHJva2Utb3BhY2l0eScsICdzdHJva2UnLCAnc3Ryb2tlLXdpZHRoJywgJ3N0eWxlJywgJ3N1cmZhY2VzY2FsZScsICdzeXN0ZW1sYW5ndWFnZScsICd0YWJpbmRleCcsICd0YXJnZXR4JywgJ3RhcmdldHknLCAndHJhbnNmb3JtJywgJ3RyYW5zZm9ybS1vcmlnaW4nLCAndGV4dC1hbmNob3InLCAndGV4dC1kZWNvcmF0aW9uJywgJ3RleHQtcmVuZGVyaW5nJywgJ3RleHRsZW5ndGgnLCAndHlwZScsICd1MScsICd1MicsICd1bmljb2RlJywgJ3ZhbHVlcycsICd2aWV3Ym94JywgJ3Zpc2liaWxpdHknLCAndmVyc2lvbicsICd2ZXJ0LWFkdi15JywgJ3ZlcnQtb3JpZ2luLXgnLCAndmVydC1vcmlnaW4teScsICd3aWR0aCcsICd3b3JkLXNwYWNpbmcnLCAnd3JhcCcsICd3cml0aW5nLW1vZGUnLCAneGNoYW5uZWxzZWxlY3RvcicsICd5Y2hhbm5lbHNlbGVjdG9yJywgJ3gnLCAneDEnLCAneDInLCAneG1sbnMnLCAneScsICd5MScsICd5MicsICd6JywgJ3pvb21hbmRwYW4nXSk7XG4gIHZhciBtYXRoTWwgPSBmcmVlemUoWydhY2NlbnQnLCAnYWNjZW50dW5kZXInLCAnYWxpZ24nLCAnYmV2ZWxsZWQnLCAnY2xvc2UnLCAnY29sdW1uc2FsaWduJywgJ2NvbHVtbmxpbmVzJywgJ2NvbHVtbnNwYW4nLCAnZGVub21hbGlnbicsICdkZXB0aCcsICdkaXInLCAnZGlzcGxheScsICdkaXNwbGF5c3R5bGUnLCAnZW5jb2RpbmcnLCAnZmVuY2UnLCAnZnJhbWUnLCAnaGVpZ2h0JywgJ2hyZWYnLCAnaWQnLCAnbGFyZ2VvcCcsICdsZW5ndGgnLCAnbGluZXRoaWNrbmVzcycsICdsc3BhY2UnLCAnbHF1b3RlJywgJ21hdGhiYWNrZ3JvdW5kJywgJ21hdGhjb2xvcicsICdtYXRoc2l6ZScsICdtYXRodmFyaWFudCcsICdtYXhzaXplJywgJ21pbnNpemUnLCAnbW92YWJsZWxpbWl0cycsICdub3RhdGlvbicsICdudW1hbGlnbicsICdvcGVuJywgJ3Jvd2FsaWduJywgJ3Jvd2xpbmVzJywgJ3Jvd3NwYWNpbmcnLCAncm93c3BhbicsICdyc3BhY2UnLCAncnF1b3RlJywgJ3NjcmlwdGxldmVsJywgJ3NjcmlwdG1pbnNpemUnLCAnc2NyaXB0c2l6ZW11bHRpcGxpZXInLCAnc2VsZWN0aW9uJywgJ3NlcGFyYXRvcicsICdzZXBhcmF0b3JzJywgJ3N0cmV0Y2h5JywgJ3N1YnNjcmlwdHNoaWZ0JywgJ3N1cHNjcmlwdHNoaWZ0JywgJ3N5bW1ldHJpYycsICd2b2Zmc2V0JywgJ3dpZHRoJywgJ3htbG5zJ10pO1xuICB2YXIgeG1sID0gZnJlZXplKFsneGxpbms6aHJlZicsICd4bWw6aWQnLCAneGxpbms6dGl0bGUnLCAneG1sOnNwYWNlJywgJ3htbG5zOnhsaW5rJ10pO1xuXG4gIHZhciBNVVNUQUNIRV9FWFBSID0gc2VhbCgvXFx7XFx7W1xcd1xcV10qfFtcXHdcXFddKlxcfVxcfS9nbSk7IC8vIFNwZWNpZnkgdGVtcGxhdGUgZGV0ZWN0aW9uIHJlZ2V4IGZvciBTQUZFX0ZPUl9URU1QTEFURVMgbW9kZVxuXG4gIHZhciBFUkJfRVhQUiA9IHNlYWwoLzwlW1xcd1xcV10qfFtcXHdcXFddKiU+L2dtKTtcbiAgdmFyIERBVEFfQVRUUiA9IHNlYWwoL15kYXRhLVtcXC1cXHcuXFx1MDBCNy1cXHVGRkZGXS8pOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVzZWxlc3MtZXNjYXBlXG5cbiAgdmFyIEFSSUFfQVRUUiA9IHNlYWwoL15hcmlhLVtcXC1cXHddKyQvKTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuXG4gIHZhciBJU19BTExPV0VEX1VSSSA9IHNlYWwoL14oPzooPzooPzpmfGh0KXRwcz98bWFpbHRvfHRlbHxjYWxsdG98Y2lkfHhtcHApOnxbXmEtel18W2EteisuXFwtXSsoPzpbXmEteisuXFwtOl18JCkpL2kgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11c2VsZXNzLWVzY2FwZVxuICApO1xuICB2YXIgSVNfU0NSSVBUX09SX0RBVEEgPSBzZWFsKC9eKD86XFx3K3NjcmlwdHxkYXRhKTovaSk7XG4gIHZhciBBVFRSX1dISVRFU1BBQ0UgPSBzZWFsKC9bXFx1MDAwMC1cXHUwMDIwXFx1MDBBMFxcdTE2ODBcXHUxODBFXFx1MjAwMC1cXHUyMDI5XFx1MjA1RlxcdTMwMDBdL2cgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1jb250cm9sLXJlZ2V4XG4gICk7XG4gIHZhciBET0NUWVBFX05BTUUgPSBzZWFsKC9eaHRtbCQvaSk7XG5cbiAgdmFyIGdldEdsb2JhbCA9IGZ1bmN0aW9uIGdldEdsb2JhbCgpIHtcbiAgICByZXR1cm4gdHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogd2luZG93O1xuICB9O1xuICAvKipcbiAgICogQ3JlYXRlcyBhIG5vLW9wIHBvbGljeSBmb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG4gICAqIERvbid0IGV4cG9ydCB0aGlzIGZ1bmN0aW9uIG91dHNpZGUgdGhpcyBtb2R1bGUhXG4gICAqIEBwYXJhbSB7P1RydXN0ZWRUeXBlUG9saWN5RmFjdG9yeX0gdHJ1c3RlZFR5cGVzIFRoZSBwb2xpY3kgZmFjdG9yeS5cbiAgICogQHBhcmFtIHtEb2N1bWVudH0gZG9jdW1lbnQgVGhlIGRvY3VtZW50IG9iamVjdCAodG8gZGV0ZXJtaW5lIHBvbGljeSBuYW1lIHN1ZmZpeClcbiAgICogQHJldHVybiB7P1RydXN0ZWRUeXBlUG9saWN5fSBUaGUgcG9saWN5IGNyZWF0ZWQgKG9yIG51bGwsIGlmIFRydXN0ZWQgVHlwZXNcbiAgICogYXJlIG5vdCBzdXBwb3J0ZWQpLlxuICAgKi9cblxuXG4gIHZhciBfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5ID0gZnVuY3Rpb24gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIGRvY3VtZW50KSB7XG4gICAgaWYgKF90eXBlb2YodHJ1c3RlZFR5cGVzKSAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIHRydXN0ZWRUeXBlcy5jcmVhdGVQb2xpY3kgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH0gLy8gQWxsb3cgdGhlIGNhbGxlcnMgdG8gY29udHJvbCB0aGUgdW5pcXVlIHBvbGljeSBuYW1lXG4gICAgLy8gYnkgYWRkaW5nIGEgZGF0YS10dC1wb2xpY3ktc3VmZml4IHRvIHRoZSBzY3JpcHQgZWxlbWVudCB3aXRoIHRoZSBET01QdXJpZnkuXG4gICAgLy8gUG9saWN5IGNyZWF0aW9uIHdpdGggZHVwbGljYXRlIG5hbWVzIHRocm93cyBpbiBUcnVzdGVkIFR5cGVzLlxuXG5cbiAgICB2YXIgc3VmZml4ID0gbnVsbDtcbiAgICB2YXIgQVRUUl9OQU1FID0gJ2RhdGEtdHQtcG9saWN5LXN1ZmZpeCc7XG5cbiAgICBpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdCAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0Lmhhc0F0dHJpYnV0ZShBVFRSX05BTUUpKSB7XG4gICAgICBzdWZmaXggPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LmdldEF0dHJpYnV0ZShBVFRSX05BTUUpO1xuICAgIH1cblxuICAgIHZhciBwb2xpY3lOYW1lID0gJ2RvbXB1cmlmeScgKyAoc3VmZml4ID8gJyMnICsgc3VmZml4IDogJycpO1xuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0cnVzdGVkVHlwZXMuY3JlYXRlUG9saWN5KHBvbGljeU5hbWUsIHtcbiAgICAgICAgY3JlYXRlSFRNTDogZnVuY3Rpb24gY3JlYXRlSFRNTChodG1sKSB7XG4gICAgICAgICAgcmV0dXJuIGh0bWw7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgIC8vIFBvbGljeSBjcmVhdGlvbiBmYWlsZWQgKG1vc3QgbGlrZWx5IGFub3RoZXIgRE9NUHVyaWZ5IHNjcmlwdCBoYXNcbiAgICAgIC8vIGFscmVhZHkgcnVuKS4gU2tpcCBjcmVhdGluZyB0aGUgcG9saWN5LCBhcyB0aGlzIHdpbGwgb25seSBjYXVzZSBlcnJvcnNcbiAgICAgIC8vIGlmIFRUIGFyZSBlbmZvcmNlZC5cbiAgICAgIGNvbnNvbGUud2FybignVHJ1c3RlZFR5cGVzIHBvbGljeSAnICsgcG9saWN5TmFtZSArICcgY291bGQgbm90IGJlIGNyZWF0ZWQuJyk7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH07XG5cbiAgZnVuY3Rpb24gY3JlYXRlRE9NUHVyaWZ5KCkge1xuICAgIHZhciB3aW5kb3cgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1swXSA6IGdldEdsb2JhbCgpO1xuXG4gICAgdmFyIERPTVB1cmlmeSA9IGZ1bmN0aW9uIERPTVB1cmlmeShyb290KSB7XG4gICAgICByZXR1cm4gY3JlYXRlRE9NUHVyaWZ5KHJvb3QpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogVmVyc2lvbiBsYWJlbCwgZXhwb3NlZCBmb3IgZWFzaWVyIGNoZWNrc1xuICAgICAqIGlmIERPTVB1cmlmeSBpcyB1cCB0byBkYXRlIG9yIG5vdFxuICAgICAqL1xuXG5cbiAgICBET01QdXJpZnkudmVyc2lvbiA9ICcyLjMuOCc7XG4gICAgLyoqXG4gICAgICogQXJyYXkgb2YgZWxlbWVudHMgdGhhdCBET01QdXJpZnkgcmVtb3ZlZCBkdXJpbmcgc2FuaXRhdGlvbi5cbiAgICAgKiBFbXB0eSBpZiBub3RoaW5nIHdhcyByZW1vdmVkLlxuICAgICAqL1xuXG4gICAgRE9NUHVyaWZ5LnJlbW92ZWQgPSBbXTtcblxuICAgIGlmICghd2luZG93IHx8ICF3aW5kb3cuZG9jdW1lbnQgfHwgd2luZG93LmRvY3VtZW50Lm5vZGVUeXBlICE9PSA5KSB7XG4gICAgICAvLyBOb3QgcnVubmluZyBpbiBhIGJyb3dzZXIsIHByb3ZpZGUgYSBmYWN0b3J5IGZ1bmN0aW9uXG4gICAgICAvLyBzbyB0aGF0IHlvdSBjYW4gcGFzcyB5b3VyIG93biBXaW5kb3dcbiAgICAgIERPTVB1cmlmeS5pc1N1cHBvcnRlZCA9IGZhbHNlO1xuICAgICAgcmV0dXJuIERPTVB1cmlmeTtcbiAgICB9XG5cbiAgICB2YXIgb3JpZ2luYWxEb2N1bWVudCA9IHdpbmRvdy5kb2N1bWVudDtcbiAgICB2YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG4gICAgdmFyIERvY3VtZW50RnJhZ21lbnQgPSB3aW5kb3cuRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgSFRNTFRlbXBsYXRlRWxlbWVudCA9IHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50LFxuICAgICAgICBOb2RlID0gd2luZG93Lk5vZGUsXG4gICAgICAgIEVsZW1lbnQgPSB3aW5kb3cuRWxlbWVudCxcbiAgICAgICAgTm9kZUZpbHRlciA9IHdpbmRvdy5Ob2RlRmlsdGVyLFxuICAgICAgICBfd2luZG93JE5hbWVkTm9kZU1hcCA9IHdpbmRvdy5OYW1lZE5vZGVNYXAsXG4gICAgICAgIE5hbWVkTm9kZU1hcCA9IF93aW5kb3ckTmFtZWROb2RlTWFwID09PSB2b2lkIDAgPyB3aW5kb3cuTmFtZWROb2RlTWFwIHx8IHdpbmRvdy5Nb3pOYW1lZEF0dHJNYXAgOiBfd2luZG93JE5hbWVkTm9kZU1hcCxcbiAgICAgICAgSFRNTEZvcm1FbGVtZW50ID0gd2luZG93LkhUTUxGb3JtRWxlbWVudCxcbiAgICAgICAgRE9NUGFyc2VyID0gd2luZG93LkRPTVBhcnNlcixcbiAgICAgICAgdHJ1c3RlZFR5cGVzID0gd2luZG93LnRydXN0ZWRUeXBlcztcbiAgICB2YXIgRWxlbWVudFByb3RvdHlwZSA9IEVsZW1lbnQucHJvdG90eXBlO1xuICAgIHZhciBjbG9uZU5vZGUgPSBsb29rdXBHZXR0ZXIoRWxlbWVudFByb3RvdHlwZSwgJ2Nsb25lTm9kZScpO1xuICAgIHZhciBnZXROZXh0U2libGluZyA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAnbmV4dFNpYmxpbmcnKTtcbiAgICB2YXIgZ2V0Q2hpbGROb2RlcyA9IGxvb2t1cEdldHRlcihFbGVtZW50UHJvdG90eXBlLCAnY2hpbGROb2RlcycpO1xuICAgIHZhciBnZXRQYXJlbnROb2RlID0gbG9va3VwR2V0dGVyKEVsZW1lbnRQcm90b3R5cGUsICdwYXJlbnROb2RlJyk7IC8vIEFzIHBlciBpc3N1ZSAjNDcsIHRoZSB3ZWItY29tcG9uZW50cyByZWdpc3RyeSBpcyBpbmhlcml0ZWQgYnkgYVxuICAgIC8vIG5ldyBkb2N1bWVudCBjcmVhdGVkIHZpYSBjcmVhdGVIVE1MRG9jdW1lbnQuIEFzIHBlciB0aGUgc3BlY1xuICAgIC8vIChodHRwOi8vdzNjLmdpdGh1Yi5pby93ZWJjb21wb25lbnRzL3NwZWMvY3VzdG9tLyNjcmVhdGluZy1hbmQtcGFzc2luZy1yZWdpc3RyaWVzKVxuICAgIC8vIGEgbmV3IGVtcHR5IHJlZ2lzdHJ5IGlzIHVzZWQgd2hlbiBjcmVhdGluZyBhIHRlbXBsYXRlIGNvbnRlbnRzIG93bmVyXG4gICAgLy8gZG9jdW1lbnQsIHNvIHdlIHVzZSB0aGF0IGFzIG91ciBwYXJlbnQgZG9jdW1lbnQgdG8gZW5zdXJlIG5vdGhpbmdcbiAgICAvLyBpcyBpbmhlcml0ZWQuXG5cbiAgICBpZiAodHlwZW9mIEhUTUxUZW1wbGF0ZUVsZW1lbnQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHZhciB0ZW1wbGF0ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7XG5cbiAgICAgIGlmICh0ZW1wbGF0ZS5jb250ZW50ICYmIHRlbXBsYXRlLmNvbnRlbnQub3duZXJEb2N1bWVudCkge1xuICAgICAgICBkb2N1bWVudCA9IHRlbXBsYXRlLmNvbnRlbnQub3duZXJEb2N1bWVudDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgdHJ1c3RlZFR5cGVzUG9saWN5ID0gX2NyZWF0ZVRydXN0ZWRUeXBlc1BvbGljeSh0cnVzdGVkVHlwZXMsIG9yaWdpbmFsRG9jdW1lbnQpO1xuXG4gICAgdmFyIGVtcHR5SFRNTCA9IHRydXN0ZWRUeXBlc1BvbGljeSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKCcnKSA6ICcnO1xuICAgIHZhciBfZG9jdW1lbnQgPSBkb2N1bWVudCxcbiAgICAgICAgaW1wbGVtZW50YXRpb24gPSBfZG9jdW1lbnQuaW1wbGVtZW50YXRpb24sXG4gICAgICAgIGNyZWF0ZU5vZGVJdGVyYXRvciA9IF9kb2N1bWVudC5jcmVhdGVOb2RlSXRlcmF0b3IsXG4gICAgICAgIGNyZWF0ZURvY3VtZW50RnJhZ21lbnQgPSBfZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCxcbiAgICAgICAgZ2V0RWxlbWVudHNCeVRhZ05hbWUgPSBfZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWU7XG4gICAgdmFyIGltcG9ydE5vZGUgPSBvcmlnaW5hbERvY3VtZW50LmltcG9ydE5vZGU7XG4gICAgdmFyIGRvY3VtZW50TW9kZSA9IHt9O1xuXG4gICAgdHJ5IHtcbiAgICAgIGRvY3VtZW50TW9kZSA9IGNsb25lKGRvY3VtZW50KS5kb2N1bWVudE1vZGUgPyBkb2N1bWVudC5kb2N1bWVudE1vZGUgOiB7fTtcbiAgICB9IGNhdGNoIChfKSB7fVxuXG4gICAgdmFyIGhvb2tzID0ge307XG4gICAgLyoqXG4gICAgICogRXhwb3NlIHdoZXRoZXIgdGhpcyBicm93c2VyIHN1cHBvcnRzIHJ1bm5pbmcgdGhlIGZ1bGwgRE9NUHVyaWZ5LlxuICAgICAqL1xuXG4gICAgRE9NUHVyaWZ5LmlzU3VwcG9ydGVkID0gdHlwZW9mIGdldFBhcmVudE5vZGUgPT09ICdmdW5jdGlvbicgJiYgaW1wbGVtZW50YXRpb24gJiYgdHlwZW9mIGltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnRNb2RlICE9PSA5O1xuICAgIHZhciBNVVNUQUNIRV9FWFBSJDEgPSBNVVNUQUNIRV9FWFBSLFxuICAgICAgICBFUkJfRVhQUiQxID0gRVJCX0VYUFIsXG4gICAgICAgIERBVEFfQVRUUiQxID0gREFUQV9BVFRSLFxuICAgICAgICBBUklBX0FUVFIkMSA9IEFSSUFfQVRUUixcbiAgICAgICAgSVNfU0NSSVBUX09SX0RBVEEkMSA9IElTX1NDUklQVF9PUl9EQVRBLFxuICAgICAgICBBVFRSX1dISVRFU1BBQ0UkMSA9IEFUVFJfV0hJVEVTUEFDRTtcbiAgICB2YXIgSVNfQUxMT1dFRF9VUkkkMSA9IElTX0FMTE9XRURfVVJJO1xuICAgIC8qKlxuICAgICAqIFdlIGNvbnNpZGVyIHRoZSBlbGVtZW50cyBhbmQgYXR0cmlidXRlcyBiZWxvdyB0byBiZSBzYWZlLiBJZGVhbGx5XG4gICAgICogZG9uJ3QgYWRkIGFueSBuZXcgb25lcyBidXQgZmVlbCBmcmVlIHRvIHJlbW92ZSB1bndhbnRlZCBvbmVzLlxuICAgICAqL1xuXG4gICAgLyogYWxsb3dlZCBlbGVtZW50IG5hbWVzICovXG5cbiAgICB2YXIgQUxMT1dFRF9UQUdTID0gbnVsbDtcbiAgICB2YXIgREVGQVVMVF9BTExPV0VEX1RBR1MgPSBhZGRUb1NldCh7fSwgW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShodG1sJDEpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnJDEpLCBfdG9Db25zdW1hYmxlQXJyYXkoc3ZnRmlsdGVycyksIF90b0NvbnN1bWFibGVBcnJheShtYXRoTWwkMSksIF90b0NvbnN1bWFibGVBcnJheSh0ZXh0KSkpO1xuICAgIC8qIEFsbG93ZWQgYXR0cmlidXRlIG5hbWVzICovXG5cbiAgICB2YXIgQUxMT1dFRF9BVFRSID0gbnVsbDtcbiAgICB2YXIgREVGQVVMVF9BTExPV0VEX0FUVFIgPSBhZGRUb1NldCh7fSwgW10uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShodG1sKSwgX3RvQ29uc3VtYWJsZUFycmF5KHN2ZyksIF90b0NvbnN1bWFibGVBcnJheShtYXRoTWwpLCBfdG9Db25zdW1hYmxlQXJyYXkoeG1sKSkpO1xuICAgIC8qXG4gICAgICogQ29uZmlndXJlIGhvdyBET01QVXJpZnkgc2hvdWxkIGhhbmRsZSBjdXN0b20gZWxlbWVudHMgYW5kIHRoZWlyIGF0dHJpYnV0ZXMgYXMgd2VsbCBhcyBjdXN0b21pemVkIGJ1aWx0LWluIGVsZW1lbnRzLlxuICAgICAqIEBwcm9wZXJ0eSB7UmVnRXhwfEZ1bmN0aW9ufG51bGx9IHRhZ05hbWVDaGVjayBvbmUgb2YgW251bGwsIHJlZ2V4UGF0dGVybiwgcHJlZGljYXRlXS4gRGVmYXVsdDogYG51bGxgIChkaXNhbGxvdyBhbnkgY3VzdG9tIGVsZW1lbnRzKVxuICAgICAqIEBwcm9wZXJ0eSB7UmVnRXhwfEZ1bmN0aW9ufG51bGx9IGF0dHJpYnV0ZU5hbWVDaGVjayBvbmUgb2YgW251bGwsIHJlZ2V4UGF0dGVybiwgcHJlZGljYXRlXS4gRGVmYXVsdDogYG51bGxgIChkaXNhbGxvdyBhbnkgYXR0cmlidXRlcyBub3Qgb24gdGhlIGFsbG93IGxpc3QpXG4gICAgICogQHByb3BlcnR5IHtib29sZWFufSBhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgYWxsb3cgY3VzdG9tIGVsZW1lbnRzIGRlcml2ZWQgZnJvbSBidWlsdC1pbnMgaWYgdGhleSBwYXNzIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVjay4gRGVmYXVsdDogYGZhbHNlYC5cbiAgICAgKi9cblxuICAgIHZhciBDVVNUT01fRUxFTUVOVF9IQU5ETElORyA9IE9iamVjdC5zZWFsKE9iamVjdC5jcmVhdGUobnVsbCwge1xuICAgICAgdGFnTmFtZUNoZWNrOiB7XG4gICAgICAgIHdyaXRhYmxlOiB0cnVlLFxuICAgICAgICBjb25maWd1cmFibGU6IGZhbHNlLFxuICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZU5hbWVDaGVjazoge1xuICAgICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgICAgY29uZmlndXJhYmxlOiBmYWxzZSxcbiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgIH0sXG4gICAgICBhbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHM6IHtcbiAgICAgICAgd3JpdGFibGU6IHRydWUsXG4gICAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2UsXG4gICAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgICAgIHZhbHVlOiBmYWxzZVxuICAgICAgfVxuICAgIH0pKTtcbiAgICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiB0YWdzIChvdmVycmlkZXMgQUxMT1dFRF9UQUdTL0FERF9UQUdTKSAqL1xuXG4gICAgdmFyIEZPUkJJRF9UQUdTID0gbnVsbDtcbiAgICAvKiBFeHBsaWNpdGx5IGZvcmJpZGRlbiBhdHRyaWJ1dGVzIChvdmVycmlkZXMgQUxMT1dFRF9BVFRSL0FERF9BVFRSKSAqL1xuXG4gICAgdmFyIEZPUkJJRF9BVFRSID0gbnVsbDtcbiAgICAvKiBEZWNpZGUgaWYgQVJJQSBhdHRyaWJ1dGVzIGFyZSBva2F5ICovXG5cbiAgICB2YXIgQUxMT1dfQVJJQV9BVFRSID0gdHJ1ZTtcbiAgICAvKiBEZWNpZGUgaWYgY3VzdG9tIGRhdGEgYXR0cmlidXRlcyBhcmUgb2theSAqL1xuXG4gICAgdmFyIEFMTE9XX0RBVEFfQVRUUiA9IHRydWU7XG4gICAgLyogRGVjaWRlIGlmIHVua25vd24gcHJvdG9jb2xzIGFyZSBva2F5ICovXG5cbiAgICB2YXIgQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgPSBmYWxzZTtcbiAgICAvKiBPdXRwdXQgc2hvdWxkIGJlIHNhZmUgZm9yIGNvbW1vbiB0ZW1wbGF0ZSBlbmdpbmVzLlxuICAgICAqIFRoaXMgbWVhbnMsIERPTVB1cmlmeSByZW1vdmVzIGRhdGEgYXR0cmlidXRlcywgbXVzdGFjaGVzIGFuZCBFUkJcbiAgICAgKi9cblxuICAgIHZhciBTQUZFX0ZPUl9URU1QTEFURVMgPSBmYWxzZTtcbiAgICAvKiBEZWNpZGUgaWYgZG9jdW1lbnQgd2l0aCA8aHRtbD4uLi4gc2hvdWxkIGJlIHJldHVybmVkICovXG5cbiAgICB2YXIgV0hPTEVfRE9DVU1FTlQgPSBmYWxzZTtcbiAgICAvKiBUcmFjayB3aGV0aGVyIGNvbmZpZyBpcyBhbHJlYWR5IHNldCBvbiB0aGlzIGluc3RhbmNlIG9mIERPTVB1cmlmeS4gKi9cblxuICAgIHZhciBTRVRfQ09ORklHID0gZmFsc2U7XG4gICAgLyogRGVjaWRlIGlmIGFsbCBlbGVtZW50cyAoZS5nLiBzdHlsZSwgc2NyaXB0KSBtdXN0IGJlIGNoaWxkcmVuIG9mXG4gICAgICogZG9jdW1lbnQuYm9keS4gQnkgZGVmYXVsdCwgYnJvd3NlcnMgbWlnaHQgbW92ZSB0aGVtIHRvIGRvY3VtZW50LmhlYWQgKi9cblxuICAgIHZhciBGT1JDRV9CT0RZID0gZmFsc2U7XG4gICAgLyogRGVjaWRlIGlmIGEgRE9NIGBIVE1MQm9keUVsZW1lbnRgIHNob3VsZCBiZSByZXR1cm5lZCwgaW5zdGVhZCBvZiBhIGh0bWxcbiAgICAgKiBzdHJpbmcgKG9yIGEgVHJ1c3RlZEhUTUwgb2JqZWN0IGlmIFRydXN0ZWQgVHlwZXMgYXJlIHN1cHBvcnRlZCkuXG4gICAgICogSWYgYFdIT0xFX0RPQ1VNRU5UYCBpcyBlbmFibGVkIGEgYEhUTUxIdG1sRWxlbWVudGAgd2lsbCBiZSByZXR1cm5lZCBpbnN0ZWFkXG4gICAgICovXG5cbiAgICB2YXIgUkVUVVJOX0RPTSA9IGZhbHNlO1xuICAgIC8qIERlY2lkZSBpZiBhIERPTSBgRG9jdW1lbnRGcmFnbWVudGAgc2hvdWxkIGJlIHJldHVybmVkLCBpbnN0ZWFkIG9mIGEgaHRtbFxuICAgICAqIHN0cmluZyAgKG9yIGEgVHJ1c3RlZEhUTUwgb2JqZWN0IGlmIFRydXN0ZWQgVHlwZXMgYXJlIHN1cHBvcnRlZCkgKi9cblxuICAgIHZhciBSRVRVUk5fRE9NX0ZSQUdNRU5UID0gZmFsc2U7XG4gICAgLyogVHJ5IHRvIHJldHVybiBhIFRydXN0ZWQgVHlwZSBvYmplY3QgaW5zdGVhZCBvZiBhIHN0cmluZywgcmV0dXJuIGEgc3RyaW5nIGluXG4gICAgICogY2FzZSBUcnVzdGVkIFR5cGVzIGFyZSBub3Qgc3VwcG9ydGVkICAqL1xuXG4gICAgdmFyIFJFVFVSTl9UUlVTVEVEX1RZUEUgPSBmYWxzZTtcbiAgICAvKiBPdXRwdXQgc2hvdWxkIGJlIGZyZWUgZnJvbSBET00gY2xvYmJlcmluZyBhdHRhY2tzPyAqL1xuXG4gICAgdmFyIFNBTklUSVpFX0RPTSA9IHRydWU7XG4gICAgLyogS2VlcCBlbGVtZW50IGNvbnRlbnQgd2hlbiByZW1vdmluZyBlbGVtZW50PyAqL1xuXG4gICAgdmFyIEtFRVBfQ09OVEVOVCA9IHRydWU7XG4gICAgLyogSWYgYSBgTm9kZWAgaXMgcGFzc2VkIHRvIHNhbml0aXplKCksIHRoZW4gcGVyZm9ybXMgc2FuaXRpemF0aW9uIGluLXBsYWNlIGluc3RlYWRcbiAgICAgKiBvZiBpbXBvcnRpbmcgaXQgaW50byBhIG5ldyBEb2N1bWVudCBhbmQgcmV0dXJuaW5nIGEgc2FuaXRpemVkIGNvcHkgKi9cblxuICAgIHZhciBJTl9QTEFDRSA9IGZhbHNlO1xuICAgIC8qIEFsbG93IHVzYWdlIG9mIHByb2ZpbGVzIGxpa2UgaHRtbCwgc3ZnIGFuZCBtYXRoTWwgKi9cblxuICAgIHZhciBVU0VfUFJPRklMRVMgPSB7fTtcbiAgICAvKiBUYWdzIHRvIGlnbm9yZSBjb250ZW50IG9mIHdoZW4gS0VFUF9DT05URU5UIGlzIHRydWUgKi9cblxuICAgIHZhciBGT1JCSURfQ09OVEVOVFMgPSBudWxsO1xuICAgIHZhciBERUZBVUxUX0ZPUkJJRF9DT05URU5UUyA9IGFkZFRvU2V0KHt9LCBbJ2Fubm90YXRpb24teG1sJywgJ2F1ZGlvJywgJ2NvbGdyb3VwJywgJ2Rlc2MnLCAnZm9yZWlnbm9iamVjdCcsICdoZWFkJywgJ2lmcmFtZScsICdtYXRoJywgJ21pJywgJ21uJywgJ21vJywgJ21zJywgJ210ZXh0JywgJ25vZW1iZWQnLCAnbm9mcmFtZXMnLCAnbm9zY3JpcHQnLCAncGxhaW50ZXh0JywgJ3NjcmlwdCcsICdzdHlsZScsICdzdmcnLCAndGVtcGxhdGUnLCAndGhlYWQnLCAndGl0bGUnLCAndmlkZW8nLCAneG1wJ10pO1xuICAgIC8qIFRhZ3MgdGhhdCBhcmUgc2FmZSBmb3IgZGF0YTogVVJJcyAqL1xuXG4gICAgdmFyIERBVEFfVVJJX1RBR1MgPSBudWxsO1xuICAgIHZhciBERUZBVUxUX0RBVEFfVVJJX1RBR1MgPSBhZGRUb1NldCh7fSwgWydhdWRpbycsICd2aWRlbycsICdpbWcnLCAnc291cmNlJywgJ2ltYWdlJywgJ3RyYWNrJ10pO1xuICAgIC8qIEF0dHJpYnV0ZXMgc2FmZSBmb3IgdmFsdWVzIGxpa2UgXCJqYXZhc2NyaXB0OlwiICovXG5cbiAgICB2YXIgVVJJX1NBRkVfQVRUUklCVVRFUyA9IG51bGw7XG4gICAgdmFyIERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyA9IGFkZFRvU2V0KHt9LCBbJ2FsdCcsICdjbGFzcycsICdmb3InLCAnaWQnLCAnbGFiZWwnLCAnbmFtZScsICdwYXR0ZXJuJywgJ3BsYWNlaG9sZGVyJywgJ3JvbGUnLCAnc3VtbWFyeScsICd0aXRsZScsICd2YWx1ZScsICdzdHlsZScsICd4bWxucyddKTtcbiAgICB2YXIgTUFUSE1MX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MJztcbiAgICB2YXIgU1ZHX05BTUVTUEFDRSA9ICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Zyc7XG4gICAgdmFyIEhUTUxfTkFNRVNQQUNFID0gJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwnO1xuICAgIC8qIERvY3VtZW50IG5hbWVzcGFjZSAqL1xuXG4gICAgdmFyIE5BTUVTUEFDRSA9IEhUTUxfTkFNRVNQQUNFO1xuICAgIHZhciBJU19FTVBUWV9JTlBVVCA9IGZhbHNlO1xuICAgIC8qIFBhcnNpbmcgb2Ygc3RyaWN0IFhIVE1MIGRvY3VtZW50cyAqL1xuXG4gICAgdmFyIFBBUlNFUl9NRURJQV9UWVBFO1xuICAgIHZhciBTVVBQT1JURURfUEFSU0VSX01FRElBX1RZUEVTID0gWydhcHBsaWNhdGlvbi94aHRtbCt4bWwnLCAndGV4dC9odG1sJ107XG4gICAgdmFyIERFRkFVTFRfUEFSU0VSX01FRElBX1RZUEUgPSAndGV4dC9odG1sJztcbiAgICB2YXIgdHJhbnNmb3JtQ2FzZUZ1bmM7XG4gICAgLyogS2VlcCBhIHJlZmVyZW5jZSB0byBjb25maWcgdG8gcGFzcyB0byBob29rcyAqL1xuXG4gICAgdmFyIENPTkZJRyA9IG51bGw7XG4gICAgLyogSWRlYWxseSwgZG8gbm90IHRvdWNoIGFueXRoaW5nIGJlbG93IHRoaXMgbGluZSAqL1xuXG4gICAgLyogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAqL1xuXG4gICAgdmFyIGZvcm1FbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZm9ybScpO1xuXG4gICAgdmFyIGlzUmVnZXhPckZ1bmN0aW9uID0gZnVuY3Rpb24gaXNSZWdleE9yRnVuY3Rpb24odGVzdFZhbHVlKSB7XG4gICAgICByZXR1cm4gdGVzdFZhbHVlIGluc3RhbmNlb2YgUmVnRXhwIHx8IHRlc3RWYWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX3BhcnNlQ29uZmlnXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IGNmZyBvcHRpb25hbCBjb25maWcgbGl0ZXJhbFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cblxuICAgIHZhciBfcGFyc2VDb25maWcgPSBmdW5jdGlvbiBfcGFyc2VDb25maWcoY2ZnKSB7XG4gICAgICBpZiAoQ09ORklHICYmIENPTkZJRyA9PT0gY2ZnKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIC8qIFNoaWVsZCBjb25maWd1cmF0aW9uIG9iamVjdCBmcm9tIHRhbXBlcmluZyAqL1xuXG5cbiAgICAgIGlmICghY2ZnIHx8IF90eXBlb2YoY2ZnKSAhPT0gJ29iamVjdCcpIHtcbiAgICAgICAgY2ZnID0ge307XG4gICAgICB9XG4gICAgICAvKiBTaGllbGQgY29uZmlndXJhdGlvbiBvYmplY3QgZnJvbSBwcm90b3R5cGUgcG9sbHV0aW9uICovXG5cblxuICAgICAgY2ZnID0gY2xvbmUoY2ZnKTtcbiAgICAgIC8qIFNldCBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgKi9cblxuICAgICAgQUxMT1dFRF9UQUdTID0gJ0FMTE9XRURfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5BTExPV0VEX1RBR1MpIDogREVGQVVMVF9BTExPV0VEX1RBR1M7XG4gICAgICBBTExPV0VEX0FUVFIgPSAnQUxMT1dFRF9BVFRSJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkFMTE9XRURfQVRUUikgOiBERUZBVUxUX0FMTE9XRURfQVRUUjtcbiAgICAgIFVSSV9TQUZFX0FUVFJJQlVURVMgPSAnQUREX1VSSV9TQUZFX0FUVFInIGluIGNmZyA/IGFkZFRvU2V0KGNsb25lKERFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyksIGNmZy5BRERfVVJJX1NBRkVfQVRUUikgOiBERUZBVUxUX1VSSV9TQUZFX0FUVFJJQlVURVM7XG4gICAgICBEQVRBX1VSSV9UQUdTID0gJ0FERF9EQVRBX1VSSV9UQUdTJyBpbiBjZmcgPyBhZGRUb1NldChjbG9uZShERUZBVUxUX0RBVEFfVVJJX1RBR1MpLCBjZmcuQUREX0RBVEFfVVJJX1RBR1MpIDogREVGQVVMVF9EQVRBX1VSSV9UQUdTO1xuICAgICAgRk9SQklEX0NPTlRFTlRTID0gJ0ZPUkJJRF9DT05URU5UUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfQ09OVEVOVFMpIDogREVGQVVMVF9GT1JCSURfQ09OVEVOVFM7XG4gICAgICBGT1JCSURfVEFHUyA9ICdGT1JCSURfVEFHUycgaW4gY2ZnID8gYWRkVG9TZXQoe30sIGNmZy5GT1JCSURfVEFHUykgOiB7fTtcbiAgICAgIEZPUkJJRF9BVFRSID0gJ0ZPUkJJRF9BVFRSJyBpbiBjZmcgPyBhZGRUb1NldCh7fSwgY2ZnLkZPUkJJRF9BVFRSKSA6IHt9O1xuICAgICAgVVNFX1BST0ZJTEVTID0gJ1VTRV9QUk9GSUxFUycgaW4gY2ZnID8gY2ZnLlVTRV9QUk9GSUxFUyA6IGZhbHNlO1xuICAgICAgQUxMT1dfQVJJQV9BVFRSID0gY2ZnLkFMTE9XX0FSSUFfQVRUUiAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuXG4gICAgICBBTExPV19EQVRBX0FUVFIgPSBjZmcuQUxMT1dfREFUQV9BVFRSICE9PSBmYWxzZTsgLy8gRGVmYXVsdCB0cnVlXG5cbiAgICAgIEFMTE9XX1VOS05PV05fUFJPVE9DT0xTID0gY2ZnLkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG5cbiAgICAgIFNBRkVfRk9SX1RFTVBMQVRFUyA9IGNmZy5TQUZFX0ZPUl9URU1QTEFURVMgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcblxuICAgICAgV0hPTEVfRE9DVU1FTlQgPSBjZmcuV0hPTEVfRE9DVU1FTlQgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcblxuICAgICAgUkVUVVJOX0RPTSA9IGNmZy5SRVRVUk5fRE9NIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG5cbiAgICAgIFJFVFVSTl9ET01fRlJBR01FTlQgPSBjZmcuUkVUVVJOX0RPTV9GUkFHTUVOVCB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuXG4gICAgICBSRVRVUk5fVFJVU1RFRF9UWVBFID0gY2ZnLlJFVFVSTl9UUlVTVEVEX1RZUEUgfHwgZmFsc2U7IC8vIERlZmF1bHQgZmFsc2VcblxuICAgICAgRk9SQ0VfQk9EWSA9IGNmZy5GT1JDRV9CT0RZIHx8IGZhbHNlOyAvLyBEZWZhdWx0IGZhbHNlXG5cbiAgICAgIFNBTklUSVpFX0RPTSA9IGNmZy5TQU5JVElaRV9ET00gIT09IGZhbHNlOyAvLyBEZWZhdWx0IHRydWVcblxuICAgICAgS0VFUF9DT05URU5UID0gY2ZnLktFRVBfQ09OVEVOVCAhPT0gZmFsc2U7IC8vIERlZmF1bHQgdHJ1ZVxuXG4gICAgICBJTl9QTEFDRSA9IGNmZy5JTl9QTEFDRSB8fCBmYWxzZTsgLy8gRGVmYXVsdCBmYWxzZVxuXG4gICAgICBJU19BTExPV0VEX1VSSSQxID0gY2ZnLkFMTE9XRURfVVJJX1JFR0VYUCB8fCBJU19BTExPV0VEX1VSSSQxO1xuICAgICAgTkFNRVNQQUNFID0gY2ZnLk5BTUVTUEFDRSB8fCBIVE1MX05BTUVTUEFDRTtcblxuICAgICAgaWYgKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORyAmJiBpc1JlZ2V4T3JGdW5jdGlvbihjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKSkge1xuICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ZnLkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HICYmIGlzUmVnZXhPckZ1bmN0aW9uKGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2spKSB7XG4gICAgICAgIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayA9IGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2s7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcgJiYgdHlwZW9mIGNmZy5DVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPT09ICdib29sZWFuJykge1xuICAgICAgICBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hbGxvd0N1c3RvbWl6ZWRCdWlsdEluRWxlbWVudHMgPSBjZmcuQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzO1xuICAgICAgfVxuXG4gICAgICBQQVJTRVJfTUVESUFfVFlQRSA9IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1pbmNsdWRlc1xuICAgICAgU1VQUE9SVEVEX1BBUlNFUl9NRURJQV9UWVBFUy5pbmRleE9mKGNmZy5QQVJTRVJfTUVESUFfVFlQRSkgPT09IC0xID8gUEFSU0VSX01FRElBX1RZUEUgPSBERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFIDogUEFSU0VSX01FRElBX1RZUEUgPSBjZmcuUEFSU0VSX01FRElBX1RZUEU7IC8vIEhUTUwgdGFncyBhbmQgYXR0cmlidXRlcyBhcmUgbm90IGNhc2Utc2Vuc2l0aXZlLCBjb252ZXJ0aW5nIHRvIGxvd2VyY2FzZS4gS2VlcGluZyBYSFRNTCBhcyBpcy5cblxuICAgICAgdHJhbnNmb3JtQ2FzZUZ1bmMgPSBQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcgPyBmdW5jdGlvbiAoeCkge1xuICAgICAgICByZXR1cm4geDtcbiAgICAgIH0gOiBzdHJpbmdUb0xvd2VyQ2FzZTtcblxuICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICBBTExPV19EQVRBX0FUVFIgPSBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgaWYgKFJFVFVSTl9ET01fRlJBR01FTlQpIHtcbiAgICAgICAgUkVUVVJOX0RPTSA9IHRydWU7XG4gICAgICB9XG4gICAgICAvKiBQYXJzZSBwcm9maWxlIGluZm8gKi9cblxuXG4gICAgICBpZiAoVVNFX1BST0ZJTEVTKSB7XG4gICAgICAgIEFMTE9XRURfVEFHUyA9IGFkZFRvU2V0KHt9LCBfdG9Db25zdW1hYmxlQXJyYXkodGV4dCkpO1xuICAgICAgICBBTExPV0VEX0FUVFIgPSBbXTtcblxuICAgICAgICBpZiAoVVNFX1BST0ZJTEVTLmh0bWwgPT09IHRydWUpIHtcbiAgICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGh0bWwkMSk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBodG1sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChVU0VfUFJPRklMRVMuc3ZnID09PSB0cnVlKSB7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBzdmckMSk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChVU0VfUFJPRklMRVMuc3ZnRmlsdGVycyA9PT0gdHJ1ZSkge1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgc3ZnRmlsdGVycyk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBzdmcpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChVU0VfUFJPRklMRVMubWF0aE1sID09PSB0cnVlKSB7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9UQUdTLCBtYXRoTWwkMSk7XG4gICAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBtYXRoTWwpO1xuICAgICAgICAgIGFkZFRvU2V0KEFMTE9XRURfQVRUUiwgeG1sKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgLyogTWVyZ2UgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzICovXG5cblxuICAgICAgaWYgKGNmZy5BRERfVEFHUykge1xuICAgICAgICBpZiAoQUxMT1dFRF9UQUdTID09PSBERUZBVUxUX0FMTE9XRURfVEFHUykge1xuICAgICAgICAgIEFMTE9XRURfVEFHUyA9IGNsb25lKEFMTE9XRURfVEFHUyk7XG4gICAgICAgIH1cblxuICAgICAgICBhZGRUb1NldChBTExPV0VEX1RBR1MsIGNmZy5BRERfVEFHUyk7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZmcuQUREX0FUVFIpIHtcbiAgICAgICAgaWYgKEFMTE9XRURfQVRUUiA9PT0gREVGQVVMVF9BTExPV0VEX0FUVFIpIHtcbiAgICAgICAgICBBTExPV0VEX0FUVFIgPSBjbG9uZShBTExPV0VEX0FUVFIpO1xuICAgICAgICB9XG5cbiAgICAgICAgYWRkVG9TZXQoQUxMT1dFRF9BVFRSLCBjZmcuQUREX0FUVFIpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY2ZnLkFERF9VUklfU0FGRV9BVFRSKSB7XG4gICAgICAgIGFkZFRvU2V0KFVSSV9TQUZFX0FUVFJJQlVURVMsIGNmZy5BRERfVVJJX1NBRkVfQVRUUik7XG4gICAgICB9XG5cbiAgICAgIGlmIChjZmcuRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgIGlmIChGT1JCSURfQ09OVEVOVFMgPT09IERFRkFVTFRfRk9SQklEX0NPTlRFTlRTKSB7XG4gICAgICAgICAgRk9SQklEX0NPTlRFTlRTID0gY2xvbmUoRk9SQklEX0NPTlRFTlRTKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGFkZFRvU2V0KEZPUkJJRF9DT05URU5UUywgY2ZnLkZPUkJJRF9DT05URU5UUyk7XG4gICAgICB9XG4gICAgICAvKiBBZGQgI3RleHQgaW4gY2FzZSBLRUVQX0NPTlRFTlQgaXMgc2V0IHRvIHRydWUgKi9cblxuXG4gICAgICBpZiAoS0VFUF9DT05URU5UKSB7XG4gICAgICAgIEFMTE9XRURfVEFHU1snI3RleHQnXSA9IHRydWU7XG4gICAgICB9XG4gICAgICAvKiBBZGQgaHRtbCwgaGVhZCBhbmQgYm9keSB0byBBTExPV0VEX1RBR1MgaW4gY2FzZSBXSE9MRV9ET0NVTUVOVCBpcyB0cnVlICovXG5cblxuICAgICAgaWYgKFdIT0xFX0RPQ1VNRU5UKSB7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWydodG1sJywgJ2hlYWQnLCAnYm9keSddKTtcbiAgICAgIH1cbiAgICAgIC8qIEFkZCB0Ym9keSB0byBBTExPV0VEX1RBR1MgaW4gY2FzZSB0YWJsZXMgYXJlIHBlcm1pdHRlZCwgc2VlICMyODYsICMzNjUgKi9cblxuXG4gICAgICBpZiAoQUxMT1dFRF9UQUdTLnRhYmxlKSB7XG4gICAgICAgIGFkZFRvU2V0KEFMTE9XRURfVEFHUywgWyd0Ym9keSddKTtcbiAgICAgICAgZGVsZXRlIEZPUkJJRF9UQUdTLnRib2R5O1xuICAgICAgfSAvLyBQcmV2ZW50IGZ1cnRoZXIgbWFuaXB1bGF0aW9uIG9mIGNvbmZpZ3VyYXRpb24uXG4gICAgICAvLyBOb3QgYXZhaWxhYmxlIGluIElFOCwgU2FmYXJpIDUsIGV0Yy5cblxuXG4gICAgICBpZiAoZnJlZXplKSB7XG4gICAgICAgIGZyZWV6ZShjZmcpO1xuICAgICAgfVxuXG4gICAgICBDT05GSUcgPSBjZmc7XG4gICAgfTtcblxuICAgIHZhciBNQVRITUxfVEVYVF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydtaScsICdtbycsICdtbicsICdtcycsICdtdGV4dCddKTtcbiAgICB2YXIgSFRNTF9JTlRFR1JBVElPTl9QT0lOVFMgPSBhZGRUb1NldCh7fSwgWydmb3JlaWdub2JqZWN0JywgJ2Rlc2MnLCAndGl0bGUnLCAnYW5ub3RhdGlvbi14bWwnXSk7IC8vIENlcnRhaW4gZWxlbWVudHMgYXJlIGFsbG93ZWQgaW4gYm90aCBTVkcgYW5kIEhUTUxcbiAgICAvLyBuYW1lc3BhY2UuIFdlIG5lZWQgdG8gc3BlY2lmeSB0aGVtIGV4cGxpY2l0bHlcbiAgICAvLyBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGVycm9uZW91c2x5IGRlbGV0ZWQgZnJvbVxuICAgIC8vIEhUTUwgbmFtZXNwYWNlLlxuXG4gICAgdmFyIENPTU1PTl9TVkdfQU5EX0hUTUxfRUxFTUVOVFMgPSBhZGRUb1NldCh7fSwgWyd0aXRsZScsICdzdHlsZScsICdmb250JywgJ2EnLCAnc2NyaXB0J10pO1xuICAgIC8qIEtlZXAgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIFNWRyBhbmQgTWF0aE1MIHRhZ3NcbiAgICAgKiBzbyB0aGF0IHdlIGNhbiBwZXJmb3JtIHRoZSBuYW1lc3BhY2UgY2hlY2tzXG4gICAgICogY29ycmVjdGx5LiAqL1xuXG4gICAgdmFyIEFMTF9TVkdfVEFHUyA9IGFkZFRvU2V0KHt9LCBzdmckMSk7XG4gICAgYWRkVG9TZXQoQUxMX1NWR19UQUdTLCBzdmdGaWx0ZXJzKTtcbiAgICBhZGRUb1NldChBTExfU1ZHX1RBR1MsIHN2Z0Rpc2FsbG93ZWQpO1xuICAgIHZhciBBTExfTUFUSE1MX1RBR1MgPSBhZGRUb1NldCh7fSwgbWF0aE1sJDEpO1xuICAgIGFkZFRvU2V0KEFMTF9NQVRITUxfVEFHUywgbWF0aE1sRGlzYWxsb3dlZCk7XG4gICAgLyoqXG4gICAgICpcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge0VsZW1lbnR9IGVsZW1lbnQgYSBET00gZWxlbWVudCB3aG9zZSBuYW1lc3BhY2UgaXMgYmVpbmcgY2hlY2tlZFxuICAgICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm4gZmFsc2UgaWYgdGhlIGVsZW1lbnQgaGFzIGFcbiAgICAgKiAgbmFtZXNwYWNlIHRoYXQgYSBzcGVjLWNvbXBsaWFudCBwYXJzZXIgd291bGQgbmV2ZXJcbiAgICAgKiAgcmV0dXJuLiBSZXR1cm4gdHJ1ZSBvdGhlcndpc2UuXG4gICAgICovXG5cbiAgICB2YXIgX2NoZWNrVmFsaWROYW1lc3BhY2UgPSBmdW5jdGlvbiBfY2hlY2tWYWxpZE5hbWVzcGFjZShlbGVtZW50KSB7XG4gICAgICB2YXIgcGFyZW50ID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTsgLy8gSW4gSlNET00sIGlmIHdlJ3JlIGluc2lkZSBzaGFkb3cgRE9NLCB0aGVuIHBhcmVudE5vZGVcbiAgICAgIC8vIGNhbiBiZSBudWxsLiBXZSBqdXN0IHNpbXVsYXRlIHBhcmVudCBpbiB0aGlzIGNhc2UuXG5cbiAgICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQudGFnTmFtZSkge1xuICAgICAgICBwYXJlbnQgPSB7XG4gICAgICAgICAgbmFtZXNwYWNlVVJJOiBIVE1MX05BTUVTUEFDRSxcbiAgICAgICAgICB0YWdOYW1lOiAndGVtcGxhdGUnXG4gICAgICAgIH07XG4gICAgICB9XG5cbiAgICAgIHZhciB0YWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UoZWxlbWVudC50YWdOYW1lKTtcbiAgICAgIHZhciBwYXJlbnRUYWdOYW1lID0gc3RyaW5nVG9Mb3dlckNhc2UocGFyZW50LnRhZ05hbWUpO1xuXG4gICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IFNWR19OQU1FU1BBQ0UpIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIEhUTUwgbmFtZXNwYWNlIHRvIFNWR1xuICAgICAgICAvLyBpcyB2aWEgPHN2Zz4uIElmIGl0IGhhcHBlbnMgdmlhIGFueSBvdGhlciB0YWcsIHRoZW5cbiAgICAgICAgLy8gaXQgc2hvdWxkIGJlIGtpbGxlZC5cbiAgICAgICAgaWYgKHBhcmVudC5uYW1lc3BhY2VVUkkgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnO1xuICAgICAgICB9IC8vIFRoZSBvbmx5IHdheSB0byBzd2l0Y2ggZnJvbSBNYXRoTUwgdG8gU1ZHIGlzIHZpYVxuICAgICAgICAvLyBzdmcgaWYgcGFyZW50IGlzIGVpdGhlciA8YW5ub3RhdGlvbi14bWw+IG9yIE1hdGhNTFxuICAgICAgICAvLyB0ZXh0IGludGVncmF0aW9uIHBvaW50cy5cblxuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBNQVRITUxfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdzdmcnICYmIChwYXJlbnRUYWdOYW1lID09PSAnYW5ub3RhdGlvbi14bWwnIHx8IE1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXSk7XG4gICAgICAgIH0gLy8gV2Ugb25seSBhbGxvdyBlbGVtZW50cyB0aGF0IGFyZSBkZWZpbmVkIGluIFNWR1xuICAgICAgICAvLyBzcGVjLiBBbGwgb3RoZXJzIGFyZSBkaXNhbGxvd2VkIGluIFNWRyBuYW1lc3BhY2UuXG5cblxuICAgICAgICByZXR1cm4gQm9vbGVhbihBTExfU1ZHX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgfVxuXG4gICAgICBpZiAoZWxlbWVudC5uYW1lc3BhY2VVUkkgPT09IE1BVEhNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIEhUTUwgbmFtZXNwYWNlIHRvIE1hdGhNTFxuICAgICAgICAvLyBpcyB2aWEgPG1hdGg+LiBJZiBpdCBoYXBwZW5zIHZpYSBhbnkgb3RoZXIgdGFnLCB0aGVuXG4gICAgICAgIC8vIGl0IHNob3VsZCBiZSBraWxsZWQuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBIVE1MX05BTUVTUEFDRSkge1xuICAgICAgICAgIHJldHVybiB0YWdOYW1lID09PSAnbWF0aCc7XG4gICAgICAgIH0gLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIFNWRyB0byBNYXRoTUwgaXMgdmlhXG4gICAgICAgIC8vIDxtYXRoPiBhbmQgSFRNTCBpbnRlZ3JhdGlvbiBwb2ludHNcblxuXG4gICAgICAgIGlmIChwYXJlbnQubmFtZXNwYWNlVVJJID09PSBTVkdfTkFNRVNQQUNFKSB7XG4gICAgICAgICAgcmV0dXJuIHRhZ05hbWUgPT09ICdtYXRoJyAmJiBIVE1MX0lOVEVHUkFUSU9OX1BPSU5UU1twYXJlbnRUYWdOYW1lXTtcbiAgICAgICAgfSAvLyBXZSBvbmx5IGFsbG93IGVsZW1lbnRzIHRoYXQgYXJlIGRlZmluZWQgaW4gTWF0aE1MXG4gICAgICAgIC8vIHNwZWMuIEFsbCBvdGhlcnMgYXJlIGRpc2FsbG93ZWQgaW4gTWF0aE1MIG5hbWVzcGFjZS5cblxuXG4gICAgICAgIHJldHVybiBCb29sZWFuKEFMTF9NQVRITUxfVEFHU1t0YWdOYW1lXSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChlbGVtZW50Lm5hbWVzcGFjZVVSSSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgLy8gVGhlIG9ubHkgd2F5IHRvIHN3aXRjaCBmcm9tIFNWRyB0byBIVE1MIGlzIHZpYVxuICAgICAgICAvLyBIVE1MIGludGVncmF0aW9uIHBvaW50cywgYW5kIGZyb20gTWF0aE1MIHRvIEhUTUxcbiAgICAgICAgLy8gaXMgdmlhIE1hdGhNTCB0ZXh0IGludGVncmF0aW9uIHBvaW50c1xuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gU1ZHX05BTUVTUEFDRSAmJiAhSFRNTF9JTlRFR1JBVElPTl9QT0lOVFNbcGFyZW50VGFnTmFtZV0pIHtcbiAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAocGFyZW50Lm5hbWVzcGFjZVVSSSA9PT0gTUFUSE1MX05BTUVTUEFDRSAmJiAhTUFUSE1MX1RFWFRfSU5URUdSQVRJT05fUE9JTlRTW3BhcmVudFRhZ05hbWVdKSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9IC8vIFdlIGRpc2FsbG93IHRhZ3MgdGhhdCBhcmUgc3BlY2lmaWMgZm9yIE1hdGhNTFxuICAgICAgICAvLyBvciBTVkcgYW5kIHNob3VsZCBuZXZlciBhcHBlYXIgaW4gSFRNTCBuYW1lc3BhY2VcblxuXG4gICAgICAgIHJldHVybiAhQUxMX01BVEhNTF9UQUdTW3RhZ05hbWVdICYmIChDT01NT05fU1ZHX0FORF9IVE1MX0VMRU1FTlRTW3RhZ05hbWVdIHx8ICFBTExfU1ZHX1RBR1NbdGFnTmFtZV0pO1xuICAgICAgfSAvLyBUaGUgY29kZSBzaG91bGQgbmV2ZXIgcmVhY2ggdGhpcyBwbGFjZSAodGhpcyBtZWFuc1xuICAgICAgLy8gdGhhdCB0aGUgZWxlbWVudCBzb21laG93IGdvdCBuYW1lc3BhY2UgdGhhdCBpcyBub3RcbiAgICAgIC8vIEhUTUwsIFNWRyBvciBNYXRoTUwpLiBSZXR1cm4gZmFsc2UganVzdCBpbiBjYXNlLlxuXG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9mb3JjZVJlbW92ZVxuICAgICAqXG4gICAgICogQHBhcmFtICB7Tm9kZX0gbm9kZSBhIERPTSBub2RlXG4gICAgICovXG5cblxuICAgIHZhciBfZm9yY2VSZW1vdmUgPSBmdW5jdGlvbiBfZm9yY2VSZW1vdmUobm9kZSkge1xuICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgIGVsZW1lbnQ6IG5vZGVcbiAgICAgIH0pO1xuXG4gICAgICB0cnkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItZG9tLW5vZGUtcmVtb3ZlXG4gICAgICAgIG5vZGUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlKTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBub2RlLm91dGVySFRNTCA9IGVtcHR5SFRNTDtcbiAgICAgICAgfSBjYXRjaCAoXykge1xuICAgICAgICAgIG5vZGUucmVtb3ZlKCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9yZW1vdmVBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gbmFtZSBhbiBBdHRyaWJ1dGUgbmFtZVxuICAgICAqIEBwYXJhbSAge05vZGV9IG5vZGUgYSBET00gbm9kZVxuICAgICAqL1xuXG5cbiAgICB2YXIgX3JlbW92ZUF0dHJpYnV0ZSA9IGZ1bmN0aW9uIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgbm9kZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBub2RlLmdldEF0dHJpYnV0ZU5vZGUobmFtZSksXG4gICAgICAgICAgZnJvbTogbm9kZVxuICAgICAgICB9KTtcbiAgICAgIH0gY2F0Y2ggKF8pIHtcbiAgICAgICAgYXJyYXlQdXNoKERPTVB1cmlmeS5yZW1vdmVkLCB7XG4gICAgICAgICAgYXR0cmlidXRlOiBudWxsLFxuICAgICAgICAgIGZyb206IG5vZGVcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIG5vZGUucmVtb3ZlQXR0cmlidXRlKG5hbWUpOyAvLyBXZSB2b2lkIGF0dHJpYnV0ZSB2YWx1ZXMgZm9yIHVucmVtb3ZhYmxlIFwiaXNcIlwiIGF0dHJpYnV0ZXNcblxuICAgICAgaWYgKG5hbWUgPT09ICdpcycgJiYgIUFMTE9XRURfQVRUUltuYW1lXSkge1xuICAgICAgICBpZiAoUkVUVVJOX0RPTSB8fCBSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIF9mb3JjZVJlbW92ZShub2RlKTtcbiAgICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBub2RlLnNldEF0dHJpYnV0ZShuYW1lLCAnJyk7XG4gICAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gICAgLyoqXG4gICAgICogX2luaXREb2N1bWVudFxuICAgICAqXG4gICAgICogQHBhcmFtICB7U3RyaW5nfSBkaXJ0eSBhIHN0cmluZyBvZiBkaXJ0eSBtYXJrdXBcbiAgICAgKiBAcmV0dXJuIHtEb2N1bWVudH0gYSBET00sIGZpbGxlZCB3aXRoIHRoZSBkaXJ0eSBtYXJrdXBcbiAgICAgKi9cblxuXG4gICAgdmFyIF9pbml0RG9jdW1lbnQgPSBmdW5jdGlvbiBfaW5pdERvY3VtZW50KGRpcnR5KSB7XG4gICAgICAvKiBDcmVhdGUgYSBIVE1MIGRvY3VtZW50ICovXG4gICAgICB2YXIgZG9jO1xuICAgICAgdmFyIGxlYWRpbmdXaGl0ZXNwYWNlO1xuXG4gICAgICBpZiAoRk9SQ0VfQk9EWSkge1xuICAgICAgICBkaXJ0eSA9ICc8cmVtb3ZlPjwvcmVtb3ZlPicgKyBkaXJ0eTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIElmIEZPUkNFX0JPRFkgaXNuJ3QgdXNlZCwgbGVhZGluZyB3aGl0ZXNwYWNlIG5lZWRzIHRvIGJlIHByZXNlcnZlZCBtYW51YWxseSAqL1xuICAgICAgICB2YXIgbWF0Y2hlcyA9IHN0cmluZ01hdGNoKGRpcnR5LCAvXltcXHJcXG5cXHQgXSsvKTtcbiAgICAgICAgbGVhZGluZ1doaXRlc3BhY2UgPSBtYXRjaGVzICYmIG1hdGNoZXNbMF07XG4gICAgICB9XG5cbiAgICAgIGlmIChQQVJTRVJfTUVESUFfVFlQRSA9PT0gJ2FwcGxpY2F0aW9uL3hodG1sK3htbCcpIHtcbiAgICAgICAgLy8gUm9vdCBvZiBYSFRNTCBkb2MgbXVzdCBjb250YWluIHhtbG5zIGRlY2xhcmF0aW9uIChzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL3hodG1sMS9ub3JtYXRpdmUuaHRtbCNzdHJpY3QpXG4gICAgICAgIGRpcnR5ID0gJzxodG1sIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbFwiPjxoZWFkPjwvaGVhZD48Ym9keT4nICsgZGlydHkgKyAnPC9ib2R5PjwvaHRtbD4nO1xuICAgICAgfVxuXG4gICAgICB2YXIgZGlydHlQYXlsb2FkID0gdHJ1c3RlZFR5cGVzUG9saWN5ID8gdHJ1c3RlZFR5cGVzUG9saWN5LmNyZWF0ZUhUTUwoZGlydHkpIDogZGlydHk7XG4gICAgICAvKlxuICAgICAgICogVXNlIHRoZSBET01QYXJzZXIgQVBJIGJ5IGRlZmF1bHQsIGZhbGxiYWNrIGxhdGVyIGlmIG5lZWRzIGJlXG4gICAgICAgKiBET01QYXJzZXIgbm90IHdvcmsgZm9yIHN2ZyB3aGVuIGhhcyBtdWx0aXBsZSByb290IGVsZW1lbnQuXG4gICAgICAgKi9cblxuICAgICAgaWYgKE5BTUVTUEFDRSA9PT0gSFRNTF9OQU1FU1BBQ0UpIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBkb2MgPSBuZXcgRE9NUGFyc2VyKCkucGFyc2VGcm9tU3RyaW5nKGRpcnR5UGF5bG9hZCwgUEFSU0VSX01FRElBX1RZUEUpO1xuICAgICAgICB9IGNhdGNoIChfKSB7fVxuICAgICAgfVxuICAgICAgLyogVXNlIGNyZWF0ZUhUTUxEb2N1bWVudCBpbiBjYXNlIERPTVBhcnNlciBpcyBub3QgYXZhaWxhYmxlICovXG5cblxuICAgICAgaWYgKCFkb2MgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgICAgZG9jID0gaW1wbGVtZW50YXRpb24uY3JlYXRlRG9jdW1lbnQoTkFNRVNQQUNFLCAndGVtcGxhdGUnLCBudWxsKTtcblxuICAgICAgICB0cnkge1xuICAgICAgICAgIGRvYy5kb2N1bWVudEVsZW1lbnQuaW5uZXJIVE1MID0gSVNfRU1QVFlfSU5QVVQgPyAnJyA6IGRpcnR5UGF5bG9hZDtcbiAgICAgICAgfSBjYXRjaCAoXykgey8vIFN5bnRheCBlcnJvciBpZiBkaXJ0eVBheWxvYWQgaXMgaW52YWxpZCB4bWxcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICB2YXIgYm9keSA9IGRvYy5ib2R5IHx8IGRvYy5kb2N1bWVudEVsZW1lbnQ7XG5cbiAgICAgIGlmIChkaXJ0eSAmJiBsZWFkaW5nV2hpdGVzcGFjZSkge1xuICAgICAgICBib2R5Lmluc2VydEJlZm9yZShkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsZWFkaW5nV2hpdGVzcGFjZSksIGJvZHkuY2hpbGROb2Rlc1swXSB8fCBudWxsKTtcbiAgICAgIH1cbiAgICAgIC8qIFdvcmsgb24gd2hvbGUgZG9jdW1lbnQgb3IganVzdCBpdHMgYm9keSAqL1xuXG5cbiAgICAgIGlmIChOQU1FU1BBQ0UgPT09IEhUTUxfTkFNRVNQQUNFKSB7XG4gICAgICAgIHJldHVybiBnZXRFbGVtZW50c0J5VGFnTmFtZS5jYWxsKGRvYywgV0hPTEVfRE9DVU1FTlQgPyAnaHRtbCcgOiAnYm9keScpWzBdO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gV0hPTEVfRE9DVU1FTlQgPyBkb2MuZG9jdW1lbnRFbGVtZW50IDogYm9keTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9jcmVhdGVJdGVyYXRvclxuICAgICAqXG4gICAgICogQHBhcmFtICB7RG9jdW1lbnR9IHJvb3QgZG9jdW1lbnQvZnJhZ21lbnQgdG8gY3JlYXRlIGl0ZXJhdG9yIGZvclxuICAgICAqIEByZXR1cm4ge0l0ZXJhdG9yfSBpdGVyYXRvciBpbnN0YW5jZVxuICAgICAqL1xuXG5cbiAgICB2YXIgX2NyZWF0ZUl0ZXJhdG9yID0gZnVuY3Rpb24gX2NyZWF0ZUl0ZXJhdG9yKHJvb3QpIHtcbiAgICAgIHJldHVybiBjcmVhdGVOb2RlSXRlcmF0b3IuY2FsbChyb290Lm93bmVyRG9jdW1lbnQgfHwgcm9vdCwgcm9vdCwgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWJpdHdpc2VcbiAgICAgIE5vZGVGaWx0ZXIuU0hPV19FTEVNRU5UIHwgTm9kZUZpbHRlci5TSE9XX0NPTU1FTlQgfCBOb2RlRmlsdGVyLlNIT1dfVEVYVCwgbnVsbCwgZmFsc2UpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX2lzQ2xvYmJlcmVkXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtOb2RlfSBlbG0gZWxlbWVudCB0byBjaGVjayBmb3IgY2xvYmJlcmluZyBhdHRhY2tzXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gdHJ1ZSBpZiBjbG9iYmVyZWQsIGZhbHNlIGlmIHNhZmVcbiAgICAgKi9cblxuXG4gICAgdmFyIF9pc0Nsb2JiZXJlZCA9IGZ1bmN0aW9uIF9pc0Nsb2JiZXJlZChlbG0pIHtcbiAgICAgIHJldHVybiBlbG0gaW5zdGFuY2VvZiBIVE1MRm9ybUVsZW1lbnQgJiYgKHR5cGVvZiBlbG0ubm9kZU5hbWUgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0udGV4dENvbnRlbnQgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0ucmVtb3ZlQ2hpbGQgIT09ICdmdW5jdGlvbicgfHwgIShlbG0uYXR0cmlidXRlcyBpbnN0YW5jZW9mIE5hbWVkTm9kZU1hcCkgfHwgdHlwZW9mIGVsbS5yZW1vdmVBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5zZXRBdHRyaWJ1dGUgIT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIGVsbS5uYW1lc3BhY2VVUkkgIT09ICdzdHJpbmcnIHx8IHR5cGVvZiBlbG0uaW5zZXJ0QmVmb3JlICE9PSAnZnVuY3Rpb24nKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9pc05vZGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IG9iaiBvYmplY3QgdG8gY2hlY2sgd2hldGhlciBpdCdzIGEgRE9NIG5vZGVcbiAgICAgKiBAcmV0dXJuIHtCb29sZWFufSB0cnVlIGlzIG9iamVjdCBpcyBhIERPTSBub2RlXG4gICAgICovXG5cblxuICAgIHZhciBfaXNOb2RlID0gZnVuY3Rpb24gX2lzTm9kZShvYmplY3QpIHtcbiAgICAgIHJldHVybiBfdHlwZW9mKE5vZGUpID09PSAnb2JqZWN0JyA/IG9iamVjdCBpbnN0YW5jZW9mIE5vZGUgOiBvYmplY3QgJiYgX3R5cGVvZihvYmplY3QpID09PSAnb2JqZWN0JyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVUeXBlID09PSAnbnVtYmVyJyAmJiB0eXBlb2Ygb2JqZWN0Lm5vZGVOYW1lID09PSAnc3RyaW5nJztcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9leGVjdXRlSG9va1xuICAgICAqIEV4ZWN1dGUgdXNlciBjb25maWd1cmFibGUgaG9va3NcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZW50cnlQb2ludCAgTmFtZSBvZiB0aGUgaG9vaydzIGVudHJ5IHBvaW50XG4gICAgICogQHBhcmFtICB7Tm9kZX0gY3VycmVudE5vZGUgbm9kZSB0byB3b3JrIG9uIHdpdGggdGhlIGhvb2tcbiAgICAgKiBAcGFyYW0gIHtPYmplY3R9IGRhdGEgYWRkaXRpb25hbCBob29rIHBhcmFtZXRlcnNcbiAgICAgKi9cblxuXG4gICAgdmFyIF9leGVjdXRlSG9vayA9IGZ1bmN0aW9uIF9leGVjdXRlSG9vayhlbnRyeVBvaW50LCBjdXJyZW50Tm9kZSwgZGF0YSkge1xuICAgICAgaWYgKCFob29rc1tlbnRyeVBvaW50XSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGFycmF5Rm9yRWFjaChob29rc1tlbnRyeVBvaW50XSwgZnVuY3Rpb24gKGhvb2spIHtcbiAgICAgICAgaG9vay5jYWxsKERPTVB1cmlmeSwgY3VycmVudE5vZGUsIGRhdGEsIENPTkZJRyk7XG4gICAgICB9KTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9zYW5pdGl6ZUVsZW1lbnRzXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdCBub2RlTmFtZVxuICAgICAqIEBwcm90ZWN0IHRleHRDb250ZW50XG4gICAgICogQHByb3RlY3QgcmVtb3ZlQ2hpbGRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAgIHtOb2RlfSBjdXJyZW50Tm9kZSB0byBjaGVjayBmb3IgcGVybWlzc2lvbiB0byBleGlzdFxuICAgICAqIEByZXR1cm4gIHtCb29sZWFufSB0cnVlIGlmIG5vZGUgd2FzIGtpbGxlZCwgZmFsc2UgaWYgbGVmdCBhbGl2ZVxuICAgICAqL1xuXG5cbiAgICB2YXIgX3Nhbml0aXplRWxlbWVudHMgPSBmdW5jdGlvbiBfc2FuaXRpemVFbGVtZW50cyhjdXJyZW50Tm9kZSkge1xuICAgICAgdmFyIGNvbnRlbnQ7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG5cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVFbGVtZW50cycsIGN1cnJlbnROb2RlLCBudWxsKTtcbiAgICAgIC8qIENoZWNrIGlmIGVsZW1lbnQgaXMgY2xvYmJlcmVkIG9yIGNhbiBjbG9iYmVyICovXG5cblxuICAgICAgaWYgKF9pc0Nsb2JiZXJlZChjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8qIENoZWNrIGlmIHRhZ25hbWUgY29udGFpbnMgVW5pY29kZSAqL1xuXG5cbiAgICAgIGlmIChyZWdFeHBUZXN0KC9bXFx1MDA4MC1cXHVGRkZGXS8sIGN1cnJlbnROb2RlLm5vZGVOYW1lKSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLyogTm93IGxldCdzIGNoZWNrIHRoZSBlbGVtZW50J3MgdHlwZSBhbmQgbmFtZSAqL1xuXG5cbiAgICAgIHZhciB0YWdOYW1lID0gdHJhbnNmb3JtQ2FzZUZ1bmMoY3VycmVudE5vZGUubm9kZU5hbWUpO1xuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuXG4gICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZUVsZW1lbnQnLCBjdXJyZW50Tm9kZSwge1xuICAgICAgICB0YWdOYW1lOiB0YWdOYW1lLFxuICAgICAgICBhbGxvd2VkVGFnczogQUxMT1dFRF9UQUdTXG4gICAgICB9KTtcbiAgICAgIC8qIERldGVjdCBtWFNTIGF0dGVtcHRzIGFidXNpbmcgbmFtZXNwYWNlIGNvbmZ1c2lvbiAqL1xuXG5cbiAgICAgIGlmIChjdXJyZW50Tm9kZS5oYXNDaGlsZE5vZGVzKCkgJiYgIV9pc05vZGUoY3VycmVudE5vZGUuZmlyc3RFbGVtZW50Q2hpbGQpICYmICghX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50KSB8fCAhX2lzTm9kZShjdXJyZW50Tm9kZS5jb250ZW50LmZpcnN0RWxlbWVudENoaWxkKSkgJiYgcmVnRXhwVGVzdCgvPFsvXFx3XS9nLCBjdXJyZW50Tm9kZS5pbm5lckhUTUwpICYmIHJlZ0V4cFRlc3QoLzxbL1xcd10vZywgY3VycmVudE5vZGUudGV4dENvbnRlbnQpKSB7XG4gICAgICAgIF9mb3JjZVJlbW92ZShjdXJyZW50Tm9kZSk7XG5cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgICAvKiBNaXRpZ2F0ZSBhIHByb2JsZW0gd2l0aCB0ZW1wbGF0ZXMgaW5zaWRlIHNlbGVjdCAqL1xuXG5cbiAgICAgIGlmICh0YWdOYW1lID09PSAnc2VsZWN0JyAmJiByZWdFeHBUZXN0KC88dGVtcGxhdGUvaSwgY3VycmVudE5vZGUuaW5uZXJIVE1MKSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLyogUmVtb3ZlIGVsZW1lbnQgaWYgYW55dGhpbmcgZm9yYmlkcyBpdHMgcHJlc2VuY2UgKi9cblxuXG4gICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGEgY3VzdG9tIGVsZW1lbnQgdG8gaGFuZGxlICovXG4gICAgICAgIGlmICghRk9SQklEX1RBR1NbdGFnTmFtZV0gJiYgX2Jhc2ljQ3VzdG9tRWxlbWVudFRlc3QodGFnTmFtZSkpIHtcbiAgICAgICAgICBpZiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB0YWdOYW1lKSkgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIGlmIChDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2sodGFnTmFtZSkpIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBLZWVwIGNvbnRlbnQgZXhjZXB0IGZvciBiYWQtbGlzdGVkIGVsZW1lbnRzICovXG5cblxuICAgICAgICBpZiAoS0VFUF9DT05URU5UICYmICFGT1JCSURfQ09OVEVOVFNbdGFnTmFtZV0pIHtcbiAgICAgICAgICB2YXIgcGFyZW50Tm9kZSA9IGdldFBhcmVudE5vZGUoY3VycmVudE5vZGUpIHx8IGN1cnJlbnROb2RlLnBhcmVudE5vZGU7XG4gICAgICAgICAgdmFyIGNoaWxkTm9kZXMgPSBnZXRDaGlsZE5vZGVzKGN1cnJlbnROb2RlKSB8fCBjdXJyZW50Tm9kZS5jaGlsZE5vZGVzO1xuXG4gICAgICAgICAgaWYgKGNoaWxkTm9kZXMgJiYgcGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgdmFyIGNoaWxkQ291bnQgPSBjaGlsZE5vZGVzLmxlbmd0aDtcblxuICAgICAgICAgICAgZm9yICh2YXIgaSA9IGNoaWxkQ291bnQgLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICAgICAgICBwYXJlbnROb2RlLmluc2VydEJlZm9yZShjbG9uZU5vZGUoY2hpbGROb2Rlc1tpXSwgdHJ1ZSksIGdldE5leHRTaWJsaW5nKGN1cnJlbnROb2RlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIC8qIENoZWNrIHdoZXRoZXIgZWxlbWVudCBoYXMgYSB2YWxpZCBuYW1lc3BhY2UgKi9cblxuXG4gICAgICBpZiAoY3VycmVudE5vZGUgaW5zdGFuY2VvZiBFbGVtZW50ICYmICFfY2hlY2tWYWxpZE5hbWVzcGFjZShjdXJyZW50Tm9kZSkpIHtcbiAgICAgICAgX2ZvcmNlUmVtb3ZlKGN1cnJlbnROb2RlKTtcblxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgaWYgKCh0YWdOYW1lID09PSAnbm9zY3JpcHQnIHx8IHRhZ05hbWUgPT09ICdub2VtYmVkJykgJiYgcmVnRXhwVGVzdCgvPFxcL25vKHNjcmlwdHxlbWJlZCkvaSwgY3VycmVudE5vZGUuaW5uZXJIVE1MKSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoY3VycmVudE5vZGUpO1xuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgLyogU2FuaXRpemUgZWxlbWVudCBjb250ZW50IHRvIGJlIHRlbXBsYXRlLXNhZmUgKi9cblxuXG4gICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTICYmIGN1cnJlbnROb2RlLm5vZGVUeXBlID09PSAzKSB7XG4gICAgICAgIC8qIEdldCB0aGUgZWxlbWVudCdzIHRleHQgY29udGVudCAqL1xuICAgICAgICBjb250ZW50ID0gY3VycmVudE5vZGUudGV4dENvbnRlbnQ7XG4gICAgICAgIGNvbnRlbnQgPSBzdHJpbmdSZXBsYWNlKGNvbnRlbnQsIE1VU1RBQ0hFX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgY29udGVudCA9IHN0cmluZ1JlcGxhY2UoY29udGVudCwgRVJCX0VYUFIkMSwgJyAnKTtcblxuICAgICAgICBpZiAoY3VycmVudE5vZGUudGV4dENvbnRlbnQgIT09IGNvbnRlbnQpIHtcbiAgICAgICAgICBhcnJheVB1c2goRE9NUHVyaWZ5LnJlbW92ZWQsIHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGN1cnJlbnROb2RlLmNsb25lTm9kZSgpXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgY3VycmVudE5vZGUudGV4dENvbnRlbnQgPSBjb250ZW50O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG5cblxuICAgICAgX2V4ZWN1dGVIb29rKCdhZnRlclNhbml0aXplRWxlbWVudHMnLCBjdXJyZW50Tm9kZSwgbnVsbCk7XG5cbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIF9pc1ZhbGlkQXR0cmlidXRlXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGxjVGFnIExvd2VyY2FzZSB0YWcgbmFtZSBvZiBjb250YWluaW5nIGVsZW1lbnQuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSBsY05hbWUgTG93ZXJjYXNlIGF0dHJpYnV0ZSBuYW1lLlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdmFsdWUgQXR0cmlidXRlIHZhbHVlLlxuICAgICAqIEByZXR1cm4ge0Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiBgdmFsdWVgIGlzIHZhbGlkLCBvdGhlcndpc2UgZmFsc2UuXG4gICAgICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbXBsZXhpdHlcblxuXG4gICAgdmFyIF9pc1ZhbGlkQXR0cmlidXRlID0gZnVuY3Rpb24gX2lzVmFsaWRBdHRyaWJ1dGUobGNUYWcsIGxjTmFtZSwgdmFsdWUpIHtcbiAgICAgIC8qIE1ha2Ugc3VyZSBhdHRyaWJ1dGUgY2Fubm90IGNsb2JiZXIgKi9cbiAgICAgIGlmIChTQU5JVElaRV9ET00gJiYgKGxjTmFtZSA9PT0gJ2lkJyB8fCBsY05hbWUgPT09ICduYW1lJykgJiYgKHZhbHVlIGluIGRvY3VtZW50IHx8IHZhbHVlIGluIGZvcm1FbGVtZW50KSkge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICAvKiBBbGxvdyB2YWxpZCBkYXRhLSogYXR0cmlidXRlczogQXQgbGVhc3Qgb25lIGNoYXJhY3RlciBhZnRlciBcIi1cIlxuICAgICAgICAgIChodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9kb20uaHRtbCNlbWJlZGRpbmctY3VzdG9tLW5vbi12aXNpYmxlLWRhdGEtd2l0aC10aGUtZGF0YS0qLWF0dHJpYnV0ZXMpXG4gICAgICAgICAgWE1MLWNvbXBhdGlibGUgKGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2luZnJhc3RydWN0dXJlLmh0bWwjeG1sLWNvbXBhdGlibGUgYW5kIGh0dHA6Ly93d3cudzMub3JnL1RSL3htbC8jZDBlODA0KVxuICAgICAgICAgIFdlIGRvbid0IG5lZWQgdG8gY2hlY2sgdGhlIHZhbHVlOyBpdCdzIGFsd2F5cyBVUkkgc2FmZS4gKi9cblxuXG4gICAgICBpZiAoQUxMT1dfREFUQV9BVFRSICYmICFGT1JCSURfQVRUUltsY05hbWVdICYmIHJlZ0V4cFRlc3QoREFUQV9BVFRSJDEsIGxjTmFtZSkpIDsgZWxzZSBpZiAoQUxMT1dfQVJJQV9BVFRSICYmIHJlZ0V4cFRlc3QoQVJJQV9BVFRSJDEsIGxjTmFtZSkpIDsgZWxzZSBpZiAoIUFMTE9XRURfQVRUUltsY05hbWVdIHx8IEZPUkJJRF9BVFRSW2xjTmFtZV0pIHtcbiAgICAgICAgaWYgKCAvLyBGaXJzdCBjb25kaXRpb24gZG9lcyBhIHZlcnkgYmFzaWMgY2hlY2sgaWYgYSkgaXQncyBiYXNpY2FsbHkgYSB2YWxpZCBjdXN0b20gZWxlbWVudCB0YWduYW1lIEFORFxuICAgICAgICAvLyBiKSBpZiB0aGUgdGFnTmFtZSBwYXNzZXMgd2hhdGV2ZXIgdGhlIHVzZXIgaGFzIGNvbmZpZ3VyZWQgZm9yIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLnRhZ05hbWVDaGVja1xuICAgICAgICAvLyBhbmQgYykgaWYgdGhlIGF0dHJpYnV0ZSBuYW1lIHBhc3NlcyB3aGF0ZXZlciB0aGUgdXNlciBoYXMgY29uZmlndXJlZCBmb3IgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcuYXR0cmlidXRlTmFtZUNoZWNrXG4gICAgICAgIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KGxjVGFnKSAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCBsY1RhZykgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKGxjVGFnKSkgJiYgKENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjayBpbnN0YW5jZW9mIFJlZ0V4cCAmJiByZWdFeHBUZXN0KENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmF0dHJpYnV0ZU5hbWVDaGVjaywgbGNOYW1lKSB8fCBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sgaW5zdGFuY2VvZiBGdW5jdGlvbiAmJiBDVVNUT01fRUxFTUVOVF9IQU5ETElORy5hdHRyaWJ1dGVOYW1lQ2hlY2sobGNOYW1lKSkgfHwgLy8gQWx0ZXJuYXRpdmUsIHNlY29uZCBjb25kaXRpb24gY2hlY2tzIGlmIGl0J3MgYW4gYGlzYC1hdHRyaWJ1dGUsIEFORFxuICAgICAgICAvLyB0aGUgdmFsdWUgcGFzc2VzIHdoYXRldmVyIHRoZSB1c2VyIGhhcyBjb25maWd1cmVkIGZvciBDVVNUT01fRUxFTUVOVF9IQU5ETElORy50YWdOYW1lQ2hlY2tcbiAgICAgICAgbGNOYW1lID09PSAnaXMnICYmIENVU1RPTV9FTEVNRU5UX0hBTkRMSU5HLmFsbG93Q3VzdG9taXplZEJ1aWx0SW5FbGVtZW50cyAmJiAoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgUmVnRXhwICYmIHJlZ0V4cFRlc3QoQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrLCB2YWx1ZSkgfHwgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrIGluc3RhbmNlb2YgRnVuY3Rpb24gJiYgQ1VTVE9NX0VMRU1FTlRfSEFORExJTkcudGFnTmFtZUNoZWNrKHZhbHVlKSkpIDsgZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8qIENoZWNrIHZhbHVlIGlzIHNhZmUuIEZpcnN0LCBpcyBhdHRyIGluZXJ0PyBJZiBzbywgaXMgc2FmZSAqL1xuXG4gICAgICB9IGVsc2UgaWYgKFVSSV9TQUZFX0FUVFJJQlVURVNbbGNOYW1lXSkgOyBlbHNlIGlmIChyZWdFeHBUZXN0KElTX0FMTE9XRURfVVJJJDEsIHN0cmluZ1JlcGxhY2UodmFsdWUsIEFUVFJfV0hJVEVTUEFDRSQxLCAnJykpKSA7IGVsc2UgaWYgKChsY05hbWUgPT09ICdzcmMnIHx8IGxjTmFtZSA9PT0gJ3hsaW5rOmhyZWYnIHx8IGxjTmFtZSA9PT0gJ2hyZWYnKSAmJiBsY1RhZyAhPT0gJ3NjcmlwdCcgJiYgc3RyaW5nSW5kZXhPZih2YWx1ZSwgJ2RhdGE6JykgPT09IDAgJiYgREFUQV9VUklfVEFHU1tsY1RhZ10pIDsgZWxzZSBpZiAoQUxMT1dfVU5LTk9XTl9QUk9UT0NPTFMgJiYgIXJlZ0V4cFRlc3QoSVNfU0NSSVBUX09SX0RBVEEkMSwgc3RyaW5nUmVwbGFjZSh2YWx1ZSwgQVRUUl9XSElURVNQQUNFJDEsICcnKSkpIDsgZWxzZSBpZiAoIXZhbHVlKSA7IGVsc2Uge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX2Jhc2ljQ3VzdG9tRWxlbWVudENoZWNrXG4gICAgICogY2hlY2tzIGlmIGF0IGxlYXN0IG9uZSBkYXNoIGlzIGluY2x1ZGVkIGluIHRhZ05hbWUsIGFuZCBpdCdzIG5vdCB0aGUgZmlyc3QgY2hhclxuICAgICAqIGZvciBtb3JlIHNvcGhpc3RpY2F0ZWQgY2hlY2tpbmcgc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvdmFsaWRhdGUtZWxlbWVudC1uYW1lXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHRhZ05hbWUgbmFtZSBvZiB0aGUgdGFnIG9mIHRoZSBub2RlIHRvIHNhbml0aXplXG4gICAgICovXG5cblxuICAgIHZhciBfYmFzaWNDdXN0b21FbGVtZW50VGVzdCA9IGZ1bmN0aW9uIF9iYXNpY0N1c3RvbUVsZW1lbnRUZXN0KHRhZ05hbWUpIHtcbiAgICAgIHJldHVybiB0YWdOYW1lLmluZGV4T2YoJy0nKSA+IDA7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBfc2FuaXRpemVBdHRyaWJ1dGVzXG4gICAgICpcbiAgICAgKiBAcHJvdGVjdCBhdHRyaWJ1dGVzXG4gICAgICogQHByb3RlY3Qgbm9kZU5hbWVcbiAgICAgKiBAcHJvdGVjdCByZW1vdmVBdHRyaWJ1dGVcbiAgICAgKiBAcHJvdGVjdCBzZXRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge05vZGV9IGN1cnJlbnROb2RlIHRvIHNhbml0aXplXG4gICAgICovXG5cblxuICAgIHZhciBfc2FuaXRpemVBdHRyaWJ1dGVzID0gZnVuY3Rpb24gX3Nhbml0aXplQXR0cmlidXRlcyhjdXJyZW50Tm9kZSkge1xuICAgICAgdmFyIGF0dHI7XG4gICAgICB2YXIgdmFsdWU7XG4gICAgICB2YXIgbGNOYW1lO1xuICAgICAgdmFyIGw7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG5cbiAgICAgIF9leGVjdXRlSG9vaygnYmVmb3JlU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuXG4gICAgICB2YXIgYXR0cmlidXRlcyA9IGN1cnJlbnROb2RlLmF0dHJpYnV0ZXM7XG4gICAgICAvKiBDaGVjayBpZiB3ZSBoYXZlIGF0dHJpYnV0ZXM7IGlmIG5vdCB3ZSBtaWdodCBoYXZlIGEgdGV4dCBub2RlICovXG5cbiAgICAgIGlmICghYXR0cmlidXRlcykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBob29rRXZlbnQgPSB7XG4gICAgICAgIGF0dHJOYW1lOiAnJyxcbiAgICAgICAgYXR0clZhbHVlOiAnJyxcbiAgICAgICAga2VlcEF0dHI6IHRydWUsXG4gICAgICAgIGFsbG93ZWRBdHRyaWJ1dGVzOiBBTExPV0VEX0FUVFJcbiAgICAgIH07XG4gICAgICBsID0gYXR0cmlidXRlcy5sZW5ndGg7XG4gICAgICAvKiBHbyBiYWNrd2FyZHMgb3ZlciBhbGwgYXR0cmlidXRlczsgc2FmZWx5IHJlbW92ZSBiYWQgb25lcyAqL1xuXG4gICAgICB3aGlsZSAobC0tKSB7XG4gICAgICAgIGF0dHIgPSBhdHRyaWJ1dGVzW2xdO1xuICAgICAgICB2YXIgX2F0dHIgPSBhdHRyLFxuICAgICAgICAgICAgbmFtZSA9IF9hdHRyLm5hbWUsXG4gICAgICAgICAgICBuYW1lc3BhY2VVUkkgPSBfYXR0ci5uYW1lc3BhY2VVUkk7XG4gICAgICAgIHZhbHVlID0gbmFtZSA9PT0gJ3ZhbHVlJyA/IGF0dHIudmFsdWUgOiBzdHJpbmdUcmltKGF0dHIudmFsdWUpO1xuICAgICAgICBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhuYW1lKTtcbiAgICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuXG4gICAgICAgIGhvb2tFdmVudC5hdHRyTmFtZSA9IGxjTmFtZTtcbiAgICAgICAgaG9va0V2ZW50LmF0dHJWYWx1ZSA9IHZhbHVlO1xuICAgICAgICBob29rRXZlbnQua2VlcEF0dHIgPSB0cnVlO1xuICAgICAgICBob29rRXZlbnQuZm9yY2VLZWVwQXR0ciA9IHVuZGVmaW5lZDsgLy8gQWxsb3dzIGRldmVsb3BlcnMgdG8gc2VlIHRoaXMgaXMgYSBwcm9wZXJ0eSB0aGV5IGNhbiBzZXRcblxuICAgICAgICBfZXhlY3V0ZUhvb2soJ3Vwb25TYW5pdGl6ZUF0dHJpYnV0ZScsIGN1cnJlbnROb2RlLCBob29rRXZlbnQpO1xuXG4gICAgICAgIHZhbHVlID0gaG9va0V2ZW50LmF0dHJWYWx1ZTtcbiAgICAgICAgLyogRGlkIHRoZSBob29rcyBhcHByb3ZlIG9mIHRoZSBhdHRyaWJ1dGU/ICovXG5cbiAgICAgICAgaWYgKGhvb2tFdmVudC5mb3JjZUtlZXBBdHRyKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogUmVtb3ZlIGF0dHJpYnV0ZSAqL1xuXG5cbiAgICAgICAgX3JlbW92ZUF0dHJpYnV0ZShuYW1lLCBjdXJyZW50Tm9kZSk7XG4gICAgICAgIC8qIERpZCB0aGUgaG9va3MgYXBwcm92ZSBvZiB0aGUgYXR0cmlidXRlPyAqL1xuXG5cbiAgICAgICAgaWYgKCFob29rRXZlbnQua2VlcEF0dHIpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBXb3JrIGFyb3VuZCBhIHNlY3VyaXR5IGlzc3VlIGluIGpRdWVyeSAzLjAgKi9cblxuXG4gICAgICAgIGlmIChyZWdFeHBUZXN0KC9cXC8+L2ksIHZhbHVlKSkge1xuICAgICAgICAgIF9yZW1vdmVBdHRyaWJ1dGUobmFtZSwgY3VycmVudE5vZGUpO1xuXG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgLyogU2FuaXRpemUgYXR0cmlidXRlIGNvbnRlbnQgdG8gYmUgdGVtcGxhdGUtc2FmZSAqL1xuXG5cbiAgICAgICAgaWYgKFNBRkVfRk9SX1RFTVBMQVRFUykge1xuICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICAgIHZhbHVlID0gc3RyaW5nUmVwbGFjZSh2YWx1ZSwgRVJCX0VYUFIkMSwgJyAnKTtcbiAgICAgICAgfVxuICAgICAgICAvKiBJcyBgdmFsdWVgIHZhbGlkIGZvciB0aGlzIGF0dHJpYnV0ZT8gKi9cblxuXG4gICAgICAgIHZhciBsY1RhZyA9IHRyYW5zZm9ybUNhc2VGdW5jKGN1cnJlbnROb2RlLm5vZGVOYW1lKTtcblxuICAgICAgICBpZiAoIV9pc1ZhbGlkQXR0cmlidXRlKGxjVGFnLCBsY05hbWUsIHZhbHVlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIEhhbmRsZSBpbnZhbGlkIGRhdGEtKiBhdHRyaWJ1dGUgc2V0IGJ5IHRyeS1jYXRjaGluZyBpdCAqL1xuXG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAobmFtZXNwYWNlVVJJKSB7XG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGVOUyhuYW1lc3BhY2VVUkksIG5hbWUsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLyogRmFsbGJhY2sgdG8gc2V0QXR0cmlidXRlKCkgZm9yIGJyb3dzZXItdW5yZWNvZ25pemVkIG5hbWVzcGFjZXMgZS5nLiBcIngtc2NoZW1hXCIuICovXG4gICAgICAgICAgICBjdXJyZW50Tm9kZS5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGFycmF5UG9wKERPTVB1cmlmeS5yZW1vdmVkKTtcbiAgICAgICAgfSBjYXRjaCAoXykge31cbiAgICAgIH1cbiAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cblxuXG4gICAgICBfZXhlY3V0ZUhvb2soJ2FmdGVyU2FuaXRpemVBdHRyaWJ1dGVzJywgY3VycmVudE5vZGUsIG51bGwpO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogX3Nhbml0aXplU2hhZG93RE9NXG4gICAgICpcbiAgICAgKiBAcGFyYW0gIHtEb2N1bWVudEZyYWdtZW50fSBmcmFnbWVudCB0byBpdGVyYXRlIG92ZXIgcmVjdXJzaXZlbHlcbiAgICAgKi9cblxuXG4gICAgdmFyIF9zYW5pdGl6ZVNoYWRvd0RPTSA9IGZ1bmN0aW9uIF9zYW5pdGl6ZVNoYWRvd0RPTShmcmFnbWVudCkge1xuICAgICAgdmFyIHNoYWRvd05vZGU7XG5cbiAgICAgIHZhciBzaGFkb3dJdGVyYXRvciA9IF9jcmVhdGVJdGVyYXRvcihmcmFnbWVudCk7XG4gICAgICAvKiBFeGVjdXRlIGEgaG9vayBpZiBwcmVzZW50ICovXG5cblxuICAgICAgX2V4ZWN1dGVIb29rKCdiZWZvcmVTYW5pdGl6ZVNoYWRvd0RPTScsIGZyYWdtZW50LCBudWxsKTtcblxuICAgICAgd2hpbGUgKHNoYWRvd05vZGUgPSBzaGFkb3dJdGVyYXRvci5uZXh0Tm9kZSgpKSB7XG4gICAgICAgIC8qIEV4ZWN1dGUgYSBob29rIGlmIHByZXNlbnQgKi9cbiAgICAgICAgX2V4ZWN1dGVIb29rKCd1cG9uU2FuaXRpemVTaGFkb3dOb2RlJywgc2hhZG93Tm9kZSwgbnVsbCk7XG4gICAgICAgIC8qIFNhbml0aXplIHRhZ3MgYW5kIGVsZW1lbnRzICovXG5cblxuICAgICAgICBpZiAoX3Nhbml0aXplRWxlbWVudHMoc2hhZG93Tm9kZSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBEZWVwIHNoYWRvdyBET00gZGV0ZWN0ZWQgKi9cblxuXG4gICAgICAgIGlmIChzaGFkb3dOb2RlLmNvbnRlbnQgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KSB7XG4gICAgICAgICAgX3Nhbml0aXplU2hhZG93RE9NKHNoYWRvd05vZGUuY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogQ2hlY2sgYXR0cmlidXRlcywgc2FuaXRpemUgaWYgbmVjZXNzYXJ5ICovXG5cblxuICAgICAgICBfc2FuaXRpemVBdHRyaWJ1dGVzKHNoYWRvd05vZGUpO1xuICAgICAgfVxuICAgICAgLyogRXhlY3V0ZSBhIGhvb2sgaWYgcHJlc2VudCAqL1xuXG5cbiAgICAgIF9leGVjdXRlSG9vaygnYWZ0ZXJTYW5pdGl6ZVNoYWRvd0RPTScsIGZyYWdtZW50LCBudWxsKTtcbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFNhbml0aXplXG4gICAgICogUHVibGljIG1ldGhvZCBwcm92aWRpbmcgY29yZSBzYW5pdGF0aW9uIGZ1bmN0aW9uYWxpdHlcbiAgICAgKlxuICAgICAqIEBwYXJhbSB7U3RyaW5nfE5vZGV9IGRpcnR5IHN0cmluZyBvciBET00gbm9kZVxuICAgICAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgICAqL1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb21wbGV4aXR5XG5cblxuICAgIERPTVB1cmlmeS5zYW5pdGl6ZSA9IGZ1bmN0aW9uIChkaXJ0eSwgY2ZnKSB7XG4gICAgICB2YXIgYm9keTtcbiAgICAgIHZhciBpbXBvcnRlZE5vZGU7XG4gICAgICB2YXIgY3VycmVudE5vZGU7XG4gICAgICB2YXIgb2xkTm9kZTtcbiAgICAgIHZhciByZXR1cm5Ob2RlO1xuICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBzdHJpbmcgdG8gc2FuaXRpemUuXG4gICAgICAgIERPIE5PVCByZXR1cm4gZWFybHksIGFzIHRoaXMgd2lsbCByZXR1cm4gdGhlIHdyb25nIHR5cGUgaWZcbiAgICAgICAgdGhlIHVzZXIgaGFzIHJlcXVlc3RlZCBhIERPTSBvYmplY3QgcmF0aGVyIHRoYW4gYSBzdHJpbmcgKi9cblxuICAgICAgSVNfRU1QVFlfSU5QVVQgPSAhZGlydHk7XG5cbiAgICAgIGlmIChJU19FTVBUWV9JTlBVVCkge1xuICAgICAgICBkaXJ0eSA9ICc8IS0tPic7XG4gICAgICB9XG4gICAgICAvKiBTdHJpbmdpZnksIGluIGNhc2UgZGlydHkgaXMgYW4gb2JqZWN0ICovXG5cblxuICAgICAgaWYgKHR5cGVvZiBkaXJ0eSAhPT0gJ3N0cmluZycgJiYgIV9pc05vZGUoZGlydHkpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZWdhdGVkLWNvbmRpdGlvblxuICAgICAgICBpZiAodHlwZW9mIGRpcnR5LnRvU3RyaW5nICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCd0b1N0cmluZyBpcyBub3QgYSBmdW5jdGlvbicpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGRpcnR5ID0gZGlydHkudG9TdHJpbmcoKTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZGlydHkgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICB0aHJvdyB0eXBlRXJyb3JDcmVhdGUoJ2RpcnR5IGlzIG5vdCBhIHN0cmluZywgYWJvcnRpbmcnKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIENoZWNrIHdlIGNhbiBydW4uIE90aGVyd2lzZSBmYWxsIGJhY2sgb3IgaWdub3JlICovXG5cblxuICAgICAgaWYgKCFET01QdXJpZnkuaXNTdXBwb3J0ZWQpIHtcbiAgICAgICAgaWYgKF90eXBlb2Yod2luZG93LnRvU3RhdGljSFRNTCkgPT09ICdvYmplY3QnIHx8IHR5cGVvZiB3aW5kb3cudG9TdGF0aWNIVE1MID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiBkaXJ0eSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cudG9TdGF0aWNIVE1MKGRpcnR5KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoX2lzTm9kZShkaXJ0eSkpIHtcbiAgICAgICAgICAgIHJldHVybiB3aW5kb3cudG9TdGF0aWNIVE1MKGRpcnR5Lm91dGVySFRNTCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGRpcnR5O1xuICAgICAgfVxuICAgICAgLyogQXNzaWduIGNvbmZpZyB2YXJzICovXG5cblxuICAgICAgaWYgKCFTRVRfQ09ORklHKSB7XG4gICAgICAgIF9wYXJzZUNvbmZpZyhjZmcpO1xuICAgICAgfVxuICAgICAgLyogQ2xlYW4gdXAgcmVtb3ZlZCBlbGVtZW50cyAqL1xuXG5cbiAgICAgIERPTVB1cmlmeS5yZW1vdmVkID0gW107XG4gICAgICAvKiBDaGVjayBpZiBkaXJ0eSBpcyBjb3JyZWN0bHkgdHlwZWQgZm9yIElOX1BMQUNFICovXG5cbiAgICAgIGlmICh0eXBlb2YgZGlydHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIElOX1BMQUNFID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIGlmIChJTl9QTEFDRSkge1xuICAgICAgICAvKiBEbyBzb21lIGVhcmx5IHByZS1zYW5pdGl6YXRpb24gdG8gYXZvaWQgdW5zYWZlIHJvb3Qgbm9kZXMgKi9cbiAgICAgICAgaWYgKGRpcnR5Lm5vZGVOYW1lKSB7XG4gICAgICAgICAgdmFyIHRhZ05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhkaXJ0eS5ub2RlTmFtZSk7XG5cbiAgICAgICAgICBpZiAoIUFMTE9XRURfVEFHU1t0YWdOYW1lXSB8fCBGT1JCSURfVEFHU1t0YWdOYW1lXSkge1xuICAgICAgICAgICAgdGhyb3cgdHlwZUVycm9yQ3JlYXRlKCdyb290IG5vZGUgaXMgZm9yYmlkZGVuIGFuZCBjYW5ub3QgYmUgc2FuaXRpemVkIGluLXBsYWNlJyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGRpcnR5IGluc3RhbmNlb2YgTm9kZSkge1xuICAgICAgICAvKiBJZiBkaXJ0eSBpcyBhIERPTSBlbGVtZW50LCBhcHBlbmQgdG8gYW4gZW1wdHkgZG9jdW1lbnQgdG8gYXZvaWRcbiAgICAgICAgICAgZWxlbWVudHMgYmVpbmcgc3RyaXBwZWQgYnkgdGhlIHBhcnNlciAqL1xuICAgICAgICBib2R5ID0gX2luaXREb2N1bWVudCgnPCEtLS0tPicpO1xuICAgICAgICBpbXBvcnRlZE5vZGUgPSBib2R5Lm93bmVyRG9jdW1lbnQuaW1wb3J0Tm9kZShkaXJ0eSwgdHJ1ZSk7XG5cbiAgICAgICAgaWYgKGltcG9ydGVkTm9kZS5ub2RlVHlwZSA9PT0gMSAmJiBpbXBvcnRlZE5vZGUubm9kZU5hbWUgPT09ICdCT0RZJykge1xuICAgICAgICAgIC8qIE5vZGUgaXMgYWxyZWFkeSBhIGJvZHksIHVzZSBhcyBpcyAqL1xuICAgICAgICAgIGJvZHkgPSBpbXBvcnRlZE5vZGU7XG4gICAgICAgIH0gZWxzZSBpZiAoaW1wb3J0ZWROb2RlLm5vZGVOYW1lID09PSAnSFRNTCcpIHtcbiAgICAgICAgICBib2R5ID0gaW1wb3J0ZWROb2RlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSB1bmljb3JuL3ByZWZlci1kb20tbm9kZS1hcHBlbmRcbiAgICAgICAgICBib2R5LmFwcGVuZENoaWxkKGltcG9ydGVkTm9kZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8qIEV4aXQgZGlyZWN0bHkgaWYgd2UgaGF2ZSBub3RoaW5nIHRvIGRvICovXG4gICAgICAgIGlmICghUkVUVVJOX0RPTSAmJiAhU0FGRV9GT1JfVEVNUExBVEVTICYmICFXSE9MRV9ET0NVTUVOVCAmJiAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9wcmVmZXItaW5jbHVkZXNcbiAgICAgICAgZGlydHkuaW5kZXhPZignPCcpID09PSAtMSkge1xuICAgICAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKGRpcnR5KSA6IGRpcnR5O1xuICAgICAgICB9XG4gICAgICAgIC8qIEluaXRpYWxpemUgdGhlIGRvY3VtZW50IHRvIHdvcmsgb24gKi9cblxuXG4gICAgICAgIGJvZHkgPSBfaW5pdERvY3VtZW50KGRpcnR5KTtcbiAgICAgICAgLyogQ2hlY2sgd2UgaGF2ZSBhIERPTSBub2RlIGZyb20gdGhlIGRhdGEgKi9cblxuICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICByZXR1cm4gUkVUVVJOX0RPTSA/IG51bGwgOiBSRVRVUk5fVFJVU1RFRF9UWVBFID8gZW1wdHlIVE1MIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIC8qIFJlbW92ZSBmaXJzdCBlbGVtZW50IG5vZGUgKG91cnMpIGlmIEZPUkNFX0JPRFkgaXMgc2V0ICovXG5cblxuICAgICAgaWYgKGJvZHkgJiYgRk9SQ0VfQk9EWSkge1xuICAgICAgICBfZm9yY2VSZW1vdmUoYm9keS5maXJzdENoaWxkKTtcbiAgICAgIH1cbiAgICAgIC8qIEdldCBub2RlIGl0ZXJhdG9yICovXG5cblxuICAgICAgdmFyIG5vZGVJdGVyYXRvciA9IF9jcmVhdGVJdGVyYXRvcihJTl9QTEFDRSA/IGRpcnR5IDogYm9keSk7XG4gICAgICAvKiBOb3cgc3RhcnQgaXRlcmF0aW5nIG92ZXIgdGhlIGNyZWF0ZWQgZG9jdW1lbnQgKi9cblxuXG4gICAgICB3aGlsZSAoY3VycmVudE5vZGUgPSBub2RlSXRlcmF0b3IubmV4dE5vZGUoKSkge1xuICAgICAgICAvKiBGaXggSUUncyBzdHJhbmdlIGJlaGF2aW9yIHdpdGggbWFuaXB1bGF0ZWQgdGV4dE5vZGVzICM4OSAqL1xuICAgICAgICBpZiAoY3VycmVudE5vZGUubm9kZVR5cGUgPT09IDMgJiYgY3VycmVudE5vZGUgPT09IG9sZE5vZGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICAvKiBTYW5pdGl6ZSB0YWdzIGFuZCBlbGVtZW50cyAqL1xuXG5cbiAgICAgICAgaWYgKF9zYW5pdGl6ZUVsZW1lbnRzKGN1cnJlbnROb2RlKSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIC8qIFNoYWRvdyBET00gZGV0ZWN0ZWQsIHNhbml0aXplIGl0ICovXG5cblxuICAgICAgICBpZiAoY3VycmVudE5vZGUuY29udGVudCBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpIHtcbiAgICAgICAgICBfc2FuaXRpemVTaGFkb3dET00oY3VycmVudE5vZGUuY29udGVudCk7XG4gICAgICAgIH1cbiAgICAgICAgLyogQ2hlY2sgYXR0cmlidXRlcywgc2FuaXRpemUgaWYgbmVjZXNzYXJ5ICovXG5cblxuICAgICAgICBfc2FuaXRpemVBdHRyaWJ1dGVzKGN1cnJlbnROb2RlKTtcblxuICAgICAgICBvbGROb2RlID0gY3VycmVudE5vZGU7XG4gICAgICB9XG5cbiAgICAgIG9sZE5vZGUgPSBudWxsO1xuICAgICAgLyogSWYgd2Ugc2FuaXRpemVkIGBkaXJ0eWAgaW4tcGxhY2UsIHJldHVybiBpdC4gKi9cblxuICAgICAgaWYgKElOX1BMQUNFKSB7XG4gICAgICAgIHJldHVybiBkaXJ0eTtcbiAgICAgIH1cbiAgICAgIC8qIFJldHVybiBzYW5pdGl6ZWQgc3RyaW5nIG9yIERPTSAqL1xuXG5cbiAgICAgIGlmIChSRVRVUk5fRE9NKSB7XG4gICAgICAgIGlmIChSRVRVUk5fRE9NX0ZSQUdNRU5UKSB7XG4gICAgICAgICAgcmV0dXJuTm9kZSA9IGNyZWF0ZURvY3VtZW50RnJhZ21lbnQuY2FsbChib2R5Lm93bmVyRG9jdW1lbnQpO1xuXG4gICAgICAgICAgd2hpbGUgKGJvZHkuZmlyc3RDaGlsZCkge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHVuaWNvcm4vcHJlZmVyLWRvbS1ub2RlLWFwcGVuZFxuICAgICAgICAgICAgcmV0dXJuTm9kZS5hcHBlbmRDaGlsZChib2R5LmZpcnN0Q2hpbGQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXR1cm5Ob2RlID0gYm9keTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChBTExPV0VEX0FUVFIuc2hhZG93cm9vdCkge1xuICAgICAgICAgIC8qXG4gICAgICAgICAgICBBZG9wdE5vZGUoKSBpcyBub3QgdXNlZCBiZWNhdXNlIGludGVybmFsIHN0YXRlIGlzIG5vdCByZXNldFxuICAgICAgICAgICAgKGUuZy4gdGhlIHBhc3QgbmFtZXMgbWFwIG9mIGEgSFRNTEZvcm1FbGVtZW50KSwgdGhpcyBpcyBzYWZlXG4gICAgICAgICAgICBpbiB0aGVvcnkgYnV0IHdlIHdvdWxkIHJhdGhlciBub3QgcmlzayBhbm90aGVyIGF0dGFjayB2ZWN0b3IuXG4gICAgICAgICAgICBUaGUgc3RhdGUgdGhhdCBpcyBjbG9uZWQgYnkgaW1wb3J0Tm9kZSgpIGlzIGV4cGxpY2l0bHkgZGVmaW5lZFxuICAgICAgICAgICAgYnkgdGhlIHNwZWNzLlxuICAgICAgICAgICovXG4gICAgICAgICAgcmV0dXJuTm9kZSA9IGltcG9ydE5vZGUuY2FsbChvcmlnaW5hbERvY3VtZW50LCByZXR1cm5Ob2RlLCB0cnVlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZXR1cm5Ob2RlO1xuICAgICAgfVxuXG4gICAgICB2YXIgc2VyaWFsaXplZEhUTUwgPSBXSE9MRV9ET0NVTUVOVCA/IGJvZHkub3V0ZXJIVE1MIDogYm9keS5pbm5lckhUTUw7XG4gICAgICAvKiBTZXJpYWxpemUgZG9jdHlwZSBpZiBhbGxvd2VkICovXG5cbiAgICAgIGlmIChXSE9MRV9ET0NVTUVOVCAmJiBBTExPV0VEX1RBR1NbJyFkb2N0eXBlJ10gJiYgYm9keS5vd25lckRvY3VtZW50ICYmIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlICYmIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUgJiYgcmVnRXhwVGVzdChET0NUWVBFX05BTUUsIGJvZHkub3duZXJEb2N1bWVudC5kb2N0eXBlLm5hbWUpKSB7XG4gICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gJzwhRE9DVFlQRSAnICsgYm9keS5vd25lckRvY3VtZW50LmRvY3R5cGUubmFtZSArICc+XFxuJyArIHNlcmlhbGl6ZWRIVE1MO1xuICAgICAgfVxuICAgICAgLyogU2FuaXRpemUgZmluYWwgc3RyaW5nIHRlbXBsYXRlLXNhZmUgKi9cblxuXG4gICAgICBpZiAoU0FGRV9GT1JfVEVNUExBVEVTKSB7XG4gICAgICAgIHNlcmlhbGl6ZWRIVE1MID0gc3RyaW5nUmVwbGFjZShzZXJpYWxpemVkSFRNTCwgTVVTVEFDSEVfRVhQUiQxLCAnICcpO1xuICAgICAgICBzZXJpYWxpemVkSFRNTCA9IHN0cmluZ1JlcGxhY2Uoc2VyaWFsaXplZEhUTUwsIEVSQl9FWFBSJDEsICcgJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiB0cnVzdGVkVHlwZXNQb2xpY3kgJiYgUkVUVVJOX1RSVVNURURfVFlQRSA/IHRydXN0ZWRUeXBlc1BvbGljeS5jcmVhdGVIVE1MKHNlcmlhbGl6ZWRIVE1MKSA6IHNlcmlhbGl6ZWRIVE1MO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVibGljIG1ldGhvZCB0byBzZXQgdGhlIGNvbmZpZ3VyYXRpb24gb25jZVxuICAgICAqIHNldENvbmZpZ1xuICAgICAqXG4gICAgICogQHBhcmFtIHtPYmplY3R9IGNmZyBjb25maWd1cmF0aW9uIG9iamVjdFxuICAgICAqL1xuXG5cbiAgICBET01QdXJpZnkuc2V0Q29uZmlnID0gZnVuY3Rpb24gKGNmZykge1xuICAgICAgX3BhcnNlQ29uZmlnKGNmZyk7XG5cbiAgICAgIFNFVF9DT05GSUcgPSB0cnVlO1xuICAgIH07XG4gICAgLyoqXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgdGhlIGNvbmZpZ3VyYXRpb25cbiAgICAgKiBjbGVhckNvbmZpZ1xuICAgICAqXG4gICAgICovXG5cblxuICAgIERPTVB1cmlmeS5jbGVhckNvbmZpZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgIENPTkZJRyA9IG51bGw7XG4gICAgICBTRVRfQ09ORklHID0gZmFsc2U7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBQdWJsaWMgbWV0aG9kIHRvIGNoZWNrIGlmIGFuIGF0dHJpYnV0ZSB2YWx1ZSBpcyB2YWxpZC5cbiAgICAgKiBVc2VzIGxhc3Qgc2V0IGNvbmZpZywgaWYgYW55LiBPdGhlcndpc2UsIHVzZXMgY29uZmlnIGRlZmF1bHRzLlxuICAgICAqIGlzVmFsaWRBdHRyaWJ1dGVcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge3N0cmluZ30gdGFnIFRhZyBuYW1lIG9mIGNvbnRhaW5pbmcgZWxlbWVudC5cbiAgICAgKiBAcGFyYW0gIHtzdHJpbmd9IGF0dHIgQXR0cmlidXRlIG5hbWUuXG4gICAgICogQHBhcmFtICB7c3RyaW5nfSB2YWx1ZSBBdHRyaWJ1dGUgdmFsdWUuXG4gICAgICogQHJldHVybiB7Qm9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGB2YWx1ZWAgaXMgdmFsaWQuIE90aGVyd2lzZSwgcmV0dXJucyBmYWxzZS5cbiAgICAgKi9cblxuXG4gICAgRE9NUHVyaWZ5LmlzVmFsaWRBdHRyaWJ1dGUgPSBmdW5jdGlvbiAodGFnLCBhdHRyLCB2YWx1ZSkge1xuICAgICAgLyogSW5pdGlhbGl6ZSBzaGFyZWQgY29uZmlnIHZhcnMgaWYgbmVjZXNzYXJ5LiAqL1xuICAgICAgaWYgKCFDT05GSUcpIHtcbiAgICAgICAgX3BhcnNlQ29uZmlnKHt9KTtcbiAgICAgIH1cblxuICAgICAgdmFyIGxjVGFnID0gdHJhbnNmb3JtQ2FzZUZ1bmModGFnKTtcbiAgICAgIHZhciBsY05hbWUgPSB0cmFuc2Zvcm1DYXNlRnVuYyhhdHRyKTtcbiAgICAgIHJldHVybiBfaXNWYWxpZEF0dHJpYnV0ZShsY1RhZywgbGNOYW1lLCB2YWx1ZSk7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBBZGRIb29rXG4gICAgICogUHVibGljIG1ldGhvZCB0byBhZGQgRE9NUHVyaWZ5IGhvb2tzXG4gICAgICpcbiAgICAgKiBAcGFyYW0ge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2sgdG8gYWRkXG4gICAgICogQHBhcmFtIHtGdW5jdGlvbn0gaG9va0Z1bmN0aW9uIGZ1bmN0aW9uIHRvIGV4ZWN1dGVcbiAgICAgKi9cblxuXG4gICAgRE9NUHVyaWZ5LmFkZEhvb2sgPSBmdW5jdGlvbiAoZW50cnlQb2ludCwgaG9va0Z1bmN0aW9uKSB7XG4gICAgICBpZiAodHlwZW9mIGhvb2tGdW5jdGlvbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gaG9va3NbZW50cnlQb2ludF0gfHwgW107XG4gICAgICBhcnJheVB1c2goaG9va3NbZW50cnlQb2ludF0sIGhvb2tGdW5jdGlvbik7XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmVIb29rXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgYSBET01QdXJpZnkgaG9vayBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICAgKiAocG9wcyBpdCBmcm9tIHRoZSBzdGFjayBvZiBob29rcyBpZiBtb3JlIGFyZSBwcmVzZW50KVxuICAgICAqXG4gICAgICogQHBhcmFtIHtTdHJpbmd9IGVudHJ5UG9pbnQgZW50cnkgcG9pbnQgZm9yIHRoZSBob29rIHRvIHJlbW92ZVxuICAgICAqIEByZXR1cm4ge0Z1bmN0aW9ufSByZW1vdmVkKHBvcHBlZCkgaG9va1xuICAgICAqL1xuXG5cbiAgICBET01QdXJpZnkucmVtb3ZlSG9vayA9IGZ1bmN0aW9uIChlbnRyeVBvaW50KSB7XG4gICAgICBpZiAoaG9va3NbZW50cnlQb2ludF0pIHtcbiAgICAgICAgcmV0dXJuIGFycmF5UG9wKGhvb2tzW2VudHJ5UG9pbnRdKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIC8qKlxuICAgICAqIFJlbW92ZUhvb2tzXG4gICAgICogUHVibGljIG1ldGhvZCB0byByZW1vdmUgYWxsIERPTVB1cmlmeSBob29rcyBhdCBhIGdpdmVuIGVudHJ5UG9pbnRcbiAgICAgKlxuICAgICAqIEBwYXJhbSAge1N0cmluZ30gZW50cnlQb2ludCBlbnRyeSBwb2ludCBmb3IgdGhlIGhvb2tzIHRvIHJlbW92ZVxuICAgICAqL1xuXG5cbiAgICBET01QdXJpZnkucmVtb3ZlSG9va3MgPSBmdW5jdGlvbiAoZW50cnlQb2ludCkge1xuICAgICAgaWYgKGhvb2tzW2VudHJ5UG9pbnRdKSB7XG4gICAgICAgIGhvb2tzW2VudHJ5UG9pbnRdID0gW107XG4gICAgICB9XG4gICAgfTtcbiAgICAvKipcbiAgICAgKiBSZW1vdmVBbGxIb29rc1xuICAgICAqIFB1YmxpYyBtZXRob2QgdG8gcmVtb3ZlIGFsbCBET01QdXJpZnkgaG9va3NcbiAgICAgKlxuICAgICAqL1xuXG5cbiAgICBET01QdXJpZnkucmVtb3ZlQWxsSG9va3MgPSBmdW5jdGlvbiAoKSB7XG4gICAgICBob29rcyA9IHt9O1xuICAgIH07XG5cbiAgICByZXR1cm4gRE9NUHVyaWZ5O1xuICB9XG5cbiAgdmFyIHB1cmlmeSA9IGNyZWF0ZURPTVB1cmlmeSgpO1xuXG4gIHJldHVybiBwdXJpZnk7XG5cbn0pKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXB1cmlmeS5qcy5tYXBcbiIsIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDE0LXByZXNlbnQsIEZhY2Vib29rLCBJbmMuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKi9cblxudmFyIHJ1bnRpbWUgPSAoZnVuY3Rpb24gKGV4cG9ydHMpIHtcbiAgXCJ1c2Ugc3RyaWN0XCI7XG5cbiAgdmFyIE9wID0gT2JqZWN0LnByb3RvdHlwZTtcbiAgdmFyIGhhc093biA9IE9wLmhhc093blByb3BlcnR5O1xuICB2YXIgdW5kZWZpbmVkOyAvLyBNb3JlIGNvbXByZXNzaWJsZSB0aGFuIHZvaWQgMC5cbiAgdmFyICRTeW1ib2wgPSB0eXBlb2YgU3ltYm9sID09PSBcImZ1bmN0aW9uXCIgPyBTeW1ib2wgOiB7fTtcbiAgdmFyIGl0ZXJhdG9yU3ltYm9sID0gJFN5bWJvbC5pdGVyYXRvciB8fCBcIkBAaXRlcmF0b3JcIjtcbiAgdmFyIGFzeW5jSXRlcmF0b3JTeW1ib2wgPSAkU3ltYm9sLmFzeW5jSXRlcmF0b3IgfHwgXCJAQGFzeW5jSXRlcmF0b3JcIjtcbiAgdmFyIHRvU3RyaW5nVGFnU3ltYm9sID0gJFN5bWJvbC50b1N0cmluZ1RhZyB8fCBcIkBAdG9TdHJpbmdUYWdcIjtcblxuICBmdW5jdGlvbiBkZWZpbmUob2JqLCBrZXksIHZhbHVlKSB7XG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaiwga2V5LCB7XG4gICAgICB2YWx1ZTogdmFsdWUsXG4gICAgICBlbnVtZXJhYmxlOiB0cnVlLFxuICAgICAgY29uZmlndXJhYmxlOiB0cnVlLFxuICAgICAgd3JpdGFibGU6IHRydWVcbiAgICB9KTtcbiAgICByZXR1cm4gb2JqW2tleV07XG4gIH1cbiAgdHJ5IHtcbiAgICAvLyBJRSA4IGhhcyBhIGJyb2tlbiBPYmplY3QuZGVmaW5lUHJvcGVydHkgdGhhdCBvbmx5IHdvcmtzIG9uIERPTSBvYmplY3RzLlxuICAgIGRlZmluZSh7fSwgXCJcIik7XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGRlZmluZSA9IGZ1bmN0aW9uKG9iaiwga2V5LCB2YWx1ZSkge1xuICAgICAgcmV0dXJuIG9ialtrZXldID0gdmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBJZiBvdXRlckZuIHByb3ZpZGVkIGFuZCBvdXRlckZuLnByb3RvdHlwZSBpcyBhIEdlbmVyYXRvciwgdGhlbiBvdXRlckZuLnByb3RvdHlwZSBpbnN0YW5jZW9mIEdlbmVyYXRvci5cbiAgICB2YXIgcHJvdG9HZW5lcmF0b3IgPSBvdXRlckZuICYmIG91dGVyRm4ucHJvdG90eXBlIGluc3RhbmNlb2YgR2VuZXJhdG9yID8gb3V0ZXJGbiA6IEdlbmVyYXRvcjtcbiAgICB2YXIgZ2VuZXJhdG9yID0gT2JqZWN0LmNyZWF0ZShwcm90b0dlbmVyYXRvci5wcm90b3R5cGUpO1xuICAgIHZhciBjb250ZXh0ID0gbmV3IENvbnRleHQodHJ5TG9jc0xpc3QgfHwgW10pO1xuXG4gICAgLy8gVGhlIC5faW52b2tlIG1ldGhvZCB1bmlmaWVzIHRoZSBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcy5cbiAgICBnZW5lcmF0b3IuX2ludm9rZSA9IG1ha2VJbnZva2VNZXRob2QoaW5uZXJGbiwgc2VsZiwgY29udGV4dCk7XG5cbiAgICByZXR1cm4gZ2VuZXJhdG9yO1xuICB9XG4gIGV4cG9ydHMud3JhcCA9IHdyYXA7XG5cbiAgLy8gVHJ5L2NhdGNoIGhlbHBlciB0byBtaW5pbWl6ZSBkZW9wdGltaXphdGlvbnMuIFJldHVybnMgYSBjb21wbGV0aW9uXG4gIC8vIHJlY29yZCBsaWtlIGNvbnRleHQudHJ5RW50cmllc1tpXS5jb21wbGV0aW9uLiBUaGlzIGludGVyZmFjZSBjb3VsZFxuICAvLyBoYXZlIGJlZW4gKGFuZCB3YXMgcHJldmlvdXNseSkgZGVzaWduZWQgdG8gdGFrZSBhIGNsb3N1cmUgdG8gYmVcbiAgLy8gaW52b2tlZCB3aXRob3V0IGFyZ3VtZW50cywgYnV0IGluIGFsbCB0aGUgY2FzZXMgd2UgY2FyZSBhYm91dCB3ZVxuICAvLyBhbHJlYWR5IGhhdmUgYW4gZXhpc3RpbmcgbWV0aG9kIHdlIHdhbnQgdG8gY2FsbCwgc28gdGhlcmUncyBubyBuZWVkXG4gIC8vIHRvIGNyZWF0ZSBhIG5ldyBmdW5jdGlvbiBvYmplY3QuIFdlIGNhbiBldmVuIGdldCBhd2F5IHdpdGggYXNzdW1pbmdcbiAgLy8gdGhlIG1ldGhvZCB0YWtlcyBleGFjdGx5IG9uZSBhcmd1bWVudCwgc2luY2UgdGhhdCBoYXBwZW5zIHRvIGJlIHRydWVcbiAgLy8gaW4gZXZlcnkgY2FzZSwgc28gd2UgZG9uJ3QgaGF2ZSB0byB0b3VjaCB0aGUgYXJndW1lbnRzIG9iamVjdC4gVGhlXG4gIC8vIG9ubHkgYWRkaXRpb25hbCBhbGxvY2F0aW9uIHJlcXVpcmVkIGlzIHRoZSBjb21wbGV0aW9uIHJlY29yZCwgd2hpY2hcbiAgLy8gaGFzIGEgc3RhYmxlIHNoYXBlIGFuZCBzbyBob3BlZnVsbHkgc2hvdWxkIGJlIGNoZWFwIHRvIGFsbG9jYXRlLlxuICBmdW5jdGlvbiB0cnlDYXRjaChmbiwgb2JqLCBhcmcpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJub3JtYWxcIiwgYXJnOiBmbi5jYWxsKG9iaiwgYXJnKSB9O1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHsgdHlwZTogXCJ0aHJvd1wiLCBhcmc6IGVyciB9O1xuICAgIH1cbiAgfVxuXG4gIHZhciBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0ID0gXCJzdXNwZW5kZWRTdGFydFwiO1xuICB2YXIgR2VuU3RhdGVTdXNwZW5kZWRZaWVsZCA9IFwic3VzcGVuZGVkWWllbGRcIjtcbiAgdmFyIEdlblN0YXRlRXhlY3V0aW5nID0gXCJleGVjdXRpbmdcIjtcbiAgdmFyIEdlblN0YXRlQ29tcGxldGVkID0gXCJjb21wbGV0ZWRcIjtcblxuICAvLyBSZXR1cm5pbmcgdGhpcyBvYmplY3QgZnJvbSB0aGUgaW5uZXJGbiBoYXMgdGhlIHNhbWUgZWZmZWN0IGFzXG4gIC8vIGJyZWFraW5nIG91dCBvZiB0aGUgZGlzcGF0Y2ggc3dpdGNoIHN0YXRlbWVudC5cbiAgdmFyIENvbnRpbnVlU2VudGluZWwgPSB7fTtcblxuICAvLyBEdW1teSBjb25zdHJ1Y3RvciBmdW5jdGlvbnMgdGhhdCB3ZSB1c2UgYXMgdGhlIC5jb25zdHJ1Y3RvciBhbmRcbiAgLy8gLmNvbnN0cnVjdG9yLnByb3RvdHlwZSBwcm9wZXJ0aWVzIGZvciBmdW5jdGlvbnMgdGhhdCByZXR1cm4gR2VuZXJhdG9yXG4gIC8vIG9iamVjdHMuIEZvciBmdWxsIHNwZWMgY29tcGxpYW5jZSwgeW91IG1heSB3aXNoIHRvIGNvbmZpZ3VyZSB5b3VyXG4gIC8vIG1pbmlmaWVyIG5vdCB0byBtYW5nbGUgdGhlIG5hbWVzIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMuXG4gIGZ1bmN0aW9uIEdlbmVyYXRvcigpIHt9XG4gIGZ1bmN0aW9uIEdlbmVyYXRvckZ1bmN0aW9uKCkge31cbiAgZnVuY3Rpb24gR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUoKSB7fVxuXG4gIC8vIFRoaXMgaXMgYSBwb2x5ZmlsbCBmb3IgJUl0ZXJhdG9yUHJvdG90eXBlJSBmb3IgZW52aXJvbm1lbnRzIHRoYXRcbiAgLy8gZG9uJ3QgbmF0aXZlbHkgc3VwcG9ydCBpdC5cbiAgdmFyIEl0ZXJhdG9yUHJvdG90eXBlID0ge307XG4gIGRlZmluZShJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG5cbiAgdmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuICB2YXIgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgPSBnZXRQcm90byAmJiBnZXRQcm90byhnZXRQcm90byh2YWx1ZXMoW10pKSk7XG4gIGlmIChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSAmJlxuICAgICAgTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUgIT09IE9wICYmXG4gICAgICBoYXNPd24uY2FsbChOYXRpdmVJdGVyYXRvclByb3RvdHlwZSwgaXRlcmF0b3JTeW1ib2wpKSB7XG4gICAgLy8gVGhpcyBlbnZpcm9ubWVudCBoYXMgYSBuYXRpdmUgJUl0ZXJhdG9yUHJvdG90eXBlJTsgdXNlIGl0IGluc3RlYWRcbiAgICAvLyBvZiB0aGUgcG9seWZpbGwuXG4gICAgSXRlcmF0b3JQcm90b3R5cGUgPSBOYXRpdmVJdGVyYXRvclByb3RvdHlwZTtcbiAgfVxuXG4gIHZhciBHcCA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLnByb3RvdHlwZSA9XG4gICAgR2VuZXJhdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoSXRlcmF0b3JQcm90b3R5cGUpO1xuICBHZW5lcmF0b3JGdW5jdGlvbi5wcm90b3R5cGUgPSBHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZTtcbiAgZGVmaW5lKEdwLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgZGVmaW5lKEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlLCBcImNvbnN0cnVjdG9yXCIsIEdlbmVyYXRvckZ1bmN0aW9uKTtcbiAgR2VuZXJhdG9yRnVuY3Rpb24uZGlzcGxheU5hbWUgPSBkZWZpbmUoXG4gICAgR2VuZXJhdG9yRnVuY3Rpb25Qcm90b3R5cGUsXG4gICAgdG9TdHJpbmdUYWdTeW1ib2wsXG4gICAgXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICk7XG5cbiAgLy8gSGVscGVyIGZvciBkZWZpbmluZyB0aGUgLm5leHQsIC50aHJvdywgYW5kIC5yZXR1cm4gbWV0aG9kcyBvZiB0aGVcbiAgLy8gSXRlcmF0b3IgaW50ZXJmYWNlIGluIHRlcm1zIG9mIGEgc2luZ2xlIC5faW52b2tlIG1ldGhvZC5cbiAgZnVuY3Rpb24gZGVmaW5lSXRlcmF0b3JNZXRob2RzKHByb3RvdHlwZSkge1xuICAgIFtcIm5leHRcIiwgXCJ0aHJvd1wiLCBcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKG1ldGhvZCkge1xuICAgICAgZGVmaW5lKHByb3RvdHlwZSwgbWV0aG9kLCBmdW5jdGlvbihhcmcpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2ludm9rZShtZXRob2QsIGFyZyk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbiA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIHZhciBjdG9yID0gdHlwZW9mIGdlbkZ1biA9PT0gXCJmdW5jdGlvblwiICYmIGdlbkZ1bi5jb25zdHJ1Y3RvcjtcbiAgICByZXR1cm4gY3RvclxuICAgICAgPyBjdG9yID09PSBHZW5lcmF0b3JGdW5jdGlvbiB8fFxuICAgICAgICAvLyBGb3IgdGhlIG5hdGl2ZSBHZW5lcmF0b3JGdW5jdGlvbiBjb25zdHJ1Y3RvciwgdGhlIGJlc3Qgd2UgY2FuXG4gICAgICAgIC8vIGRvIGlzIHRvIGNoZWNrIGl0cyAubmFtZSBwcm9wZXJ0eS5cbiAgICAgICAgKGN0b3IuZGlzcGxheU5hbWUgfHwgY3Rvci5uYW1lKSA9PT0gXCJHZW5lcmF0b3JGdW5jdGlvblwiXG4gICAgICA6IGZhbHNlO1xuICB9O1xuXG4gIGV4cG9ydHMubWFyayA9IGZ1bmN0aW9uKGdlbkZ1bikge1xuICAgIGlmIChPYmplY3Quc2V0UHJvdG90eXBlT2YpIHtcbiAgICAgIE9iamVjdC5zZXRQcm90b3R5cGVPZihnZW5GdW4sIEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgZ2VuRnVuLl9fcHJvdG9fXyA9IEdlbmVyYXRvckZ1bmN0aW9uUHJvdG90eXBlO1xuICAgICAgZGVmaW5lKGdlbkZ1biwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yRnVuY3Rpb25cIik7XG4gICAgfVxuICAgIGdlbkZ1bi5wcm90b3R5cGUgPSBPYmplY3QuY3JlYXRlKEdwKTtcbiAgICByZXR1cm4gZ2VuRnVuO1xuICB9O1xuXG4gIC8vIFdpdGhpbiB0aGUgYm9keSBvZiBhbnkgYXN5bmMgZnVuY3Rpb24sIGBhd2FpdCB4YCBpcyB0cmFuc2Zvcm1lZCB0b1xuICAvLyBgeWllbGQgcmVnZW5lcmF0b3JSdW50aW1lLmF3cmFwKHgpYCwgc28gdGhhdCB0aGUgcnVudGltZSBjYW4gdGVzdFxuICAvLyBgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKWAgdG8gZGV0ZXJtaW5lIGlmIHRoZSB5aWVsZGVkIHZhbHVlIGlzXG4gIC8vIG1lYW50IHRvIGJlIGF3YWl0ZWQuXG4gIGV4cG9ydHMuYXdyYXAgPSBmdW5jdGlvbihhcmcpIHtcbiAgICByZXR1cm4geyBfX2F3YWl0OiBhcmcgfTtcbiAgfTtcblxuICBmdW5jdGlvbiBBc3luY0l0ZXJhdG9yKGdlbmVyYXRvciwgUHJvbWlzZUltcGwpIHtcbiAgICBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcsIHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGdlbmVyYXRvclttZXRob2RdLCBnZW5lcmF0b3IsIGFyZyk7XG4gICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICByZWplY3QocmVjb3JkLmFyZyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXIgcmVzdWx0ID0gcmVjb3JkLmFyZztcbiAgICAgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlO1xuICAgICAgICBpZiAodmFsdWUgJiZcbiAgICAgICAgICAgIHR5cGVvZiB2YWx1ZSA9PT0gXCJvYmplY3RcIiAmJlxuICAgICAgICAgICAgaGFzT3duLmNhbGwodmFsdWUsIFwiX19hd2FpdFwiKSkge1xuICAgICAgICAgIHJldHVybiBQcm9taXNlSW1wbC5yZXNvbHZlKHZhbHVlLl9fYXdhaXQpLnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICAgIGludm9rZShcIm5leHRcIiwgdmFsdWUsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7XG4gICAgICAgICAgICBpbnZva2UoXCJ0aHJvd1wiLCBlcnIsIHJlc29sdmUsIHJlamVjdCk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gUHJvbWlzZUltcGwucmVzb2x2ZSh2YWx1ZSkudGhlbihmdW5jdGlvbih1bndyYXBwZWQpIHtcbiAgICAgICAgICAvLyBXaGVuIGEgeWllbGRlZCBQcm9taXNlIGlzIHJlc29sdmVkLCBpdHMgZmluYWwgdmFsdWUgYmVjb21lc1xuICAgICAgICAgIC8vIHRoZSAudmFsdWUgb2YgdGhlIFByb21pc2U8e3ZhbHVlLGRvbmV9PiByZXN1bHQgZm9yIHRoZVxuICAgICAgICAgIC8vIGN1cnJlbnQgaXRlcmF0aW9uLlxuICAgICAgICAgIHJlc3VsdC52YWx1ZSA9IHVud3JhcHBlZDtcbiAgICAgICAgICByZXNvbHZlKHJlc3VsdCk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgICAgICAgLy8gSWYgYSByZWplY3RlZCBQcm9taXNlIHdhcyB5aWVsZGVkLCB0aHJvdyB0aGUgcmVqZWN0aW9uIGJhY2tcbiAgICAgICAgICAvLyBpbnRvIHRoZSBhc3luYyBnZW5lcmF0b3IgZnVuY3Rpb24gc28gaXQgY2FuIGJlIGhhbmRsZWQgdGhlcmUuXG4gICAgICAgICAgcmV0dXJuIGludm9rZShcInRocm93XCIsIGVycm9yLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgcHJldmlvdXNQcm9taXNlO1xuXG4gICAgZnVuY3Rpb24gZW5xdWV1ZShtZXRob2QsIGFyZykge1xuICAgICAgZnVuY3Rpb24gY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZUltcGwoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgaW52b2tlKG1ldGhvZCwgYXJnLCByZXNvbHZlLCByZWplY3QpO1xuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHByZXZpb3VzUHJvbWlzZSA9XG4gICAgICAgIC8vIElmIGVucXVldWUgaGFzIGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiB3ZSB3YW50IHRvIHdhaXQgdW50aWxcbiAgICAgICAgLy8gYWxsIHByZXZpb3VzIFByb21pc2VzIGhhdmUgYmVlbiByZXNvbHZlZCBiZWZvcmUgY2FsbGluZyBpbnZva2UsXG4gICAgICAgIC8vIHNvIHRoYXQgcmVzdWx0cyBhcmUgYWx3YXlzIGRlbGl2ZXJlZCBpbiB0aGUgY29ycmVjdCBvcmRlci4gSWZcbiAgICAgICAgLy8gZW5xdWV1ZSBoYXMgbm90IGJlZW4gY2FsbGVkIGJlZm9yZSwgdGhlbiBpdCBpcyBpbXBvcnRhbnQgdG9cbiAgICAgICAgLy8gY2FsbCBpbnZva2UgaW1tZWRpYXRlbHksIHdpdGhvdXQgd2FpdGluZyBvbiBhIGNhbGxiYWNrIHRvIGZpcmUsXG4gICAgICAgIC8vIHNvIHRoYXQgdGhlIGFzeW5jIGdlbmVyYXRvciBmdW5jdGlvbiBoYXMgdGhlIG9wcG9ydHVuaXR5IHRvIGRvXG4gICAgICAgIC8vIGFueSBuZWNlc3Nhcnkgc2V0dXAgaW4gYSBwcmVkaWN0YWJsZSB3YXkuIFRoaXMgcHJlZGljdGFiaWxpdHlcbiAgICAgICAgLy8gaXMgd2h5IHRoZSBQcm9taXNlIGNvbnN0cnVjdG9yIHN5bmNocm9ub3VzbHkgaW52b2tlcyBpdHNcbiAgICAgICAgLy8gZXhlY3V0b3IgY2FsbGJhY2ssIGFuZCB3aHkgYXN5bmMgZnVuY3Rpb25zIHN5bmNocm9ub3VzbHlcbiAgICAgICAgLy8gZXhlY3V0ZSBjb2RlIGJlZm9yZSB0aGUgZmlyc3QgYXdhaXQuIFNpbmNlIHdlIGltcGxlbWVudCBzaW1wbGVcbiAgICAgICAgLy8gYXN5bmMgZnVuY3Rpb25zIGluIHRlcm1zIG9mIGFzeW5jIGdlbmVyYXRvcnMsIGl0IGlzIGVzcGVjaWFsbHlcbiAgICAgICAgLy8gaW1wb3J0YW50IHRvIGdldCB0aGlzIHJpZ2h0LCBldmVuIHRob3VnaCBpdCByZXF1aXJlcyBjYXJlLlxuICAgICAgICBwcmV2aW91c1Byb21pc2UgPyBwcmV2aW91c1Byb21pc2UudGhlbihcbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyxcbiAgICAgICAgICAvLyBBdm9pZCBwcm9wYWdhdGluZyBmYWlsdXJlcyB0byBQcm9taXNlcyByZXR1cm5lZCBieSBsYXRlclxuICAgICAgICAgIC8vIGludm9jYXRpb25zIG9mIHRoZSBpdGVyYXRvci5cbiAgICAgICAgICBjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZ1xuICAgICAgICApIDogY2FsbEludm9rZVdpdGhNZXRob2RBbmRBcmcoKTtcbiAgICB9XG5cbiAgICAvLyBEZWZpbmUgdGhlIHVuaWZpZWQgaGVscGVyIG1ldGhvZCB0aGF0IGlzIHVzZWQgdG8gaW1wbGVtZW50IC5uZXh0LFxuICAgIC8vIC50aHJvdywgYW5kIC5yZXR1cm4gKHNlZSBkZWZpbmVJdGVyYXRvck1ldGhvZHMpLlxuICAgIHRoaXMuX2ludm9rZSA9IGVucXVldWU7XG4gIH1cblxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUpO1xuICBkZWZpbmUoQXN5bmNJdGVyYXRvci5wcm90b3R5cGUsIGFzeW5jSXRlcmF0b3JTeW1ib2wsIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gdGhpcztcbiAgfSk7XG4gIGV4cG9ydHMuQXN5bmNJdGVyYXRvciA9IEFzeW5jSXRlcmF0b3I7XG5cbiAgLy8gTm90ZSB0aGF0IHNpbXBsZSBhc3luYyBmdW5jdGlvbnMgYXJlIGltcGxlbWVudGVkIG9uIHRvcCBvZlxuICAvLyBBc3luY0l0ZXJhdG9yIG9iamVjdHM7IHRoZXkganVzdCByZXR1cm4gYSBQcm9taXNlIGZvciB0aGUgdmFsdWUgb2ZcbiAgLy8gdGhlIGZpbmFsIHJlc3VsdCBwcm9kdWNlZCBieSB0aGUgaXRlcmF0b3IuXG4gIGV4cG9ydHMuYXN5bmMgPSBmdW5jdGlvbihpbm5lckZuLCBvdXRlckZuLCBzZWxmLCB0cnlMb2NzTGlzdCwgUHJvbWlzZUltcGwpIHtcbiAgICBpZiAoUHJvbWlzZUltcGwgPT09IHZvaWQgMCkgUHJvbWlzZUltcGwgPSBQcm9taXNlO1xuXG4gICAgdmFyIGl0ZXIgPSBuZXcgQXN5bmNJdGVyYXRvcihcbiAgICAgIHdyYXAoaW5uZXJGbiwgb3V0ZXJGbiwgc2VsZiwgdHJ5TG9jc0xpc3QpLFxuICAgICAgUHJvbWlzZUltcGxcbiAgICApO1xuXG4gICAgcmV0dXJuIGV4cG9ydHMuaXNHZW5lcmF0b3JGdW5jdGlvbihvdXRlckZuKVxuICAgICAgPyBpdGVyIC8vIElmIG91dGVyRm4gaXMgYSBnZW5lcmF0b3IsIHJldHVybiB0aGUgZnVsbCBpdGVyYXRvci5cbiAgICAgIDogaXRlci5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0LmRvbmUgPyByZXN1bHQudmFsdWUgOiBpdGVyLm5leHQoKTtcbiAgICAgICAgfSk7XG4gIH07XG5cbiAgZnVuY3Rpb24gbWFrZUludm9rZU1ldGhvZChpbm5lckZuLCBzZWxmLCBjb250ZXh0KSB7XG4gICAgdmFyIHN0YXRlID0gR2VuU3RhdGVTdXNwZW5kZWRTdGFydDtcblxuICAgIHJldHVybiBmdW5jdGlvbiBpbnZva2UobWV0aG9kLCBhcmcpIHtcbiAgICAgIGlmIChzdGF0ZSA9PT0gR2VuU3RhdGVFeGVjdXRpbmcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZUNvbXBsZXRlZCkge1xuICAgICAgICBpZiAobWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICB0aHJvdyBhcmc7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBCZSBmb3JnaXZpbmcsIHBlciAyNS4zLjMuMy4zIG9mIHRoZSBzcGVjOlxuICAgICAgICAvLyBodHRwczovL3Blb3BsZS5tb3ppbGxhLm9yZy9+am9yZW5kb3JmZi9lczYtZHJhZnQuaHRtbCNzZWMtZ2VuZXJhdG9ycmVzdW1lXG4gICAgICAgIHJldHVybiBkb25lUmVzdWx0KCk7XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQubWV0aG9kID0gbWV0aG9kO1xuICAgICAgY29udGV4dC5hcmcgPSBhcmc7XG5cbiAgICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICAgIHZhciBkZWxlZ2F0ZSA9IGNvbnRleHQuZGVsZWdhdGU7XG4gICAgICAgIGlmIChkZWxlZ2F0ZSkge1xuICAgICAgICAgIHZhciBkZWxlZ2F0ZVJlc3VsdCA9IG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuICAgICAgICAgIGlmIChkZWxlZ2F0ZVJlc3VsdCkge1xuICAgICAgICAgICAgaWYgKGRlbGVnYXRlUmVzdWx0ID09PSBDb250aW51ZVNlbnRpbmVsKSBjb250aW51ZTtcbiAgICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZVJlc3VsdDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29udGV4dC5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgICAgLy8gU2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAgICAgLy8gZnVuY3Rpb24uc2VudCBpbXBsZW1lbnRhdGlvbi5cbiAgICAgICAgICBjb250ZXh0LnNlbnQgPSBjb250ZXh0Ll9zZW50ID0gY29udGV4dC5hcmc7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgICAgaWYgKHN0YXRlID09PSBHZW5TdGF0ZVN1c3BlbmRlZFN0YXJ0KSB7XG4gICAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgICAgdGhyb3cgY29udGV4dC5hcmc7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgY29udGV4dC5kaXNwYXRjaEV4Y2VwdGlvbihjb250ZXh0LmFyZyk7XG5cbiAgICAgICAgfSBlbHNlIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJyZXR1cm5cIikge1xuICAgICAgICAgIGNvbnRleHQuYWJydXB0KFwicmV0dXJuXCIsIGNvbnRleHQuYXJnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHN0YXRlID0gR2VuU3RhdGVFeGVjdXRpbmc7XG5cbiAgICAgICAgdmFyIHJlY29yZCA9IHRyeUNhdGNoKGlubmVyRm4sIHNlbGYsIGNvbnRleHQpO1xuICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwibm9ybWFsXCIpIHtcbiAgICAgICAgICAvLyBJZiBhbiBleGNlcHRpb24gaXMgdGhyb3duIGZyb20gaW5uZXJGbiwgd2UgbGVhdmUgc3RhdGUgPT09XG4gICAgICAgICAgLy8gR2VuU3RhdGVFeGVjdXRpbmcgYW5kIGxvb3AgYmFjayBmb3IgYW5vdGhlciBpbnZvY2F0aW9uLlxuICAgICAgICAgIHN0YXRlID0gY29udGV4dC5kb25lXG4gICAgICAgICAgICA/IEdlblN0YXRlQ29tcGxldGVkXG4gICAgICAgICAgICA6IEdlblN0YXRlU3VzcGVuZGVkWWllbGQ7XG5cbiAgICAgICAgICBpZiAocmVjb3JkLmFyZyA9PT0gQ29udGludWVTZW50aW5lbCkge1xuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHZhbHVlOiByZWNvcmQuYXJnLFxuICAgICAgICAgICAgZG9uZTogY29udGV4dC5kb25lXG4gICAgICAgICAgfTtcblxuICAgICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICBzdGF0ZSA9IEdlblN0YXRlQ29tcGxldGVkO1xuICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBleGNlcHRpb24gYnkgbG9vcGluZyBiYWNrIGFyb3VuZCB0byB0aGVcbiAgICAgICAgICAvLyBjb250ZXh0LmRpc3BhdGNoRXhjZXB0aW9uKGNvbnRleHQuYXJnKSBjYWxsIGFib3ZlLlxuICAgICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICAvLyBDYWxsIGRlbGVnYXRlLml0ZXJhdG9yW2NvbnRleHQubWV0aG9kXShjb250ZXh0LmFyZykgYW5kIGhhbmRsZSB0aGVcbiAgLy8gcmVzdWx0LCBlaXRoZXIgYnkgcmV0dXJuaW5nIGEgeyB2YWx1ZSwgZG9uZSB9IHJlc3VsdCBmcm9tIHRoZVxuICAvLyBkZWxlZ2F0ZSBpdGVyYXRvciwgb3IgYnkgbW9kaWZ5aW5nIGNvbnRleHQubWV0aG9kIGFuZCBjb250ZXh0LmFyZyxcbiAgLy8gc2V0dGluZyBjb250ZXh0LmRlbGVnYXRlIHRvIG51bGwsIGFuZCByZXR1cm5pbmcgdGhlIENvbnRpbnVlU2VudGluZWwuXG4gIGZ1bmN0aW9uIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpIHtcbiAgICB2YXIgbWV0aG9kID0gZGVsZWdhdGUuaXRlcmF0b3JbY29udGV4dC5tZXRob2RdO1xuICAgIGlmIChtZXRob2QgPT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gQSAudGhyb3cgb3IgLnJldHVybiB3aGVuIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgbm8gLnRocm93XG4gICAgICAvLyBtZXRob2QgYWx3YXlzIHRlcm1pbmF0ZXMgdGhlIHlpZWxkKiBsb29wLlxuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIGlmIChjb250ZXh0Lm1ldGhvZCA9PT0gXCJ0aHJvd1wiKSB7XG4gICAgICAgIC8vIE5vdGU6IFtcInJldHVyblwiXSBtdXN0IGJlIHVzZWQgZm9yIEVTMyBwYXJzaW5nIGNvbXBhdGliaWxpdHkuXG4gICAgICAgIGlmIChkZWxlZ2F0ZS5pdGVyYXRvcltcInJldHVyblwiXSkge1xuICAgICAgICAgIC8vIElmIHRoZSBkZWxlZ2F0ZSBpdGVyYXRvciBoYXMgYSByZXR1cm4gbWV0aG9kLCBnaXZlIGl0IGFcbiAgICAgICAgICAvLyBjaGFuY2UgdG8gY2xlYW4gdXAuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICAgIGNvbnRleHQuYXJnID0gdW5kZWZpbmVkO1xuICAgICAgICAgIG1heWJlSW52b2tlRGVsZWdhdGUoZGVsZWdhdGUsIGNvbnRleHQpO1xuXG4gICAgICAgICAgaWYgKGNvbnRleHQubWV0aG9kID09PSBcInRocm93XCIpIHtcbiAgICAgICAgICAgIC8vIElmIG1heWJlSW52b2tlRGVsZWdhdGUoY29udGV4dCkgY2hhbmdlZCBjb250ZXh0Lm1ldGhvZCBmcm9tXG4gICAgICAgICAgICAvLyBcInJldHVyblwiIHRvIFwidGhyb3dcIiwgbGV0IHRoYXQgb3ZlcnJpZGUgdGhlIFR5cGVFcnJvciBiZWxvdy5cbiAgICAgICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgICBjb250ZXh0LmFyZyA9IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICAgXCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kXCIpO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgcmVjb3JkID0gdHJ5Q2F0Y2gobWV0aG9kLCBkZWxlZ2F0ZS5pdGVyYXRvciwgY29udGV4dC5hcmcpO1xuXG4gICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgIGNvbnRleHQubWV0aG9kID0gXCJ0aHJvd1wiO1xuICAgICAgY29udGV4dC5hcmcgPSByZWNvcmQuYXJnO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICB2YXIgaW5mbyA9IHJlY29yZC5hcmc7XG5cbiAgICBpZiAoISBpbmZvKSB7XG4gICAgICBjb250ZXh0Lm1ldGhvZCA9IFwidGhyb3dcIjtcbiAgICAgIGNvbnRleHQuYXJnID0gbmV3IFR5cGVFcnJvcihcIml0ZXJhdG9yIHJlc3VsdCBpcyBub3QgYW4gb2JqZWN0XCIpO1xuICAgICAgY29udGV4dC5kZWxlZ2F0ZSA9IG51bGw7XG4gICAgICByZXR1cm4gQ29udGludWVTZW50aW5lbDtcbiAgICB9XG5cbiAgICBpZiAoaW5mby5kb25lKSB7XG4gICAgICAvLyBBc3NpZ24gdGhlIHJlc3VsdCBvZiB0aGUgZmluaXNoZWQgZGVsZWdhdGUgdG8gdGhlIHRlbXBvcmFyeVxuICAgICAgLy8gdmFyaWFibGUgc3BlY2lmaWVkIGJ5IGRlbGVnYXRlLnJlc3VsdE5hbWUgKHNlZSBkZWxlZ2F0ZVlpZWxkKS5cbiAgICAgIGNvbnRleHRbZGVsZWdhdGUucmVzdWx0TmFtZV0gPSBpbmZvLnZhbHVlO1xuXG4gICAgICAvLyBSZXN1bWUgZXhlY3V0aW9uIGF0IHRoZSBkZXNpcmVkIGxvY2F0aW9uIChzZWUgZGVsZWdhdGVZaWVsZCkuXG4gICAgICBjb250ZXh0Lm5leHQgPSBkZWxlZ2F0ZS5uZXh0TG9jO1xuXG4gICAgICAvLyBJZiBjb250ZXh0Lm1ldGhvZCB3YXMgXCJ0aHJvd1wiIGJ1dCB0aGUgZGVsZWdhdGUgaGFuZGxlZCB0aGVcbiAgICAgIC8vIGV4Y2VwdGlvbiwgbGV0IHRoZSBvdXRlciBnZW5lcmF0b3IgcHJvY2VlZCBub3JtYWxseS4gSWZcbiAgICAgIC8vIGNvbnRleHQubWV0aG9kIHdhcyBcIm5leHRcIiwgZm9yZ2V0IGNvbnRleHQuYXJnIHNpbmNlIGl0IGhhcyBiZWVuXG4gICAgICAvLyBcImNvbnN1bWVkXCIgYnkgdGhlIGRlbGVnYXRlIGl0ZXJhdG9yLiBJZiBjb250ZXh0Lm1ldGhvZCB3YXNcbiAgICAgIC8vIFwicmV0dXJuXCIsIGFsbG93IHRoZSBvcmlnaW5hbCAucmV0dXJuIGNhbGwgdG8gY29udGludWUgaW4gdGhlXG4gICAgICAvLyBvdXRlciBnZW5lcmF0b3IuXG4gICAgICBpZiAoY29udGV4dC5tZXRob2QgIT09IFwicmV0dXJuXCIpIHtcbiAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgY29udGV4dC5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gUmUteWllbGQgdGhlIHJlc3VsdCByZXR1cm5lZCBieSB0aGUgZGVsZWdhdGUgbWV0aG9kLlxuICAgICAgcmV0dXJuIGluZm87XG4gICAgfVxuXG4gICAgLy8gVGhlIGRlbGVnYXRlIGl0ZXJhdG9yIGlzIGZpbmlzaGVkLCBzbyBmb3JnZXQgaXQgYW5kIGNvbnRpbnVlIHdpdGhcbiAgICAvLyB0aGUgb3V0ZXIgZ2VuZXJhdG9yLlxuICAgIGNvbnRleHQuZGVsZWdhdGUgPSBudWxsO1xuICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICB9XG5cbiAgLy8gRGVmaW5lIEdlbmVyYXRvci5wcm90b3R5cGUue25leHQsdGhyb3cscmV0dXJufSBpbiB0ZXJtcyBvZiB0aGVcbiAgLy8gdW5pZmllZCAuX2ludm9rZSBoZWxwZXIgbWV0aG9kLlxuICBkZWZpbmVJdGVyYXRvck1ldGhvZHMoR3ApO1xuXG4gIGRlZmluZShHcCwgdG9TdHJpbmdUYWdTeW1ib2wsIFwiR2VuZXJhdG9yXCIpO1xuXG4gIC8vIEEgR2VuZXJhdG9yIHNob3VsZCBhbHdheXMgcmV0dXJuIGl0c2VsZiBhcyB0aGUgaXRlcmF0b3Igb2JqZWN0IHdoZW4gdGhlXG4gIC8vIEBAaXRlcmF0b3IgZnVuY3Rpb24gaXMgY2FsbGVkIG9uIGl0LiBTb21lIGJyb3dzZXJzJyBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlXG4gIC8vIGl0ZXJhdG9yIHByb3RvdHlwZSBjaGFpbiBpbmNvcnJlY3RseSBpbXBsZW1lbnQgdGhpcywgY2F1c2luZyB0aGUgR2VuZXJhdG9yXG4gIC8vIG9iamVjdCB0byBub3QgYmUgcmV0dXJuZWQgZnJvbSB0aGlzIGNhbGwuIFRoaXMgZW5zdXJlcyB0aGF0IGRvZXNuJ3QgaGFwcGVuLlxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL3JlZ2VuZXJhdG9yL2lzc3Vlcy8yNzQgZm9yIG1vcmUgZGV0YWlscy5cbiAgZGVmaW5lKEdwLCBpdGVyYXRvclN5bWJvbCwgZnVuY3Rpb24oKSB7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH0pO1xuXG4gIGRlZmluZShHcCwgXCJ0b1N0cmluZ1wiLCBmdW5jdGlvbigpIHtcbiAgICByZXR1cm4gXCJbb2JqZWN0IEdlbmVyYXRvcl1cIjtcbiAgfSk7XG5cbiAgZnVuY3Rpb24gcHVzaFRyeUVudHJ5KGxvY3MpIHtcbiAgICB2YXIgZW50cnkgPSB7IHRyeUxvYzogbG9jc1swXSB9O1xuXG4gICAgaWYgKDEgaW4gbG9jcykge1xuICAgICAgZW50cnkuY2F0Y2hMb2MgPSBsb2NzWzFdO1xuICAgIH1cblxuICAgIGlmICgyIGluIGxvY3MpIHtcbiAgICAgIGVudHJ5LmZpbmFsbHlMb2MgPSBsb2NzWzJdO1xuICAgICAgZW50cnkuYWZ0ZXJMb2MgPSBsb2NzWzNdO1xuICAgIH1cblxuICAgIHRoaXMudHJ5RW50cmllcy5wdXNoKGVudHJ5KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc2V0VHJ5RW50cnkoZW50cnkpIHtcbiAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbiB8fCB7fTtcbiAgICByZWNvcmQudHlwZSA9IFwibm9ybWFsXCI7XG4gICAgZGVsZXRlIHJlY29yZC5hcmc7XG4gICAgZW50cnkuY29tcGxldGlvbiA9IHJlY29yZDtcbiAgfVxuXG4gIGZ1bmN0aW9uIENvbnRleHQodHJ5TG9jc0xpc3QpIHtcbiAgICAvLyBUaGUgcm9vdCBlbnRyeSBvYmplY3QgKGVmZmVjdGl2ZWx5IGEgdHJ5IHN0YXRlbWVudCB3aXRob3V0IGEgY2F0Y2hcbiAgICAvLyBvciBhIGZpbmFsbHkgYmxvY2spIGdpdmVzIHVzIGEgcGxhY2UgdG8gc3RvcmUgdmFsdWVzIHRocm93biBmcm9tXG4gICAgLy8gbG9jYXRpb25zIHdoZXJlIHRoZXJlIGlzIG5vIGVuY2xvc2luZyB0cnkgc3RhdGVtZW50LlxuICAgIHRoaXMudHJ5RW50cmllcyA9IFt7IHRyeUxvYzogXCJyb290XCIgfV07XG4gICAgdHJ5TG9jc0xpc3QuZm9yRWFjaChwdXNoVHJ5RW50cnksIHRoaXMpO1xuICAgIHRoaXMucmVzZXQodHJ1ZSk7XG4gIH1cblxuICBleHBvcnRzLmtleXMgPSBmdW5jdGlvbihvYmplY3QpIHtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmplY3QpIHtcbiAgICAgIGtleXMucHVzaChrZXkpO1xuICAgIH1cbiAgICBrZXlzLnJldmVyc2UoKTtcblxuICAgIC8vIFJhdGhlciB0aGFuIHJldHVybmluZyBhbiBvYmplY3Qgd2l0aCBhIG5leHQgbWV0aG9kLCB3ZSBrZWVwXG4gICAgLy8gdGhpbmdzIHNpbXBsZSBhbmQgcmV0dXJuIHRoZSBuZXh0IGZ1bmN0aW9uIGl0c2VsZi5cbiAgICByZXR1cm4gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgIHdoaWxlIChrZXlzLmxlbmd0aCkge1xuICAgICAgICB2YXIga2V5ID0ga2V5cy5wb3AoKTtcbiAgICAgICAgaWYgKGtleSBpbiBvYmplY3QpIHtcbiAgICAgICAgICBuZXh0LnZhbHVlID0ga2V5O1xuICAgICAgICAgIG5leHQuZG9uZSA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIFRvIGF2b2lkIGNyZWF0aW5nIGFuIGFkZGl0aW9uYWwgb2JqZWN0LCB3ZSBqdXN0IGhhbmcgdGhlIC52YWx1ZVxuICAgICAgLy8gYW5kIC5kb25lIHByb3BlcnRpZXMgb2ZmIHRoZSBuZXh0IGZ1bmN0aW9uIG9iamVjdCBpdHNlbGYuIFRoaXNcbiAgICAgIC8vIGFsc28gZW5zdXJlcyB0aGF0IHRoZSBtaW5pZmllciB3aWxsIG5vdCBhbm9ueW1pemUgdGhlIGZ1bmN0aW9uLlxuICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuZXh0O1xuICAgIH07XG4gIH07XG5cbiAgZnVuY3Rpb24gdmFsdWVzKGl0ZXJhYmxlKSB7XG4gICAgaWYgKGl0ZXJhYmxlKSB7XG4gICAgICB2YXIgaXRlcmF0b3JNZXRob2QgPSBpdGVyYWJsZVtpdGVyYXRvclN5bWJvbF07XG4gICAgICBpZiAoaXRlcmF0b3JNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yTWV0aG9kLmNhbGwoaXRlcmFibGUpO1xuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGl0ZXJhYmxlLm5leHQgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICByZXR1cm4gaXRlcmFibGU7XG4gICAgICB9XG5cbiAgICAgIGlmICghaXNOYU4oaXRlcmFibGUubGVuZ3RoKSkge1xuICAgICAgICB2YXIgaSA9IC0xLCBuZXh0ID0gZnVuY3Rpb24gbmV4dCgpIHtcbiAgICAgICAgICB3aGlsZSAoKytpIDwgaXRlcmFibGUubGVuZ3RoKSB7XG4gICAgICAgICAgICBpZiAoaGFzT3duLmNhbGwoaXRlcmFibGUsIGkpKSB7XG4gICAgICAgICAgICAgIG5leHQudmFsdWUgPSBpdGVyYWJsZVtpXTtcbiAgICAgICAgICAgICAgbmV4dC5kb25lID0gZmFsc2U7XG4gICAgICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIG5leHQudmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dC5kb25lID0gdHJ1ZTtcblxuICAgICAgICAgIHJldHVybiBuZXh0O1xuICAgICAgICB9O1xuXG4gICAgICAgIHJldHVybiBuZXh0Lm5leHQgPSBuZXh0O1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFJldHVybiBhbiBpdGVyYXRvciB3aXRoIG5vIHZhbHVlcy5cbiAgICByZXR1cm4geyBuZXh0OiBkb25lUmVzdWx0IH07XG4gIH1cbiAgZXhwb3J0cy52YWx1ZXMgPSB2YWx1ZXM7XG5cbiAgZnVuY3Rpb24gZG9uZVJlc3VsdCgpIHtcbiAgICByZXR1cm4geyB2YWx1ZTogdW5kZWZpbmVkLCBkb25lOiB0cnVlIH07XG4gIH1cblxuICBDb250ZXh0LnByb3RvdHlwZSA9IHtcbiAgICBjb25zdHJ1Y3RvcjogQ29udGV4dCxcblxuICAgIHJlc2V0OiBmdW5jdGlvbihza2lwVGVtcFJlc2V0KSB7XG4gICAgICB0aGlzLnByZXYgPSAwO1xuICAgICAgdGhpcy5uZXh0ID0gMDtcbiAgICAgIC8vIFJlc2V0dGluZyBjb250ZXh0Ll9zZW50IGZvciBsZWdhY3kgc3VwcG9ydCBvZiBCYWJlbCdzXG4gICAgICAvLyBmdW5jdGlvbi5zZW50IGltcGxlbWVudGF0aW9uLlxuICAgICAgdGhpcy5zZW50ID0gdGhpcy5fc2VudCA9IHVuZGVmaW5lZDtcbiAgICAgIHRoaXMuZG9uZSA9IGZhbHNlO1xuICAgICAgdGhpcy5kZWxlZ2F0ZSA9IG51bGw7XG5cbiAgICAgIHRoaXMubWV0aG9kID0gXCJuZXh0XCI7XG4gICAgICB0aGlzLmFyZyA9IHVuZGVmaW5lZDtcblxuICAgICAgdGhpcy50cnlFbnRyaWVzLmZvckVhY2gocmVzZXRUcnlFbnRyeSk7XG5cbiAgICAgIGlmICghc2tpcFRlbXBSZXNldCkge1xuICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMpIHtcbiAgICAgICAgICAvLyBOb3Qgc3VyZSBhYm91dCB0aGUgb3B0aW1hbCBvcmRlciBvZiB0aGVzZSBjb25kaXRpb25zOlxuICAgICAgICAgIGlmIChuYW1lLmNoYXJBdCgwKSA9PT0gXCJ0XCIgJiZcbiAgICAgICAgICAgICAgaGFzT3duLmNhbGwodGhpcywgbmFtZSkgJiZcbiAgICAgICAgICAgICAgIWlzTmFOKCtuYW1lLnNsaWNlKDEpKSkge1xuICAgICAgICAgICAgdGhpc1tuYW1lXSA9IHVuZGVmaW5lZDtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgc3RvcDogZnVuY3Rpb24oKSB7XG4gICAgICB0aGlzLmRvbmUgPSB0cnVlO1xuXG4gICAgICB2YXIgcm9vdEVudHJ5ID0gdGhpcy50cnlFbnRyaWVzWzBdO1xuICAgICAgdmFyIHJvb3RSZWNvcmQgPSByb290RW50cnkuY29tcGxldGlvbjtcbiAgICAgIGlmIChyb290UmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICB0aHJvdyByb290UmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXMucnZhbDtcbiAgICB9LFxuXG4gICAgZGlzcGF0Y2hFeGNlcHRpb246IGZ1bmN0aW9uKGV4Y2VwdGlvbikge1xuICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICB0aHJvdyBleGNlcHRpb247XG4gICAgICB9XG5cbiAgICAgIHZhciBjb250ZXh0ID0gdGhpcztcbiAgICAgIGZ1bmN0aW9uIGhhbmRsZShsb2MsIGNhdWdodCkge1xuICAgICAgICByZWNvcmQudHlwZSA9IFwidGhyb3dcIjtcbiAgICAgICAgcmVjb3JkLmFyZyA9IGV4Y2VwdGlvbjtcbiAgICAgICAgY29udGV4dC5uZXh0ID0gbG9jO1xuXG4gICAgICAgIGlmIChjYXVnaHQpIHtcbiAgICAgICAgICAvLyBJZiB0aGUgZGlzcGF0Y2hlZCBleGNlcHRpb24gd2FzIGNhdWdodCBieSBhIGNhdGNoIGJsb2NrLFxuICAgICAgICAgIC8vIHRoZW4gbGV0IHRoYXQgY2F0Y2ggYmxvY2sgaGFuZGxlIHRoZSBleGNlcHRpb24gbm9ybWFsbHkuXG4gICAgICAgICAgY29udGV4dC5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgICBjb250ZXh0LmFyZyA9IHVuZGVmaW5lZDtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiAhISBjYXVnaHQ7XG4gICAgICB9XG5cbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcblxuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSBcInJvb3RcIikge1xuICAgICAgICAgIC8vIEV4Y2VwdGlvbiB0aHJvd24gb3V0c2lkZSBvZiBhbnkgdHJ5IGJsb2NrIHRoYXQgY291bGQgaGFuZGxlXG4gICAgICAgICAgLy8gaXQsIHNvIHNldCB0aGUgY29tcGxldGlvbiB2YWx1ZSBvZiB0aGUgZW50aXJlIGZ1bmN0aW9uIHRvXG4gICAgICAgICAgLy8gdGhyb3cgdGhlIGV4Y2VwdGlvbi5cbiAgICAgICAgICByZXR1cm4gaGFuZGxlKFwiZW5kXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYpIHtcbiAgICAgICAgICB2YXIgaGFzQ2F0Y2ggPSBoYXNPd24uY2FsbChlbnRyeSwgXCJjYXRjaExvY1wiKTtcbiAgICAgICAgICB2YXIgaGFzRmluYWxseSA9IGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIik7XG5cbiAgICAgICAgICBpZiAoaGFzQ2F0Y2ggJiYgaGFzRmluYWxseSkge1xuICAgICAgICAgICAgaWYgKHRoaXMucHJldiA8IGVudHJ5LmNhdGNoTG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuY2F0Y2hMb2MsIHRydWUpO1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0NhdGNoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wcmV2IDwgZW50cnkuY2F0Y2hMb2MpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGhhbmRsZShlbnRyeS5jYXRjaExvYywgdHJ1ZSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhhc0ZpbmFsbHkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXYgPCBlbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgICAgICAgIHJldHVybiBoYW5kbGUoZW50cnkuZmluYWxseUxvYyk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSxcblxuICAgIGFicnVwdDogZnVuY3Rpb24odHlwZSwgYXJnKSB7XG4gICAgICBmb3IgKHZhciBpID0gdGhpcy50cnlFbnRyaWVzLmxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICAgIHZhciBlbnRyeSA9IHRoaXMudHJ5RW50cmllc1tpXTtcbiAgICAgICAgaWYgKGVudHJ5LnRyeUxvYyA8PSB0aGlzLnByZXYgJiZcbiAgICAgICAgICAgIGhhc093bi5jYWxsKGVudHJ5LCBcImZpbmFsbHlMb2NcIikgJiZcbiAgICAgICAgICAgIHRoaXMucHJldiA8IGVudHJ5LmZpbmFsbHlMb2MpIHtcbiAgICAgICAgICB2YXIgZmluYWxseUVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGZpbmFsbHlFbnRyeSAmJlxuICAgICAgICAgICh0eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICAgdHlwZSA9PT0gXCJjb250aW51ZVwiKSAmJlxuICAgICAgICAgIGZpbmFsbHlFbnRyeS50cnlMb2MgPD0gYXJnICYmXG4gICAgICAgICAgYXJnIDw9IGZpbmFsbHlFbnRyeS5maW5hbGx5TG9jKSB7XG4gICAgICAgIC8vIElnbm9yZSB0aGUgZmluYWxseSBlbnRyeSBpZiBjb250cm9sIGlzIG5vdCBqdW1waW5nIHRvIGFcbiAgICAgICAgLy8gbG9jYXRpb24gb3V0c2lkZSB0aGUgdHJ5L2NhdGNoIGJsb2NrLlxuICAgICAgICBmaW5hbGx5RW50cnkgPSBudWxsO1xuICAgICAgfVxuXG4gICAgICB2YXIgcmVjb3JkID0gZmluYWxseUVudHJ5ID8gZmluYWxseUVudHJ5LmNvbXBsZXRpb24gOiB7fTtcbiAgICAgIHJlY29yZC50eXBlID0gdHlwZTtcbiAgICAgIHJlY29yZC5hcmcgPSBhcmc7XG5cbiAgICAgIGlmIChmaW5hbGx5RW50cnkpIHtcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcIm5leHRcIjtcbiAgICAgICAgdGhpcy5uZXh0ID0gZmluYWxseUVudHJ5LmZpbmFsbHlMb2M7XG4gICAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gdGhpcy5jb21wbGV0ZShyZWNvcmQpO1xuICAgIH0sXG5cbiAgICBjb21wbGV0ZTogZnVuY3Rpb24ocmVjb3JkLCBhZnRlckxvYykge1xuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcInRocm93XCIpIHtcbiAgICAgICAgdGhyb3cgcmVjb3JkLmFyZztcbiAgICAgIH1cblxuICAgICAgaWYgKHJlY29yZC50eXBlID09PSBcImJyZWFrXCIgfHxcbiAgICAgICAgICByZWNvcmQudHlwZSA9PT0gXCJjb250aW51ZVwiKSB7XG4gICAgICAgIHRoaXMubmV4dCA9IHJlY29yZC5hcmc7XG4gICAgICB9IGVsc2UgaWYgKHJlY29yZC50eXBlID09PSBcInJldHVyblwiKSB7XG4gICAgICAgIHRoaXMucnZhbCA9IHRoaXMuYXJnID0gcmVjb3JkLmFyZztcbiAgICAgICAgdGhpcy5tZXRob2QgPSBcInJldHVyblwiO1xuICAgICAgICB0aGlzLm5leHQgPSBcImVuZFwiO1xuICAgICAgfSBlbHNlIGlmIChyZWNvcmQudHlwZSA9PT0gXCJub3JtYWxcIiAmJiBhZnRlckxvYykge1xuICAgICAgICB0aGlzLm5leHQgPSBhZnRlckxvYztcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgfSxcblxuICAgIGZpbmlzaDogZnVuY3Rpb24oZmluYWxseUxvYykge1xuICAgICAgZm9yICh2YXIgaSA9IHRoaXMudHJ5RW50cmllcy5sZW5ndGggLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgICB2YXIgZW50cnkgPSB0aGlzLnRyeUVudHJpZXNbaV07XG4gICAgICAgIGlmIChlbnRyeS5maW5hbGx5TG9jID09PSBmaW5hbGx5TG9jKSB7XG4gICAgICAgICAgdGhpcy5jb21wbGV0ZShlbnRyeS5jb21wbGV0aW9uLCBlbnRyeS5hZnRlckxvYyk7XG4gICAgICAgICAgcmVzZXRUcnlFbnRyeShlbnRyeSk7XG4gICAgICAgICAgcmV0dXJuIENvbnRpbnVlU2VudGluZWw7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgXCJjYXRjaFwiOiBmdW5jdGlvbih0cnlMb2MpIHtcbiAgICAgIGZvciAodmFyIGkgPSB0aGlzLnRyeUVudHJpZXMubGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHtcbiAgICAgICAgdmFyIGVudHJ5ID0gdGhpcy50cnlFbnRyaWVzW2ldO1xuICAgICAgICBpZiAoZW50cnkudHJ5TG9jID09PSB0cnlMb2MpIHtcbiAgICAgICAgICB2YXIgcmVjb3JkID0gZW50cnkuY29tcGxldGlvbjtcbiAgICAgICAgICBpZiAocmVjb3JkLnR5cGUgPT09IFwidGhyb3dcIikge1xuICAgICAgICAgICAgdmFyIHRocm93biA9IHJlY29yZC5hcmc7XG4gICAgICAgICAgICByZXNldFRyeUVudHJ5KGVudHJ5KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHRocm93bjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBUaGUgY29udGV4dC5jYXRjaCBtZXRob2QgbXVzdCBvbmx5IGJlIGNhbGxlZCB3aXRoIGEgbG9jYXRpb25cbiAgICAgIC8vIGFyZ3VtZW50IHRoYXQgY29ycmVzcG9uZHMgdG8gYSBrbm93biBjYXRjaCBibG9jay5cbiAgICAgIHRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKTtcbiAgICB9LFxuXG4gICAgZGVsZWdhdGVZaWVsZDogZnVuY3Rpb24oaXRlcmFibGUsIHJlc3VsdE5hbWUsIG5leHRMb2MpIHtcbiAgICAgIHRoaXMuZGVsZWdhdGUgPSB7XG4gICAgICAgIGl0ZXJhdG9yOiB2YWx1ZXMoaXRlcmFibGUpLFxuICAgICAgICByZXN1bHROYW1lOiByZXN1bHROYW1lLFxuICAgICAgICBuZXh0TG9jOiBuZXh0TG9jXG4gICAgICB9O1xuXG4gICAgICBpZiAodGhpcy5tZXRob2QgPT09IFwibmV4dFwiKSB7XG4gICAgICAgIC8vIERlbGliZXJhdGVseSBmb3JnZXQgdGhlIGxhc3Qgc2VudCB2YWx1ZSBzbyB0aGF0IHdlIGRvbid0XG4gICAgICAgIC8vIGFjY2lkZW50YWxseSBwYXNzIGl0IG9uIHRvIHRoZSBkZWxlZ2F0ZS5cbiAgICAgICAgdGhpcy5hcmcgPSB1bmRlZmluZWQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBDb250aW51ZVNlbnRpbmVsO1xuICAgIH1cbiAgfTtcblxuICAvLyBSZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhpcyBzY3JpcHQgaXMgZXhlY3V0aW5nIGFzIGEgQ29tbW9uSlMgbW9kdWxlXG4gIC8vIG9yIG5vdCwgcmV0dXJuIHRoZSBydW50aW1lIG9iamVjdCBzbyB0aGF0IHdlIGNhbiBkZWNsYXJlIHRoZSB2YXJpYWJsZVxuICAvLyByZWdlbmVyYXRvclJ1bnRpbWUgaW4gdGhlIG91dGVyIHNjb3BlLCB3aGljaCBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmVcbiAgLy8gaW5qZWN0ZWQgZWFzaWx5IGJ5IGBiaW4vcmVnZW5lcmF0b3IgLS1pbmNsdWRlLXJ1bnRpbWUgc2NyaXB0LmpzYC5cbiAgcmV0dXJuIGV4cG9ydHM7XG5cbn0oXG4gIC8vIElmIHRoaXMgc2NyaXB0IGlzIGV4ZWN1dGluZyBhcyBhIENvbW1vbkpTIG1vZHVsZSwgdXNlIG1vZHVsZS5leHBvcnRzXG4gIC8vIGFzIHRoZSByZWdlbmVyYXRvclJ1bnRpbWUgbmFtZXNwYWNlLiBPdGhlcndpc2UgY3JlYXRlIGEgbmV3IGVtcHR5XG4gIC8vIG9iamVjdC4gRWl0aGVyIHdheSwgdGhlIHJlc3VsdGluZyBvYmplY3Qgd2lsbCBiZSB1c2VkIHRvIGluaXRpYWxpemVcbiAgLy8gdGhlIHJlZ2VuZXJhdG9yUnVudGltZSB2YXJpYWJsZSBhdCB0aGUgdG9wIG9mIHRoaXMgZmlsZS5cbiAgdHlwZW9mIG1vZHVsZSA9PT0gXCJvYmplY3RcIiA/IG1vZHVsZS5leHBvcnRzIDoge31cbikpO1xuXG50cnkge1xuICByZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xufSBjYXRjaCAoYWNjaWRlbnRhbFN0cmljdE1vZGUpIHtcbiAgLy8gVGhpcyBtb2R1bGUgc2hvdWxkIG5vdCBiZSBydW5uaW5nIGluIHN0cmljdCBtb2RlLCBzbyB0aGUgYWJvdmVcbiAgLy8gYXNzaWdubWVudCBzaG91bGQgYWx3YXlzIHdvcmsgdW5sZXNzIHNvbWV0aGluZyBpcyBtaXNjb25maWd1cmVkLiBKdXN0XG4gIC8vIGluIGNhc2UgcnVudGltZS5qcyBhY2NpZGVudGFsbHkgcnVucyBpbiBzdHJpY3QgbW9kZSwgaW4gbW9kZXJuIGVuZ2luZXNcbiAgLy8gd2UgY2FuIGV4cGxpY2l0bHkgYWNjZXNzIGdsb2JhbFRoaXMuIEluIG9sZGVyIGVuZ2luZXMgd2UgY2FuIGVzY2FwZVxuICAvLyBzdHJpY3QgbW9kZSB1c2luZyBhIGdsb2JhbCBGdW5jdGlvbiBjYWxsLiBUaGlzIGNvdWxkIGNvbmNlaXZhYmx5IGZhaWxcbiAgLy8gaWYgYSBDb250ZW50IFNlY3VyaXR5IFBvbGljeSBmb3JiaWRzIHVzaW5nIEZ1bmN0aW9uLCBidXQgaW4gdGhhdCBjYXNlXG4gIC8vIHRoZSBwcm9wZXIgc29sdXRpb24gaXMgdG8gZml4IHRoZSBhY2NpZGVudGFsIHN0cmljdCBtb2RlIHByb2JsZW0uIElmXG4gIC8vIHlvdSd2ZSBtaXNjb25maWd1cmVkIHlvdXIgYnVuZGxlciB0byBmb3JjZSBzdHJpY3QgbW9kZSBhbmQgYXBwbGllZCBhXG4gIC8vIENTUCB0byBmb3JiaWQgRnVuY3Rpb24sIGFuZCB5b3UncmUgbm90IHdpbGxpbmcgdG8gZml4IGVpdGhlciBvZiB0aG9zZVxuICAvLyBwcm9ibGVtcywgcGxlYXNlIGRldGFpbCB5b3VyIHVuaXF1ZSBwcmVkaWNhbWVudCBpbiBhIEdpdEh1YiBpc3N1ZS5cbiAgaWYgKHR5cGVvZiBnbG9iYWxUaGlzID09PSBcIm9iamVjdFwiKSB7XG4gICAgZ2xvYmFsVGhpcy5yZWdlbmVyYXRvclJ1bnRpbWUgPSBydW50aW1lO1xuICB9IGVsc2Uge1xuICAgIEZ1bmN0aW9uKFwiclwiLCBcInJlZ2VuZXJhdG9yUnVudGltZSA9IHJcIikocnVudGltZSk7XG4gIH1cbn1cbiIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luamVjdFN0eWxlc0ludG9TdHlsZVRhZy5qc1wiO1xuICAgICAgaW1wb3J0IGRvbUFQSSBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0Rm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3NldEF0dHJpYnV0ZXNXaXRob3V0QXR0cmlidXRlcy5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydFN0eWxlRWxlbWVudCBmcm9tIFwiIS4uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL2luc2VydFN0eWxlRWxlbWVudC5qc1wiO1xuICAgICAgaW1wb3J0IHN0eWxlVGFnVHJhbnNmb3JtRm4gZnJvbSBcIiEuLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9janMuanMhLi9zdHlsZS5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcblxuICAgICAgb3B0aW9ucy5pbnNlcnQgPSBpbnNlcnRGbi5iaW5kKG51bGwsIFwiaGVhZFwiKTtcbiAgICBcbm9wdGlvbnMuZG9tQVBJID0gZG9tQVBJO1xub3B0aW9ucy5pbnNlcnRTdHlsZUVsZW1lbnQgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7XG5cbnZhciB1cGRhdGUgPSBBUEkoY29udGVudCwgb3B0aW9ucyk7XG5cblxuXG5leHBvcnQgKiBmcm9tIFwiISEuLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlLmNzc1wiO1xuICAgICAgIGV4cG9ydCBkZWZhdWx0IGNvbnRlbnQgJiYgY29udGVudC5sb2NhbHMgPyBjb250ZW50LmxvY2FscyA6IHVuZGVmaW5lZDtcbiIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgc3R5bGVzSW5ET00gPSBbXTtcblxuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHlsZXNJbkRPTS5sZW5ndGg7IGkrKykge1xuICAgIGlmIChzdHlsZXNJbkRPTVtpXS5pZGVudGlmaWVyID09PSBpZGVudGlmaWVyKSB7XG4gICAgICByZXN1bHQgPSBpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIGl0ZW0gPSBsaXN0W2ldO1xuICAgIHZhciBpZCA9IG9wdGlvbnMuYmFzZSA/IGl0ZW1bMF0gKyBvcHRpb25zLmJhc2UgOiBpdGVtWzBdO1xuICAgIHZhciBjb3VudCA9IGlkQ291bnRNYXBbaWRdIHx8IDA7XG4gICAgdmFyIGlkZW50aWZpZXIgPSBcIlwiLmNvbmNhdChpZCwgXCIgXCIpLmNvbmNhdChjb3VudCk7XG4gICAgaWRDb3VudE1hcFtpZF0gPSBjb3VudCArIDE7XG4gICAgdmFyIGluZGV4QnlJZGVudGlmaWVyID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgdmFyIG9iaiA9IHtcbiAgICAgIGNzczogaXRlbVsxXSxcbiAgICAgIG1lZGlhOiBpdGVtWzJdLFxuICAgICAgc291cmNlTWFwOiBpdGVtWzNdLFxuICAgICAgc3VwcG9ydHM6IGl0ZW1bNF0sXG4gICAgICBsYXllcjogaXRlbVs1XVxuICAgIH07XG5cbiAgICBpZiAoaW5kZXhCeUlkZW50aWZpZXIgIT09IC0xKSB7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0ucmVmZXJlbmNlcysrO1xuICAgICAgc3R5bGVzSW5ET01baW5kZXhCeUlkZW50aWZpZXJdLnVwZGF0ZXIob2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdmFyIHVwZGF0ZXIgPSBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKTtcbiAgICAgIG9wdGlvbnMuYnlJbmRleCA9IGk7XG4gICAgICBzdHlsZXNJbkRPTS5zcGxpY2UoaSwgMCwge1xuICAgICAgICBpZGVudGlmaWVyOiBpZGVudGlmaWVyLFxuICAgICAgICB1cGRhdGVyOiB1cGRhdGVyLFxuICAgICAgICByZWZlcmVuY2VzOiAxXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG5cbiAgcmV0dXJuIGlkZW50aWZpZXJzO1xufVxuXG5mdW5jdGlvbiBhZGRFbGVtZW50U3R5bGUob2JqLCBvcHRpb25zKSB7XG4gIHZhciBhcGkgPSBvcHRpb25zLmRvbUFQSShvcHRpb25zKTtcbiAgYXBpLnVwZGF0ZShvYmopO1xuXG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgYXBpLnVwZGF0ZShvYmogPSBuZXdPYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcGkucmVtb3ZlKCk7XG4gICAgfVxuICB9O1xuXG4gIHJldHVybiB1cGRhdGVyO1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG5cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxhc3RJZGVudGlmaWVycy5sZW5ndGg7IGkrKykge1xuICAgICAgdmFyIGlkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbaV07XG4gICAgICB2YXIgaW5kZXggPSBnZXRJbmRleEJ5SWRlbnRpZmllcihpZGVudGlmaWVyKTtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4XS5yZWZlcmVuY2VzLS07XG4gICAgfVxuXG4gICAgdmFyIG5ld0xhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShuZXdMaXN0LCBvcHRpb25zKTtcblxuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuXG4gICAgICB2YXIgX2luZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoX2lkZW50aWZpZXIpO1xuXG4gICAgICBpZiAoc3R5bGVzSW5ET01bX2luZGV4XS5yZWZlcmVuY2VzID09PSAwKSB7XG4gICAgICAgIHN0eWxlc0luRE9NW19pbmRleF0udXBkYXRlcigpO1xuXG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGxhc3RJZGVudGlmaWVycyA9IG5ld0xhc3RJZGVudGlmaWVycztcbiAgfTtcbn07IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBtZW1vID0ge307XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuZnVuY3Rpb24gZ2V0VGFyZ2V0KHRhcmdldCkge1xuICBpZiAodHlwZW9mIG1lbW9bdGFyZ2V0XSA9PT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHZhciBzdHlsZVRhcmdldCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodGFyZ2V0KTsgLy8gU3BlY2lhbCBjYXNlIHRvIHJldHVybiBoZWFkIG9mIGlmcmFtZSBpbnN0ZWFkIG9mIGlmcmFtZSBpdHNlbGZcblxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBtZW1vW3RhcmdldF0gPSBzdHlsZVRhcmdldDtcbiAgfVxuXG4gIHJldHVybiBtZW1vW3RhcmdldF07XG59XG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cblxuXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuXG4gIGlmICghdGFyZ2V0KSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiQ291bGRuJ3QgZmluZCBhIHN0eWxlIHRhcmdldC4gVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHRoZSB2YWx1ZSBmb3IgdGhlICdpbnNlcnQnIHBhcmFtZXRlciBpcyBpbnZhbGlkLlwiKTtcbiAgfVxuXG4gIHRhcmdldC5hcHBlbmRDaGlsZChzdHlsZSk7XG59XG5cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGluc2VydFN0eWxlRWxlbWVudDsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzZXRBdHRyaWJ1dGVzV2l0aG91dEF0dHJpYnV0ZXMoc3R5bGVFbGVtZW50KSB7XG4gIHZhciBub25jZSA9IHR5cGVvZiBfX3dlYnBhY2tfbm9uY2VfXyAhPT0gXCJ1bmRlZmluZWRcIiA/IF9fd2VicGFja19ub25jZV9fIDogbnVsbDtcblxuICBpZiAobm9uY2UpIHtcbiAgICBzdHlsZUVsZW1lbnQuc2V0QXR0cmlidXRlKFwibm9uY2VcIiwgbm9uY2UpO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuXG4gIGlmIChvYmouc3VwcG9ydHMpIHtcbiAgICBjc3MgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChvYmouc3VwcG9ydHMsIFwiKSB7XCIpO1xuICB9XG5cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIkBtZWRpYSBcIi5jb25jYXQob2JqLm1lZGlhLCBcIiB7XCIpO1xuICB9XG5cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG5cbiAgaWYgKG5lZWRMYXllcikge1xuICAgIGNzcyArPSBcIkBsYXllclwiLmNvbmNhdChvYmoubGF5ZXIubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChvYmoubGF5ZXIpIDogXCJcIiwgXCIge1wiKTtcbiAgfVxuXG4gIGNzcyArPSBvYmouY3NzO1xuXG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cblxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG5cbiAgaWYgKG9iai5zdXBwb3J0cykge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuXG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuXG4gIGlmIChzb3VyY2VNYXAgJiYgdHlwZW9mIGJ0b2EgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBjc3MgKz0gXCJcXG4vKiMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LFwiLmNvbmNhdChidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShzb3VyY2VNYXApKSkpLCBcIiAqL1wiKTtcbiAgfSAvLyBGb3Igb2xkIElFXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGlmICAqL1xuXG5cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCkge1xuICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgaWYgKHN0eWxlRWxlbWVudC5wYXJlbnROb2RlID09PSBudWxsKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgc3R5bGVFbGVtZW50LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoc3R5bGVFbGVtZW50KTtcbn1cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuXG5cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGRvbUFQSTsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBzdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCkge1xuICBpZiAoc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQpIHtcbiAgICBzdHlsZUVsZW1lbnQuc3R5bGVTaGVldC5jc3NUZXh0ID0gY3NzO1xuICB9IGVsc2Uge1xuICAgIHdoaWxlIChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCkge1xuICAgICAgc3R5bGVFbGVtZW50LnJlbW92ZUNoaWxkKHN0eWxlRWxlbWVudC5maXJzdENoaWxkKTtcbiAgICB9XG5cbiAgICBzdHlsZUVsZW1lbnQuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY3NzKSk7XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHQvLyBubyBtb2R1bGUubG9hZGVkIG5lZWRlZFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG5cdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbn1cblxuIiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IGZ1bmN0aW9uKG1vZHVsZSkge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcblx0XHRmdW5jdGlvbigpIHsgcmV0dXJuIG1vZHVsZTsgfTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IGZ1bmN0aW9uKGV4cG9ydHMsIGRlZmluaXRpb24pIHtcblx0Zm9yKHZhciBrZXkgaW4gZGVmaW5pdGlvbikge1xuXHRcdGlmKF9fd2VicGFja19yZXF1aXJlX18ubyhkZWZpbml0aW9uLCBrZXkpICYmICFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywga2V5KSkge1xuXHRcdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsIGtleSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBnZXQ6IGRlZmluaXRpb25ba2V5XSB9KTtcblx0XHR9XG5cdH1cbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5nID0gKGZ1bmN0aW9uKCkge1xuXHRpZiAodHlwZW9mIGdsb2JhbFRoaXMgPT09ICdvYmplY3QnKSByZXR1cm4gZ2xvYmFsVGhpcztcblx0dHJ5IHtcblx0XHRyZXR1cm4gdGhpcyB8fCBuZXcgRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcblx0fSBjYXRjaCAoZSkge1xuXHRcdGlmICh0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JykgcmV0dXJuIHdpbmRvdztcblx0fVxufSkoKTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmosIHByb3ApIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApOyB9IiwiLy8gZGVmaW5lIF9fZXNNb2R1bGUgb24gZXhwb3J0c1xuX193ZWJwYWNrX3JlcXVpcmVfXy5yID0gZnVuY3Rpb24oZXhwb3J0cykge1xuXHRpZih0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wudG9TdHJpbmdUYWcpIHtcblx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgU3ltYm9sLnRvU3RyaW5nVGFnLCB7IHZhbHVlOiAnTW9kdWxlJyB9KTtcblx0fVxuXHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgJ19fZXNNb2R1bGUnLCB7IHZhbHVlOiB0cnVlIH0pO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLm5jID0gdW5kZWZpbmVkOyIsIi8qIGVzbGludCBuby1jb25zb2xlOiBbXCJlcnJvclwiLCB7IGFsbG93OiBbXCJ3YXJuXCIsIFwiZXJyb3JcIl0gfV0gKi9cbmltcG9ydCAnLi9wb2x5ZmlsbCdcbmltcG9ydCAnLi9jb21wb25lbnRzL2NyZWRpdC1jYXJkJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtbnVtYmVyJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtY3Z2J1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtZXhwJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtYWNjb3VudC1uYW1lJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtYWRkcmVzcy0xJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtYWRkcmVzcy0yJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY3JlZGl0LWNhcmQtY2l0eSdcbmltcG9ydCAnLi9jb21wb25lbnRzL2NyZWRpdC1jYXJkLXJlZ2lvbidcbmltcG9ydCAnLi9jb21wb25lbnRzL2NyZWRpdC1jYXJkLXppcCdcbmltcG9ydCAnLi9jb21wb25lbnRzL2FjaC1hY2NvdW50LW5hbWUnXG5pbXBvcnQgJy4vY29tcG9uZW50cy9hY2gtYWNjb3VudC1udW1iZXInXG5pbXBvcnQgJy4vY29tcG9uZW50cy9hY2gtYWNjb3VudC10eXBlJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvYWNoLXJvdXRpbmctbnVtYmVyJ1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY2FzaC1jb250YWN0J1xuaW1wb3J0ICcuL2NvbXBvbmVudHMvY2FzaC1uYW1lJ1xuaW1wb3J0ICdyZWdlbmVyYXRvci1ydW50aW1lJ1xuaW1wb3J0ICcuL3N0eWxlLmNzcydcblxuaW1wb3J0IGNyZWF0ZVBheW1lbnRGaWVsZHNMZWdhY3kgZnJvbSAnLi9maWVsZC1zZXQvcGF5bWVudC1maWVsZHMnXG5pbXBvcnQgeyBTVVJDSEFSR0UsIFNFUlZJQ0VfRkVFLCBJTlRFUkNIQU5HRSB9IGZyb20gJy4vY29tbW9uL2RhdGEnXG5cbmNvbnN0IGNyZWF0ZSA9IChhcGlLZXksIHN0eWxlcywgbWV0YWRhdGEsIGZlZU1vZGUpID0+IGNyZWF0ZVBheW1lbnRGaWVsZHNMZWdhY3koYXBpS2V5LCAnJywgc3R5bGVzLCBtZXRhZGF0YSwgZmVlTW9kZSlcbmNvbnN0IGNyZWF0ZVBheW1lbnRGaWVsZHMgPSAoYXBpS2V5LCBjbGllbnRJZCwgc3R5bGVzLCBtZXRhZGF0YSkgPT4ge1xuICAgIGNvbnNvbGUud2FybignY3JlYXRlUGF5bWVudEZpZWxkcyBoYXMgYmVlbiBkZXByZWNhdGVkJylcbiAgICByZXR1cm4gY3JlYXRlUGF5bWVudEZpZWxkc0xlZ2FjeShhcGlLZXksIGNsaWVudElkLCBzdHlsZXMsIG1ldGFkYXRhLCBJTlRFUkNIQU5HRSlcbn1cblxud2luZG93LnBheXRoZW9yeSA9IHtcbiAgICBjcmVhdGVQYXltZW50RmllbGRzLFxuICAgIGNyZWF0ZSxcbiAgICBTVVJDSEFSR0UsXG4gICAgU0VSVklDRV9GRUUsXG4gICAgSU5URVJDSEFOR0Vcbn1cblxuZXhwb3J0IGRlZmF1bHQgd2luZG93LnBheXRoZW9yeSJdLCJuYW1lcyI6WyJBVVRPRklMTCIsIlJFQURZIiwiVFJBTlNBQ1RJTkciLCJFTlZJUk9OTUVOVCIsIlNUQUdFIiwiSU5JVElBTElaRSIsImRlZmF1bHQiLCJzdWNjZXNzIiwiZXJyb3IiLCJpc0RpcnR5IiwiaXNGb2N1c2VkIiwiZXJyb3JNZXNzYWdlcyIsIkNSRURJVF9DQVJEIiwiQ1JFRElUX0NBUkRfTlVNQkVSIiwiQ1JFRElUX0NBUkRfRVhQIiwiQ1JFRElUX0NBUkRfQ1ZWIiwiQ1JFRElUX0NBUkRfTkFNRSIsIkNSRURJVF9DQVJEX0FERFJFU1MxIiwiQ1JFRElUX0NBUkRfQUREUkVTUzIiLCJDUkVESVRfQ0FSRF9DSVRZIiwiQ1JFRElUX0NBUkRfU1RBVEUiLCJDUkVESVRfQ0FSRF9aSVAiLCJBQ0NPVU5UX05VTUJFUiIsIkFDQ09VTlRfVFlQRSIsIkFDQ09VTlRfTkFNRSIsIkJBTktfQ09ERSIsIk5BTUUiLCJDT05UQUNUIiwiaXNDYXJkRmllbGQiLCJzdHJpbmciLCJzdGFydHNXaXRoIiwiaXNDYXNoRmllbGQiLCJpc0FDSEZpZWxkIiwidHlwZSIsImxvY2FsU3RvcmFnZSIsImdldEl0ZW0iLCJpc0F1dG9maWxsIiwic2V0SXRlbSIsInJlbW92ZUF1dG9maWxsIiwicmVtb3ZlSXRlbSIsImVsZW1lbnQiLCJpZCIsInJlbW92ZVRyYW5zYWN0aW5nRWxlbWVudCIsImVudmlyb25tZW50Iiwic3RhZ2UiLCJyZWFkeSIsImluaXQiLCJyZW1vdmVJbml0aWFsaXplIiwiYWxsb3dSZXRyeSIsImN2IiwiZnJhbWUiLCJmaW5kRmllbGQiLCJmaW5kQ1ZWIiwiZmluZEV4cCIsImZpbmRBY2NvdW50TnVtYmVyIiwiZmluZEJhbmtDb2RlIiwiZmluZEFjY291bnRUeXBlIiwiZmluZEFjY291bnROYW1lIiwiZmluZFppcCIsImFkZEZyYW1lIiwiY29udGFpbmVyIiwiZnJhbWVUeXBlIiwiZW52IiwidGFnRnJhbWUiLCJkb2N1bWVudCIsImNyZWF0ZUVsZW1lbnQiLCJzZXRBdHRyaWJ1dGUiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnRzIiwic3RhdGUiLCJmaWVsZFR5cGVzIiwidGFnVHlwZSIsInByb2Nlc3NlZCIsImZvckVhY2giLCJmaW5kRWxlbWVudEVycm9yIiwiZ2V0RWxlbWVudEJ5SWQiLCJwdXNoIiwicHJvY2Vzc0NvbnRhaW5lciIsIm1lc3NhZ2UiLCJoYW5kbGVFcnJvciIsImRhdGEiLCJpbml0aWFsU3RhdGUiLCJlbGVtIiwicGFyZW50Tm9kZSIsInJlZHVjZSIsImhpZGRlbiIsInJlc3VsdCIsIndpbmRvdyIsImdldENvbXB1dGVkU3R5bGUiLCJkaXNwbGF5IiwiZG9tIiwibmV0d29yayIsIm9ic2VydmUiLCJjb21tb24iLCJ3aW5kb3dMaXN0ZW5lckhhbmRsZXIiLCJ2YWxpZFRhcmdldCIsImhhbmRsZU1lc3NhZ2UiLCJldmVudCIsIkpTT04iLCJwYXJzZSIsImZ1bmMiLCJsb2NhdGlvbiIsIm9yaWdpbiIsImluY2x1ZGVzIiwiZ2VuZXJhdGVXaW5kb3dMaXN0ZW5lciIsImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiaG9zdGVkRmllbGRzRW5kcG9pbnQiLCJnZW5lcmF0ZWlGcmFtZVdpbmRvd0xpc3RlbmVyIiwiZW5kc1dpdGgiLCJnZXRFbGVtZW50c0J5TmFtZSIsImNvbnRlbnRXaW5kb3ciLCJwb3N0TWVzc2FnZSIsImNvbnNvbGUiLCJsb2ciLCJ0aHJvd3MiLCJpIiwiZ2V0RGF0YSIsInVybCIsImFwaUtleSIsIm9wdGlvbnMiLCJtZXRob2QiLCJtb2RlIiwiY2FjaGUiLCJoZWFkZXJzIiwiZmV0Y2giLCJyZXNwb25zZSIsImpzb24iLCJkZWZhdWx0RW52aXJvbm1lbnQiLCJnZXRFbnZpcm9ubWVudCIsImdldFN0YWdlIiwiY2IiLCJmZWUiLCJwYXltZW50IiwiZmVlX21vZGUiLCJTRVJWSUNFX0ZFRSIsImNiVG9rZW4iLCJmaXJzdF9zaXgiLCJsYXN0X2ZvdXIiLCJicmFuZCIsImlkZW1wb3RlbmN5IiwiYW1vdW50IiwicGF5bWVudFR5cGUiLCJib2R5IiwicmVjZWlwdF9udW1iZXIiLCJwYXlvcl9pZCIsImNyZWF0ZWRfYXQiLCJzZXJ2aWNlX2ZlZSIsIm1ldGFkYXRhIiwicGF5bWVudF9tZXRob2RfaWQiLCJyZW1vdmVBbGwiLCJjcmVhdGVDcmVkZW50aWFscyIsImF2YWlsYWJsZSIsImNoYWxsZW5nZSIsIlVpbnQ4QXJyYXkiLCJmcm9tIiwiYyIsImNoYXJDb2RlQXQiLCJ1c2VyIiwibmF2aWdhdG9yIiwiY3JlZGVudGlhbHMiLCJjcmVhdGUiLCJwdWJsaWNLZXkiLCJhdHRlc3RCcm93c2VyIiwiY2hhbGxlbmdlT3B0aW9ucyIsInRlc3QiLCJ1c2VyQWdlbnQiLCJwcmV2ZW50U2lsZW50QWNjZXNzIiwiUHVibGljS2V5Q3JlZGVudGlhbCIsImlzVXNlclZlcmlmeWluZ1BsYXRmb3JtQXV0aGVudGljYXRvckF2YWlsYWJsZSIsImlzQXZhaWxhYmxlIiwic2VuZFRyYW5zYWN0aW5nTWVzc2FnZSIsInRyYW5zYWN0aW5nIiwiZ2V0VHJhbnNhY3RpbmdFbGVtZW50IiwiYWNoRmllbGRUeXBlcyIsImNhc2hGaWVsZFR5cGVzIiwiZmllbGQiLCJwb3N0TWVzc2FnZVRvSG9zdGVkRmllbGQiLCJoYW5kbGVBdHRlc3RhdGlvbiIsImF0dGVzdGVkIiwiY2xpZW50RGF0YUpTT04iLCJhdHRlc3RhdGlvbk9iamVjdCIsImF0dGVzdGF0aW9uIiwiaG9zdGVkRmllbGRNYXAiLCJwYXJzZUlucHV0UGFyYW1zIiwiaW5wdXRQYXJhbXMiLCJwYXlvcklkIiwiaW52b2ljZUlkIiwicmVjdXJyaW5nSWQiLCJwYXlUaGVvcnlEYXRhIiwiYWNjb3VudF9jb2RlIiwiYWNjb3VudENvZGUiLCJyZWZlcmVuY2UiLCJwYXltZW50X3BhcmFtZXRlcnMiLCJwYXltZW50UGFyYW1ldGVycyIsInNlbmRfcmVjZWlwdCIsInNlbmRSZWNlaXB0IiwicmVjZWlwdF9kZXNjcmlwdGlvbiIsInJlY2VpcHREZXNjcmlwdGlvbiIsImludm9pY2VfaWQiLCJyZWN1cnJpbmdfaWQiLCJ0aW1lem9uZSIsIkludGwiLCJEYXRlVGltZUZvcm1hdCIsInJlc29sdmVkT3B0aW9ucyIsInRpbWVab25lIiwiaGFuZGxlSW5pdGlhbGl6ZWQiLCJpbnB1dFBhcmFtZXRlcnMiLCJwYXlvckluZm8iLCJzaGlwcGluZ0RldGFpbHMiLCJjdXN0b21lckluZm8iLCJmZWVNb2RlIiwiY29uZmlybWF0aW9uIiwiZ2V0SW5pdGlhbGl6ZSIsInNldEluaXRpYWxpemUiLCJoYW5kbGVUb2tlbml6ZSIsImVycm9yT2JzZXJ2ZXIiLCJtZXNzYWdpbmciLCJlcnJvclR5cGVNZXNzYWdlIiwiRXJyb3IiLCJ0b2tlbml6ZU9ic2VydmVyIiwiaGFuZGxlSG9zdGVkRmllbGRNZXNzYWdlIiwiY29uZmlybVR5cGVNZXNzYWdlIiwiZ2VuZXJhdGVUb2tlbml6ZSIsImNhcHR1cmVPYnNlcnZlciIsImNvbmZpcm1hdGlvbkNvbXBsZXRlVHlwZU1lc3NhZ2UiLCJnZW5lcmF0ZUNvbXBsZXRpb25SZXNwb25zZSIsInRyYW5zYWN0ZWRPYnNlcnZlciIsImNvbXBsZXRlVHlwZU1lc3NhZ2UiLCJtb3VudCIsImluaXRUcmFuc2FjdGlvbiIsInRyYW5zYWN0IiwidG9rZW5pemVQYXltZW50TWV0aG9kIiwiY29uZmlybSIsImNhbmNlbCIsInJlYWR5T2JzZXJ2ZXIiLCJ2YWxpZE9ic2VydmVyIiwiY2FzaE9ic2VydmVyIiwic3RhdGVPYnNlcnZlciIsIk9iamVjdCIsIkFDSEFjY291bnROYW1lRnJhbWUiLCJzZXRGaWVsZHMiLCJuYW1lIiwibGFiZWwiLCJzZXRGaWVsZE5hbWUiLCJQYXlUaGVvcnlIb3N0ZWRGaWVsZCIsImN1c3RvbUVsZW1lbnRzIiwiZGVmaW5lIiwiQUNIQWNjb3VudE51bWJlckZyYW1lIiwiUGF5VGhlb3J5SG9zdGVkRmllbGRUcmFuc2FjdGlvbmFsIiwiQUNIQWNjb3VudFR5cGVGcmFtZSIsIkFDSFJvdXRpbmdOdW1iZXJGcmFtZSIsIkNhc2hDb250YWN0RnJhbWUiLCJ2YWxpZGF0aW9ucyIsImF1dG9Db21wbGV0ZSIsIkNhc2hOYW1lRnJhbWUiLCJDcmVkaXRDYXJkTmFtZUZyYW1lIiwiQ3JlZGl0Q2FyZEJpbGxpbmdBZGRyZXNzMUZyYW1lIiwiQ3JlZGl0Q2FyZEJpbGxpbmdBZGRyZXNzMkZyYW1lIiwiQ3JlZGl0Q2FyZEJpbGxpbmdDaXR5RnJhbWUiLCJDcmVkaXRDYXJkQ1ZWRnJhbWUiLCJDcmVkaXRDYXJkRXhwaXJhdGlvbkZyYW1lIiwiQ3JlZGl0Q2FyZE51bWJlckZyYW1lIiwiZ2V0IiwiQ3JlZGl0Q2FyZEJpbGxpbmdTdGF0ZUZyYW1lIiwiQ3JlZGl0Q2FyZEJpbGxpbmdaaXBGcmFtZSIsIkNyZWRpdENhcmRGcmFtZSIsImZvcm0iLCJzdHlsZXMiLCJiYWRnZUVsZW1lbnQiLCJ0aGlzIiwiYXBwZW5kRWxlbWVudCIsInRva2VuIiwidG9rZW5pemUiLCJjdXJyZW5jeSIsImFjdGlvbiIsImluc3RydW1lbnQiLCJnZW5lcmF0ZVRva2VuaXplQ2FsbGJhY2siLCJnZW5lcmF0ZVRyYW5zYWN0Q2FsbGJhY2siLCJpbnN0cnVtZW50ZWQiLCJfaW5zdHJ1bWVudGVkIiwiaW5zdHJ1bWVudFJlc3BvbnNlIiwiYWN0aW9uZWQiLCJhbW91bnRpbmciLCJfYW1vdW50aW5nIiwiSFRNTEVsZW1lbnQiLCJkZWZpbmVGaWVsZHMiLCJiaW5kIiwiaXNWYWxpZEZyYW1lIiwiZGVmYXVsdFN0eWxlcyIsImFwcGxpY2F0aW9uIiwicHJvY2VzcyIsImZpZWxkcyIsIndyYXBwZXJzIiwidmFsaWRhdGVkIiwiY29ubmVjdGlvblNldCIsImZpZWxkQXJyYXkiLCJ3cmFwcGVyIiwicmVwbGFjZSIsIndyYXBwZXJFbGVtZW50IiwiZiIsInRva2VuZWQiLCJpbnZhbGlkRWxlbWVudCIsImlubmVySFRNTCIsIkRPTVB1cmlmeSIsInNhbml0aXplIiwiYXR0ck5hbWUiLCJvbGRWYWx1ZSIsIm5ld1ZhbHVlIiwidG9TdHJpbmciLCJoYXNBdHRyaWJ1dGUiLCJfY29ubmVjdGVkIiwiYXBwbGljYXRpb25JZCIsIl9hcHBsaWNhdGlvbklkIiwiZmllbGRlZCIsIl9maWVsZGVkIiwiaXNMb2FkZWQiLCJfaXNMb2FkZWQiLCJfdG9rZW5lZCIsIl9lbnYiLCJpc1JlYWR5IiwiX2lzUmVhZHkiLCJzdHlsaW5nIiwiX3N0eWxpbmciLCJzdGF0ZWQiLCJfc3RhdGVkIiwiaW52YWxpZCIsImxlbmd0aCIsInZhbGlkIiwiaXNDb25uZWN0ZWQiLCJjb25uZWN0ZWQiLCJlcnJvcmVkIiwiX2Vycm9yZWQiLCJpc1ZhbGlkIiwiaG9zdGVkIiwidmVyaWZ5UmVsYXkiLCJzZXRBdXRvZmlsbCIsImF1dG9maWxsSGFuZGxlciIsImZpZWxkVHlwZSIsImlzRmllbGRUeXBlIiwic2V0dXBUcmFuc2FjdGluZyIsInN0eWxlIiwic3RyaW5naWZ5Iiwic2VuZENvbm5lY3RlZE1lc3NhZ2UiLCJob3N0VG9rZW4iLCJzZXNzaW9uS2V5IiwiY2FyZCIsImFjaCIsImNhc2giLCJjb21iaW5lZENhcmRUeXBlcyIsImVsZW1lbnRBcnJheSIsImZpbmRUcmFuc2FjdGluZ0VsZW1lbnQiLCJjb21iaW5lZENhcmRTdGF0ZVVwZGF0ZXIiLCJzZXNzaW9uTWV0YWRhdGEiLCJkZWZhdWx0RmVlTW9kZSIsImtleVBhcnRzIiwic3BsaXQiLCJwYXJ0bmVyTW9kZSIsImNoZWNrQ3JlYXRlUGFyYW1zIiwicGFydG5lcl9lbnZpcm9ubWVudCIsInNldEVudmlyb25tZW50Iiwic2V0U3RhZ2UiLCJ2YWxpZFR5cGVzIiwiZGVmYXVsdEVsZW1lbnRJZHMiLCJjaXR5IiwiemlwIiwiYWNoRmllbGRzIiwiY2FzaEZpZWxkcyIsInByb2Nlc3NlZEVsZW1lbnRzIiwiZWxlbWVudFN0YXRlcyIsImZldGNoUHRUb2tlbiIsInRyYW5zYWN0aW9uRW5kcG9pbnQiLCJwdFRva2VuIiwiaXNVc2VkIiwicmVzZXRIb3N0VG9rZW4iLCJhIiwicmVtb3ZlUmVhZHkiLCJtb3VudFByb2Nlc3NlZEVsZW1lbnRzIiwicHJvY2Vzc2VkQXJyYXkiLCJlcnJvckNoZWNrIiwiZW5jb2RlZEpzb24iLCJidG9hIiwiZW5jb2RlVVJJIiwiYWNoRWxlbWVudHMiLCJjYXJkRWxlbWVudHMiLCJudW1iZXIiLCJleHAiLCJjdnYiLCJjYXNoRWxlbWVudHMiLCJwcm9jZXNzRWxlbWVudHMiLCJyZW1vdmVSZWxheSIsInJlbGF5VHlwZU1lc3NhZ2UiLCJoYW5kbGVyIiwicmVsYXlIYW5kbGVyIiwicmVtb3ZlU2V0dXAiLCJob3N0ZWRSZWFkeVR5cGVNZXNzYWdlIiwic2V0dXBIYW5kbGVyIiwicmVtb3ZlU2libGluZyIsInNpYmxpbmdUeXBlTWVzc2FnZSIsInNpYmxpbmdIYW5kbGVyIiwicmVtb3ZlU3RhdGUiLCJzdGF0ZVR5cGVNZXNzYWdlIiwic3RhdGVVcGRhdGVyIiwicmVtb3ZlSG9zdGVkRXJyb3IiLCJzb2NrZXRFcnJvclR5cGVNZXNzYWdlIiwiaG9zdGVkRXJyb3JIYW5kbGVyIiwiZmluZENhcmRFcnJvciIsImZpbmRBY2hFcnJvciIsImZpbmRDYXNoRXJyb3IiLCJoYW5kbGVJbml0TWVzc2FnZSIsImluaXRpYWxpemVkIiwib3B0aW9uIiwiaXNIaWRkZW4iLCJzZXRUcmFuc2FjdGluZ0VsZW1lbnQiLCJyZXNldFRva2VuIiwiaXN2YWxpZFRyYW5zYWN0UGFyYW1zIiwiaXNWYWxpZEFtb3VudCIsImlzVmFsaWRQYXlvckluZm8iLCJpc1ZhbGlkUGF5b3JEZXRhaWxzIiwiaXNWYWxpZEZlZU1vZGUiLCJpc1ZhbGlkSW52b2ljZUFuZFJlY3VycmluZ0lkIiwiaXNWYWxpZEZlZUFtb3VudCIsImdlbmVyYXRlSW5pdGlhbGl6YXRpb24iLCJ3YXJuIiwiaXNWYWxpZFRva2VuaXplUGFyYW1zIiwiZ2VuZXJhdGVUb2tlbml6YXRpb24iLCJjYXB0dXJlIiwiaXNSZWFkeVN0YWxlIiwiaXNOYU4iLCJwYXJzZUludCIsImdldFJlYWR5IiwiTWF0aCIsInJvdW5kIiwiRGF0ZSIsIm5vdyIsInJlYWR5VHlwZU1lc3NhZ2UiLCJzZXRSZWFkeSIsInZhbGlkVHlwZU1lc3NhZ2UiLCJ2YWxpZGF0aW5nIiwidmFsaWRDYXJkIiwiaGFzVmFsaWRDYXJkIiwidmFsaWRBY2giLCJoYXNWYWxpZEFjY291bnQiLCJoYXNWYWxpZENhc2giLCJhcmVWYWxpZCIsIm9iaiIsImpvaW4iLCJjYXNoQ29tcGxldGVUeXBlTWVzc2FnZSIsImdlb2xvY2F0aW9uIiwiZ2V0Q3VycmVudFBvc2l0aW9uIiwicG9zIiwiY3JkIiwiY29vcmRzIiwiYmFyY29kZSIsIm1hcFVybCIsImxhdGl0dWRlIiwibG9uZ2l0dWRlIiwidGltZW91dCIsIm1heGltdW1BZ2UiLCJnZW5lcmF0ZVJldHVybiIsInZhbGlkYXRlIiwidmFsdWUiLCJWQUxJRF9TVEFHRVMiLCJrZXkiLCJzdGFnZUluZGV4Iiwia2V5U3BsaXRMZW5ndGgiLCJjaGVja0FwaUtleSIsIklOVEVSQ0hBTkdFIiwiY2hlY2tGZWVNb2RlIiwiY2hlY2tNZXRhZGF0YSIsImNoZWNrU3R5bGVzIiwiY2hlY2tFbnYiLCJjaGVja1N0YWdlIiwidHlwZXMiLCJoYXNWYWxpZENhcmROdW1iZXIiLCJmaW5kQ2FyZE51bWJlckVycm9yIiwiZmluZENvbWJpbmVkQ2FyZEVycm9yIiwiYWNoQ2hlY2siLCJjaGVjayIsInNhbWVfYXNfYmlsbGluZyIsImFsbG93ZWRLZXlzIiwia2V5cyIsInZhbGlkVHlwZSIsImNvbmNhdCIsIm1hcCIsIm1pc3NpbmciLCJwYXlUaGVvcnlJbmZvIiwiU3RyaW5nIiwicHJvdG90eXBlIiwic2VhcmNoU3RyaW5nIiwicG9zaXRpb24iLCJzdWJqZWN0U3RyaW5nIiwiaXNGaW5pdGUiLCJmbG9vciIsImVuZHNJV2l0aElzVmFsaWQiLCJsYXN0SW5kZXgiLCJlbmRzV2l0aFJlc3VsdCIsImluZGV4T2YiLCJnbG9iYWwiLCJnbG9iYWxUaGlzIiwic2VsZiIsInN1cHBvcnQiLCJTeW1ib2wiLCJCbG9iIiwiZSIsImNhbkJsb2IiLCJ2aWV3Q2xhc3NlcyIsImlzQXJyYXlCdWZmZXJWaWV3IiwiQXJyYXlCdWZmZXIiLCJpc1ZpZXciLCJjYWxsIiwibm9ybWFsaXplTmFtZSIsIlR5cGVFcnJvciIsInRvTG93ZXJDYXNlIiwibm9ybWFsaXplVmFsdWUiLCJpdGVyYXRvckZvciIsIml0ZW1zIiwiaXRlcmF0b3IiLCJuZXh0Iiwic2hpZnQiLCJkb25lIiwiSGVhZGVycyIsImFwcGVuZCIsIkFycmF5IiwiaXNBcnJheSIsImhlYWRlciIsImdldE93blByb3BlcnR5TmFtZXMiLCJjb25zdW1lZCIsImJvZHlVc2VkIiwiUHJvbWlzZSIsInJlamVjdCIsImZpbGVSZWFkZXJSZWFkeSIsInJlYWRlciIsInJlc29sdmUiLCJvbmxvYWQiLCJvbmVycm9yIiwicmVhZEJsb2JBc0FycmF5QnVmZmVyIiwiYmxvYiIsIkZpbGVSZWFkZXIiLCJwcm9taXNlIiwicmVhZEFzQXJyYXlCdWZmZXIiLCJidWZmZXJDbG9uZSIsImJ1ZiIsInNsaWNlIiwidmlldyIsImJ5dGVMZW5ndGgiLCJzZXQiLCJidWZmZXIiLCJoYXMiLCJoYXNPd25Qcm9wZXJ0eSIsImNhbGxiYWNrIiwidGhpc0FyZyIsInZhbHVlcyIsImVudHJpZXMiLCJidWlsZEJvZHkiLCJiYXNlIiwiaXNQcm90b3R5cGVPZiIsIl9ib2R5QmxvYiIsImJ1aWxkQm9keUJsb2IiLCJGb3JtRGF0YSIsIl9ib2R5Rm9ybURhdGEiLCJidWlsZEJvZHlGb3JtRGF0YSIsIkRhdGFWaWV3IiwiaXNEYXRhVmlldyIsIl9ib2R5QXJyYXlCdWZmZXIiLCJfYm9keUluaXQiLCJidWlsZEJvZHlBcnJheUJ1ZmZlciIsIl9ib2R5VGV4dCIsIlVSTFNlYXJjaFBhcmFtcyIsIkJvZHkiLCJfaW5pdEJvZHkiLCJidWlsZEhlYWRlcnMiLCJyZWplY3RlZCIsImFycmF5QnVmZmVyIiwiYnl0ZU9mZnNldCIsInRoZW4iLCJ0ZXh0IiwicmVhZEFzVGV4dCIsInJlYWRCbG9iQXNUZXh0IiwiY2hhcnMiLCJmcm9tQ2hhckNvZGUiLCJyZWFkQXJyYXlCdWZmZXJBc1RleHQiLCJmb3JtRGF0YSIsImRlY29kZSIsIm1ldGhvZHMiLCJidWlsZFJlcXVlc3RIZWFkZXJzIiwiaW5wdXQiLCJSZXF1ZXN0Iiwic2lnbmFsIiwiaGFuZGxlSW5wdXRSZXF1ZXN0IiwiaXNJbnB1dFJlcXVlc3QiLCJidWlsZFJlcXVlc3RDcmVkZW50aWFscyIsInVwY2FzZWQiLCJ0b1VwcGVyQ2FzZSIsIm5vcm1hbGl6ZU1ldGhvZCIsImJ1aWxkUmVxdWVzdE1ldGhvZCIsImJ1aWxkUmVxdWVzdE1vZGUiLCJidWlsZFJlcXVlc3RTaWduYWwiLCJyZWZlcnJlciIsImNoZWNrRm9ySWxsZWdhbEJvZHkiLCJyZVBhcmFtU2VhcmNoIiwiZ2V0VGltZSIsImJ1aWxkQm9keWxlc3NPcHRpb25zVXJsIiwicHJvY2Vzc0JvZHlsZXNzT3B0aW9ucyIsImhhbmRsZUJvZHlsZXNzIiwidHJpbSIsImJ5dGVzIiwiZGVjb2RlVVJJQ29tcG9uZW50IiwicGFyc2VIZWFkZXJzIiwicmF3SGVhZGVycyIsInN1YnN0ciIsImxpbmUiLCJwYXJ0cyIsImNsb25lIiwiZmluZE9wdGlvblN0YXR1cyIsInN0YXR1cyIsImZpbmRPcHRpb25TdGF0dXNUZXh0Iiwic3RhdHVzVGV4dCIsImZpbmRPcHRpb25PayIsImZpbmRPcHRpb25VcmwiLCJSZXNwb25zZSIsImJvZHlJbml0Iiwib2siLCJyZWRpcmVjdFN0YXR1c2VzIiwicmVkaXJlY3QiLCJSYW5nZUVycm9yIiwiRE9NRXhjZXB0aW9uIiwiZXJyIiwic3RhY2siLCJjb25zdHJ1Y3RvciIsImFib3J0WGhyIiwieGhyIiwiYWJvcnQiLCJyZXF1ZXN0IiwiYWJvcnRlZCIsImlzQWJvcnQiLCJYTUxIdHRwUmVxdWVzdCIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVVJMIiwicmVzcG9uc2VUZXh0Iiwic2V0VGltZW91dCIsInhockJ1aWxkT25Mb2FkIiwieGhyQnVpbGRPbkVycm9yIiwib250aW1lb3V0IiwieGhyQnVpbGRPblRpbWVvdXQiLCJvbmFib3J0IiwieGhyQnVpbGRPbkFib3J0Iiwib3BlbiIsImhyZWYiLCJmaXhVcmwiLCJ3aXRoQ3JlZGVudGlhbHMiLCJmaW5kWGhyQ3JlZGVudGlhbHMiLCJyZXNwb25zZVR5cGUiLCJmaW5kWGhyUmVzcG9uc2VUeXBlIiwic2V0UmVxdWVzdEhlYWRlciIsImZpbmRYaHJSZXF1ZXN0SGVhZGVyIiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInhockJ1aWxkT25SZWFkeVN0YXRlQ2hhbmdlIiwic2VuZCIsInBvbHlmaWxsIiwiaXNDYWxsYWJsZSIsInRyeVRvU3RyaW5nIiwiJFR5cGVFcnJvciIsIm1vZHVsZSIsImV4cG9ydHMiLCJhcmd1bWVudCIsImlzQ29uc3RydWN0b3IiLCIkU3RyaW5nIiwid2VsbEtub3duU3ltYm9sIiwiZGVmaW5lUHJvcGVydHkiLCJVTlNDT1BBQkxFUyIsIkFycmF5UHJvdG90eXBlIiwidW5kZWZpbmVkIiwiY29uZmlndXJhYmxlIiwiY2hhckF0IiwiUyIsImluZGV4IiwidW5pY29kZSIsIml0IiwiUHJvdG90eXBlIiwiaXNPYmplY3QiLCJmYWlscyIsImlzRXh0ZW5zaWJsZSIsIkNvbnN0cnVjdG9yIiwiTkFUSVZFX0FSUkFZX0JVRkZFUiIsIkRFU0NSSVBUT1JTIiwiaGFzT3duIiwiY2xhc3NvZiIsImNyZWF0ZU5vbkVudW1lcmFibGVQcm9wZXJ0eSIsImRlZmluZUJ1aWx0SW4iLCJnZXRQcm90b3R5cGVPZiIsInNldFByb3RvdHlwZU9mIiwidWlkIiwiSW50ZXJuYWxTdGF0ZU1vZHVsZSIsImVuZm9yY2VJbnRlcm5hbFN0YXRlIiwiZW5mb3JjZSIsImdldEludGVybmFsU3RhdGUiLCJJbnQ4QXJyYXkiLCJJbnQ4QXJyYXlQcm90b3R5cGUiLCJVaW50OENsYW1wZWRBcnJheSIsIlVpbnQ4Q2xhbXBlZEFycmF5UHJvdG90eXBlIiwiVHlwZWRBcnJheSIsIlR5cGVkQXJyYXlQcm90b3R5cGUiLCJPYmplY3RQcm90b3R5cGUiLCJUT19TVFJJTkdfVEFHIiwiVFlQRURfQVJSQVlfVEFHIiwiTkFUSVZFX0FSUkFZX0JVRkZFUl9WSUVXUyIsIm9wZXJhIiwiVFlQRURfQVJSQVlfVEFHX1JFUVVJUkVEIiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yc0xpc3QiLCJJbnQxNkFycmF5IiwiVWludDE2QXJyYXkiLCJJbnQzMkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJCaWdJbnRBcnJheUNvbnN0cnVjdG9yc0xpc3QiLCJCaWdJbnQ2NEFycmF5IiwiQmlnVWludDY0QXJyYXkiLCJnZXRUeXBlZEFycmF5Q29uc3RydWN0b3IiLCJwcm90byIsImlzVHlwZWRBcnJheSIsImtsYXNzIiwiRnVuY3Rpb24iLCJhVHlwZWRBcnJheSIsImFUeXBlZEFycmF5Q29uc3RydWN0b3IiLCJDIiwiZXhwb3J0VHlwZWRBcnJheU1ldGhvZCIsIktFWSIsInByb3BlcnR5IiwiZm9yY2VkIiwiQVJSQVkiLCJUeXBlZEFycmF5Q29uc3RydWN0b3IiLCJlcnJvcjIiLCJleHBvcnRUeXBlZEFycmF5U3RhdGljTWV0aG9kIiwidW5jdXJyeVRoaXMiLCJGdW5jdGlvbk5hbWUiLCJkZWZpbmVCdWlsdElucyIsImFuSW5zdGFuY2UiLCJ0b0ludGVnZXJPckluZmluaXR5IiwidG9MZW5ndGgiLCJ0b0luZGV4IiwiSUVFRTc1NCIsImFycmF5RmlsbCIsImFycmF5U2xpY2UiLCJzZXRUb1N0cmluZ1RhZyIsIlBST1BFUl9GVU5DVElPTl9OQU1FIiwiUFJPUEVSIiwiQ09ORklHVVJBQkxFX0ZVTkNUSU9OX05BTUUiLCJDT05GSUdVUkFCTEUiLCJzZXRJbnRlcm5hbFN0YXRlIiwiQVJSQVlfQlVGRkVSIiwiV1JPTkdfSU5ERVgiLCJOYXRpdmVBcnJheUJ1ZmZlciIsIiRBcnJheUJ1ZmZlciIsIkFycmF5QnVmZmVyUHJvdG90eXBlIiwiJERhdGFWaWV3IiwiRGF0YVZpZXdQcm90b3R5cGUiLCJmaWxsIiwicmV2ZXJzZSIsInBhY2tJRUVFNzU0IiwicGFjayIsInVucGFja0lFRUU3NTQiLCJ1bnBhY2siLCJwYWNrSW50OCIsInBhY2tJbnQxNiIsInBhY2tJbnQzMiIsInVucGFja0ludDMyIiwicGFja0Zsb2F0MzIiLCJwYWNrRmxvYXQ2NCIsImFkZEdldHRlciIsImNvdW50IiwiaXNMaXR0bGVFbmRpYW4iLCJpbnRJbmRleCIsInN0b3JlIiwic3RhcnQiLCJjb252ZXJzaW9uIiwiSU5DT1JSRUNUX0FSUkFZX0JVRkZFUl9OQU1FIiwiTmFOIiwiaiIsInRlc3RWaWV3IiwiJHNldEludDgiLCJzZXRJbnQ4IiwiZ2V0SW50OCIsInNldFVpbnQ4IiwidW5zYWZlIiwiYnVmZmVyTGVuZ3RoIiwib2Zmc2V0IiwiZ2V0VWludDgiLCJnZXRJbnQxNiIsImFyZ3VtZW50cyIsImdldFVpbnQxNiIsImdldEludDMyIiwiZ2V0VWludDMyIiwiZ2V0RmxvYXQzMiIsImdldEZsb2F0NjQiLCJzZXRJbnQxNiIsInNldFVpbnQxNiIsInNldEludDMyIiwic2V0VWludDMyIiwic2V0RmxvYXQzMiIsInNldEZsb2F0NjQiLCJ0b09iamVjdCIsInRvQWJzb2x1dGVJbmRleCIsImxlbmd0aE9mQXJyYXlMaWtlIiwiZGVsZXRlUHJvcGVydHlPclRocm93IiwibWluIiwiY29weVdpdGhpbiIsInRhcmdldCIsIk8iLCJsZW4iLCJ0byIsImVuZCIsImluYyIsImFyZ3VtZW50c0xlbmd0aCIsImVuZFBvcyIsIiRmb3JFYWNoIiwiU1RSSUNUX01FVEhPRCIsImFycmF5TWV0aG9kSXNTdHJpY3QiLCJjYWxsYmFja2ZuIiwibGlzdCIsImNhbGxXaXRoU2FmZUl0ZXJhdGlvbkNsb3NpbmciLCJpc0FycmF5SXRlcmF0b3JNZXRob2QiLCJjcmVhdGVQcm9wZXJ0eSIsImdldEl0ZXJhdG9yIiwiZ2V0SXRlcmF0b3JNZXRob2QiLCIkQXJyYXkiLCJhcnJheUxpa2UiLCJJU19DT05TVFJVQ1RPUiIsIm1hcGZuIiwibWFwcGluZyIsInN0ZXAiLCJpdGVyYXRvck1ldGhvZCIsInRvSW5kZXhlZE9iamVjdCIsImNyZWF0ZU1ldGhvZCIsIklTX0lOQ0xVREVTIiwiJHRoaXMiLCJlbCIsImZyb21JbmRleCIsIkluZGV4ZWRPYmplY3QiLCJhcnJheVNwZWNpZXNDcmVhdGUiLCJUWVBFIiwiSVNfTUFQIiwiSVNfRklMVEVSIiwiSVNfU09NRSIsIklTX0VWRVJZIiwiSVNfRklORF9JTkRFWCIsIklTX0ZJTFRFUl9SRUpFQ1QiLCJOT19IT0xFUyIsInRoYXQiLCJzcGVjaWZpY0NyZWF0ZSIsImJvdW5kRnVuY3Rpb24iLCJmaWx0ZXIiLCJzb21lIiwiZXZlcnkiLCJmaW5kIiwiZmluZEluZGV4IiwiZmlsdGVyUmVqZWN0IiwiYXBwbHkiLCIkbGFzdEluZGV4T2YiLCJsYXN0SW5kZXhPZiIsIk5FR0FUSVZFX1pFUk8iLCJGT1JDRUQiLCJzZWFyY2hFbGVtZW50IiwiVjhfVkVSU0lPTiIsIlNQRUNJRVMiLCJNRVRIT0RfTkFNRSIsImFycmF5IiwiZm9vIiwiQm9vbGVhbiIsImFDYWxsYWJsZSIsIklTX1JJR0hUIiwibWVtbyIsImxlZnQiLCJyaWdodCIsIm1heCIsImsiLCJmaW4iLCJuIiwibWVyZ2VTb3J0IiwiY29tcGFyZWZuIiwibWlkZGxlIiwiaW5zZXJ0aW9uU29ydCIsIm1lcmdlIiwibGxlbmd0aCIsInJsZW5ndGgiLCJsaW5kZXgiLCJyaW5kZXgiLCJvcmlnaW5hbEFycmF5IiwiYXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCJhbk9iamVjdCIsIml0ZXJhdG9yQ2xvc2UiLCJmbiIsIkVOVFJJRVMiLCJJVEVSQVRPUiIsIlNBRkVfQ0xPU0lORyIsImNhbGxlZCIsIml0ZXJhdG9yV2l0aFJldHVybiIsImV4ZWMiLCJTS0lQX0NMT1NJTkciLCJJVEVSQVRJT05fU1VQUE9SVCIsIm9iamVjdCIsInN0cmluZ1NsaWNlIiwiVE9fU1RSSU5HX1RBR19TVVBQT1JUIiwiY2xhc3NvZlJhdyIsIiRPYmplY3QiLCJDT1JSRUNUX0FSR1VNRU5UUyIsInRhZyIsInRyeUdldCIsImNhbGxlZSIsIml0ZXJhdGUiLCJkZWZpbmVJdGVyYXRvciIsInNldFNwZWNpZXMiLCJmYXN0S2V5IiwiaW50ZXJuYWxTdGF0ZUdldHRlckZvciIsImdldHRlckZvciIsImdldENvbnN0cnVjdG9yIiwiQ09OU1RSVUNUT1JfTkFNRSIsIkFEREVSIiwiaXRlcmFibGUiLCJmaXJzdCIsImxhc3QiLCJzaXplIiwiQVNfRU5UUklFUyIsInByZXZpb3VzIiwiZW50cnkiLCJnZXRFbnRyeSIsInJlbW92ZWQiLCJjbGVhciIsInByZXYiLCJhZGQiLCJzZXRTdHJvbmciLCJJVEVSQVRPUl9OQU1FIiwiZ2V0SW50ZXJuYWxDb2xsZWN0aW9uU3RhdGUiLCJnZXRJbnRlcm5hbEl0ZXJhdG9yU3RhdGUiLCJpdGVyYXRlZCIsImtpbmQiLCJnZXRXZWFrRGF0YSIsIkFycmF5SXRlcmF0aW9uTW9kdWxlIiwic3BsaWNlIiwidW5jYXVnaHRGcm96ZW5TdG9yZSIsImZyb3plbiIsIlVuY2F1Z2h0RnJvemVuU3RvcmUiLCJmaW5kVW5jYXVnaHRGcm96ZW4iLCIkIiwiaXNGb3JjZWQiLCJJbnRlcm5hbE1ldGFkYXRhTW9kdWxlIiwiY2hlY2tDb3JyZWN0bmVzc09mSXRlcmF0aW9uIiwiaW5oZXJpdElmUmVxdWlyZWQiLCJJU19XRUFLIiwiTmF0aXZlQ29uc3RydWN0b3IiLCJOYXRpdmVQcm90b3R5cGUiLCJleHBvcnRlZCIsImZpeE1ldGhvZCIsInVuY3VycmllZE5hdGl2ZU1ldGhvZCIsImVuYWJsZSIsImluc3RhbmNlIiwiSEFTTlRfQ0hBSU5JTkciLCJUSFJPV1NfT05fUFJJTUlUSVZFUyIsIkFDQ0VQVF9JVEVSQUJMRVMiLCJCVUdHWV9aRVJPIiwiJGluc3RhbmNlIiwiZHVtbXkiLCJvd25LZXlzIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yTW9kdWxlIiwiZGVmaW5lUHJvcGVydHlNb2R1bGUiLCJzb3VyY2UiLCJleGNlcHRpb25zIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiTUFUQ0giLCJyZWdleHAiLCJlcnJvcjEiLCJGIiwiSXRlcmF0b3JQcm90b3R5cGUiLCJjcmVhdGVQcm9wZXJ0eURlc2NyaXB0b3IiLCJJdGVyYXRvcnMiLCJyZXR1cm5UaGlzIiwiSXRlcmF0b3JDb25zdHJ1Y3RvciIsIkVOVU1FUkFCTEVfTkVYVCIsImJpdG1hcCIsImVudW1lcmFibGUiLCJ3cml0YWJsZSIsInRvUHJvcGVydHlLZXkiLCJwcm9wZXJ0eUtleSIsIm1ha2VCdWlsdEluIiwiZGVmaW5lR2xvYmFsUHJvcGVydHkiLCJzaW1wbGUiLCJub25Db25maWd1cmFibGUiLCJub25Xcml0YWJsZSIsInNyYyIsIklTX1BVUkUiLCJjcmVhdGVJdGVyYXRvckNvbnN0cnVjdG9yIiwiSXRlcmF0b3JzQ29yZSIsIkJVR0dZX1NBRkFSSV9JVEVSQVRPUlMiLCJLRVlTIiwiVkFMVUVTIiwiSXRlcmFibGUiLCJERUZBVUxUIiwiSVNfU0VUIiwiQ3VycmVudEl0ZXJhdG9yUHJvdG90eXBlIiwiZ2V0SXRlcmF0aW9uTWV0aG9kIiwiS0lORCIsImRlZmF1bHRJdGVyYXRvciIsIkl0ZXJhYmxlUHJvdG90eXBlIiwiSU5DT1JSRUNUX1ZBTFVFU19OQU1FIiwibmF0aXZlSXRlcmF0b3IiLCJhbnlOYXRpdmVJdGVyYXRvciIsInBhdGgiLCJ3cmFwcGVkV2VsbEtub3duU3ltYm9sTW9kdWxlIiwiUCIsIkVYSVNUUyIsIkNTU1J1bGVMaXN0IiwiQ1NTU3R5bGVEZWNsYXJhdGlvbiIsIkNTU1ZhbHVlTGlzdCIsIkNsaWVudFJlY3RMaXN0IiwiRE9NUmVjdExpc3QiLCJET01TdHJpbmdMaXN0IiwiRE9NVG9rZW5MaXN0IiwiRGF0YVRyYW5zZmVySXRlbUxpc3QiLCJGaWxlTGlzdCIsIkhUTUxBbGxDb2xsZWN0aW9uIiwiSFRNTENvbGxlY3Rpb24iLCJIVE1MRm9ybUVsZW1lbnQiLCJIVE1MU2VsZWN0RWxlbWVudCIsIk1lZGlhTGlzdCIsIk1pbWVUeXBlQXJyYXkiLCJOYW1lZE5vZGVNYXAiLCJOb2RlTGlzdCIsIlBhaW50UmVxdWVzdExpc3QiLCJQbHVnaW4iLCJQbHVnaW5BcnJheSIsIlNWR0xlbmd0aExpc3QiLCJTVkdOdW1iZXJMaXN0IiwiU1ZHUGF0aFNlZ0xpc3QiLCJTVkdQb2ludExpc3QiLCJTVkdTdHJpbmdMaXN0IiwiU1ZHVHJhbnNmb3JtTGlzdCIsIlNvdXJjZUJ1ZmZlckxpc3QiLCJTdHlsZVNoZWV0TGlzdCIsIlRleHRUcmFja0N1ZUxpc3QiLCJUZXh0VHJhY2tMaXN0IiwiVG91Y2hMaXN0IiwiY2xhc3NMaXN0IiwiZG9jdW1lbnRDcmVhdGVFbGVtZW50IiwiRE9NVG9rZW5MaXN0UHJvdG90eXBlIiwiZmlyZWZveCIsIm1hdGNoIiwiRGVubyIsIlVBIiwiUGViYmxlIiwiZ2V0QnVpbHRJbiIsInZlcnNpb24iLCJ2ZXJzaW9ucyIsInY4Iiwid2Via2l0IiwiY29weUNvbnN0cnVjdG9yUHJvcGVydGllcyIsInRhcmdldFByb3BlcnR5Iiwic291cmNlUHJvcGVydHkiLCJkZXNjcmlwdG9yIiwiVEFSR0VUIiwiR0xPQkFMIiwiU1RBVElDIiwic3RhdCIsImRvbnRDYWxsR2V0U2V0Iiwic2hhbSIsInJlZ2V4cEV4ZWMiLCJSZWdFeHBQcm90b3R5cGUiLCJSZWdFeHAiLCJTSEFNIiwiU1lNQk9MIiwiREVMRUdBVEVTX1RPX1NZTUJPTCIsIkRFTEVHQVRFU19UT19FWEVDIiwiZXhlY0NhbGxlZCIsInJlIiwiZmxhZ3MiLCJ1bmN1cnJpZWROYXRpdmVSZWdFeHBNZXRob2QiLCJuYXRpdmVNZXRob2QiLCJzdHIiLCJhcmcyIiwiZm9yY2VTdHJpbmdNZXRob2QiLCIkZXhlYyIsInByZXZlbnRFeHRlbnNpb25zIiwiTkFUSVZFX0JJTkQiLCJGdW5jdGlvblByb3RvdHlwZSIsIlJlZmxlY3QiLCIkRnVuY3Rpb24iLCJmYWN0b3JpZXMiLCJjb25zdHJ1Y3QiLCJhcmdzTGVuZ3RoIiwiYXJncyIsInBhcnRBcmdzIiwiZ2V0RGVzY3JpcHRvciIsImFGdW5jdGlvbiIsIm5hbWVzcGFjZSIsImdldE1ldGhvZCIsInVzaW5nSXRlcmF0b3IiLCJWIiwiU1VCU1RJVFVUSU9OX1NZTUJPTFMiLCJTVUJTVElUVVRJT05fU1lNQk9MU19OT19OQU1FRCIsIm1hdGNoZWQiLCJjYXB0dXJlcyIsIm5hbWVkQ2FwdHVyZXMiLCJyZXBsYWNlbWVudCIsInRhaWxQb3MiLCJtIiwic3ltYm9scyIsImNoIiwiZyIsImIiLCJhYnMiLCJwb3ciLCJMTjIiLCJtYW50aXNzYUxlbmd0aCIsImV4cG9uZW50IiwibWFudGlzc2EiLCJleHBvbmVudExlbmd0aCIsImVNYXgiLCJlQmlhcyIsInJ0Iiwic2lnbiIsIkluZmluaXR5IiwibkJpdHMiLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsIldyYXBwZXIiLCJOZXdUYXJnZXQiLCJOZXdUYXJnZXRQcm90b3R5cGUiLCJmdW5jdGlvblRvU3RyaW5nIiwiaW5zcGVjdFNvdXJjZSIsImhpZGRlbktleXMiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzTW9kdWxlIiwiZ2V0T3duUHJvcGVydHlOYW1lc0V4dGVybmFsTW9kdWxlIiwiRlJFRVpJTkciLCJSRVFVSVJFRCIsIk1FVEFEQVRBIiwic2V0TWV0YWRhdGEiLCJvYmplY3RJRCIsIndlYWtEYXRhIiwibWV0YSIsIm9uRnJlZXplIiwiTkFUSVZFX1dFQUtfTUFQIiwic2hhcmVkIiwic2hhcmVkS2V5IiwiT0JKRUNUX0FMUkVBRFlfSU5JVElBTElaRUQiLCJXZWFrTWFwIiwid21nZXQiLCJ3bWhhcyIsIndtc2V0IiwiZmFjYWRlIiwiU1RBVEUiLCJub29wIiwiZW1wdHkiLCJjb25zdHJ1Y3RvclJlZ0V4cCIsIklOQ09SUkVDVF9UT19TVFJJTkciLCJpc0NvbnN0cnVjdG9yTW9kZXJuIiwiaXNDb25zdHJ1Y3RvckxlZ2FjeSIsImZlYXR1cmUiLCJkZXRlY3Rpb24iLCJub3JtYWxpemUiLCJQT0xZRklMTCIsIk5BVElWRSIsIk51bWJlciIsImlzSW50ZWdlciIsImlzUmVnRXhwIiwiVVNFX1NZTUJPTF9BU19VSUQiLCIkU3ltYm9sIiwiUmVzdWx0Iiwic3RvcHBlZCIsIlJlc3VsdFByb3RvdHlwZSIsInVuYm91bmRGdW5jdGlvbiIsIml0ZXJGbiIsIklTX0lURVJBVE9SIiwiSU5URVJSVVBURUQiLCJzdG9wIiwiY29uZGl0aW9uIiwiY2FsbEZuIiwiaW5uZXJSZXN1bHQiLCJpbm5lckVycm9yIiwiUHJvdG90eXBlT2ZBcnJheUl0ZXJhdG9yUHJvdG90eXBlIiwiYXJyYXlJdGVyYXRvciIsIkNPTkZJR1VSQUJMRV9MRU5HVEgiLCJURU1QTEFURSIsImdldHRlciIsInNldHRlciIsImFyaXR5IiwiY2VpbCIsInRydW5jIiwieCIsImZsdXNoIiwiaGVhZCIsIm5vdGlmeSIsInRvZ2dsZSIsIm5vZGUiLCJtYWNyb3Rhc2siLCJJU19JT1MiLCJJU19JT1NfUEVCQkxFIiwiSVNfV0VCT1NfV0VCS0lUIiwiSVNfTk9ERSIsIk11dGF0aW9uT2JzZXJ2ZXIiLCJXZWJLaXRNdXRhdGlvbk9ic2VydmVyIiwicXVldWVNaWNyb3Rhc2tEZXNjcmlwdG9yIiwicXVldWVNaWNyb3Rhc2siLCJwYXJlbnQiLCJkb21haW4iLCJleGl0IiwiZW50ZXIiLCJuZXh0VGljayIsImNyZWF0ZVRleHROb2RlIiwiY2hhcmFjdGVyRGF0YSIsInRhc2siLCJOQVRJVkVfU1lNQk9MIiwia2V5Rm9yIiwiZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwic3ltYm9sIiwiVVJMIiwic2VhcmNoUGFyYW1zIiwicGF0aG5hbWUiLCJ0b0pTT04iLCJzb3J0IiwidXNlcm5hbWUiLCJob3N0IiwiaGFzaCIsIlByb21pc2VDYXBhYmlsaXR5IiwiJCRyZXNvbHZlIiwiJCRyZWplY3QiLCJhY3RpdmVYRG9jdW1lbnQiLCJkZWZpbmVQcm9wZXJ0aWVzTW9kdWxlIiwiZW51bUJ1Z0tleXMiLCJodG1sIiwiSUVfUFJPVE8iLCJFbXB0eUNvbnN0cnVjdG9yIiwic2NyaXB0VGFnIiwiY29udGVudCIsIkxUIiwiTnVsbFByb3RvT2JqZWN0VmlhQWN0aXZlWCIsIndyaXRlIiwiY2xvc2UiLCJ0ZW1wIiwicGFyZW50V2luZG93IiwiTnVsbFByb3RvT2JqZWN0IiwiQWN0aXZlWE9iamVjdCIsImlmcmFtZURvY3VtZW50IiwiaWZyYW1lIiwiUHJvcGVydGllcyIsIlY4X1BST1RPVFlQRV9ERUZJTkVfQlVHIiwib2JqZWN0S2V5cyIsImRlZmluZVByb3BlcnRpZXMiLCJwcm9wcyIsIklFOF9ET01fREVGSU5FIiwiJGRlZmluZVByb3BlcnR5IiwiJGdldE93blByb3BlcnR5RGVzY3JpcHRvciIsIkF0dHJpYnV0ZXMiLCJjdXJyZW50IiwicHJvcGVydHlJc0VudW1lcmFibGVNb2R1bGUiLCIkZ2V0T3duUHJvcGVydHlOYW1lcyIsIndpbmRvd05hbWVzIiwiZ2V0V2luZG93TmFtZXMiLCJpbnRlcm5hbE9iamVjdEtleXMiLCJDT1JSRUNUX1BST1RPVFlQRV9HRVRURVIiLCJBUlJBWV9CVUZGRVJfTk9OX0VYVEVOU0lCTEUiLCIkaXNFeHRlbnNpYmxlIiwiRkFJTFNfT05fUFJJTUlUSVZFUyIsIm5hbWVzIiwiJHByb3BlcnR5SXNFbnVtZXJhYmxlIiwiTkFTSE9STl9CVUciLCIxIiwiYVBvc3NpYmxlUHJvdG90eXBlIiwiQ09SUkVDVF9TRVRURVIiLCJfX3Byb3RvX18iLCJwcmVmIiwidmFsIiwidmFsdWVPZiIsImdldE93blByb3BlcnR5U3ltYm9sc01vZHVsZSIsIk5hdGl2ZVByb21pc2VDb25zdHJ1Y3RvciIsIklTX0JST1dTRVIiLCJOYXRpdmVQcm9taXNlUHJvdG90eXBlIiwiU1VCQ0xBU1NJTkciLCJOQVRJVkVfUFJPTUlTRV9SRUpFQ1RJT05fRVZFTlQiLCJQcm9taXNlUmVqZWN0aW9uRXZlbnQiLCJGT1JDRURfUFJPTUlTRV9DT05TVFJVQ1RPUiIsIlBST01JU0VfQ09OU1RSVUNUT1JfU09VUkNFIiwiR0xPQkFMX0NPUkVfSlNfUFJPTUlTRSIsIkZha2VQcm9taXNlIiwiQ09OU1RSVUNUT1IiLCJSRUpFQ1RJT05fRVZFTlQiLCJuZXdQcm9taXNlQ2FwYWJpbGl0eSIsInByb21pc2VDYXBhYmlsaXR5IiwiYWxsIiwiUXVldWUiLCJ0YWlsIiwiaXRlbSIsIlIiLCJyZTEiLCJyZTIiLCJyZWdleHBGbGFncyIsInN0aWNreUhlbHBlcnMiLCJVTlNVUFBPUlRFRF9ET1RfQUxMIiwiVU5TVVBQT1JURURfTkNHIiwibmF0aXZlUmVwbGFjZSIsIm5hdGl2ZUV4ZWMiLCJwYXRjaGVkRXhlYyIsIlVQREFURVNfTEFTVF9JTkRFWF9XUk9ORyIsIlVOU1VQUE9SVEVEX1kiLCJCUk9LRU5fQ0FSRVQiLCJOUENHX0lOQ0xVREVEIiwicmVDb3B5IiwiZ3JvdXAiLCJyYXciLCJncm91cHMiLCJzdGlja3kiLCJjaGFyc0FkZGVkIiwic3RyQ29weSIsIm11bHRpbGluZSIsImhhc0luZGljZXMiLCJpZ25vcmVDYXNlIiwiZG90QWxsIiwidW5pY29kZVNldHMiLCJyZWdFeHBGbGFncyIsIiRSZWdFeHAiLCJNSVNTRURfU1RJQ0tZIiwiVEFHIiwiU0hBUkVEIiwiY29weXJpZ2h0IiwibGljZW5zZSIsImFDb25zdHJ1Y3RvciIsImRlZmF1bHRDb25zdHJ1Y3RvciIsInJlcXVpcmVPYmplY3RDb2VyY2libGUiLCJDT05WRVJUX1RPX1NUUklORyIsInNlY29uZCIsImNvZGVBdCIsIndoaXRlc3BhY2VzIiwid2hpdGVzcGFjZSIsImx0cmltIiwicnRyaW0iLCJTeW1ib2xQcm90b3R5cGUiLCJUT19QUklNSVRJVkUiLCJoaW50IiwiZGVmZXIiLCJjaGFubmVsIiwicG9ydCIsInZhbGlkYXRlQXJndW1lbnRzTGVuZ3RoIiwic2V0SW1tZWRpYXRlIiwiY2xlYXJJbW1lZGlhdGUiLCJEaXNwYXRjaCIsIk1lc3NhZ2VDaGFubmVsIiwiY291bnRlciIsInF1ZXVlIiwicnVuIiwicnVubmVyIiwibGlzdGVuZXIiLCJwb3N0IiwicHJvdG9jb2wiLCJwb3J0MiIsInBvcnQxIiwib25tZXNzYWdlIiwiaW1wb3J0U2NyaXB0cyIsInJlbW92ZUNoaWxkIiwiaW50ZWdlciIsInRvUHJpbWl0aXZlIiwicHJpbSIsIkJpZ0ludCIsIiRSYW5nZUVycm9yIiwidG9Qb3NpdGl2ZUludGVnZXIiLCJCWVRFUyIsImlzU3ltYm9sIiwib3JkaW5hcnlUb1ByaW1pdGl2ZSIsImV4b3RpY1RvUHJpbSIsIlRZUEVEX0FSUkFZU19DT05TVFJVQ1RPUlNfUkVRVUlSRVNfV1JBUFBFUlMiLCJBcnJheUJ1ZmZlclZpZXdDb3JlIiwiQXJyYXlCdWZmZXJNb2R1bGUiLCJpc0ludGVncmFsTnVtYmVyIiwidG9PZmZzZXQiLCJ0eXBlZEFycmF5RnJvbSIsIm5hdGl2ZURlZmluZVByb3BlcnR5IiwibmF0aXZlR2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiQllURVNfUEVSX0VMRU1FTlQiLCJXUk9OR19MRU5HVEgiLCJmcm9tTGlzdCIsImlzQXJyYXlCdWZmZXIiLCJpc1R5cGVkQXJyYXlJbmRleCIsIndyYXBwZWRHZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IiLCJ3cmFwcGVkRGVmaW5lUHJvcGVydHkiLCJDTEFNUEVEIiwiR0VUVEVSIiwiU0VUVEVSIiwiTmF0aXZlVHlwZWRBcnJheUNvbnN0cnVjdG9yIiwiVHlwZWRBcnJheUNvbnN0cnVjdG9yUHJvdG90eXBlIiwiYWRkRWxlbWVudCIsInR5cGVkQXJyYXlPZmZzZXQiLCIkbGVuZ3RoIiwiJGxlbiIsImFycmF5RnJvbUNvbnN0cnVjdG9yQW5kTGlzdCIsInR5cGVkQXJyYXlTcGVjaWVzQ29uc3RydWN0b3IiLCJzcGVjaWVzQ29uc3RydWN0b3IiLCJwb3N0Zml4IiwicmFuZG9tIiwicGFzc2VkIiwicmVxdWlyZWQiLCJXZWxsS25vd25TeW1ib2xzU3RvcmUiLCJzeW1ib2xGb3IiLCJjcmVhdGVXZWxsS25vd25TeW1ib2wiLCJ3aXRob3V0U2V0dGVyIiwiZGVzY3JpcHRpb24iLCJhcnJheUJ1ZmZlck1vZHVsZSIsImRvZXNOb3RFeGNlZWRTYWZlSW50ZWdlciIsImFycmF5TWV0aG9kSGFzU3BlY2llc1N1cHBvcnQiLCJJU19DT05DQVRfU1BSRUFEQUJMRSIsIklTX0NPTkNBVF9TUFJFQURBQkxFX1NVUFBPUlQiLCJTUEVDSUVTX1NVUFBPUlQiLCJpc0NvbmNhdFNwcmVhZGFibGUiLCJzcHJlYWRhYmxlIiwiYXJnIiwiRSIsIkEiLCIkZmlsdGVyIiwiJGluY2x1ZGVzIiwiYWRkVG9VbnNjb3BhYmxlcyIsIkFSUkFZX0lURVJBVE9SIiwiQXJndW1lbnRzIiwidW4kSm9pbiIsIkVTM19TVFJJTkdTIiwic2VwYXJhdG9yIiwiJG1hcCIsInVuJFNsaWNlIiwiSEFTX1NQRUNJRVNfU1VQUE9SVCIsIkZVTkNUSU9OX05BTUVfRVhJU1RTIiwibmFtZVJFIiwicmVnRXhwRXhlYyIsIiRzdHJpbmdpZnkiLCJudW1iZXJUb1N0cmluZyIsInRlc3RlciIsImxvdyIsImhpIiwiV1JPTkdfU1lNQk9MU19DT05WRVJTSU9OIiwiSUxMX0ZPUk1FRF9VTklDT0RFIiwic3RyaW5naWZ5V2l0aFN5bWJvbHNGaXgiLCJyZXBsYWNlciIsIiRyZXBsYWNlciIsImZpeElsbEZvcm1lZCIsInNwYWNlIiwiY29sbGVjdGlvbiIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCIkZ2V0T3duUHJvcGVydHlTeW1ib2xzIiwibmF0aXZlR2V0UHJvdG90eXBlT2YiLCJuYXRpdmVLZXlzIiwibmV3UHJvbWlzZUNhcGFiaWxpdHlNb2R1bGUiLCJwZXJmb3JtIiwiY2FwYWJpbGl0eSIsIiRwcm9taXNlUmVzb2x2ZSIsInJlbWFpbmluZyIsImFscmVhZHlDYWxsZWQiLCJyZWFsIiwib25SZWplY3RlZCIsIkludGVybmFsIiwiT3duUHJvbWlzZUNhcGFiaWxpdHkiLCJuYXRpdmVUaGVuIiwibWljcm90YXNrIiwiaG9zdFJlcG9ydEVycm9ycyIsIlByb21pc2VDb25zdHJ1Y3RvckRldGVjdGlvbiIsIlBST01JU0UiLCJOQVRJVkVfUFJPTUlTRV9TVUJDTEFTU0lORyIsImdldEludGVybmFsUHJvbWlzZVN0YXRlIiwiUHJvbWlzZUNvbnN0cnVjdG9yIiwiUHJvbWlzZVByb3RvdHlwZSIsIm5ld0dlbmVyaWNQcm9taXNlQ2FwYWJpbGl0eSIsIkRJU1BBVENIX0VWRU5UIiwiY3JlYXRlRXZlbnQiLCJkaXNwYXRjaEV2ZW50IiwiVU5IQU5ETEVEX1JFSkVDVElPTiIsImlzVGhlbmFibGUiLCJjYWxsUmVhY3Rpb24iLCJyZWFjdGlvbiIsImV4aXRlZCIsImZhaWwiLCJyZWplY3Rpb24iLCJvbkhhbmRsZVVuaGFuZGxlZCIsImlzUmVqZWN0Iiwibm90aWZpZWQiLCJyZWFjdGlvbnMiLCJvblVuaGFuZGxlZCIsInJlYXNvbiIsImluaXRFdmVudCIsImlzVW5oYW5kbGVkIiwiZW1pdCIsInVud3JhcCIsImludGVybmFsUmVqZWN0IiwiaW50ZXJuYWxSZXNvbHZlIiwiZXhlY3V0b3IiLCJvbkZ1bGZpbGxlZCIsIlByb21pc2VXcmFwcGVyIiwid3JhcCIsInJhY2UiLCJyIiwicHJvbWlzZVJlc29sdmUiLCJQcm9taXNlQ29uc3RydWN0b3JXcmFwcGVyIiwiQ0hFQ0tfV1JBUFBFUiIsIm5hdGl2ZUNvbnN0cnVjdCIsIk5FV19UQVJHRVRfQlVHIiwiQVJHU19CVUciLCJUYXJnZXQiLCJuZXdUYXJnZXQiLCIkYXJncyIsImlzRGF0YURlc2NyaXB0b3IiLCJyZWNlaXZlciIsInVuJFRlc3QiLCIkdG9TdHJpbmciLCJnZXRSZWdFeHBGbGFncyIsIlRPX1NUUklORyIsIm4kVG9TdHJpbmciLCJOT1RfR0VORVJJQyIsIklOQ09SUkVDVF9OQU1FIiwibm90QVJlZ0V4cCIsImNvcnJlY3RJc1JlZ0V4cExvZ2ljIiwidW4kRW5kc1dpdGgiLCJDT1JSRUNUX0lTX1JFR0VYUF9MT0dJQyIsImVuZFBvc2l0aW9uIiwic2VhcmNoIiwic3RyaW5nSW5kZXhPZiIsIlNUUklOR19JVEVSQVRPUiIsInBvaW50IiwiZml4UmVnRXhwV2VsbEtub3duU3ltYm9sTG9naWMiLCJhZHZhbmNlU3RyaW5nSW5kZXgiLCJnZXRTdWJzdGl0dXRpb24iLCJSRVBMQUNFIiwiUkVQTEFDRV9LRUVQU18kMCIsIlJFR0VYUF9SRVBMQUNFX1NVQlNUSVRVVEVTX1VOREVGSU5FRF9DQVBUVVJFIiwiXyIsIm1heWJlQ2FsbE5hdGl2ZSIsIlVOU0FGRV9TVUJTVElUVVRFIiwic2VhcmNoVmFsdWUiLCJyZXBsYWNlVmFsdWUiLCJyeCIsInJlcyIsImZ1bmN0aW9uYWxSZXBsYWNlIiwiZnVsbFVuaWNvZGUiLCJyZXN1bHRzIiwiYWNjdW11bGF0ZWRSZXN1bHQiLCJuZXh0U291cmNlUG9zaXRpb24iLCJyZXBsYWNlckFyZ3MiLCJjYWxsUmVnRXhwRXhlYyIsIk1BWF9VSU5UMzIiLCIkcHVzaCIsIlNQTElUIiwibmF0aXZlU3BsaXQiLCJpbnRlcm5hbFNwbGl0IiwibGltaXQiLCJsaW0iLCJsYXN0TGVuZ3RoIiwib3V0cHV0IiwibGFzdExhc3RJbmRleCIsInNlcGFyYXRvckNvcHkiLCJzcGxpdHRlciIsInVuaWNvZGVNYXRjaGluZyIsInAiLCJxIiwieiIsIm9yaWdpbmFsRXhlYyIsInVuJFN0YXJ0c1dpdGgiLCIkdHJpbSIsImZvcmNlZFN0cmluZ1RyaW1NZXRob2QiLCJkZWZpbmVXZWxsS25vd25TeW1ib2wiLCJuYXRpdmVPYmplY3RDcmVhdGUiLCJnZXRPd25Qcm9wZXJ0eU5hbWVzRXh0ZXJuYWwiLCJkZWZpbmVTeW1ib2xUb1ByaW1pdGl2ZSIsIkhJRERFTiIsIlFPYmplY3QiLCJuYXRpdmVHZXRPd25Qcm9wZXJ0eU5hbWVzIiwibmF0aXZlUHJvcGVydHlJc0VudW1lcmFibGUiLCJBbGxTeW1ib2xzIiwiT2JqZWN0UHJvdG90eXBlU3ltYm9scyIsIlVTRV9TRVRURVIiLCJmaW5kQ2hpbGQiLCJzZXRTeW1ib2xEZXNjcmlwdG9yIiwiT2JqZWN0UHJvdG90eXBlRGVzY3JpcHRvciIsIiRkZWZpbmVQcm9wZXJ0aWVzIiwicHJvcGVydGllcyIsIklTX09CSkVDVF9QUk9UT1RZUEUiLCJ1c2VTZXR0ZXIiLCJ1c2VTaW1wbGUiLCJOYXRpdmVTeW1ib2wiLCJFbXB0eVN0cmluZ0Rlc2NyaXB0aW9uU3RvcmUiLCJTeW1ib2xXcmFwcGVyIiwic3ltYm9sVG9TdHJpbmciLCJzeW1ib2xWYWx1ZU9mIiwiZGVzYyIsIk5BVElWRV9TWU1CT0xfUkVHSVNUUlkiLCJTdHJpbmdUb1N5bWJvbFJlZ2lzdHJ5IiwiU3ltYm9sVG9TdHJpbmdSZWdpc3RyeSIsInN5bSIsInUkQXJyYXlDb3B5V2l0aGluIiwiJGV2ZXJ5IiwiJGZpbGwiLCJ0b0JpZ0ludCIsImFjdHVhbFZhbHVlIiwiZnJvbVNwZWNpZXNBbmRMaXN0IiwiJGZpbmRJbmRleCIsInByZWRpY2F0ZSIsIiRmaW5kIiwiJGluZGV4T2YiLCJBcnJheUl0ZXJhdG9ycyIsImFycmF5VmFsdWVzIiwiYXJyYXlLZXlzIiwiYXJyYXlFbnRyaWVzIiwiR0VORVJJQyIsIklURVJBVE9SX0lTX1ZBTFVFUyIsInR5cGVkQXJyYXlWYWx1ZXMiLCIkam9pbiIsIiRyZWR1Y2VSaWdodCIsIiRyZWR1Y2UiLCIkc2V0IiwiV09SS1NfV0lUSF9PQkpFQ1RTX0FORF9HRUVSSUNfT05fVFlQRURfQVJSQVlTIiwiMCIsIlRPX09CSkVDVF9CVUciLCIkc29tZSIsImludGVybmFsU29ydCIsIkZGIiwiSUVfT1JfRURHRSIsIlY4IiwiV0VCS0lUIiwidW4kU29ydCIsIkFDQ0VQVF9JTkNPUlJFQ1RfQVJHVU1FTlRTIiwiU1RBQkxFX1NPUlQiLCJtb2QiLCJleHBlY3RlZCIsInkiLCJnZXRTb3J0Q29tcGFyZSIsImJlZ2luIiwiYmVnaW5JbmRleCIsIiR0b0xvY2FsZVN0cmluZyIsInRvTG9jYWxlU3RyaW5nIiwiVE9fTE9DQUxFX1NUUklOR19CVUciLCJVaW50OEFycmF5UHJvdG90eXBlIiwiYXJyYXlUb1N0cmluZyIsIklTX05PVF9BUlJBWV9NRVRIT0QiLCJjcmVhdGVUeXBlZEFycmF5Q29uc3RydWN0b3IiLCJJbnRlcm5hbFdlYWtNYXAiLCJjb2xsZWN0aW9uV2VhayIsIklTX0lFMTEiLCIkV2Vha01hcCIsIldlYWtNYXBQcm90b3R5cGUiLCJuYXRpdmVEZWxldGUiLCJuYXRpdmVIYXMiLCJuYXRpdmVHZXQiLCJuYXRpdmVTZXQiLCJET01JdGVyYWJsZXMiLCJoYW5kbGVQcm90b3R5cGUiLCJDb2xsZWN0aW9uUHJvdG90eXBlIiwiQ09MTEVDVElPTl9OQU1FIiwiQXJyYXlJdGVyYXRvck1ldGhvZHMiLCJBcnJheVZhbHVlcyIsIlVTRV9OQVRJVkVfVVJMIiwiYXJyYXlTb3J0IiwiVVJMX1NFQVJDSF9QQVJBTVMiLCJVUkxfU0VBUkNIX1BBUkFNU19JVEVSQVRPUiIsImdldEludGVybmFsUGFyYW1zU3RhdGUiLCJzYWZlR2V0QnVpbHRJbiIsIm5hdGl2ZUZldGNoIiwiTmF0aXZlUmVxdWVzdCIsIlJlcXVlc3RQcm90b3R5cGUiLCJIZWFkZXJzUHJvdG90eXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwicGx1cyIsInNlcXVlbmNlcyIsInBlcmNlbnRTZXF1ZW5jZSIsInBlcmNlbnREZWNvZGUiLCJzZXF1ZW5jZSIsImRlc2VyaWFsaXplIiwicmVwbGFjZW1lbnRzIiwic2VyaWFsaXplIiwiVVJMU2VhcmNoUGFyYW1zSXRlcmF0b3IiLCJwYXJhbXMiLCJVUkxTZWFyY2hQYXJhbXNTdGF0ZSIsInBhcnNlT2JqZWN0IiwicGFyc2VRdWVyeSIsImJpbmRVUkwiLCJ1cGRhdGUiLCJlbnRyeUl0ZXJhdG9yIiwiZW50cnlOZXh0IiwicXVlcnkiLCJhdHRyaWJ1dGUiLCJhdHRyaWJ1dGVzIiwidXBkYXRlVVJMIiwiVVJMU2VhcmNoUGFyYW1zQ29uc3RydWN0b3IiLCJVUkxTZWFyY2hQYXJhbXNQcm90b3R5cGUiLCJnZXRBbGwiLCJmb3VuZCIsImhlYWRlcnNIYXMiLCJoZWFkZXJzU2V0Iiwid3JhcFJlcXVlc3RPcHRpb25zIiwiUmVxdWVzdENvbnN0cnVjdG9yIiwiZ2V0U3RhdGUiLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsImNzc1dpdGhNYXBwaW5nVG9TdHJpbmciLCJuZWVkTGF5ZXIiLCJtb2R1bGVzIiwibWVkaWEiLCJkZWR1cGUiLCJzdXBwb3J0cyIsImxheWVyIiwiYWxyZWFkeUltcG9ydGVkTW9kdWxlcyIsIl9rIiwiY3NzTWFwcGluZyIsImJhc2U2NCIsInVuZXNjYXBlIiwic291cmNlTWFwcGluZyIsInNvdXJjZVVSTHMiLCJzb3VyY2VzIiwic291cmNlUm9vdCIsIl90eXBlb2YiLCJfc2V0UHJvdG90eXBlT2YiLCJvIiwiX2lzTmF0aXZlUmVmbGVjdENvbnN0cnVjdCIsIlByb3h5IiwiX2NvbnN0cnVjdCIsIlBhcmVudCIsIkNsYXNzIiwiX3RvQ29uc3VtYWJsZUFycmF5IiwiYXJyIiwiX2FycmF5TGlrZVRvQXJyYXkiLCJfYXJyYXlXaXRob3V0SG9sZXMiLCJpdGVyIiwiX2l0ZXJhYmxlVG9BcnJheSIsIm1pbkxlbiIsIl91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheSIsIl9ub25JdGVyYWJsZVNwcmVhZCIsImFycjIiLCJpc0Zyb3plbiIsImZyZWV6ZSIsInNlYWwiLCJfcmVmIiwiZnVuIiwidGhpc1ZhbHVlIiwiRnVuYyIsImFycmF5Rm9yRWFjaCIsInVuYXBwbHkiLCJhcnJheVBvcCIsInBvcCIsImFycmF5UHVzaCIsInN0cmluZ1RvTG93ZXJDYXNlIiwic3RyaW5nTWF0Y2giLCJzdHJpbmdSZXBsYWNlIiwic3RyaW5nVHJpbSIsInJlZ0V4cFRlc3QiLCJ0eXBlRXJyb3JDcmVhdGUiLCJfbGVuMiIsIl9rZXkyIiwiX2xlbiIsIl9rZXkiLCJhZGRUb1NldCIsImwiLCJsY0VsZW1lbnQiLCJuZXdPYmplY3QiLCJsb29rdXBHZXR0ZXIiLCJwcm9wIiwiaHRtbCQxIiwic3ZnJDEiLCJzdmdGaWx0ZXJzIiwic3ZnRGlzYWxsb3dlZCIsIm1hdGhNbCQxIiwibWF0aE1sRGlzYWxsb3dlZCIsInN2ZyIsIm1hdGhNbCIsInhtbCIsIk1VU1RBQ0hFX0VYUFIiLCJFUkJfRVhQUiIsIkRBVEFfQVRUUiIsIkFSSUFfQVRUUiIsIklTX0FMTE9XRURfVVJJIiwiSVNfU0NSSVBUX09SX0RBVEEiLCJBVFRSX1dISVRFU1BBQ0UiLCJET0NUWVBFX05BTUUiLCJnZXRHbG9iYWwiLCJfY3JlYXRlVHJ1c3RlZFR5cGVzUG9saWN5IiwidHJ1c3RlZFR5cGVzIiwiY3JlYXRlUG9saWN5Iiwic3VmZml4IiwiQVRUUl9OQU1FIiwiY3VycmVudFNjcmlwdCIsImdldEF0dHJpYnV0ZSIsInBvbGljeU5hbWUiLCJjcmVhdGVIVE1MIiwiY3JlYXRlRE9NUHVyaWZ5Iiwicm9vdCIsIm5vZGVUeXBlIiwiaXNTdXBwb3J0ZWQiLCJvcmlnaW5hbERvY3VtZW50IiwiRG9jdW1lbnRGcmFnbWVudCIsIkhUTUxUZW1wbGF0ZUVsZW1lbnQiLCJOb2RlIiwiRWxlbWVudCIsIk5vZGVGaWx0ZXIiLCJfd2luZG93JE5hbWVkTm9kZU1hcCIsIk1vek5hbWVkQXR0ck1hcCIsIkRPTVBhcnNlciIsIkVsZW1lbnRQcm90b3R5cGUiLCJjbG9uZU5vZGUiLCJnZXROZXh0U2libGluZyIsImdldENoaWxkTm9kZXMiLCJnZXRQYXJlbnROb2RlIiwidGVtcGxhdGUiLCJvd25lckRvY3VtZW50IiwidHJ1c3RlZFR5cGVzUG9saWN5IiwiZW1wdHlIVE1MIiwiX2RvY3VtZW50IiwiaW1wbGVtZW50YXRpb24iLCJjcmVhdGVOb2RlSXRlcmF0b3IiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiZ2V0RWxlbWVudHNCeVRhZ05hbWUiLCJpbXBvcnROb2RlIiwiZG9jdW1lbnRNb2RlIiwiaG9va3MiLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJQQVJTRVJfTUVESUFfVFlQRSIsInRyYW5zZm9ybUNhc2VGdW5jIiwiTVVTVEFDSEVfRVhQUiQxIiwiRVJCX0VYUFIkMSIsIkRBVEFfQVRUUiQxIiwiQVJJQV9BVFRSJDEiLCJJU19TQ1JJUFRfT1JfREFUQSQxIiwiQVRUUl9XSElURVNQQUNFJDEiLCJJU19BTExPV0VEX1VSSSQxIiwiQUxMT1dFRF9UQUdTIiwiREVGQVVMVF9BTExPV0VEX1RBR1MiLCJBTExPV0VEX0FUVFIiLCJERUZBVUxUX0FMTE9XRURfQVRUUiIsIkNVU1RPTV9FTEVNRU5UX0hBTkRMSU5HIiwidGFnTmFtZUNoZWNrIiwiYXR0cmlidXRlTmFtZUNoZWNrIiwiYWxsb3dDdXN0b21pemVkQnVpbHRJbkVsZW1lbnRzIiwiRk9SQklEX1RBR1MiLCJGT1JCSURfQVRUUiIsIkFMTE9XX0FSSUFfQVRUUiIsIkFMTE9XX0RBVEFfQVRUUiIsIkFMTE9XX1VOS05PV05fUFJPVE9DT0xTIiwiU0FGRV9GT1JfVEVNUExBVEVTIiwiV0hPTEVfRE9DVU1FTlQiLCJTRVRfQ09ORklHIiwiRk9SQ0VfQk9EWSIsIlJFVFVSTl9ET00iLCJSRVRVUk5fRE9NX0ZSQUdNRU5UIiwiUkVUVVJOX1RSVVNURURfVFlQRSIsIlNBTklUSVpFX0RPTSIsIktFRVBfQ09OVEVOVCIsIklOX1BMQUNFIiwiVVNFX1BST0ZJTEVTIiwiRk9SQklEX0NPTlRFTlRTIiwiREVGQVVMVF9GT1JCSURfQ09OVEVOVFMiLCJEQVRBX1VSSV9UQUdTIiwiREVGQVVMVF9EQVRBX1VSSV9UQUdTIiwiVVJJX1NBRkVfQVRUUklCVVRFUyIsIkRFRkFVTFRfVVJJX1NBRkVfQVRUUklCVVRFUyIsIk1BVEhNTF9OQU1FU1BBQ0UiLCJTVkdfTkFNRVNQQUNFIiwiSFRNTF9OQU1FU1BBQ0UiLCJOQU1FU1BBQ0UiLCJJU19FTVBUWV9JTlBVVCIsIlNVUFBPUlRFRF9QQVJTRVJfTUVESUFfVFlQRVMiLCJERUZBVUxUX1BBUlNFUl9NRURJQV9UWVBFIiwiQ09ORklHIiwiZm9ybUVsZW1lbnQiLCJpc1JlZ2V4T3JGdW5jdGlvbiIsInRlc3RWYWx1ZSIsIl9wYXJzZUNvbmZpZyIsImNmZyIsIkFERF9VUklfU0FGRV9BVFRSIiwiQUREX0RBVEFfVVJJX1RBR1MiLCJBTExPV0VEX1VSSV9SRUdFWFAiLCJBRERfVEFHUyIsIkFERF9BVFRSIiwidGFibGUiLCJ0Ym9keSIsIk1BVEhNTF9URVhUX0lOVEVHUkFUSU9OX1BPSU5UUyIsIkhUTUxfSU5URUdSQVRJT05fUE9JTlRTIiwiQ09NTU9OX1NWR19BTkRfSFRNTF9FTEVNRU5UUyIsIkFMTF9TVkdfVEFHUyIsIkFMTF9NQVRITUxfVEFHUyIsIl9jaGVja1ZhbGlkTmFtZXNwYWNlIiwidGFnTmFtZSIsIm5hbWVzcGFjZVVSSSIsInBhcmVudFRhZ05hbWUiLCJfZm9yY2VSZW1vdmUiLCJvdXRlckhUTUwiLCJyZW1vdmUiLCJfcmVtb3ZlQXR0cmlidXRlIiwiZ2V0QXR0cmlidXRlTm9kZSIsInJlbW92ZUF0dHJpYnV0ZSIsIl9pbml0RG9jdW1lbnQiLCJkaXJ0eSIsImRvYyIsImxlYWRpbmdXaGl0ZXNwYWNlIiwibWF0Y2hlcyIsImRpcnR5UGF5bG9hZCIsInBhcnNlRnJvbVN0cmluZyIsImRvY3VtZW50RWxlbWVudCIsImNyZWF0ZURvY3VtZW50IiwiaW5zZXJ0QmVmb3JlIiwiY2hpbGROb2RlcyIsIl9jcmVhdGVJdGVyYXRvciIsIlNIT1dfRUxFTUVOVCIsIlNIT1dfQ09NTUVOVCIsIlNIT1dfVEVYVCIsIl9pc0Nsb2JiZXJlZCIsImVsbSIsIm5vZGVOYW1lIiwidGV4dENvbnRlbnQiLCJfaXNOb2RlIiwiX2V4ZWN1dGVIb29rIiwiZW50cnlQb2ludCIsImN1cnJlbnROb2RlIiwiaG9vayIsIl9zYW5pdGl6ZUVsZW1lbnRzIiwiYWxsb3dlZFRhZ3MiLCJoYXNDaGlsZE5vZGVzIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJfYmFzaWNDdXN0b21FbGVtZW50VGVzdCIsIl9pc1ZhbGlkQXR0cmlidXRlIiwibGNUYWciLCJsY05hbWUiLCJfc2FuaXRpemVBdHRyaWJ1dGVzIiwiYXR0ciIsImhvb2tFdmVudCIsImF0dHJWYWx1ZSIsImtlZXBBdHRyIiwiYWxsb3dlZEF0dHJpYnV0ZXMiLCJfYXR0ciIsImZvcmNlS2VlcEF0dHIiLCJzZXRBdHRyaWJ1dGVOUyIsIl9zYW5pdGl6ZVNoYWRvd0RPTSIsImZyYWdtZW50Iiwic2hhZG93Tm9kZSIsInNoYWRvd0l0ZXJhdG9yIiwibmV4dE5vZGUiLCJpbXBvcnRlZE5vZGUiLCJvbGROb2RlIiwicmV0dXJuTm9kZSIsInRvU3RhdGljSFRNTCIsImZpcnN0Q2hpbGQiLCJub2RlSXRlcmF0b3IiLCJzaGFkb3dyb290Iiwic2VyaWFsaXplZEhUTUwiLCJkb2N0eXBlIiwic2V0Q29uZmlnIiwiY2xlYXJDb25maWciLCJpc1ZhbGlkQXR0cmlidXRlIiwiYWRkSG9vayIsImhvb2tGdW5jdGlvbiIsInJlbW92ZUhvb2siLCJyZW1vdmVIb29rcyIsInJlbW92ZUFsbEhvb2tzIiwiZmFjdG9yeSIsInJ1bnRpbWUiLCJPcCIsIml0ZXJhdG9yU3ltYm9sIiwiYXN5bmNJdGVyYXRvclN5bWJvbCIsImFzeW5jSXRlcmF0b3IiLCJ0b1N0cmluZ1RhZ1N5bWJvbCIsInRvU3RyaW5nVGFnIiwiaW5uZXJGbiIsIm91dGVyRm4iLCJ0cnlMb2NzTGlzdCIsInByb3RvR2VuZXJhdG9yIiwiR2VuZXJhdG9yIiwiZ2VuZXJhdG9yIiwiY29udGV4dCIsIkNvbnRleHQiLCJfaW52b2tlIiwiR2VuU3RhdGVTdXNwZW5kZWRTdGFydCIsIkdlblN0YXRlRXhlY3V0aW5nIiwiR2VuU3RhdGVDb21wbGV0ZWQiLCJkb25lUmVzdWx0IiwiZGVsZWdhdGUiLCJkZWxlZ2F0ZVJlc3VsdCIsIm1heWJlSW52b2tlRGVsZWdhdGUiLCJDb250aW51ZVNlbnRpbmVsIiwic2VudCIsIl9zZW50IiwiZGlzcGF0Y2hFeGNlcHRpb24iLCJhYnJ1cHQiLCJyZWNvcmQiLCJ0cnlDYXRjaCIsIkdlblN0YXRlU3VzcGVuZGVkWWllbGQiLCJtYWtlSW52b2tlTWV0aG9kIiwiR2VuZXJhdG9yRnVuY3Rpb24iLCJHZW5lcmF0b3JGdW5jdGlvblByb3RvdHlwZSIsImdldFByb3RvIiwiTmF0aXZlSXRlcmF0b3JQcm90b3R5cGUiLCJHcCIsImRlZmluZUl0ZXJhdG9yTWV0aG9kcyIsIkFzeW5jSXRlcmF0b3IiLCJQcm9taXNlSW1wbCIsImludm9rZSIsIl9fYXdhaXQiLCJ1bndyYXBwZWQiLCJwcmV2aW91c1Byb21pc2UiLCJjYWxsSW52b2tlV2l0aE1ldGhvZEFuZEFyZyIsImluZm8iLCJyZXN1bHROYW1lIiwibmV4dExvYyIsInB1c2hUcnlFbnRyeSIsImxvY3MiLCJ0cnlMb2MiLCJjYXRjaExvYyIsImZpbmFsbHlMb2MiLCJhZnRlckxvYyIsInRyeUVudHJpZXMiLCJyZXNldFRyeUVudHJ5IiwiY29tcGxldGlvbiIsInJlc2V0IiwiZGlzcGxheU5hbWUiLCJpc0dlbmVyYXRvckZ1bmN0aW9uIiwiZ2VuRnVuIiwiY3RvciIsIm1hcmsiLCJhd3JhcCIsImFzeW5jIiwic2tpcFRlbXBSZXNldCIsInJvb3RSZWNvcmQiLCJydmFsIiwiZXhjZXB0aW9uIiwiaGFuZGxlIiwibG9jIiwiY2F1Z2h0IiwiaGFzQ2F0Y2giLCJoYXNGaW5hbGx5IiwiZmluYWxseUVudHJ5IiwiY29tcGxldGUiLCJmaW5pc2giLCJ0aHJvd24iLCJkZWxlZ2F0ZVlpZWxkIiwicmVnZW5lcmF0b3JSdW50aW1lIiwiYWNjaWRlbnRhbFN0cmljdE1vZGUiLCJzdHlsZVRhZ1RyYW5zZm9ybSIsInNldEF0dHJpYnV0ZXMiLCJpbnNlcnQiLCJkb21BUEkiLCJpbnNlcnRTdHlsZUVsZW1lbnQiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsImlkQ291bnRNYXAiLCJpZGVudGlmaWVycyIsImluZGV4QnlJZGVudGlmaWVyIiwiY3NzIiwic291cmNlTWFwIiwicmVmZXJlbmNlcyIsInVwZGF0ZXIiLCJhZGRFbGVtZW50U3R5bGUiLCJieUluZGV4IiwiYXBpIiwibmV3T2JqIiwibGFzdElkZW50aWZpZXJzIiwibmV3TGlzdCIsIm5ld0xhc3RJZGVudGlmaWVycyIsIl9pIiwiX2luZGV4Iiwic3R5bGVUYXJnZXQiLCJxdWVyeVNlbGVjdG9yIiwiSFRNTElGcmFtZUVsZW1lbnQiLCJjb250ZW50RG9jdW1lbnQiLCJnZXRUYXJnZXQiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInJlbW92ZVN0eWxlRWxlbWVudCIsInN0eWxlU2hlZXQiLCJjc3NUZXh0IiwiX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fIiwiX193ZWJwYWNrX3JlcXVpcmVfXyIsIm1vZHVsZUlkIiwiY2FjaGVkTW9kdWxlIiwiX193ZWJwYWNrX21vZHVsZXNfXyIsIl9fZXNNb2R1bGUiLCJkIiwiZGVmaW5pdGlvbiIsIm5jIiwicGF5dGhlb3J5IiwiY3JlYXRlUGF5bWVudEZpZWxkcyIsImNsaWVudElkIiwiY3JlYXRlUGF5bWVudEZpZWxkc0xlZ2FjeSIsIlNVUkNIQVJHRSJdLCJzb3VyY2VSb290IjoiIn0
Subdomains
Date
Domain
IP
c2.paytheorylab.com
2025-09-19
44.205.42.119
austin.tags.static.paytheorylab.com
2024-09-21
99.84.66.52
c2.system.dashboard.paytheorylab.com
2024-08-08
18.161.6.125
carpe.system.dashboard.paytheorylab.com
2024-03-31
18.172.170.126
austin.system.dashboard.paytheorylab.com
2024-10-25
99.84.66.4
aron.system.dashboard.paytheorylab.com
2023-12-13
65.8.161.42
actionaly.system.dashboard.paytheorylab.com
2024-10-29
18.172.170.89
c2.partner.dashboard.paytheorylab.com
2024-07-30
99.84.66.71
evolve.partner.dashboard.paytheorylab.com
2024-12-14
3.163.24.80
actionaly.partner.dashboard.paytheorylab.com
2025-02-24
18.65.229.48
c2.merchant.dashboard.paytheorylab.com
2024-11-19
204.246.191.71
austin.merchant.dashboard.paytheorylab.com
2024-11-18
204.246.191.15
actionaly.merchant.dashboard.paytheorylab.com
2025-01-23
13.224.14.8
carefeed.html.example.paytheorylab.com
2025-02-06
18.161.6.88
carpe.html.example.paytheorylab.com
2023-07-20
204.246.191.109
austin.html.example.paytheorylab.com
2024-09-27
204.246.191.57
aron.html.example.paytheorylab.com
2025-07-29
3.163.24.50
actionaly.html.example.paytheorylab.com
2024-12-21
3.163.165.14
aron.react.example.paytheorylab.com
2024-07-13
3.163.24.70
evolve.paytheorylab.com
2024-06-24
52.207.195.15
austin.cash.api.paytheorylab.com
2024-04-23
44.197.49.146
teligant.cash.api.paytheorylab.com
2025-10-16
54.146.159.217
scview.cash.api.paytheorylab.com
2024-07-22
34.200.201.45
actionaly.cash.api.paytheorylab.com
2024-05-27
3.230.138.28
learn.dummy.cash.api.paytheorylab.com
2024-11-21
3.219.148.246
carpe.sdk.paytheorylab.com
2023-10-28
18.161.6.59
austin.sdk.paytheorylab.com
2024-07-27
3.163.24.37
aron.sdk.paytheorylab.com
2025-10-28
3.169.173.103
austin.paytheorylab.com
2024-12-27
44.220.104.101
actionaly.developers.paytheorylab.com
2023-12-27
18.161.6.77
evolve.secure.socket.paytheorylab.com
2024-04-19
44.199.177.196
aron.books.websocket.paytheorylab.com
2024-05-23
34.232.162.221
pt.paytheorylab.com
2024-05-27
18.214.74.81
c2.rest.paytheorylab.com
2023-07-29
204.246.191.15
abre.rest.paytheorylab.com
2025-01-20
18.161.6.86
aron.rest.paytheorylab.com
2024-12-24
3.163.189.30
actionaly.rest.paytheorylab.com
2024-11-17
18.238.217.95
actionaly.paytheorylab.com
2024-05-27
54.165.192.77
learn.dummy.paytheorylab.com
2024-07-22
54.81.17.224
austin.html.canary.paytheorylab.com
2024-08-31
3.163.24.100
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]