(()=>{var e={170:(e,t,r)=>{"use strict";var n=r(6440);function o(e){var t={"!":"%21","'":"%27","(":"%28",")":"%29","~":"%7E","%20":"+","%00":"\0"};return encodeURIComponent(e).replace(/[!'\(\)~]|%20|%00/g,(function(e){return t[e]}))}function i(e,t){this._pairs=[],e&&n(e,this,t)}var s=i.prototype;s.append=function(e,t){this._pairs.push([e,t])},s.toString=function(e){var t=e?function(t){return e.call(this,t,o)}:o;return this._pairs.map((function(e){return t(e[0])+"="+t(e[1])}),"").join("&")},e.exports=i},243:e=>{"use strict";e.exports=FormData},786:(e,t,r)=>{e.exports=r(1894)},1111:e=>{"use strict";const t=new Set(["ENOTFOUND","ENETUNREACH","UNABLE_TO_GET_ISSUER_CERT","UNABLE_TO_GET_CRL","UNABLE_TO_DECRYPT_CERT_SIGNATURE","UNABLE_TO_DECRYPT_CRL_SIGNATURE","UNABLE_TO_DECODE_ISSUER_PUBLIC_KEY","CERT_SIGNATURE_FAILURE","CRL_SIGNATURE_FAILURE","CERT_NOT_YET_VALID","CERT_HAS_EXPIRED","CRL_NOT_YET_VALID","CRL_HAS_EXPIRED","ERROR_IN_CERT_NOT_BEFORE_FIELD","ERROR_IN_CERT_NOT_AFTER_FIELD","ERROR_IN_CRL_LAST_UPDATE_FIELD","ERROR_IN_CRL_NEXT_UPDATE_FIELD","OUT_OF_MEM","DEPTH_ZERO_SELF_SIGNED_CERT","SELF_SIGNED_CERT_IN_CHAIN","UNABLE_TO_GET_ISSUER_CERT_LOCALLY","UNABLE_TO_VERIFY_LEAF_SIGNATURE","CERT_CHAIN_TOO_LONG","CERT_REVOKED","INVALID_CA","PATH_LENGTH_EXCEEDED","INVALID_PURPOSE","CERT_UNTRUSTED","CERT_REJECTED","HOSTNAME_MISMATCH"]);e.exports=e=>!t.has(e&&e.code)},1894:e=>{"use strict";e.exports="object"==typeof self?self.FormData:window.FormData},2002:(e,t,r)=>{"use strict";var n=r(170);e.exports="undefined"!=typeof URLSearchParams?URLSearchParams:n},2012:(e,t,r)=>{"use strict";var n=r(9516),o=["age","authorization","content-length","content-type","etag","expires","from","host","if-modified-since","if-unmodified-since","last-modified","location","max-forwards","proxy-authorization","referer","retry-after","user-agent"];e.exports=function(e){var t,r,i,s={};return e?(n.forEach(e.split("\n"),(function(e){if(i=e.indexOf(":"),t=n.trim(e.slice(0,i)).toLowerCase(),r=n.trim(e.slice(i+1)),t){if(s[t]&&o.indexOf(t)>=0)return;s[t]="set-cookie"===t?(s[t]?s[t]:[]).concat([r]):s[t]?s[t]+", "+r:r}})),s):s}},2505:(e,t,r)=>{e.exports=r(8015)},2881:(e,t,r)=>{"use strict";var n=r(9516),o=r(7412);e.exports=function(e,t,r,i){var s=this||o;return n.forEach(i,(function(n){e=n.call(s,e,t,r)})),e}},3191:(e,t,r)=>{"use strict";var n=r(8563);function o(e){if("function"!=typeof e)throw new TypeError("executor must be a function.");var t;this.promise=new Promise((function(e){t=e}));var r=this;this.promise.then((function(e){if(r._listeners){for(var t=r._listeners.length;t-- >0;)r._listeners[t](e);r._listeners=null}})),this.promise.then=function(e){var t,n=new Promise((function(e){r.subscribe(e),t=e})).then(e);return n.cancel=function(){r.unsubscribe(t)},n},e((function(e,o,i){r.reason||(r.reason=new n(e,o,i),t(r.reason))}))}o.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},o.prototype.subscribe=function(e){this.reason?e(this.reason):this._listeners?this._listeners.push(e):this._listeners=[e]},o.prototype.unsubscribe=function(e){if(this._listeners){var t=this._listeners.indexOf(e);-1!==t&&this._listeners.splice(t,1)}},o.source=function(){var e;return{token:new o((function(t){e=t})),cancel:e}},e.exports=o},3471:(e,t,r)=>{"use strict";var n=r(9516);function o(){this.handlers=[]}o.prototype.use=function(e,t,r){return this.handlers.push({fulfilled:e,rejected:t,synchronous:!!r&&r.synchronous,runWhen:r?r.runWhen:null}),this.handlers.length-1},o.prototype.eject=function(e){this.handlers[e]&&(this.handlers[e]=null)},o.prototype.clear=function(){this.handlers&&(this.handlers=[])},o.prototype.forEach=function(e){n.forEach(this.handlers,(function(t){null!==t&&e(t)}))},e.exports=o},3864:e=>{"use strict";e.exports=function(e){return!(!e||!e.__CANCEL__)}},3948:(e,t,r)=>{"use strict";var n=r(9516);e.exports=n.isStandardBrowserEnv()?{write:function(e,t,r,o,i,s){var a=[];a.push(e+"="+encodeURIComponent(t)),n.isNumber(r)&&a.push("expires="+new Date(r).toGMTString()),n.isString(o)&&a.push("path="+o),n.isString(i)&&a.push("domain="+i),!0===s&&a.push("secure"),document.cookie=a.join("; ")},read:function(e){var t=document.cookie.match(new RegExp("(^|;\\s*)("+e+")=([^;]*)"));return t?decodeURIComponent(t[3]):null},remove:function(e){this.write(e,"",Date.now()-864e5)}}:{write:function(){},read:function(){return null},remove:function(){}}},4202:(e,t,r)=>{"use strict";var n=r(9516);e.exports=n.isStandardBrowserEnv()?function(){var e,t=/(msie|trident)/i.test(navigator.userAgent),r=document.createElement("a");function o(e){var n=e;return t&&(r.setAttribute("href",n),n=r.href),r.setAttribute("href",n),{href:r.href,protocol:r.protocol?r.protocol.replace(/:$/,""):"",host:r.host,search:r.search?r.search.replace(/^\?/,""):"",hash:r.hash?r.hash.replace(/^#/,""):"",hostname:r.hostname,port:r.port,pathname:"/"===r.pathname.charAt(0)?r.pathname:"/"+r.pathname}}return e=o(window.location.href),function(t){var r=n.isString(t)?o(t):t;return r.protocol===e.protocol&&r.host===e.host}}():function(){return!0}},4298:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e){function t(e,r,o,i){var s=e[i++];if("__proto__"===s)return!0;var a=Number.isFinite(+s),u=i>=e.length;return s=!s&&n.isArray(o)?o.length:s,u?(n.hasOwnProperty(o,s)?o[s]=[o[s],r]:o[s]=r,!a):(o[s]&&n.isObject(o[s])||(o[s]=[]),t(e,r,o[s],i)&&n.isArray(o[s])&&(o[s]=function(e){var t,r,n={},o=Object.keys(e),i=o.length;for(t=0;t{"use strict";var n=r(9516),o=r(2881),i=r(3864),s=r(7412),a=r(8563),u=r(7018);function c(e){if(e.cancelToken&&e.cancelToken.throwIfRequested(),e.signal&&e.signal.aborted)throw new a}e.exports=function(e){return c(e),e.headers=e.headers||{},e.data=o.call(e,e.data,e.headers,null,e.transformRequest),u(e.headers,"Accept"),u(e.headers,"Content-Type"),e.headers=n.merge(e.headers.common||{},e.headers[e.method]||{},e.headers),n.forEach(["delete","get","head","post","put","patch","common"],(function(t){delete e.headers[t]})),(e.adapter||s.adapter)(e).then((function(t){return c(e),t.data=o.call(e,t.data,t.headers,t.status,e.transformResponse),t}),(function(t){return i(t)||(c(e),t&&t.response&&(t.response.data=o.call(e,t.response.data,t.response.headers,t.response.status,e.transformResponse))),Promise.reject(t)}))}},4680:e=>{"use strict";e.exports=function(e,t){return t?e.replace(/\/?\/$/,"")+"/"+t.replace(/^\/+/,""):e}},4841:(e,t,r)=>{"use strict";var n=r(9641).version,o=r(5845),i={};["object","boolean","number","function","string","symbol"].forEach((function(e,t){i[e]=function(r){return typeof r===e||"a"+(t<1?"n ":" ")+e}}));var s={};i.transitional=function(e,t,r){function i(e,t){return"[Axios v"+n+"] Transitional option '"+e+"'"+t+(r?". "+r:"")}return function(r,n,a){if(!1===e)throw new o(i(n," has been removed"+(t?" in "+t:"")),o.ERR_DEPRECATED);return t&&!s[n]&&(s[n]=!0,console.warn(i(n," has been deprecated since v"+t+" and will be removed in the near future"))),!e||e(r,n,a)}},e.exports={assertOptions:function(e,t,r){if("object"!=typeof e)throw new o("options must be an object",o.ERR_BAD_OPTION_VALUE);for(var n=Object.keys(e),i=n.length;i-- >0;){var s=n[i],a=t[s];if(a){var u=e[s],c=void 0===u||a(u,s,e);if(!0!==c)throw new o("option "+s+" must be "+c,o.ERR_BAD_OPTION_VALUE)}else if(!0!==r)throw new o("Unknown option "+s,o.ERR_BAD_OPTION)}},validators:i}},4896:e=>{"use strict";e.exports={silentJSONParsing:!0,forcedJSONParsing:!0,clarifyTimeoutError:!1}},5019:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e){return n.isObject(e)&&!0===e.isAxiosError}},5155:(e,t,r)=>{"use strict";var n=r(9516),o=r(9106),i=r(3471),s=r(4490),a=r(5343),u=r(9615),c=r(4841),f=c.validators;function l(e){this.defaults=e,this.interceptors={request:new i,response:new i}}l.prototype.request=function(e,t){"string"==typeof e?(t=t||{}).url=e:t=e||{},(t=a(this.defaults,t)).method?t.method=t.method.toLowerCase():this.defaults.method?t.method=this.defaults.method.toLowerCase():t.method="get";var r=t.transitional;void 0!==r&&c.assertOptions(r,{silentJSONParsing:f.transitional(f.boolean),forcedJSONParsing:f.transitional(f.boolean),clarifyTimeoutError:f.transitional(f.boolean)},!1);var o=t.paramsSerializer;null!=o&&(n.isFunction(o)?t.paramsSerializer={serialize:o}:c.assertOptions(o,{encode:f.function,serialize:f.function},!0));var i=[],u=!0;this.interceptors.request.forEach((function(e){"function"==typeof e.runWhen&&!1===e.runWhen(t)||(u=u&&e.synchronous,i.unshift(e.fulfilled,e.rejected))}));var l,d=[];if(this.interceptors.response.forEach((function(e){d.push(e.fulfilled,e.rejected)})),!u){var p=[s,void 0];for(Array.prototype.unshift.apply(p,i),p=p.concat(d),l=Promise.resolve(t);p.length;)l=l.then(p.shift(),p.shift());return l}for(var h=t;i.length;){var m=i.shift(),y=i.shift();try{h=m(h)}catch(e){y(e);break}}try{l=s(h)}catch(e){return Promise.reject(e)}for(;d.length;)l=l.then(d.shift(),d.shift());return l},l.prototype.getUri=function(e){e=a(this.defaults,e);var t=u(e.baseURL,e.url,e.allowAbsoluteUrls);return o(t,e.params,e.paramsSerializer)},n.forEach(["delete","get","head","options"],(function(e){l.prototype[e]=function(t,r){return this.request(a(r||{},{method:e,url:t,data:(r||{}).data}))}})),n.forEach(["post","put","patch"],(function(e){function t(t){return function(r,n,o){return this.request(a(o||{},{method:e,headers:t?{"Content-Type":"multipart/form-data"}:{},url:r,data:n}))}}l.prototype[e]=t(),l.prototype[e+"Form"]=t(!0)})),e.exports=l},5343:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e,t){t=t||{};var r={};function o(e,t){return n.isPlainObject(e)&&n.isPlainObject(t)?n.merge(e,t):n.isEmptyObject(t)?n.merge({},e):n.isPlainObject(t)?n.merge({},t):n.isArray(t)?t.slice():t}function i(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:o(void 0,e[r]):o(e[r],t[r])}function s(e){if(!n.isUndefined(t[e]))return o(void 0,t[e])}function a(r){return n.isUndefined(t[r])?n.isUndefined(e[r])?void 0:o(void 0,e[r]):o(void 0,t[r])}function u(r){return r in t?o(e[r],t[r]):r in e?o(void 0,e[r]):void 0}var c={url:s,method:s,data:s,baseURL:a,transformRequest:a,transformResponse:a,paramsSerializer:a,timeout:a,timeoutMessage:a,withCredentials:a,withXSRFToken:a,adapter:a,responseType:a,xsrfCookieName:a,xsrfHeaderName:a,onUploadProgress:a,onDownloadProgress:a,decompress:a,maxContentLength:a,maxBodyLength:a,beforeRedirect:a,transport:a,httpAgent:a,httpsAgent:a,cancelToken:a,socketPath:a,responseEncoding:a,validateStatus:u};return n.forEach(Object.keys(e).concat(Object.keys(t)),(function(e){var t=c[e]||i,o=t(e);n.isUndefined(o)&&t!==u||(r[e]=o)})),r}},5592:(e,t,r)=>{"use strict";var n=r(9516),o=r(7522),i=r(3948),s=r(9106),a=r(9615),u=r(2012),c=r(4202),f=r(4896),l=r(5845),d=r(8563),p=r(5656),h=r(5721);e.exports=function(e){return new Promise((function(t,r){var m,y=e.data,v=e.headers,w=e.responseType,E=e.withXSRFToken;function b(){e.cancelToken&&e.cancelToken.unsubscribe(m),e.signal&&e.signal.removeEventListener("abort",m)}n.isFormData(y)&&n.isStandardBrowserEnv()&&delete v["Content-Type"];var g=new XMLHttpRequest;if(e.auth){var R=e.auth.username||"",T=e.auth.password?unescape(encodeURIComponent(e.auth.password)):"";v.Authorization="Basic "+btoa(R+":"+T)}var _=a(e.baseURL,e.url,e.allowAbsoluteUrls);function x(){if(g){var n="getAllResponseHeaders"in g?u(g.getAllResponseHeaders()):null,i={data:w&&"text"!==w&&"json"!==w?g.response:g.responseText,status:g.status,statusText:g.statusText,headers:n,config:e,request:g};o((function(e){t(e),b()}),(function(e){r(e),b()}),i),g=null}}if(g.open(e.method.toUpperCase(),s(_,e.params,e.paramsSerializer),!0),g.timeout=e.timeout,"onloadend"in g?g.onloadend=x:g.onreadystatechange=function(){g&&4===g.readyState&&(0!==g.status||g.responseURL&&0===g.responseURL.indexOf("file:"))&&setTimeout(x)},g.onabort=function(){g&&(r(new l("Request aborted",l.ECONNABORTED,e,g)),g=null)},g.onerror=function(){r(new l("Network Error",l.ERR_NETWORK,e,g)),g=null},g.ontimeout=function(){var t=e.timeout?"timeout of "+e.timeout+"ms exceeded":"timeout exceeded",n=e.transitional||f;e.timeoutErrorMessage&&(t=e.timeoutErrorMessage),r(new l(t,n.clarifyTimeoutError?l.ETIMEDOUT:l.ECONNABORTED,e,g)),g=null},n.isStandardBrowserEnv()&&(E&&n.isFunction(E)&&(E=E(e)),E||!1!==E&&c(_))){var O=e.xsrfHeaderName&&e.xsrfCookieName&&i.read(e.xsrfCookieName);O&&(v[e.xsrfHeaderName]=O)}"setRequestHeader"in g&&n.forEach(v,(function(e,t){void 0===y&&"content-type"===t.toLowerCase()?delete v[t]:g.setRequestHeader(t,e)})),n.isUndefined(e.withCredentials)||(g.withCredentials=!!e.withCredentials),w&&"json"!==w&&(g.responseType=e.responseType),"function"==typeof e.onDownloadProgress&&g.addEventListener("progress",e.onDownloadProgress),"function"==typeof e.onUploadProgress&&g.upload&&g.upload.addEventListener("progress",e.onUploadProgress),(e.cancelToken||e.signal)&&(m=function(t){g&&(r(!t||t.type?new d(null,e,g):t),g.abort(),g=null)},e.cancelToken&&e.cancelToken.subscribe(m),e.signal&&(e.signal.aborted?m():e.signal.addEventListener("abort",m))),y||!1===y||0===y||""===y||(y=null);var A=p(_);A&&-1===h.protocols.indexOf(A)?r(new l("Unsupported protocol "+A+":",l.ERR_BAD_REQUEST,e)):g.send(y)}))}},5656:e=>{"use strict";e.exports=function(e){var t=/^([-+\w]{1,25})(:?\/\/|:)/.exec(e);return t&&t[1]||""}},5721:(e,t,r)=>{"use strict";e.exports=r(9490)},5845:(e,t,r)=>{"use strict";var n=r(9516);function o(e,t,r,n,o){Error.call(this),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=(new Error).stack,this.message=e,this.name="AxiosError",t&&(this.code=t),r&&(this.config=r),n&&(this.request=n),o&&(this.response=o)}n.inherits(o,Error,{toJSON:function(){return{message:this.message,name:this.name,description:this.description,number:this.number,fileName:this.fileName,lineNumber:this.lineNumber,columnNumber:this.columnNumber,stack:this.stack,config:this.config,code:this.code,status:this.response&&this.response.status?this.response.status:null}}});var i=o.prototype,s={};["ERR_BAD_OPTION_VALUE","ERR_BAD_OPTION","ECONNABORTED","ETIMEDOUT","ERR_NETWORK","ERR_FR_TOO_MANY_REDIRECTS","ERR_DEPRECATED","ERR_BAD_RESPONSE","ERR_BAD_REQUEST","ERR_CANCELED","ERR_NOT_SUPPORT","ERR_INVALID_URL"].forEach((function(e){s[e]={value:e}})),Object.defineProperties(o,s),Object.defineProperty(i,"isAxiosError",{value:!0}),o.from=function(e,t,r,s,a,u){var c=Object.create(i);return n.toFlatObject(e,c,(function(e){return e!==Error.prototype})),o.call(c,e.message,t,r,s,a),c.cause=e,c.name=e.name,u&&Object.assign(c,u),c},e.exports=o},6069:(e,t,r)=>{"use strict";var n=r(9516),o=r(6440),i=r(5721);e.exports=function(e,t){return o(e,new i.classes.URLSearchParams,Object.assign({visitor:function(e,t,r,o){return i.isNode&&n.isBuffer(e)?(this.append(t,e.toString("base64")),!1):o.defaultVisitor.apply(this,arguments)}},t))}},6440:(e,t,r)=>{"use strict";var n=r(9516),o=r(5845),i=r(786);function s(e){return n.isPlainObject(e)||n.isArray(e)}function a(e){return n.endsWith(e,"[]")?e.slice(0,-2):e}function u(e,t,r){return e?e.concat(t).map((function(e,t){return e=a(e),!r&&t?"["+e+"]":e})).join(r?".":""):t}var c=n.toFlatObject(n,{},null,(function(e){return/^is[A-Z]/.test(e)}));e.exports=function(e,t,r){if(!n.isObject(e))throw new TypeError("target must be an object");t=t||new(i||FormData);var f,l=(r=n.toFlatObject(r,{metaTokens:!0,dots:!1,indexes:!1},!1,(function(e,t){return!n.isUndefined(t[e])}))).metaTokens,d=r.visitor||v,p=r.dots,h=r.indexes,m=(r.Blob||"undefined"!=typeof Blob&&Blob)&&((f=t)&&n.isFunction(f.append)&&"FormData"===f[Symbol.toStringTag]&&f[Symbol.iterator]);if(!n.isFunction(d))throw new TypeError("visitor must be a function");function y(e){if(null===e)return"";if(n.isDate(e))return e.toISOString();if(!m&&n.isBlob(e))throw new o("Blob is not supported. Use a Buffer instead.");return n.isArrayBuffer(e)||n.isTypedArray(e)?m&&"function"==typeof Blob?new Blob([e]):Buffer.from(e):e}function v(e,r,o){var i=e;if(e&&!o&&"object"==typeof e)if(n.endsWith(r,"{}"))r=l?r:r.slice(0,-2),e=JSON.stringify(e);else if(n.isArray(e)&&function(e){return n.isArray(e)&&!e.some(s)}(e)||n.isFileList(e)||n.endsWith(r,"[]")&&(i=n.toArray(e)))return r=a(r),i.forEach((function(e,o){!n.isUndefined(e)&&null!==e&&t.append(!0===h?u([r],o,p):null===h?r:r+"[]",y(e))})),!1;return!!s(e)||(t.append(u(o,r,p),y(e)),!1)}var w=[],E=Object.assign(c,{defaultVisitor:v,convertValue:y,isVisitable:s});if(!n.isObject(e))throw new TypeError("data must be an object");return function e(r,o){if(!n.isUndefined(r)){if(-1!==w.indexOf(r))throw Error("Circular reference detected in "+o.join("."));w.push(r),n.forEach(r,(function(r,i){!0===(!(n.isUndefined(r)||null===r)&&d.call(t,r,n.isString(i)?i.trim():i,o,E))&&e(r,o?o.concat(i):[i])})),w.pop()}}(e),t}},7018:(e,t,r)=>{"use strict";var n=r(9516);e.exports=function(e,t){n.forEach(e,(function(r,n){n!==t&&n.toUpperCase()===t.toUpperCase()&&(e[t]=r,delete e[n])}))}},7412:(e,t,r)=>{"use strict";var n=r(9516),o=r(7018),i=r(5845),s=r(4896),a=r(6440),u=r(6069),c=r(5721),f=r(4298),l={"Content-Type":"application/x-www-form-urlencoded"};function d(e,t){!n.isUndefined(e)&&n.isUndefined(e["Content-Type"])&&(e["Content-Type"]=t)}var p,h={transitional:s,adapter:(("undefined"!=typeof XMLHttpRequest||"undefined"!=typeof process&&"[object process]"===Object.prototype.toString.call(process))&&(p=r(5592)),p),transformRequest:[function(e,t){o(t,"Accept"),o(t,"Content-Type");var r,i=t&&t["Content-Type"]||"",s=i.indexOf("application/json")>-1,c=n.isObject(e);if(c&&n.isHTMLForm(e)&&(e=new FormData(e)),n.isFormData(e))return s?JSON.stringify(f(e)):e;if(n.isArrayBuffer(e)||n.isBuffer(e)||n.isStream(e)||n.isFile(e)||n.isBlob(e))return e;if(n.isArrayBufferView(e))return e.buffer;if(n.isURLSearchParams(e))return d(t,"application/x-www-form-urlencoded;charset=utf-8"),e.toString();if(c){if(-1!==i.indexOf("application/x-www-form-urlencoded"))return u(e,this.formSerializer).toString();if((r=n.isFileList(e))||i.indexOf("multipart/form-data")>-1){var l=this.env&&this.env.FormData;return a(r?{"files[]":e}:e,l&&new l,this.formSerializer)}}return c||s?(d(t,"application/json"),function(e,t,r){if(n.isString(e))try{return(t||JSON.parse)(e),n.trim(e)}catch(e){if("SyntaxError"!==e.name)throw e}return(r||JSON.stringify)(e)}(e)):e}],transformResponse:[function(e){var t=this.transitional||h.transitional,r=t&&t.forcedJSONParsing,o="json"===this.responseType;if(e&&n.isString(e)&&(r&&!this.responseType||o)){var s=!(t&&t.silentJSONParsing)&&o;try{return JSON.parse(e)}catch(e){if(s){if("SyntaxError"===e.name)throw i.from(e,i.ERR_BAD_RESPONSE,this,null,this.response);throw e}}}return e}],timeout:0,xsrfCookieName:"XSRF-TOKEN",xsrfHeaderName:"X-XSRF-TOKEN",maxContentLength:-1,maxBodyLength:-1,env:{FormData:c.classes.FormData,Blob:c.classes.Blob},validateStatus:function(e){return e>=200&&e<300},headers:{common:{Accept:"application/json, text/plain, */*"}}};n.forEach(["delete","get","head"],(function(e){h.headers[e]={}})),n.forEach(["post","put","patch"],(function(e){h.headers[e]=n.merge(l)})),e.exports=h},7522:(e,t,r)=>{"use strict";var n=r(5845);e.exports=function(e,t,r){var o=r.config.validateStatus;r.status&&o&&!o(r.status)?t(new n("Request failed with status code "+r.status,[n.ERR_BAD_REQUEST,n.ERR_BAD_RESPONSE][Math.floor(r.status/100)-4],r.config,r.request,r)):e(r)}},7980:e=>{"use strict";e.exports=function(e){return function(t){return e.apply(null,t)}}},8015:(e,t,r)=>{"use strict";var n=r(9516),o=r(9012),i=r(5155),s=r(5343),a=r(7412),u=r(4298);var c=function e(t){var r=new i(t),a=o(i.prototype.request,r);return n.extend(a,i.prototype,r),n.extend(a,r),a.create=function(r){return e(s(t,r))},a}(a);c.Axios=i,c.CanceledError=r(8563),c.CancelToken=r(3191),c.isCancel=r(3864),c.VERSION=r(9641).version,c.toFormData=r(6440),c.AxiosError=r(5845),c.Cancel=c.CanceledError,c.all=function(e){return Promise.all(e)},c.spread=r(7980),c.isAxiosError=r(5019),c.formToJSON=function(e){return u(n.isHTMLForm(e)?new FormData(e):e)},e.exports=c,e.exports.default=c},8563:(e,t,r)=>{"use strict";var n=r(5845);function o(e,t,r){n.call(this,null==e?"canceled":e,n.ERR_CANCELED,t,r),this.name="CanceledError"}r(9516).inherits(o,n,{__CANCEL__:!0}),e.exports=o},9012:e=>{"use strict";e.exports=function(e,t){return function(){return e.apply(t,arguments)}}},9106:(e,t,r)=>{"use strict";var n=r(9516),o=r(170);function i(e){return encodeURIComponent(e).replace(/%3A/gi,":").replace(/%24/g,"$").replace(/%2C/gi,",").replace(/%20/g,"+").replace(/%5B/gi,"[").replace(/%5D/gi,"]")}e.exports=function(e,t,r){if(!t)return e;var s=e.indexOf("#");-1!==s&&(e=e.slice(0,s));var a,u=r&&r.encode||i,c=r&&r.serialize;return(a=c?c(t,r):n.isURLSearchParams(t)?t.toString():new o(t,r).toString(u))&&(e+=(-1===e.indexOf("?")?"?":"&")+a),e}},9137:e=>{"use strict";e.exports=function(e){return/^([a-z][a-z\d+\-.]*:)?\/\//i.test(e)}},9490:(e,t,r)=>{"use strict";e.exports={isBrowser:!0,classes:{URLSearchParams:r(2002),FormData:r(243),Blob},protocols:["http","https","file","blob","url","data"]}},9516:(e,t,r)=>{"use strict";var n,o=r(9012),i=Object.prototype.toString,s=(n=Object.create(null),function(e){var t=i.call(e);return n[t]||(n[t]=t.slice(8,-1).toLowerCase())});function a(e){return e=e.toLowerCase(),function(t){return s(t)===e}}function u(e){return Array.isArray(e)}function c(e){return void 0===e}var f=a("ArrayBuffer");function l(e){return"number"==typeof e}function d(e){return null!==e&&"object"==typeof e}function p(e){if("object"!==s(e))return!1;var t=Object.getPrototypeOf(e);return null===t||t===Object.prototype}var h=a("Date"),m=a("File"),y=a("Blob"),v=a("FileList");function w(e){return"[object Function]"===i.call(e)}var E=a("URLSearchParams");function b(e,t){if(null!=e)if("object"!=typeof e&&(e=[e]),u(e))for(var r=0,n=e.length;r0;)s=o[i],n&&!n(s,e,t)||a[s]||(t[s]=e[s],a[s]=!0);e=!1!==r&&Object.getPrototypeOf(e)}while(e&&(!r||r(e,t))&&e!==Object.prototype);return t},kindOf:s,kindOfTest:a,endsWith:function(e,t,r){e=String(e),(void 0===r||r>e.length)&&(r=e.length),r-=t.length;var n=e.indexOf(t,r);return-1!==n&&n===r},toArray:function(e){if(!e)return null;if(u(e))return e;var t=e.length;if(!l(t))return null;for(var r=new Array(t);t-- >0;)r[t]=e[t];return r},isTypedArray:R,isFileList:v,forEachEntry:function(e,t){for(var r,n=(e&&e[Symbol.iterator]).call(e);(r=n.next())&&!r.done;){var o=r.value;t.call(e,o[0],o[1])}},matchAll:function(e,t){for(var r,n=[];null!==(r=e.exec(t));)n.push(r);return n},isHTMLForm:_,hasOwnProperty:x}},9615:(e,t,r)=>{"use strict";var n=r(9137),o=r(4680);e.exports=function(e,t,r){var i=!n(t);return e&&(i||!1===r)?o(e,t):t}},9641:e=>{e.exports={version:"0.30.0"}},9797:e=>{var t="undefined"!=typeof process&&process.pid?process.pid.toString(36):"";function r(){var e=Date.now(),t=r.last||e;return r.last=e>t?e:t+1}e.exports=e.exports.default=function(e,n){return(e||"")+""+t+r().toString(36)+(n||"")},e.exports.process=function(e,n){return(e||"")+t+r().toString(36)+(n||"")},e.exports.time=function(e,t){return(e||"")+r().toString(36)+(t||"")}}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var i=t[n]={exports:{}};return e[n](i,i.exports,r),i.exports}r.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return r.d(t,{a:t}),t},r.d=(e,t)=>{for(var n in t)r.o(t,n)&&!r.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},r.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),(()=>{"use strict";var e=r(2505),t=r.n(e),n=function(e,t,r,n){return new(r||(r=Promise))((function(o,i){function s(e){try{u(n.next(e))}catch(e){i(e)}}function a(e){try{u(n.throw(e))}catch(e){i(e)}}function u(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(s,a)}u((n=n.apply(e,t||[])).next())}))},o=function(e,t){var r,n,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(r)throw new TypeError("Generator is already executing.");for(;s;)try{if(r=1,n&&(o=2&i[0]?n.return:i[0]?n.throw||((o=n.return)&&o.call(n),0):n.next)&&!(o=o.call(n,i[1])).done)return o;switch(n=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,n=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]=500&&e.response.status<=599)}function L(e){return!!e.config&&(j(e)&&-1!==I.indexOf(e.config.method))}function F(e){return P(e)||L(e)}var k={retries:3,retryCondition:F,retryDelay:function(){return 0},shouldResetTimeout:!1,onRetry:()=>{}};function B(e,t){var r=function(e,t){return C(C(C({},k),t),e[U])}(e,t);return r.retryCount=r.retryCount||0,e[U]=r,r}function M(){return(M=A((function*(e,t){var{retries:r,retryCondition:n}=e,o=e.retryCount(B(e,t).lastRequestTime=Date.now(),e))),n=e.interceptors.response.use(null,function(){var r=A((function*(r){var{config:n}=r;if(!n)return Promise.reject(r);var o=B(n,t);if(yield function(e,t){return M.apply(this,arguments)}(o,r)){o.retryCount+=1;var{retryDelay:i,shouldResetTimeout:s,onRetry:a}=o,u=i(o.retryCount,r);if(function(e,t){e.defaults.agent===t.agent&&delete t.agent,e.defaults.httpAgent===t.httpAgent&&delete t.httpAgent,e.defaults.httpsAgent===t.httpsAgent&&delete t.httpsAgent}(e,n),!s&&n.timeout&&o.lastRequestTime){var c=Date.now()-o.lastRequestTime,f=n.timeout-c-u;if(f<=0)return Promise.reject(r);n.timeout=f}return n.transformRequest=[e=>e],yield a(o.retryCount,r,n),new Promise((t=>setTimeout((()=>t(e(n))),u)))}return Promise.reject(r)}));return function(e){return r.apply(this,arguments)}}());return{requestInterceptorId:r,responseInterceptorId:n}}q.isNetworkError=P,q.isSafeRequestError=function(e){return!!e.config&&(j(e)&&-1!==D.indexOf(e.config.method))},q.isIdempotentRequestError=L,q.isNetworkOrIdempotentRequestError=F,q.exponentialDelay=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:100,r=Math.pow(2,e)*t;return r+.2*r*Math.random()},q.isRetryableError=j;const V=function(e){return"undefined"!=typeof window&&window.location.href.includes("cartPERF=true")&&(e.headers["x-aem-load-test"]="true"),e};const H=function(e){return e.xMSVectorId&&(e.headers["X-MS-Vector-Id"]=e.xMSVectorId),e};const X=function(e){var t=h.getCookie("ucs_sid");return t&&(e.headers["x-ms-ucs-sid"]=t),e};var G=function(){function e(){this._client=t().create()}return e.prototype.addCV=function(){return this._client.interceptors.request.use(d),this},e.prototype.addAuthentication=function(){return this._client.interceptors.request.use(u),this},e.prototype.addXAuthMUID=function(){return this._client.interceptors.request.use(m),this},e.prototype.addRiskSessionId=function(){return this._client.interceptors.request.use(v),this},e.prototype.addFirstName=function(){return this._client.interceptors.request.use(w),this},e.prototype.addTentOptions=function(){return this._client.interceptors.request.use(_),this},e.prototype.addXAEMLoadTest=function(){return this._client.interceptors.request.use(V),this},e.prototype.addXMSVectorId=function(){return this._client.interceptors.request.use(H),this},e.prototype.addUcsSid=function(){return this._client.interceptors.request.use(X),this},e.prototype.addRetry=function(e,t){return q(this._client,{retries:e,retryDelay:function(e,r){return t}}),this},e.prototype.build=function(){return this._client},e.RETRIES_COUNT_DEFAULT=3,e.RETRY_TIMEOUT_DEFAULT=50,e}(),J=(new G).addCV().addAuthentication().addXAuthMUID().addRiskSessionId().addRetry(G.RETRIES_COUNT_DEFAULT,G.RETRY_TIMEOUT_DEFAULT).addFirstName().addTentOptions().addXAEMLoadTest().addXMSVectorId().addUcsSid().build(),z=function(){function e(){var e=document.querySelector(".userInfo-config"),t=document.querySelector(".meControl-configInfo"),r=this.isV2Enabled(e),n=this.getUrl(e),o=this.getTimeout(e),i=this.isMeControlEnable(t),s={timeout:o,withCredentials:!0};if(null!==e&&null!==n&&i)if(this._isConfigured=!0,r){var a=document.querySelector(".userInfo-config").getAttribute("data-v2url"),u={timeout:o,withCredentials:!0,params:{ru:"".concat(location.hostname).concat(location.pathname).concat(location.search)}};this._userInfo=(new G).addCV().addRetry(G.RETRIES_COUNT_DEFAULT,G.RETRY_TIMEOUT_DEFAULT).build().get(a,u).then((function(e){return e.data})).catch((function(e){if(!e.code&&!e.response){var t=document.querySelector(".meControl-configInfo").getAttribute("data-signinurl");return location.href="".concat(t,"?ru=").concat(window.location.href),null}}))}else this._userInfo=(new G).addCV().addRetry(G.RETRIES_COUNT_DEFAULT,G.RETRY_TIMEOUT_DEFAULT).build().get(n,s).then((function(e){return e.data}));else this._isConfigured=!1,this._userInfo=Promise.resolve(null)}return e.prototype.getUserInfo=function(){return this._userInfo},e.prototype.getTimeout=function(e){return null==e?null:parseInt(e.getAttribute("data-userinfotimeoutms"))},e.prototype.getUrl=function(e){return null==e?null:e.getAttribute("data-userinfourl")},e.prototype.isV2Enabled=function(e){return null!=e&&"true"===e.getAttribute("data-isV2enabled")},e.prototype.isMeControlEnable=function(e){return null!=e&&"true"===e.getAttribute("data-isenabled")},e.prototype.isConfigured=function(){return this._isConfigured},e.getInstance=function(){return e._instance||(e._instance=new e),e._instance},e}();window.MsHttpClient=window.MsHttpClient||{},window.MsHttpClient.defaultInstance=J,window.MsHttpClient.Builder=G,window.UserInfoSingleton=z})()})(); //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpZW50bGlicy9jbGllbnRsaWItaHR0cGNsaWVudC9qcy9odHRwY2xpZW50Lm1pbi5qcyIsIm1hcHBpbmdzIjoid0NBRUEsSUFBSUEsRUFBYSxFQUFRLE1BRXpCLFNBQVNDLEVBQU9DLEdBQ2QsSUFBSUMsRUFBVSxDQUNaLElBQUssTUFDTCxJQUFLLE1BQ0wsSUFBSyxNQUNMLElBQUssTUFDTCxJQUFLLE1BQ0wsTUFBTyxJQUNQLE1BQU8sTUFFVCxPQUFPQyxtQkFBbUJGLEdBQUtHLFFBQVEsc0JBQXNCLFNBQWtCQyxHQUM3RSxPQUFPSCxFQUFRRyxFQUNqQixHQUNGLENBRUEsU0FBU0MsRUFBcUJDLEVBQVFDLEdBQ3BDQyxLQUFLQyxPQUFTLEdBRWRILEdBQVVSLEVBQVdRLEVBQVFFLEtBQU1ELEVBQ3JDLENBRUEsSUFBSUcsRUFBWUwsRUFBcUJLLFVBRXJDQSxFQUFVQyxPQUFTLFNBQWdCQyxFQUFNQyxHQUN2Q0wsS0FBS0MsT0FBT0ssS0FBSyxDQUFDRixFQUFNQyxHQUMxQixFQUVBSCxFQUFVSyxTQUFXLFNBQWtCQyxHQUNyQyxJQUFJQyxFQUFVRCxFQUFVLFNBQVNILEdBQy9CLE9BQU9HLEVBQVFFLEtBQUtWLEtBQU1LLEVBQU9kLEVBQ25DLEVBQUlBLEVBRUosT0FBT1MsS0FBS0MsT0FBT1UsS0FBSSxTQUFjQyxHQUNuQyxPQUFPSCxFQUFRRyxFQUFLLElBQU0sSUFBTUgsRUFBUUcsRUFBSyxHQUMvQyxHQUFHLElBQUlDLEtBQUssSUFDZCxFQUVBQyxFQUFPQyxRQUFVbEIsQyx1QkN2Q2pCaUIsRUFBT0MsUUFBVUMsUSxnQkNEakJGLEVBQU9DLFFBQVUsRUFBakIsSyx3QkNDQSxNQUFNRSxFQUFXLElBQUlDLElBQUksQ0FDeEIsWUFDQSxjQUdBLDRCQUNBLG9CQUNBLG1DQUNBLGtDQUNBLHFDQUNBLHlCQUNBLHdCQUNBLHFCQUNBLG1CQUNBLG9CQUNBLGtCQUNBLGlDQUNBLGdDQUNBLGlDQUNBLGlDQUNBLGFBQ0EsOEJBQ0EsNEJBQ0Esb0NBQ0Esa0NB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YUFDaEIsRUFFYyxFQUFBYSxZQUFkLFdBSUksT0FIS0MsRUFBa0JDLFlBQ25CRCxFQUFrQkMsVUFBWSxJQUFJRCxHQUUvQkEsRUFBa0JDLFNBQzdCLEVBQ0osRUFoR0EsR0NUQXRrQixPQUFPdWtCLGFBQWV2a0IsT0FBT3VrQixjQUFnQixDQUFDLEVBQzlDdmtCLE9BQU91a0IsYUFBYUMsZ0JBQWtCN0IsRUFDdEMzaUIsT0FBT3VrQixhQUFhRSxRQUFVN0IsRUFDOUI1aUIsT0FBT3FrQixrQkFBb0JBLEMiLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvQXhpb3NVUkxTZWFyY2hQYXJhbXMuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9wbGF0Zm9ybS9icm93c2VyL2NsYXNzZXMvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9lbnYvY2xhc3Nlcy9Gb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvaXMtcmV0cnktYWxsb3dlZC9pbmRleC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvZm9ybS1kYXRhL2xpYi9icm93c2VyLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vYnJvd3Nlci9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvcGFyc2VIZWFkZXJzLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9pbmRleC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvdHJhbnNmb3JtRGF0YS5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxUb2tlbi5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvSW50ZXJjZXB0b3JNYW5hZ2VyLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY2FuY2VsL2lzQ2FuY2VsLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9jb29raWVzLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9pc1VSTFNhbWVPcmlnaW4uanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2Zvcm1EYXRhVG9KU09OLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvY29yZS9kaXNwYXRjaFJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2NvbWJpbmVVUkxzLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy92YWxpZGF0b3IuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy90cmFuc2l0aW9uYWwuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL2lzQXhpb3NFcnJvci5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvQXhpb3MuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL21lcmdlQ29uZmlnLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvYWRhcHRlcnMveGhyLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9wYXJzZVByb3RvY29sLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvcGxhdGZvcm0vaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9jb3JlL0F4aW9zRXJyb3IuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvVVJMRW5jb2RlZEZvcm0uanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL3RvRm9ybURhdGEuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9kZWZhdWx0cy9pbmRleC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvc2V0dGxlLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9zcHJlYWQuanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi9heGlvcy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NhbmNlbC9DYW5jZWxlZEVycm9yLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9iaW5kLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy9heGlvcy9saWIvaGVscGVycy9idWlsZFVSTC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL3BsYXRmb3JtL2Jyb3dzZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vbm9kZV9tb2R1bGVzL2F4aW9zL2xpYi91dGlscy5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2NvcmUvYnVpbGRGdWxsUGF0aC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MvbGliL2Vudi9kYXRhLmpzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL25vZGVfbW9kdWxlcy91bmlxaWQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwL3dlYnBhY2svYm9vdHN0cmFwIiwid2VicGFjazovL3JlYWN0LWFwcC93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL3JlYWN0LWFwcC93ZWJwYWNrL3J1bnRpbWUvaGFzT3duUHJvcGVydHkgc2hvcnRoYW5kIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvYXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvQ29tcGFjdFRpY2tldEhlYWRlckludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvY3YvTXNDVkhhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvTXNDVkhlYWRlckludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaGFuZGxlcnMvQ29va2llSGFuZGxlci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvY29tcG9uZW50cy9Db25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvWEF1dGhNVUlESW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy91dGlscy9jb21tb25VdGlscy50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9SaXNrU2Vzc2lvbklER2VuZXJhdG9ySW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3IudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9oYW5kbGVycy9UZW50T3B0aW9uc0hhbmRsZXIudHMiLCJ3ZWJwYWNrOi8vcmVhY3QtYXBwLy4vc3JjL3JlYWN0LWluamVjdG9ycy9pbnRlcmNlcHRvcnMvVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9ub2RlX21vZHVsZXMvYXhpb3MtcmV0cnkvbGliL2VzbS9pbmRleC5qcyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9YQUVNTG9hZFRlc3RJbnRlcmNlcHRvci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2ludGVyY2VwdG9ycy9YTVNWZWN0b3JJZEludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaW50ZXJjZXB0b3JzL1hNU1Vjc0Nvb2tpZUludGVyY2VwdG9yLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy9yZWFjdC1pbmplY3RvcnMvaHR0cENsaWVudC9IdHRwQ2xpZW50QnVpbGRlci50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL2h0dHBDbGllbnQvSHR0cENsaWVudC50cyIsIndlYnBhY2s6Ly9yZWFjdC1hcHAvLi9zcmMvcmVhY3QtaW5qZWN0b3JzL3V0aWxzL1VzZXJJbmZvU2luZ2xldG9uLnRzIiwid2VicGFjazovL3JlYWN0LWFwcC8uL3NyYy93ZWJjb21wb25lbnRzL2h0dHAtY2xpZW50LmpzIl0sInNvdXJjZXNDb250ZW50IjpbIid1c2Ugc3RyaWN0JztcblxudmFyIHRvRm9ybURhdGEgPSByZXF1aXJlKCcuL3RvRm9ybURhdGEnKTtcblxuZnVuY3Rpb24gZW5jb2RlKHN0cikge1xuICB2YXIgY2hhck1hcCA9IHtcbiAgICAnISc6ICclMjEnLFxuICAgIFwiJ1wiOiAnJTI3JyxcbiAgICAnKCc6ICclMjgnLFxuICAgICcpJzogJyUyOScsXG4gICAgJ34nOiAnJTdFJyxcbiAgICAnJTIwJzogJysnLFxuICAgICclMDAnOiAnXFx4MDAnXG4gIH07XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bISdcXChcXCl+XXwlMjB8JTAwL2csIGZ1bmN0aW9uIHJlcGxhY2VyKG1hdGNoKSB7XG4gICAgcmV0dXJuIGNoYXJNYXBbbWF0Y2hdO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gQXhpb3NVUkxTZWFyY2hQYXJhbXMocGFyYW1zLCBvcHRpb25zKSB7XG4gIHRoaXMuX3BhaXJzID0gW107XG5cbiAgcGFyYW1zICYmIHRvRm9ybURhdGEocGFyYW1zLCB0aGlzLCBvcHRpb25zKTtcbn1cblxudmFyIHByb3RvdHlwZSA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZTtcblxucHJvdG90eXBlLmFwcGVuZCA9IGZ1bmN0aW9uIGFwcGVuZChuYW1lLCB2YWx1ZSkge1xuICB0aGlzLl9wYWlycy5wdXNoKFtuYW1lLCB2YWx1ZV0pO1xufTtcblxucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmcoZW5jb2Rlcikge1xuICB2YXIgX2VuY29kZSA9IGVuY29kZXIgPyBmdW5jdGlvbih2YWx1ZSkge1xuICAgIHJldHVybiBlbmNvZGVyLmNhbGwodGhpcywgdmFsdWUsIGVuY29kZSk7XG4gIH0gOiBlbmNvZGU7XG5cbiAgcmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbiBlYWNoKHBhaXIpIHtcbiAgICByZXR1cm4gX2VuY29kZShwYWlyWzBdKSArICc9JyArIF9lbmNvZGUocGFpclsxXSk7XG4gIH0sICcnKS5qb2luKCcmJyk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zVVJMU2VhcmNoUGFyYW1zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEZvcm1EYXRhO1xuIiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHN0cmljdFxubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCdmb3JtLWRhdGEnKTtcbiIsIid1c2Ugc3RyaWN0JztcblxuY29uc3QgZGVueUxpc3QgPSBuZXcgU2V0KFtcblx0J0VOT1RGT1VORCcsXG5cdCdFTkVUVU5SRUFDSCcsXG5cblx0Ly8gU1NMIGVycm9ycyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2ZjOGUzZTJjZGM1MjE5NzgzNTFkZTI1NzAzMGRiMDA3NmQ3OWUwYWIvc3JjL2NyeXB0by9jcnlwdG9fY29tbW9uLmNjI0wzMDEtTDMyOFxuXHQnVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVCcsXG5cdCdVTkFCTEVfVE9fR0VUX0NSTCcsXG5cdCdVTkFCTEVfVE9fREVDUllQVF9DRVJUX1NJR05BVFVSRScsXG5cdCdVTkFCTEVfVE9fREVDUllQVF9DUkxfU0lHTkFUVVJFJyxcblx0J1VOQUJMRV9UT19ERUNPREVfSVNTVUVSX1BVQkxJQ19LRVknLFxuXHQnQ0VSVF9TSUdOQVRVUkVfRkFJTFVSRScsXG5cdCdDUkxfU0lHTkFUVVJFX0ZBSUxVUkUnLFxuXHQnQ0VSVF9OT1RfWUVUX1ZBTElEJyxcblx0J0NFUlRfSEFTX0VYUElSRUQnLFxuXHQnQ1JMX05PVF9ZRVRfVkFMSUQnLFxuXHQnQ1JMX0hBU19FWFBJUkVEJyxcblx0J0VSUk9SX0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRCcsXG5cdCdFUlJPUl9JTl9DRVJUX05PVF9BRlRFUl9GSUVMRCcsXG5cdCdFUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklFTEQnLFxuXHQnRVJST1JfSU5fQ1JMX05FWFRfVVBEQVRFX0ZJRUxEJyxcblx0J09VVF9PRl9NRU0nLFxuXHQnREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUJyxcblx0J1NFTEZfU0lHTkVEX0NFUlRfSU5fQ0hBSU4nLFxuXHQnVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVF9MT0NBTExZJyxcblx0J1VOQUJMRV9UT19WRVJJRllfTEVBRl9TSUdOQVRVUkUnLFxuXHQnQ0VSVF9DSEFJTl9UT09fTE9ORycsXG5cdCdDRVJUX1JFVk9LRUQnLFxuXHQnSU5WQUxJRF9DQScsXG5cdCdQQVRIX0xFTkdUSF9FWENFRURFRCcsXG5cdCdJTlZBTElEX1BVUlBPU0UnLFxuXHQnQ0VSVF9VTlRSVVNURUQnLFxuXHQnQ0VSVF9SRUpFQ1RFRCcsXG5cdCdIT1NUTkFNRV9NSVNNQVRDSCdcbl0pO1xuXG4vLyBUT0RPOiBVc2UgYGVycm9yPy5jb2RlYCB3aGVuIHRhcmdldGluZyBOb2RlLmpzIDE0XG5tb2R1bGUuZXhwb3J0cyA9IGVycm9yID0+ICFkZW55TGlzdC5oYXMoZXJyb3IgJiYgZXJyb3IuY29kZSk7XG4iLCIndXNlIHN0cmljdCc7XG5cbi8qIGVzbGludC1lbnYgYnJvd3NlciAqL1xubW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygc2VsZiA9PT0gJ29iamVjdCcgPyBzZWxmLkZvcm1EYXRhIDogd2luZG93LkZvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NVUkxTZWFyY2hQYXJhbXMgPSByZXF1aXJlKCcuLi8uLi8uLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gdHlwZW9mIFVSTFNlYXJjaFBhcmFtcyAhPT0gJ3VuZGVmaW5lZCcgPyBVUkxTZWFyY2hQYXJhbXMgOiBBeGlvc1VSTFNlYXJjaFBhcmFtcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xuXG4vLyBIZWFkZXJzIHdob3NlIGR1cGxpY2F0ZXMgYXJlIGlnbm9yZWQgYnkgbm9kZVxuLy8gYy5mLiBodHRwczovL25vZGVqcy5vcmcvYXBpL2h0dHAuaHRtbCNodHRwX21lc3NhZ2VfaGVhZGVyc1xudmFyIGlnbm9yZUR1cGxpY2F0ZU9mID0gW1xuICAnYWdlJywgJ2F1dGhvcml6YXRpb24nLCAnY29udGVudC1sZW5ndGgnLCAnY29udGVudC10eXBlJywgJ2V0YWcnLFxuICAnZXhwaXJlcycsICdmcm9tJywgJ2hvc3QnLCAnaWYtbW9kaWZpZWQtc2luY2UnLCAnaWYtdW5tb2RpZmllZC1zaW5jZScsXG4gICdsYXN0LW1vZGlmaWVkJywgJ2xvY2F0aW9uJywgJ21heC1mb3J3YXJkcycsICdwcm94eS1hdXRob3JpemF0aW9uJyxcbiAgJ3JlZmVyZXInLCAncmV0cnktYWZ0ZXInLCAndXNlci1hZ2VudCdcbl07XG5cbi8qKlxuICogUGFyc2UgaGVhZGVycyBpbnRvIGFuIG9iamVjdFxuICpcbiAqIGBgYFxuICogRGF0ZTogV2VkLCAyNyBBdWcgMjAxNCAwODo1ODo0OSBHTVRcbiAqIENvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvblxuICogQ29ubmVjdGlvbjoga2VlcC1hbGl2ZVxuICogVHJhbnNmZXItRW5jb2Rpbmc6IGNodW5rZWRcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBoZWFkZXJzIEhlYWRlcnMgbmVlZGluZyB0byBiZSBwYXJzZWRcbiAqIEByZXR1cm5zIHtPYmplY3R9IEhlYWRlcnMgcGFyc2VkIGludG8gYW4gb2JqZWN0XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gcGFyc2VIZWFkZXJzKGhlYWRlcnMpIHtcbiAgdmFyIHBhcnNlZCA9IHt9O1xuICB2YXIga2V5O1xuICB2YXIgdmFsO1xuICB2YXIgaTtcblxuICBpZiAoIWhlYWRlcnMpIHsgcmV0dXJuIHBhcnNlZDsgfVxuXG4gIHV0aWxzLmZvckVhY2goaGVhZGVycy5zcGxpdCgnXFxuJyksIGZ1bmN0aW9uIHBhcnNlcihsaW5lKSB7XG4gICAgaSA9IGxpbmUuaW5kZXhPZignOicpO1xuICAgIGtleSA9IHV0aWxzLnRyaW0obGluZS5zbGljZSgwLCBpKSkudG9Mb3dlckNhc2UoKTtcbiAgICB2YWwgPSB1dGlscy50cmltKGxpbmUuc2xpY2UoaSArIDEpKTtcblxuICAgIGlmIChrZXkpIHtcbiAgICAgIGlmIChwYXJzZWRba2V5XSAmJiBpZ25vcmVEdXBsaWNhdGVPZi5pbmRleE9mKGtleSkgPj0gMCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBpZiAoa2V5ID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSAocGFyc2VkW2tleV0gPyBwYXJzZWRba2V5XSA6IFtdKS5jb25jYXQoW3ZhbF0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyc2VkW2tleV0gPSBwYXJzZWRba2V5XSA/IHBhcnNlZFtrZXldICsgJywgJyArIHZhbCA6IHZhbDtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBwYXJzZWQ7XG59O1xuIiwibW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2xpYi9heGlvcycpOyIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcblxuLyoqXG4gKiBUcmFuc2Zvcm0gdGhlIGRhdGEgZm9yIGEgcmVxdWVzdCBvciBhIHJlc3BvbnNlXG4gKlxuICogQHBhcmFtIHtPYmplY3R8U3RyaW5nfSBkYXRhIFRoZSBkYXRhIHRvIGJlIHRyYW5zZm9ybWVkXG4gKiBAcGFyYW0ge0FycmF5fSBoZWFkZXJzIFRoZSBoZWFkZXJzIGZvciB0aGUgcmVxdWVzdCBvciByZXNwb25zZVxuICogQHBhcmFtIHtOdW1iZXJ9IHN0YXR1cyBIVFRQIHN0YXR1cyBjb2RlXG4gKiBAcGFyYW0ge0FycmF5fEZ1bmN0aW9ufSBmbnMgQSBzaW5nbGUgZnVuY3Rpb24gb3IgQXJyYXkgb2YgZnVuY3Rpb25zXG4gKiBAcmV0dXJucyB7Kn0gVGhlIHJlc3VsdGluZyB0cmFuc2Zvcm1lZCBkYXRhXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdHJhbnNmb3JtRGF0YShkYXRhLCBoZWFkZXJzLCBzdGF0dXMsIGZucykge1xuICB2YXIgY29udGV4dCA9IHRoaXMgfHwgZGVmYXVsdHM7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICB1dGlscy5mb3JFYWNoKGZucywgZnVuY3Rpb24gdHJhbnNmb3JtKGZuKSB7XG4gICAgZGF0YSA9IGZuLmNhbGwoY29udGV4dCwgZGF0YSwgaGVhZGVycywgc3RhdHVzKTtcbiAgfSk7XG5cbiAgcmV0dXJuIGRhdGE7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4vQ2FuY2VsZWRFcnJvcicpO1xuXG4vKipcbiAqIEEgYENhbmNlbFRva2VuYCBpcyBhbiBvYmplY3QgdGhhdCBjYW4gYmUgdXNlZCB0byByZXF1ZXN0IGNhbmNlbGxhdGlvbiBvZiBhbiBvcGVyYXRpb24uXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBleGVjdXRvciBUaGUgZXhlY3V0b3IgZnVuY3Rpb24uXG4gKi9cbmZ1bmN0aW9uIENhbmNlbFRva2VuKGV4ZWN1dG9yKSB7XG4gIGlmICh0eXBlb2YgZXhlY3V0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uJyk7XG4gIH1cblxuICB2YXIgcmVzb2x2ZVByb21pc2U7XG5cbiAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24gcHJvbWlzZUV4ZWN1dG9yKHJlc29sdmUpIHtcbiAgICByZXNvbHZlUHJvbWlzZSA9IHJlc29sdmU7XG4gIH0pO1xuXG4gIHZhciB0b2tlbiA9IHRoaXM7XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgdGhpcy5wcm9taXNlLnRoZW4oZnVuY3Rpb24oY2FuY2VsKSB7XG4gICAgaWYgKCF0b2tlbi5fbGlzdGVuZXJzKSByZXR1cm47XG5cbiAgICB2YXIgaSA9IHRva2VuLl9saXN0ZW5lcnMubGVuZ3RoO1xuXG4gICAgd2hpbGUgKGktLSA+IDApIHtcbiAgICAgIHRva2VuLl9saXN0ZW5lcnNbaV0oY2FuY2VsKTtcbiAgICB9XG4gICAgdG9rZW4uX2xpc3RlbmVycyA9IG51bGw7XG4gIH0pO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHRoaXMucHJvbWlzZS50aGVuID0gZnVuY3Rpb24ob25mdWxmaWxsZWQpIHtcbiAgICB2YXIgX3Jlc29sdmU7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbiAgICB2YXIgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUpIHtcbiAgICAgIHRva2VuLnN1YnNjcmliZShyZXNvbHZlKTtcbiAgICAgIF9yZXNvbHZlID0gcmVzb2x2ZTtcbiAgICB9KS50aGVuKG9uZnVsZmlsbGVkKTtcblxuICAgIHByb21pc2UuY2FuY2VsID0gZnVuY3Rpb24gcmVqZWN0KCkge1xuICAgICAgdG9rZW4udW5zdWJzY3JpYmUoX3Jlc29sdmUpO1xuICAgIH07XG5cbiAgICByZXR1cm4gcHJvbWlzZTtcbiAgfTtcblxuICBleGVjdXRvcihmdW5jdGlvbiBjYW5jZWwobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KSB7XG4gICAgaWYgKHRva2VuLnJlYXNvbikge1xuICAgICAgLy8gQ2FuY2VsbGF0aW9uIGhhcyBhbHJlYWR5IGJlZW4gcmVxdWVzdGVkXG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdG9rZW4ucmVhc29uID0gbmV3IENhbmNlbGVkRXJyb3IobWVzc2FnZSwgY29uZmlnLCByZXF1ZXN0KTtcbiAgICByZXNvbHZlUHJvbWlzZSh0b2tlbi5yZWFzb24pO1xuICB9KTtcbn1cblxuLyoqXG4gKiBUaHJvd3MgYSBgQ2FuY2VsZWRFcnJvcmAgaWYgY2FuY2VsbGF0aW9uIGhhcyBiZWVuIHJlcXVlc3RlZC5cbiAqL1xuQ2FuY2VsVG9rZW4ucHJvdG90eXBlLnRocm93SWZSZXF1ZXN0ZWQgPSBmdW5jdGlvbiB0aHJvd0lmUmVxdWVzdGVkKCkge1xuICBpZiAodGhpcy5yZWFzb24pIHtcbiAgICB0aHJvdyB0aGlzLnJlYXNvbjtcbiAgfVxufTtcblxuLyoqXG4gKiBTdWJzY3JpYmUgdG8gdGhlIGNhbmNlbCBzaWduYWxcbiAqL1xuXG5DYW5jZWxUb2tlbi5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24gc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gIGlmICh0aGlzLnJlYXNvbikge1xuICAgIGxpc3RlbmVyKHRoaXMucmVhc29uKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAodGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgdGhpcy5fbGlzdGVuZXJzLnB1c2gobGlzdGVuZXIpO1xuICB9IGVsc2Uge1xuICAgIHRoaXMuX2xpc3RlbmVycyA9IFtsaXN0ZW5lcl07XG4gIH1cbn07XG5cbi8qKlxuICogVW5zdWJzY3JpYmUgZnJvbSB0aGUgY2FuY2VsIHNpZ25hbFxuICovXG5cbkNhbmNlbFRva2VuLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uIHVuc3Vic2NyaWJlKGxpc3RlbmVyKSB7XG4gIGlmICghdGhpcy5fbGlzdGVuZXJzKSB7XG4gICAgcmV0dXJuO1xuICB9XG4gIHZhciBpbmRleCA9IHRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGxpc3RlbmVyKTtcbiAgaWYgKGluZGV4ICE9PSAtMSkge1xuICAgIHRoaXMuX2xpc3RlbmVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICB9XG59O1xuXG4vKipcbiAqIFJldHVybnMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgYSBuZXcgYENhbmNlbFRva2VuYCBhbmQgYSBmdW5jdGlvbiB0aGF0LCB3aGVuIGNhbGxlZCxcbiAqIGNhbmNlbHMgdGhlIGBDYW5jZWxUb2tlbmAuXG4gKi9cbkNhbmNlbFRva2VuLnNvdXJjZSA9IGZ1bmN0aW9uIHNvdXJjZSgpIHtcbiAgdmFyIGNhbmNlbDtcbiAgdmFyIHRva2VuID0gbmV3IENhbmNlbFRva2VuKGZ1bmN0aW9uIGV4ZWN1dG9yKGMpIHtcbiAgICBjYW5jZWwgPSBjO1xuICB9KTtcbiAgcmV0dXJuIHtcbiAgICB0b2tlbjogdG9rZW4sXG4gICAgY2FuY2VsOiBjYW5jZWxcbiAgfTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gQ2FuY2VsVG9rZW47XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuZnVuY3Rpb24gSW50ZXJjZXB0b3JNYW5hZ2VyKCkge1xuICB0aGlzLmhhbmRsZXJzID0gW107XG59XG5cbi8qKlxuICogQWRkIGEgbmV3IGludGVyY2VwdG9yIHRvIHRoZSBzdGFja1xuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZ1bGZpbGxlZCBUaGUgZnVuY3Rpb24gdG8gaGFuZGxlIGB0aGVuYCBmb3IgYSBgUHJvbWlzZWBcbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdGVkIFRoZSBmdW5jdGlvbiB0byBoYW5kbGUgYHJlamVjdGAgZm9yIGEgYFByb21pc2VgXG4gKlxuICogQHJldHVybiB7TnVtYmVyfSBBbiBJRCB1c2VkIHRvIHJlbW92ZSBpbnRlcmNlcHRvciBsYXRlclxuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLnVzZSA9IGZ1bmN0aW9uIHVzZShmdWxmaWxsZWQsIHJlamVjdGVkLCBvcHRpb25zKSB7XG4gIHRoaXMuaGFuZGxlcnMucHVzaCh7XG4gICAgZnVsZmlsbGVkOiBmdWxmaWxsZWQsXG4gICAgcmVqZWN0ZWQ6IHJlamVjdGVkLFxuICAgIHN5bmNocm9ub3VzOiBvcHRpb25zID8gb3B0aW9ucy5zeW5jaHJvbm91cyA6IGZhbHNlLFxuICAgIHJ1bldoZW46IG9wdGlvbnMgPyBvcHRpb25zLnJ1bldoZW4gOiBudWxsXG4gIH0pO1xuICByZXR1cm4gdGhpcy5oYW5kbGVycy5sZW5ndGggLSAxO1xufTtcblxuLyoqXG4gKiBSZW1vdmUgYW4gaW50ZXJjZXB0b3IgZnJvbSB0aGUgc3RhY2tcbiAqXG4gKiBAcGFyYW0ge051bWJlcn0gaWQgVGhlIElEIHRoYXQgd2FzIHJldHVybmVkIGJ5IGB1c2VgXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZWplY3QgPSBmdW5jdGlvbiBlamVjdChpZCkge1xuICBpZiAodGhpcy5oYW5kbGVyc1tpZF0pIHtcbiAgICB0aGlzLmhhbmRsZXJzW2lkXSA9IG51bGw7XG4gIH1cbn07XG5cbi8qKlxuICogQ2xlYXIgYWxsIGludGVyY2VwdG9ycyBmcm9tIHRoZSBzdGFja1xuICovXG5JbnRlcmNlcHRvck1hbmFnZXIucHJvdG90eXBlLmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoKSB7XG4gIGlmICh0aGlzLmhhbmRsZXJzKSB7XG4gICAgdGhpcy5oYW5kbGVycyA9IFtdO1xuICB9XG59O1xuXG4vKipcbiAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIHJlZ2lzdGVyZWQgaW50ZXJjZXB0b3JzXG4gKlxuICogVGhpcyBtZXRob2QgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3Igc2tpcHBpbmcgb3ZlciBhbnlcbiAqIGludGVyY2VwdG9ycyB0aGF0IG1heSBoYXZlIGJlY29tZSBgbnVsbGAgY2FsbGluZyBgZWplY3RgLlxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBjYWxsIGZvciBlYWNoIGludGVyY2VwdG9yXG4gKi9cbkludGVyY2VwdG9yTWFuYWdlci5wcm90b3R5cGUuZm9yRWFjaCA9IGZ1bmN0aW9uIGZvckVhY2goZm4pIHtcbiAgdXRpbHMuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLCBmdW5jdGlvbiBmb3JFYWNoSGFuZGxlcihoKSB7XG4gICAgaWYgKGggIT09IG51bGwpIHtcbiAgICAgIGZuKGgpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEludGVyY2VwdG9yTWFuYWdlcjtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBpc0NhbmNlbCh2YWx1ZSkge1xuICByZXR1cm4gISEodmFsdWUgJiYgdmFsdWUuX19DQU5DRUxfXyk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gKFxuICB1dGlscy5pc1N0YW5kYXJkQnJvd3NlckVudigpID9cblxuICAvLyBTdGFuZGFyZCBicm93c2VyIGVudnMgc3VwcG9ydCBkb2N1bWVudC5jb29raWVcbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKG5hbWUsIHZhbHVlLCBleHBpcmVzLCBwYXRoLCBkb21haW4sIHNlY3VyZSkge1xuICAgICAgICAgIHZhciBjb29raWUgPSBbXTtcbiAgICAgICAgICBjb29raWUucHVzaChuYW1lICsgJz0nICsgZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKSk7XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNOdW1iZXIoZXhwaXJlcykpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdleHBpcmVzPScgKyBuZXcgRGF0ZShleHBpcmVzKS50b0dNVFN0cmluZygpKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcocGF0aCkpIHtcbiAgICAgICAgICAgIGNvb2tpZS5wdXNoKCdwYXRoPScgKyBwYXRoKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodXRpbHMuaXNTdHJpbmcoZG9tYWluKSkge1xuICAgICAgICAgICAgY29va2llLnB1c2goJ2RvbWFpbj0nICsgZG9tYWluKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoc2VjdXJlID09PSB0cnVlKSB7XG4gICAgICAgICAgICBjb29raWUucHVzaCgnc2VjdXJlJyk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZG9jdW1lbnQuY29va2llID0gY29va2llLmpvaW4oJzsgJyk7XG4gICAgICAgIH0sXG5cbiAgICAgICAgcmVhZDogZnVuY3Rpb24gcmVhZChuYW1lKSB7XG4gICAgICAgICAgdmFyIG1hdGNoID0gZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoJyhefDtcXFxccyopKCcgKyBuYW1lICsgJyk9KFteO10qKScpKTtcbiAgICAgICAgICByZXR1cm4gKG1hdGNoID8gZGVjb2RlVVJJQ29tcG9uZW50KG1hdGNoWzNdKSA6IG51bGwpO1xuICAgICAgICB9LFxuXG4gICAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKG5hbWUpIHtcbiAgICAgICAgICB0aGlzLndyaXRlKG5hbWUsICcnLCBEYXRlLm5vdygpIC0gODY0MDAwMDApO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH0pKCkgOlxuXG4gIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudiAod2ViIHdvcmtlcnMsIHJlYWN0LW5hdGl2ZSkgbGFjayBuZWVkZWQgc3VwcG9ydC5cbiAgICAoZnVuY3Rpb24gbm9uU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgd3JpdGU6IGZ1bmN0aW9uIHdyaXRlKCkge30sXG4gICAgICAgIHJlYWQ6IGZ1bmN0aW9uIHJlYWQoKSB7IHJldHVybiBudWxsOyB9LFxuICAgICAgICByZW1vdmU6IGZ1bmN0aW9uIHJlbW92ZSgpIHt9XG4gICAgICB9O1xuICAgIH0pKClcbik7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxubW9kdWxlLmV4cG9ydHMgPSAoXG4gIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkgP1xuXG4gIC8vIFN0YW5kYXJkIGJyb3dzZXIgZW52cyBoYXZlIGZ1bGwgc3VwcG9ydCBvZiB0aGUgQVBJcyBuZWVkZWQgdG8gdGVzdFxuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IFVSTCBpcyBvZiB0aGUgc2FtZSBvcmlnaW4gYXMgY3VycmVudCBsb2NhdGlvbi5cbiAgICAoZnVuY3Rpb24gc3RhbmRhcmRCcm93c2VyRW52KCkge1xuICAgICAgdmFyIG1zaWUgPSAvKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO1xuICAgICAgdmFyIHVybFBhcnNpbmdOb2RlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO1xuICAgICAgdmFyIG9yaWdpblVSTDtcblxuICAgICAgLyoqXG4gICAgICAqIFBhcnNlIGEgVVJMIHRvIGRpc2NvdmVyIGl0J3MgY29tcG9uZW50c1xuICAgICAgKlxuICAgICAgKiBAcGFyYW0ge1N0cmluZ30gdXJsIFRoZSBVUkwgdG8gYmUgcGFyc2VkXG4gICAgICAqIEByZXR1cm5zIHtPYmplY3R9XG4gICAgICAqL1xuICAgICAgZnVuY3Rpb24gcmVzb2x2ZVVSTCh1cmwpIHtcbiAgICAgICAgdmFyIGhyZWYgPSB1cmw7XG5cbiAgICAgICAgaWYgKG1zaWUpIHtcbiAgICAgICAgICAvLyBJRSBuZWVkcyBhdHRyaWJ1dGUgc2V0IHR3aWNlIHRvIG5vcm1hbGl6ZSBwcm9wZXJ0aWVzXG4gICAgICAgICAgdXJsUGFyc2luZ05vZGUuc2V0QXR0cmlidXRlKCdocmVmJywgaHJlZik7XG4gICAgICAgICAgaHJlZiA9IHVybFBhcnNpbmdOb2RlLmhyZWY7XG4gICAgICAgIH1cblxuICAgICAgICB1cmxQYXJzaW5nTm9kZS5zZXRBdHRyaWJ1dGUoJ2hyZWYnLCBocmVmKTtcblxuICAgICAgICAvLyB1cmxQYXJzaW5nTm9kZSBwcm92aWRlcyB0aGUgVXJsVXRpbHMgaW50ZXJmYWNlIC0gaHR0cDovL3VybC5zcGVjLndoYXR3Zy5vcmcvI3VybHV0aWxzXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgaHJlZjogdXJsUGFyc2luZ05vZGUuaHJlZixcbiAgICAgICAgICBwcm90b2NvbDogdXJsUGFyc2luZ05vZGUucHJvdG9jb2wgPyB1cmxQYXJzaW5nTm9kZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sICcnKSA6ICcnLFxuICAgICAgICAgIGhvc3Q6IHVybFBhcnNpbmdOb2RlLmhvc3QsXG4gICAgICAgICAgc2VhcmNoOiB1cmxQYXJzaW5nTm9kZS5zZWFyY2ggPyB1cmxQYXJzaW5nTm9kZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sICcnKSA6ICcnLFxuICAgICAgICAgIGhhc2g6IHVybFBhcnNpbmdOb2RlLmhhc2ggPyB1cmxQYXJzaW5nTm9kZS5oYXNoLnJlcGxhY2UoL14jLywgJycpIDogJycsXG4gICAgICAgICAgaG9zdG5hbWU6IHVybFBhcnNpbmdOb2RlLmhvc3RuYW1lLFxuICAgICAgICAgIHBvcnQ6IHVybFBhcnNpbmdOb2RlLnBvcnQsXG4gICAgICAgICAgcGF0aG5hbWU6ICh1cmxQYXJzaW5nTm9kZS5wYXRobmFtZS5jaGFyQXQoMCkgPT09ICcvJykgP1xuICAgICAgICAgICAgdXJsUGFyc2luZ05vZGUucGF0aG5hbWUgOlxuICAgICAgICAgICAgJy8nICsgdXJsUGFyc2luZ05vZGUucGF0aG5hbWVcbiAgICAgICAgfTtcbiAgICAgIH1cblxuICAgICAgb3JpZ2luVVJMID0gcmVzb2x2ZVVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG5cbiAgICAgIC8qKlxuICAgICAgKiBEZXRlcm1pbmUgaWYgYSBVUkwgc2hhcmVzIHRoZSBzYW1lIG9yaWdpbiBhcyB0aGUgY3VycmVudCBsb2NhdGlvblxuICAgICAgKlxuICAgICAgKiBAcGFyYW0ge1N0cmluZ30gcmVxdWVzdFVSTCBUaGUgVVJMIHRvIHRlc3RcbiAgICAgICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgVVJMIHNoYXJlcyB0aGUgc2FtZSBvcmlnaW4sIG90aGVyd2lzZSBmYWxzZVxuICAgICAgKi9cbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4ocmVxdWVzdFVSTCkge1xuICAgICAgICB2YXIgcGFyc2VkID0gKHV0aWxzLmlzU3RyaW5nKHJlcXVlc3RVUkwpKSA/IHJlc29sdmVVUkwocmVxdWVzdFVSTCkgOiByZXF1ZXN0VVJMO1xuICAgICAgICByZXR1cm4gKHBhcnNlZC5wcm90b2NvbCA9PT0gb3JpZ2luVVJMLnByb3RvY29sICYmXG4gICAgICAgICAgICBwYXJzZWQuaG9zdCA9PT0gb3JpZ2luVVJMLmhvc3QpO1xuICAgICAgfTtcbiAgICB9KSgpIDpcblxuICAgIC8vIE5vbiBzdGFuZGFyZCBicm93c2VyIGVudnMgKHdlYiB3b3JrZXJzLCByZWFjdC1uYXRpdmUpIGxhY2sgbmVlZGVkIHN1cHBvcnQuXG4gICAgKGZ1bmN0aW9uIG5vblN0YW5kYXJkQnJvd3NlckVudigpIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiBpc1VSTFNhbWVPcmlnaW4oKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfTtcbiAgICB9KSgpXG4pO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5mdW5jdGlvbiBwYXJzZVByb3BQYXRoKG5hbWUpIHtcbiAgLy8gZm9vW3hdW3ldW3pdXG4gIC8vIGZvby54LnkuelxuICAvLyBmb28teC15LXpcbiAgLy8gZm9vIHggeSB6XG4gIHJldHVybiB1dGlscy5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csIG5hbWUpLm1hcChmdW5jdGlvbihtYXRjaCkge1xuICAgIHJldHVybiBtYXRjaFswXSA9PT0gJ1tdJyA/ICcnIDogbWF0Y2hbMV0gfHwgbWF0Y2hbMF07XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBhcnJheVRvT2JqZWN0KGFycikge1xuICB2YXIgb2JqID0ge307XG4gIHZhciBrZXlzID0gT2JqZWN0LmtleXMoYXJyKTtcbiAgdmFyIGk7XG4gIHZhciBsZW4gPSBrZXlzLmxlbmd0aDtcbiAgdmFyIGtleTtcbiAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAga2V5ID0ga2V5c1tpXTtcbiAgICBvYmpba2V5XSA9IGFycltrZXldO1xuICB9XG4gIHJldHVybiBvYmo7XG59XG5cbmZ1bmN0aW9uIGZvcm1EYXRhVG9KU09OKGZvcm1EYXRhKSB7XG4gIGZ1bmN0aW9uIGJ1aWxkUGF0aChwYXRoLCB2YWx1ZSwgdGFyZ2V0LCBpbmRleCkge1xuICAgIHZhciBuYW1lID0gcGF0aFtpbmRleCsrXTtcblxuICAgIGlmIChuYW1lID09PSAnX19wcm90b19fJykgcmV0dXJuIHRydWU7XG5cbiAgICB2YXIgaXNOdW1lcmljS2V5ID0gTnVtYmVyLmlzRmluaXRlKCtuYW1lKTtcbiAgICB2YXIgaXNMYXN0ID0gaW5kZXggPj0gcGF0aC5sZW5ndGg7XG4gICAgbmFtZSA9ICFuYW1lICYmIHV0aWxzLmlzQXJyYXkodGFyZ2V0KSA/IHRhcmdldC5sZW5ndGggOiBuYW1lO1xuXG4gICAgaWYgKGlzTGFzdCkge1xuICAgICAgaWYgKHV0aWxzLmhhc093blByb3BlcnR5KHRhcmdldCwgbmFtZSkpIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gW3RhcmdldFtuYW1lXSwgdmFsdWVdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGFyZ2V0W25hbWVdID0gdmFsdWU7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiAhaXNOdW1lcmljS2V5O1xuICAgIH1cblxuICAgIGlmICghdGFyZ2V0W25hbWVdIHx8ICF1dGlscy5pc09iamVjdCh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBbXTtcbiAgICB9XG5cbiAgICB2YXIgcmVzdWx0ID0gYnVpbGRQYXRoKHBhdGgsIHZhbHVlLCB0YXJnZXRbbmFtZV0sIGluZGV4KTtcblxuICAgIGlmIChyZXN1bHQgJiYgdXRpbHMuaXNBcnJheSh0YXJnZXRbbmFtZV0pKSB7XG4gICAgICB0YXJnZXRbbmFtZV0gPSBhcnJheVRvT2JqZWN0KHRhcmdldFtuYW1lXSk7XG4gICAgfVxuXG4gICAgcmV0dXJuICFpc051bWVyaWNLZXk7XG4gIH1cblxuICBpZiAodXRpbHMuaXNGb3JtRGF0YShmb3JtRGF0YSkgJiYgdXRpbHMuaXNGdW5jdGlvbihmb3JtRGF0YS5lbnRyaWVzKSkge1xuICAgIHZhciBvYmogPSB7fTtcblxuICAgIHV0aWxzLmZvckVhY2hFbnRyeShmb3JtRGF0YSwgZnVuY3Rpb24obmFtZSwgdmFsdWUpIHtcbiAgICAgIGJ1aWxkUGF0aChwYXJzZVByb3BQYXRoKG5hbWUpLCB2YWx1ZSwgb2JqLCAwKTtcbiAgICB9KTtcblxuICAgIHJldHVybiBvYmo7XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmb3JtRGF0YVRvSlNPTjtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIHRyYW5zZm9ybURhdGEgPSByZXF1aXJlKCcuL3RyYW5zZm9ybURhdGEnKTtcbnZhciBpc0NhbmNlbCA9IHJlcXVpcmUoJy4uL2NhbmNlbC9pc0NhbmNlbCcpO1xudmFyIGRlZmF1bHRzID0gcmVxdWlyZSgnLi4vZGVmYXVsdHMnKTtcbnZhciBDYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi4vY2FuY2VsL0NhbmNlbGVkRXJyb3InKTtcbnZhciBub3JtYWxpemVIZWFkZXJOYW1lID0gcmVxdWlyZSgnLi4vaGVscGVycy9ub3JtYWxpemVIZWFkZXJOYW1lJyk7XG5cbi8qKlxuICogVGhyb3dzIGEgYENhbmNlbGVkRXJyb3JgIGlmIGNhbmNlbGxhdGlvbiBoYXMgYmVlbiByZXF1ZXN0ZWQuXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKSB7XG4gIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICBjb25maWcuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5zaWduYWwgJiYgY29uZmlnLnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgdGhyb3cgbmV3IENhbmNlbGVkRXJyb3IoKTtcbiAgfVxufVxuXG4vKipcbiAqIERpc3BhdGNoIGEgcmVxdWVzdCB0byB0aGUgc2VydmVyIHVzaW5nIHRoZSBjb25maWd1cmVkIGFkYXB0ZXIuXG4gKlxuICogQHBhcmFtIHtvYmplY3R9IGNvbmZpZyBUaGUgY29uZmlnIHRoYXQgaXMgdG8gYmUgdXNlZCBmb3IgdGhlIHJlcXVlc3RcbiAqIEByZXR1cm5zIHtQcm9taXNlfSBUaGUgUHJvbWlzZSB0byBiZSBmdWxmaWxsZWRcbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBkaXNwYXRjaFJlcXVlc3QoY29uZmlnKSB7XG4gIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAvLyBFbnN1cmUgaGVhZGVycyBleGlzdFxuICBjb25maWcuaGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzIHx8IHt9O1xuXG4gIC8vIFRyYW5zZm9ybSByZXF1ZXN0IGRhdGFcbiAgY29uZmlnLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgY29uZmlnLFxuICAgIGNvbmZpZy5kYXRhLFxuICAgIGNvbmZpZy5oZWFkZXJzLFxuICAgIG51bGwsXG4gICAgY29uZmlnLnRyYW5zZm9ybVJlcXVlc3RcbiAgKTtcblxuICBub3JtYWxpemVIZWFkZXJOYW1lKGNvbmZpZy5oZWFkZXJzLCAnQWNjZXB0Jyk7XG4gIG5vcm1hbGl6ZUhlYWRlck5hbWUoY29uZmlnLmhlYWRlcnMsICdDb250ZW50LVR5cGUnKTtcblxuICAvLyBGbGF0dGVuIGhlYWRlcnNcbiAgY29uZmlnLmhlYWRlcnMgPSB1dGlscy5tZXJnZShcbiAgICBjb25maWcuaGVhZGVycy5jb21tb24gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLm1ldGhvZF0gfHwge30sXG4gICAgY29uZmlnLmhlYWRlcnNcbiAgKTtcblxuICB1dGlscy5mb3JFYWNoKFxuICAgIFsnZGVsZXRlJywgJ2dldCcsICdoZWFkJywgJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJywgJ2NvbW1vbiddLFxuICAgIGZ1bmN0aW9uIGNsZWFuSGVhZGVyQ29uZmlnKG1ldGhvZCkge1xuICAgICAgZGVsZXRlIGNvbmZpZy5oZWFkZXJzW21ldGhvZF07XG4gICAgfVxuICApO1xuXG4gIHZhciBhZGFwdGVyID0gY29uZmlnLmFkYXB0ZXIgfHwgZGVmYXVsdHMuYWRhcHRlcjtcblxuICByZXR1cm4gYWRhcHRlcihjb25maWcpLnRoZW4oZnVuY3Rpb24gb25BZGFwdGVyUmVzb2x1dGlvbihyZXNwb25zZSkge1xuICAgIHRocm93SWZDYW5jZWxsYXRpb25SZXF1ZXN0ZWQoY29uZmlnKTtcblxuICAgIC8vIFRyYW5zZm9ybSByZXNwb25zZSBkYXRhXG4gICAgcmVzcG9uc2UuZGF0YSA9IHRyYW5zZm9ybURhdGEuY2FsbChcbiAgICAgIGNvbmZpZyxcbiAgICAgIHJlc3BvbnNlLmRhdGEsXG4gICAgICByZXNwb25zZS5oZWFkZXJzLFxuICAgICAgcmVzcG9uc2Uuc3RhdHVzLFxuICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgKTtcblxuICAgIHJldHVybiByZXNwb25zZTtcbiAgfSwgZnVuY3Rpb24gb25BZGFwdGVyUmVqZWN0aW9uKHJlYXNvbikge1xuICAgIGlmICghaXNDYW5jZWwocmVhc29uKSkge1xuICAgICAgdGhyb3dJZkNhbmNlbGxhdGlvblJlcXVlc3RlZChjb25maWcpO1xuXG4gICAgICAvLyBUcmFuc2Zvcm0gcmVzcG9uc2UgZGF0YVxuICAgICAgaWYgKHJlYXNvbiAmJiByZWFzb24ucmVzcG9uc2UpIHtcbiAgICAgICAgcmVhc29uLnJlc3BvbnNlLmRhdGEgPSB0cmFuc2Zvcm1EYXRhLmNhbGwoXG4gICAgICAgICAgY29uZmlnLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5kYXRhLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5oZWFkZXJzLFxuICAgICAgICAgIHJlYXNvbi5yZXNwb25zZS5zdGF0dXMsXG4gICAgICAgICAgY29uZmlnLnRyYW5zZm9ybVJlc3BvbnNlXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KHJlYXNvbik7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IFVSTCBieSBjb21iaW5pbmcgdGhlIHNwZWNpZmllZCBVUkxzXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IGJhc2VVUkwgVGhlIGJhc2UgVVJMXG4gKiBAcGFyYW0ge3N0cmluZ30gcmVsYXRpdmVVUkwgVGhlIHJlbGF0aXZlIFVSTFxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIFVSTFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGNvbWJpbmVVUkxzKGJhc2VVUkwsIHJlbGF0aXZlVVJMKSB7XG4gIHJldHVybiByZWxhdGl2ZVVSTFxuICAgID8gYmFzZVVSTC5yZXBsYWNlKC9cXC8/XFwvJC8sICcnKSArICcvJyArIHJlbGF0aXZlVVJMLnJlcGxhY2UoL15cXC8rLywgJycpXG4gICAgOiBiYXNlVVJMO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIFZFUlNJT04gPSByZXF1aXJlKCcuLi9lbnYvZGF0YScpLnZlcnNpb247XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xuXG52YXIgdmFsaWRhdG9ycyA9IHt9O1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuWydvYmplY3QnLCAnYm9vbGVhbicsICdudW1iZXInLCAnZnVuY3Rpb24nLCAnc3RyaW5nJywgJ3N5bWJvbCddLmZvckVhY2goZnVuY3Rpb24odHlwZSwgaSkge1xuICB2YWxpZGF0b3JzW3R5cGVdID0gZnVuY3Rpb24gdmFsaWRhdG9yKHRoaW5nKSB7XG4gICAgcmV0dXJuIHR5cGVvZiB0aGluZyA9PT0gdHlwZSB8fCAnYScgKyAoaSA8IDEgPyAnbiAnIDogJyAnKSArIHR5cGU7XG4gIH07XG59KTtcblxudmFyIGRlcHJlY2F0ZWRXYXJuaW5ncyA9IHt9O1xuXG4vKipcbiAqIFRyYW5zaXRpb25hbCBvcHRpb24gdmFsaWRhdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufGJvb2xlYW4/fSB2YWxpZGF0b3IgLSBzZXQgdG8gZmFsc2UgaWYgdGhlIHRyYW5zaXRpb25hbCBvcHRpb24gaGFzIGJlZW4gcmVtb3ZlZFxuICogQHBhcmFtIHtzdHJpbmc/fSB2ZXJzaW9uIC0gZGVwcmVjYXRlZCB2ZXJzaW9uIC8gcmVtb3ZlZCBzaW5jZSB2ZXJzaW9uXG4gKiBAcGFyYW0ge3N0cmluZz99IG1lc3NhZ2UgLSBzb21lIG1lc3NhZ2Ugd2l0aCBhZGRpdGlvbmFsIGluZm9cbiAqIEByZXR1cm5zIHtmdW5jdGlvbn1cbiAqL1xudmFsaWRhdG9ycy50cmFuc2l0aW9uYWwgPSBmdW5jdGlvbiB0cmFuc2l0aW9uYWwodmFsaWRhdG9yLCB2ZXJzaW9uLCBtZXNzYWdlKSB7XG4gIGZ1bmN0aW9uIGZvcm1hdE1lc3NhZ2Uob3B0LCBkZXNjKSB7XG4gICAgcmV0dXJuICdbQXhpb3MgdicgKyBWRVJTSU9OICsgJ10gVHJhbnNpdGlvbmFsIG9wdGlvbiBcXCcnICsgb3B0ICsgJ1xcJycgKyBkZXNjICsgKG1lc3NhZ2UgPyAnLiAnICsgbWVzc2FnZSA6ICcnKTtcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih2YWx1ZSwgb3B0LCBvcHRzKSB7XG4gICAgaWYgKHZhbGlkYXRvciA9PT0gZmFsc2UpIHtcbiAgICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKG9wdCwgJyBoYXMgYmVlbiByZW1vdmVkJyArICh2ZXJzaW9uID8gJyBpbiAnICsgdmVyc2lvbiA6ICcnKSksXG4gICAgICAgIEF4aW9zRXJyb3IuRVJSX0RFUFJFQ0FURURcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHZlcnNpb24gJiYgIWRlcHJlY2F0ZWRXYXJuaW5nc1tvcHRdKSB7XG4gICAgICBkZXByZWNhdGVkV2FybmluZ3Nbb3B0XSA9IHRydWU7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29uc29sZVxuICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICBmb3JtYXRNZXNzYWdlKFxuICAgICAgICAgIG9wdCxcbiAgICAgICAgICAnIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdicgKyB2ZXJzaW9uICsgJyBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSdcbiAgICAgICAgKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsaWRhdG9yID8gdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdHMpIDogdHJ1ZTtcbiAgfTtcbn07XG5cbi8qKlxuICogQXNzZXJ0IG9iamVjdCdzIHByb3BlcnRpZXMgdHlwZVxuICogQHBhcmFtIHtvYmplY3R9IG9wdGlvbnNcbiAqIEBwYXJhbSB7b2JqZWN0fSBzY2hlbWFcbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGFsbG93VW5rbm93blxuICovXG5cbmZ1bmN0aW9uIGFzc2VydE9wdGlvbnMob3B0aW9ucywgc2NoZW1hLCBhbGxvd1Vua25vd24pIHtcbiAgaWYgKHR5cGVvZiBvcHRpb25zICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBBeGlvc0Vycm9yKCdvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0JywgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gIH1cbiAgdmFyIGtleXMgPSBPYmplY3Qua2V5cyhvcHRpb25zKTtcbiAgdmFyIGkgPSBrZXlzLmxlbmd0aDtcbiAgd2hpbGUgKGktLSA+IDApIHtcbiAgICB2YXIgb3B0ID0ga2V5c1tpXTtcbiAgICB2YXIgdmFsaWRhdG9yID0gc2NoZW1hW29wdF07XG4gICAgaWYgKHZhbGlkYXRvcikge1xuICAgICAgdmFyIHZhbHVlID0gb3B0aW9uc1tvcHRdO1xuICAgICAgdmFyIHJlc3VsdCA9IHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsaWRhdG9yKHZhbHVlLCBvcHQsIG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkge1xuICAgICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignb3B0aW9uICcgKyBvcHQgKyAnIG11c3QgYmUgJyArIHJlc3VsdCwgQXhpb3NFcnJvci5FUlJfQkFEX09QVElPTl9WQUxVRSk7XG4gICAgICB9XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKGFsbG93VW5rbm93biAhPT0gdHJ1ZSkge1xuICAgICAgdGhyb3cgbmV3IEF4aW9zRXJyb3IoJ1Vua25vd24gb3B0aW9uICcgKyBvcHQsIEF4aW9zRXJyb3IuRVJSX0JBRF9PUFRJT04pO1xuICAgIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgYXNzZXJ0T3B0aW9uczogYXNzZXJ0T3B0aW9ucyxcbiAgdmFsaWRhdG9yczogdmFsaWRhdG9yc1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNpbGVudEpTT05QYXJzaW5nOiB0cnVlLFxuICBmb3JjZWRKU09OUGFyc2luZzogdHJ1ZSxcbiAgY2xhcmlmeVRpbWVvdXRFcnJvcjogZmFsc2Vcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4vLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHBheWxvYWQgaXMgYW4gZXJyb3IgdGhyb3duIGJ5IEF4aW9zXG4gKlxuICogQHBhcmFtIHsqfSBwYXlsb2FkIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgcGF5bG9hZCBpcyBhbiBlcnJvciB0aHJvd24gYnkgQXhpb3MsIG90aGVyd2lzZSBmYWxzZVxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGlzQXhpb3NFcnJvcihwYXlsb2FkKSB7XG4gIHJldHVybiB1dGlscy5pc09iamVjdChwYXlsb2FkKSAmJiAocGF5bG9hZC5pc0F4aW9zRXJyb3IgPT09IHRydWUpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi8uLi91dGlscycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi4vaGVscGVycy9idWlsZFVSTCcpO1xudmFyIEludGVyY2VwdG9yTWFuYWdlciA9IHJlcXVpcmUoJy4vSW50ZXJjZXB0b3JNYW5hZ2VyJyk7XG52YXIgZGlzcGF0Y2hSZXF1ZXN0ID0gcmVxdWlyZSgnLi9kaXNwYXRjaFJlcXVlc3QnKTtcbnZhciBtZXJnZUNvbmZpZyA9IHJlcXVpcmUoJy4vbWVyZ2VDb25maWcnKTtcbnZhciBidWlsZEZ1bGxQYXRoID0gcmVxdWlyZSgnLi9idWlsZEZ1bGxQYXRoJyk7XG52YXIgdmFsaWRhdG9yID0gcmVxdWlyZSgnLi4vaGVscGVycy92YWxpZGF0b3InKTtcblxudmFyIHZhbGlkYXRvcnMgPSB2YWxpZGF0b3IudmFsaWRhdG9ycztcbi8qKlxuICogQ3JlYXRlIGEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGluc3RhbmNlQ29uZmlnIFRoZSBkZWZhdWx0IGNvbmZpZyBmb3IgdGhlIGluc3RhbmNlXG4gKi9cbmZ1bmN0aW9uIEF4aW9zKGluc3RhbmNlQ29uZmlnKSB7XG4gIHRoaXMuZGVmYXVsdHMgPSBpbnN0YW5jZUNvbmZpZztcbiAgdGhpcy5pbnRlcmNlcHRvcnMgPSB7XG4gICAgcmVxdWVzdDogbmV3IEludGVyY2VwdG9yTWFuYWdlcigpLFxuICAgIHJlc3BvbnNlOiBuZXcgSW50ZXJjZXB0b3JNYW5hZ2VyKClcbiAgfTtcbn1cblxuLyoqXG4gKiBEaXNwYXRjaCBhIHJlcXVlc3RcbiAqXG4gKiBAcGFyYW0ge1N0cmluZ3xPYmplY3R9IGNvbmZpZ09yVXJsIFRoZSBjb25maWcgc3BlY2lmaWMgZm9yIHRoaXMgcmVxdWVzdCAobWVyZ2VkIHdpdGggdGhpcy5kZWZhdWx0cylcbiAqIEBwYXJhbSB7P09iamVjdH0gY29uZmlnXG4gKi9cbkF4aW9zLnByb3RvdHlwZS5yZXF1ZXN0ID0gZnVuY3Rpb24gcmVxdWVzdChjb25maWdPclVybCwgY29uZmlnKSB7XG4gIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAvLyBBbGxvdyBmb3IgYXhpb3MoJ2V4YW1wbGUvdXJsJ1ssIGNvbmZpZ10pIGEgbGEgZmV0Y2ggQVBJXG4gIGlmICh0eXBlb2YgY29uZmlnT3JVcmwgPT09ICdzdHJpbmcnKSB7XG4gICAgY29uZmlnID0gY29uZmlnIHx8IHt9O1xuICAgIGNvbmZpZy51cmwgPSBjb25maWdPclVybDtcbiAgfSBlbHNlIHtcbiAgICBjb25maWcgPSBjb25maWdPclVybCB8fCB7fTtcbiAgfVxuXG4gIGNvbmZpZyA9IG1lcmdlQ29uZmlnKHRoaXMuZGVmYXVsdHMsIGNvbmZpZyk7XG5cbiAgLy8gU2V0IGNvbmZpZy5tZXRob2RcbiAgaWYgKGNvbmZpZy5tZXRob2QpIHtcbiAgICBjb25maWcubWV0aG9kID0gY29uZmlnLm1ldGhvZC50b0xvd2VyQ2FzZSgpO1xuICB9IGVsc2UgaWYgKHRoaXMuZGVmYXVsdHMubWV0aG9kKSB7XG4gICAgY29uZmlnLm1ldGhvZCA9IHRoaXMuZGVmYXVsdHMubWV0aG9kLnRvTG93ZXJDYXNlKCk7XG4gIH0gZWxzZSB7XG4gICAgY29uZmlnLm1ldGhvZCA9ICdnZXQnO1xuICB9XG5cbiAgdmFyIHRyYW5zaXRpb25hbCA9IGNvbmZpZy50cmFuc2l0aW9uYWw7XG5cbiAgaWYgKHRyYW5zaXRpb25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdmFsaWRhdG9yLmFzc2VydE9wdGlvbnModHJhbnNpdGlvbmFsLCB7XG4gICAgICBzaWxlbnRKU09OUGFyc2luZzogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKSxcbiAgICAgIGZvcmNlZEpTT05QYXJzaW5nOiB2YWxpZGF0b3JzLnRyYW5zaXRpb25hbCh2YWxpZGF0b3JzLmJvb2xlYW4pLFxuICAgICAgY2xhcmlmeVRpbWVvdXRFcnJvcjogdmFsaWRhdG9ycy50cmFuc2l0aW9uYWwodmFsaWRhdG9ycy5ib29sZWFuKVxuICAgIH0sIGZhbHNlKTtcbiAgfVxuXG4gIHZhciBwYXJhbXNTZXJpYWxpemVyID0gY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXI7XG5cbiAgaWYgKHBhcmFtc1NlcmlhbGl6ZXIgIT0gbnVsbCkge1xuICAgIGlmICh1dGlscy5pc0Z1bmN0aW9uKHBhcmFtc1NlcmlhbGl6ZXIpKSB7XG4gICAgICBjb25maWcucGFyYW1zU2VyaWFsaXplciA9IHtcbiAgICAgICAgc2VyaWFsaXplOiBwYXJhbXNTZXJpYWxpemVyXG4gICAgICB9O1xuICAgIH0gZWxzZSB7XG4gICAgICB2YWxpZGF0b3IuYXNzZXJ0T3B0aW9ucyhwYXJhbXNTZXJpYWxpemVyLCB7XG4gICAgICAgIGVuY29kZTogdmFsaWRhdG9ycy5mdW5jdGlvbixcbiAgICAgICAgc2VyaWFsaXplOiB2YWxpZGF0b3JzLmZ1bmN0aW9uXG4gICAgICB9LCB0cnVlKTtcbiAgICB9XG4gIH1cblxuICAvLyBmaWx0ZXIgb3V0IHNraXBwZWQgaW50ZXJjZXB0b3JzXG4gIHZhciByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbiA9IFtdO1xuICB2YXIgc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzID0gdHJ1ZTtcbiAgdGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uIHVuc2hpZnRSZXF1ZXN0SW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgaWYgKHR5cGVvZiBpbnRlcmNlcHRvci5ydW5XaGVuID09PSAnZnVuY3Rpb24nICYmIGludGVyY2VwdG9yLnJ1bldoZW4oY29uZmlnKSA9PT0gZmFsc2UpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgPSBzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMgJiYgaW50ZXJjZXB0b3Iuc3luY2hyb25vdXM7XG5cbiAgICByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbi51bnNoaWZ0KGludGVyY2VwdG9yLmZ1bGZpbGxlZCwgaW50ZXJjZXB0b3IucmVqZWN0ZWQpO1xuICB9KTtcblxuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluID0gW107XG4gIHRoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24gcHVzaFJlc3BvbnNlSW50ZXJjZXB0b3JzKGludGVyY2VwdG9yKSB7XG4gICAgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnB1c2goaW50ZXJjZXB0b3IuZnVsZmlsbGVkLCBpbnRlcmNlcHRvci5yZWplY3RlZCk7XG4gIH0pO1xuXG4gIHZhciBwcm9taXNlO1xuXG4gIGlmICghc3luY2hyb25vdXNSZXF1ZXN0SW50ZXJjZXB0b3JzKSB7XG4gICAgdmFyIGNoYWluID0gW2Rpc3BhdGNoUmVxdWVzdCwgdW5kZWZpbmVkXTtcblxuICAgIEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGNoYWluLCByZXF1ZXN0SW50ZXJjZXB0b3JDaGFpbik7XG4gICAgY2hhaW4gPSBjaGFpbi5jb25jYXQocmVzcG9uc2VJbnRlcmNlcHRvckNoYWluKTtcblxuICAgIHByb21pc2UgPSBQcm9taXNlLnJlc29sdmUoY29uZmlnKTtcbiAgICB3aGlsZSAoY2hhaW4ubGVuZ3RoKSB7XG4gICAgICBwcm9taXNlID0gcHJvbWlzZS50aGVuKGNoYWluLnNoaWZ0KCksIGNoYWluLnNoaWZ0KCkpO1xuICAgIH1cblxuICAgIHJldHVybiBwcm9taXNlO1xuICB9XG5cblxuICB2YXIgbmV3Q29uZmlnID0gY29uZmlnO1xuICB3aGlsZSAocmVxdWVzdEludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgdmFyIG9uRnVsZmlsbGVkID0gcmVxdWVzdEludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKTtcbiAgICB2YXIgb25SZWplY3RlZCA9IHJlcXVlc3RJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCk7XG4gICAgdHJ5IHtcbiAgICAgIG5ld0NvbmZpZyA9IG9uRnVsZmlsbGVkKG5ld0NvbmZpZyk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIG9uUmVqZWN0ZWQoZXJyb3IpO1xuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgdHJ5IHtcbiAgICBwcm9taXNlID0gZGlzcGF0Y2hSZXF1ZXN0KG5ld0NvbmZpZyk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgfVxuXG4gIHdoaWxlIChyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4ubGVuZ3RoKSB7XG4gICAgcHJvbWlzZSA9IHByb21pc2UudGhlbihyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4uc2hpZnQoKSwgcmVzcG9uc2VJbnRlcmNlcHRvckNoYWluLnNoaWZ0KCkpO1xuICB9XG5cbiAgcmV0dXJuIHByb21pc2U7XG59O1xuXG5BeGlvcy5wcm90b3R5cGUuZ2V0VXJpID0gZnVuY3Rpb24gZ2V0VXJpKGNvbmZpZykge1xuICBjb25maWcgPSBtZXJnZUNvbmZpZyh0aGlzLmRlZmF1bHRzLCBjb25maWcpO1xuICB2YXIgZnVsbFBhdGggPSBidWlsZEZ1bGxQYXRoKGNvbmZpZy5iYXNlVVJMLCBjb25maWcudXJsLCBjb25maWcuYWxsb3dBYnNvbHV0ZVVybHMpO1xuICByZXR1cm4gYnVpbGRVUkwoZnVsbFBhdGgsIGNvbmZpZy5wYXJhbXMsIGNvbmZpZy5wYXJhbXNTZXJpYWxpemVyKTtcbn07XG5cbi8vIFByb3ZpZGUgYWxpYXNlcyBmb3Igc3VwcG9ydGVkIHJlcXVlc3QgbWV0aG9kc1xudXRpbHMuZm9yRWFjaChbJ2RlbGV0ZScsICdnZXQnLCAnaGVhZCcsICdvcHRpb25zJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2ROb0RhdGEobWV0aG9kKSB7XG4gIC8qZXNsaW50IGZ1bmMtbmFtZXM6MCovXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZnVuY3Rpb24odXJsLCBjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KG1lcmdlQ29uZmlnKGNvbmZpZyB8fCB7fSwge1xuICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICB1cmw6IHVybCxcbiAgICAgIGRhdGE6IChjb25maWcgfHwge30pLmRhdGFcbiAgICB9KSk7XG4gIH07XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgLyplc2xpbnQgZnVuYy1uYW1lczowKi9cblxuICBmdW5jdGlvbiBnZW5lcmF0ZUhUVFBNZXRob2QoaXNGb3JtKSB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIGh0dHBNZXRob2QodXJsLCBkYXRhLCBjb25maWcpIHtcbiAgICAgIHJldHVybiB0aGlzLnJlcXVlc3QobWVyZ2VDb25maWcoY29uZmlnIHx8IHt9LCB7XG4gICAgICAgIG1ldGhvZDogbWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiBpc0Zvcm0gPyB7XG4gICAgICAgICAgJ0NvbnRlbnQtVHlwZSc6ICdtdWx0aXBhcnQvZm9ybS1kYXRhJ1xuICAgICAgICB9IDoge30sXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBkYXRhOiBkYXRhXG4gICAgICB9KSk7XG4gICAgfTtcbiAgfVxuXG4gIEF4aW9zLnByb3RvdHlwZVttZXRob2RdID0gZ2VuZXJhdGVIVFRQTWV0aG9kKCk7XG5cbiAgQXhpb3MucHJvdG90eXBlW21ldGhvZCArICdGb3JtJ10gPSBnZW5lcmF0ZUhUVFBNZXRob2QodHJ1ZSk7XG59KTtcblxubW9kdWxlLmV4cG9ydHMgPSBBeGlvcztcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDb25maWctc3BlY2lmaWMgbWVyZ2UtZnVuY3Rpb24gd2hpY2ggY3JlYXRlcyBhIG5ldyBjb25maWctb2JqZWN0XG4gKiBieSBtZXJnaW5nIHR3byBjb25maWd1cmF0aW9uIG9iamVjdHMgdG9nZXRoZXIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGNvbmZpZzFcbiAqIEBwYXJhbSB7T2JqZWN0fSBjb25maWcyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBOZXcgb2JqZWN0IHJlc3VsdGluZyBmcm9tIG1lcmdpbmcgY29uZmlnMiB0byBjb25maWcxXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gbWVyZ2VDb25maWcoY29uZmlnMSwgY29uZmlnMikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgY29uZmlnMiA9IGNvbmZpZzIgfHwge307XG4gIHZhciBjb25maWcgPSB7fTtcblxuICBmdW5jdGlvbiBnZXRNZXJnZWRWYWx1ZSh0YXJnZXQsIHNvdXJjZSkge1xuICAgIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHRhcmdldCkgJiYgdXRpbHMuaXNQbGFpbk9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2UodGFyZ2V0LCBzb3VyY2UpO1xuICAgIH0gZWxzZSBpZiAodXRpbHMuaXNFbXB0eU9iamVjdChzb3VyY2UpKSB7XG4gICAgICByZXR1cm4gdXRpbHMubWVyZ2Uoe30sIHRhcmdldCk7XG4gICAgfSBlbHNlIGlmICh1dGlscy5pc1BsYWluT2JqZWN0KHNvdXJjZSkpIHtcbiAgICAgIHJldHVybiB1dGlscy5tZXJnZSh7fSwgc291cmNlKTtcbiAgICB9IGVsc2UgaWYgKHV0aWxzLmlzQXJyYXkoc291cmNlKSkge1xuICAgICAgcmV0dXJuIHNvdXJjZS5zbGljZSgpO1xuICAgIH1cbiAgICByZXR1cm4gc291cmNlO1xuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGVlcFByb3BlcnRpZXMocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZShjb25maWcxW3Byb3BdLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIHZhbHVlRnJvbUNvbmZpZzIocHJvcCkge1xuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnMltwcm9wXSkpIHtcbiAgICAgIHJldHVybiBnZXRNZXJnZWRWYWx1ZSh1bmRlZmluZWQsIGNvbmZpZzJbcHJvcF0pO1xuICAgIH1cbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBjb25zaXN0ZW50LXJldHVyblxuICBmdW5jdGlvbiBkZWZhdWx0VG9Db25maWcyKHByb3ApIHtcbiAgICBpZiAoIXV0aWxzLmlzVW5kZWZpbmVkKGNvbmZpZzJbcHJvcF0pKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcyW3Byb3BdKTtcbiAgICB9IGVsc2UgaWYgKCF1dGlscy5pc1VuZGVmaW5lZChjb25maWcxW3Byb3BdKSkge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKHVuZGVmaW5lZCwgY29uZmlnMVtwcm9wXSk7XG4gICAgfVxuICB9XG5cbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGNvbnNpc3RlbnQtcmV0dXJuXG4gIGZ1bmN0aW9uIG1lcmdlRGlyZWN0S2V5cyhwcm9wKSB7XG4gICAgaWYgKHByb3AgaW4gY29uZmlnMikge1xuICAgICAgcmV0dXJuIGdldE1lcmdlZFZhbHVlKGNvbmZpZzFbcHJvcF0sIGNvbmZpZzJbcHJvcF0pO1xuICAgIH0gZWxzZSBpZiAocHJvcCBpbiBjb25maWcxKSB7XG4gICAgICByZXR1cm4gZ2V0TWVyZ2VkVmFsdWUodW5kZWZpbmVkLCBjb25maWcxW3Byb3BdKTtcbiAgICB9XG4gIH1cblxuICB2YXIgbWVyZ2VNYXAgPSB7XG4gICAgJ3VybCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ21ldGhvZCc6IHZhbHVlRnJvbUNvbmZpZzIsXG4gICAgJ2RhdGEnOiB2YWx1ZUZyb21Db25maWcyLFxuICAgICdiYXNlVVJMJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndHJhbnNmb3JtUmVxdWVzdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zZm9ybVJlc3BvbnNlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncGFyYW1zU2VyaWFsaXplcic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RpbWVvdXQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd0aW1lb3V0TWVzc2FnZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3dpdGhDcmVkZW50aWFscyc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3dpdGhYU1JGVG9rZW4nOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdhZGFwdGVyJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAncmVzcG9uc2VUeXBlJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAneHNyZkNvb2tpZU5hbWUnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICd4c3JmSGVhZGVyTmFtZSc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ29uVXBsb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdvbkRvd25sb2FkUHJvZ3Jlc3MnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdkZWNvbXByZXNzJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAnbWF4Q29udGVudExlbmd0aCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ21heEJvZHlMZW5ndGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdiZWZvcmVSZWRpcmVjdCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3RyYW5zcG9ydCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBBZ2VudCc6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ2h0dHBzQWdlbnQnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdjYW5jZWxUb2tlbic6IGRlZmF1bHRUb0NvbmZpZzIsXG4gICAgJ3NvY2tldFBhdGgnOiBkZWZhdWx0VG9Db25maWcyLFxuICAgICdyZXNwb25zZUVuY29kaW5nJzogZGVmYXVsdFRvQ29uZmlnMixcbiAgICAndmFsaWRhdGVTdGF0dXMnOiBtZXJnZURpcmVjdEtleXNcbiAgfTtcblxuICB1dGlscy5mb3JFYWNoKE9iamVjdC5rZXlzKGNvbmZpZzEpLmNvbmNhdChPYmplY3Qua2V5cyhjb25maWcyKSksIGZ1bmN0aW9uIGNvbXB1dGVDb25maWdWYWx1ZShwcm9wKSB7XG4gICAgdmFyIG1lcmdlID0gbWVyZ2VNYXBbcHJvcF0gfHwgbWVyZ2VEZWVwUHJvcGVydGllcztcbiAgICB2YXIgY29uZmlnVmFsdWUgPSBtZXJnZShwcm9wKTtcbiAgICAodXRpbHMuaXNVbmRlZmluZWQoY29uZmlnVmFsdWUpICYmIG1lcmdlICE9PSBtZXJnZURpcmVjdEtleXMpIHx8IChjb25maWdbcHJvcF0gPSBjb25maWdWYWx1ZSk7XG4gIH0pO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLy4uL3V0aWxzJyk7XG52YXIgc2V0dGxlID0gcmVxdWlyZSgnLi8uLi9jb3JlL3NldHRsZScpO1xudmFyIGNvb2tpZXMgPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvY29va2llcycpO1xudmFyIGJ1aWxkVVJMID0gcmVxdWlyZSgnLi8uLi9oZWxwZXJzL2J1aWxkVVJMJyk7XG52YXIgYnVpbGRGdWxsUGF0aCA9IHJlcXVpcmUoJy4uL2NvcmUvYnVpbGRGdWxsUGF0aCcpO1xudmFyIHBhcnNlSGVhZGVycyA9IHJlcXVpcmUoJy4vLi4vaGVscGVycy9wYXJzZUhlYWRlcnMnKTtcbnZhciBpc1VSTFNhbWVPcmlnaW4gPSByZXF1aXJlKCcuLy4uL2hlbHBlcnMvaXNVUkxTYW1lT3JpZ2luJyk7XG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSByZXF1aXJlKCcuLi9kZWZhdWx0cy90cmFuc2l0aW9uYWwnKTtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG52YXIgQ2FuY2VsZWRFcnJvciA9IHJlcXVpcmUoJy4uL2NhbmNlbC9DYW5jZWxlZEVycm9yJyk7XG52YXIgcGFyc2VQcm90b2NvbCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvcGFyc2VQcm90b2NvbCcpO1xudmFyIHBsYXRmb3JtID0gcmVxdWlyZSgnLi4vcGxhdGZvcm0nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiB4aHJBZGFwdGVyKGNvbmZpZykge1xuICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gZGlzcGF0Y2hYaHJSZXF1ZXN0KHJlc29sdmUsIHJlamVjdCkge1xuICAgIHZhciByZXF1ZXN0RGF0YSA9IGNvbmZpZy5kYXRhO1xuICAgIHZhciByZXF1ZXN0SGVhZGVycyA9IGNvbmZpZy5oZWFkZXJzO1xuICAgIHZhciByZXNwb25zZVR5cGUgPSBjb25maWcucmVzcG9uc2VUeXBlO1xuICAgIHZhciB3aXRoWFNSRlRva2VuID0gY29uZmlnLndpdGhYU1JGVG9rZW47XG4gICAgdmFyIG9uQ2FuY2VsZWQ7XG4gICAgZnVuY3Rpb24gZG9uZSgpIHtcbiAgICAgIGlmIChjb25maWcuY2FuY2VsVG9rZW4pIHtcbiAgICAgICAgY29uZmlnLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuXG4gICAgICBpZiAoY29uZmlnLnNpZ25hbCkge1xuICAgICAgICBjb25maWcuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0Jywgb25DYW5jZWxlZCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHV0aWxzLmlzRm9ybURhdGEocmVxdWVzdERhdGEpICYmIHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1snQ29udGVudC1UeXBlJ107IC8vIExldCB0aGUgYnJvd3NlciBzZXQgaXRcbiAgICB9XG5cbiAgICB2YXIgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xuXG4gICAgLy8gSFRUUCBiYXNpYyBhdXRoZW50aWNhdGlvblxuICAgIGlmIChjb25maWcuYXV0aCkge1xuICAgICAgdmFyIHVzZXJuYW1lID0gY29uZmlnLmF1dGgudXNlcm5hbWUgfHwgJyc7XG4gICAgICB2YXIgcGFzc3dvcmQgPSBjb25maWcuYXV0aC5wYXNzd29yZCA/IHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChjb25maWcuYXV0aC5wYXNzd29yZCkpIDogJyc7XG4gICAgICByZXF1ZXN0SGVhZGVycy5BdXRob3JpemF0aW9uID0gJ0Jhc2ljICcgKyBidG9hKHVzZXJuYW1lICsgJzonICsgcGFzc3dvcmQpO1xuICAgIH1cblxuICAgIHZhciBmdWxsUGF0aCA9IGJ1aWxkRnVsbFBhdGgoY29uZmlnLmJhc2VVUkwsIGNvbmZpZy51cmwsIGNvbmZpZy5hbGxvd0Fic29sdXRlVXJscyk7XG5cbiAgICByZXF1ZXN0Lm9wZW4oY29uZmlnLm1ldGhvZC50b1VwcGVyQ2FzZSgpLCBidWlsZFVSTChmdWxsUGF0aCwgY29uZmlnLnBhcmFtcywgY29uZmlnLnBhcmFtc1NlcmlhbGl6ZXIpLCB0cnVlKTtcblxuICAgIC8vIFNldCB0aGUgcmVxdWVzdCB0aW1lb3V0IGluIE1TXG4gICAgcmVxdWVzdC50aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQ7XG5cbiAgICBmdW5jdGlvbiBvbmxvYWRlbmQoKSB7XG4gICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgLy8gUHJlcGFyZSB0aGUgcmVzcG9uc2VcbiAgICAgIHZhciByZXNwb25zZUhlYWRlcnMgPSAnZ2V0QWxsUmVzcG9uc2VIZWFkZXJzJyBpbiByZXF1ZXN0ID8gcGFyc2VIZWFkZXJzKHJlcXVlc3QuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpIDogbnVsbDtcbiAgICAgIHZhciByZXNwb25zZURhdGEgPSAhcmVzcG9uc2VUeXBlIHx8IHJlc3BvbnNlVHlwZSA9PT0gJ3RleHQnIHx8ICByZXNwb25zZVR5cGUgPT09ICdqc29uJyA/XG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUZXh0IDogcmVxdWVzdC5yZXNwb25zZTtcbiAgICAgIHZhciByZXNwb25zZSA9IHtcbiAgICAgICAgZGF0YTogcmVzcG9uc2VEYXRhLFxuICAgICAgICBzdGF0dXM6IHJlcXVlc3Quc3RhdHVzLFxuICAgICAgICBzdGF0dXNUZXh0OiByZXF1ZXN0LnN0YXR1c1RleHQsXG4gICAgICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICAgICAgY29uZmlnOiBjb25maWcsXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RcbiAgICAgIH07XG5cbiAgICAgIHNldHRsZShmdW5jdGlvbiBfcmVzb2x2ZSh2YWx1ZSkge1xuICAgICAgICByZXNvbHZlKHZhbHVlKTtcbiAgICAgICAgZG9uZSgpO1xuICAgICAgfSwgZnVuY3Rpb24gX3JlamVjdChlcnIpIHtcbiAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgIGRvbmUoKTtcbiAgICAgIH0sIHJlc3BvbnNlKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfVxuXG4gICAgaWYgKCdvbmxvYWRlbmQnIGluIHJlcXVlc3QpIHtcbiAgICAgIC8vIFVzZSBvbmxvYWRlbmQgaWYgYXZhaWxhYmxlXG4gICAgICByZXF1ZXN0Lm9ubG9hZGVuZCA9IG9ubG9hZGVuZDtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gTGlzdGVuIGZvciByZWFkeSBzdGF0ZSB0byBlbXVsYXRlIG9ubG9hZGVuZFxuICAgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbiBoYW5kbGVMb2FkKCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QgfHwgcmVxdWVzdC5yZWFkeVN0YXRlICE9PSA0KSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhlIHJlcXVlc3QgZXJyb3JlZCBvdXQgYW5kIHdlIGRpZG4ndCBnZXQgYSByZXNwb25zZSwgdGhpcyB3aWxsIGJlXG4gICAgICAgIC8vIGhhbmRsZWQgYnkgb25lcnJvciBpbnN0ZWFkXG4gICAgICAgIC8vIFdpdGggb25lIGV4Y2VwdGlvbjogcmVxdWVzdCB0aGF0IHVzaW5nIGZpbGU6IHByb3RvY29sLCBtb3N0IGJyb3dzZXJzXG4gICAgICAgIC8vIHdpbGwgcmV0dXJuIHN0YXR1cyBhcyAwIGV2ZW4gdGhvdWdoIGl0J3MgYSBzdWNjZXNzZnVsIHJlcXVlc3RcbiAgICAgICAgaWYgKHJlcXVlc3Quc3RhdHVzID09PSAwICYmICEocmVxdWVzdC5yZXNwb25zZVVSTCAmJiByZXF1ZXN0LnJlc3BvbnNlVVJMLmluZGV4T2YoJ2ZpbGU6JykgPT09IDApKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHJlYWR5c3RhdGUgaGFuZGxlciBpcyBjYWxsaW5nIGJlZm9yZSBvbmVycm9yIG9yIG9udGltZW91dCBoYW5kbGVycyxcbiAgICAgICAgLy8gc28gd2Ugc2hvdWxkIGNhbGwgb25sb2FkZW5kIG9uIHRoZSBuZXh0ICd0aWNrJ1xuICAgICAgICBzZXRUaW1lb3V0KG9ubG9hZGVuZCk7XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIEhhbmRsZSBicm93c2VyIHJlcXVlc3QgY2FuY2VsbGF0aW9uIChhcyBvcHBvc2VkIHRvIGEgbWFudWFsIGNhbmNlbGxhdGlvbilcbiAgICByZXF1ZXN0Lm9uYWJvcnQgPSBmdW5jdGlvbiBoYW5kbGVBYm9ydCgpIHtcbiAgICAgIGlmICghcmVxdWVzdCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignUmVxdWVzdCBhYm9ydGVkJywgQXhpb3NFcnJvci5FQ09OTkFCT1JURUQsIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIGxvdyBsZXZlbCBuZXR3b3JrIGVycm9yc1xuICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uIGhhbmRsZUVycm9yKCkge1xuICAgICAgLy8gUmVhbCBlcnJvcnMgYXJlIGhpZGRlbiBmcm9tIHVzIGJ5IHRoZSBicm93c2VyXG4gICAgICAvLyBvbmVycm9yIHNob3VsZCBvbmx5IGZpcmUgaWYgaXQncyBhIG5ldHdvcmsgZXJyb3JcbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcignTmV0d29yayBFcnJvcicsIEF4aW9zRXJyb3IuRVJSX05FVFdPUkssIGNvbmZpZywgcmVxdWVzdCkpO1xuXG4gICAgICAvLyBDbGVhbiB1cCByZXF1ZXN0XG4gICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICB9O1xuXG4gICAgLy8gSGFuZGxlIHRpbWVvdXRcbiAgICByZXF1ZXN0Lm9udGltZW91dCA9IGZ1bmN0aW9uIGhhbmRsZVRpbWVvdXQoKSB7XG4gICAgICB2YXIgdGltZW91dEVycm9yTWVzc2FnZSA9IGNvbmZpZy50aW1lb3V0ID8gJ3RpbWVvdXQgb2YgJyArIGNvbmZpZy50aW1lb3V0ICsgJ21zIGV4Y2VlZGVkJyA6ICd0aW1lb3V0IGV4Y2VlZGVkJztcbiAgICAgIHZhciB0cmFuc2l0aW9uYWwgPSBjb25maWcudHJhbnNpdGlvbmFsIHx8IHRyYW5zaXRpb25hbERlZmF1bHRzO1xuICAgICAgaWYgKGNvbmZpZy50aW1lb3V0RXJyb3JNZXNzYWdlKSB7XG4gICAgICAgIHRpbWVvdXRFcnJvck1lc3NhZ2UgPSBjb25maWcudGltZW91dEVycm9yTWVzc2FnZTtcbiAgICAgIH1cbiAgICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICAgdGltZW91dEVycm9yTWVzc2FnZSxcbiAgICAgICAgdHJhbnNpdGlvbmFsLmNsYXJpZnlUaW1lb3V0RXJyb3IgPyBBeGlvc0Vycm9yLkVUSU1FRE9VVCA6IEF4aW9zRXJyb3IuRUNPTk5BQk9SVEVELFxuICAgICAgICBjb25maWcsXG4gICAgICAgIHJlcXVlc3QpKTtcblxuICAgICAgLy8gQ2xlYW4gdXAgcmVxdWVzdFxuICAgICAgcmVxdWVzdCA9IG51bGw7XG4gICAgfTtcblxuICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgIC8vIFRoaXMgaXMgb25seSBkb25lIGlmIHJ1bm5pbmcgaW4gYSBzdGFuZGFyZCBicm93c2VyIGVudmlyb25tZW50LlxuICAgIC8vIFNwZWNpZmljYWxseSBub3QgaWYgd2UncmUgaW4gYSB3ZWIgd29ya2VyLCBvciByZWFjdC1uYXRpdmUuXG4gICAgaWYgKHV0aWxzLmlzU3RhbmRhcmRCcm93c2VyRW52KCkpIHtcbiAgICAgIC8vIEFkZCB4c3JmIGhlYWRlclxuICAgICAgd2l0aFhTUkZUb2tlbiAmJiB1dGlscy5pc0Z1bmN0aW9uKHdpdGhYU1JGVG9rZW4pICYmICh3aXRoWFNSRlRva2VuID0gd2l0aFhTUkZUb2tlbihjb25maWcpKTtcbiAgICAgIGlmICh3aXRoWFNSRlRva2VuIHx8ICh3aXRoWFNSRlRva2VuICE9PSBmYWxzZSAmJiBpc1VSTFNhbWVPcmlnaW4oZnVsbFBhdGgpKSkge1xuICAgICAgICAvLyBBZGQgeHNyZiBoZWFkZXJcbiAgICAgICAgdmFyIHhzcmZWYWx1ZSA9IGNvbmZpZy54c3JmSGVhZGVyTmFtZSAmJiBjb25maWcueHNyZkNvb2tpZU5hbWUgJiYgY29va2llcy5yZWFkKGNvbmZpZy54c3JmQ29va2llTmFtZSk7XG4gICAgICAgIGlmICh4c3JmVmFsdWUpIHtcbiAgICAgICAgICByZXF1ZXN0SGVhZGVyc1tjb25maWcueHNyZkhlYWRlck5hbWVdID0geHNyZlZhbHVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gQWRkIGhlYWRlcnMgdG8gdGhlIHJlcXVlc3RcbiAgICBpZiAoJ3NldFJlcXVlc3RIZWFkZXInIGluIHJlcXVlc3QpIHtcbiAgICAgIHV0aWxzLmZvckVhY2gocmVxdWVzdEhlYWRlcnMsIGZ1bmN0aW9uIHNldFJlcXVlc3RIZWFkZXIodmFsLCBrZXkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiByZXF1ZXN0RGF0YSA9PT0gJ3VuZGVmaW5lZCcgJiYga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LXR5cGUnKSB7XG4gICAgICAgICAgLy8gUmVtb3ZlIENvbnRlbnQtVHlwZSBpZiBkYXRhIGlzIHVuZGVmaW5lZFxuICAgICAgICAgIGRlbGV0ZSByZXF1ZXN0SGVhZGVyc1trZXldO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIE90aGVyd2lzZSBhZGQgaGVhZGVyIHRvIHRoZSByZXF1ZXN0XG4gICAgICAgICAgcmVxdWVzdC5zZXRSZXF1ZXN0SGVhZGVyKGtleSwgdmFsKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHdpdGhDcmVkZW50aWFscyB0byByZXF1ZXN0IGlmIG5lZWRlZFxuICAgIGlmICghdXRpbHMuaXNVbmRlZmluZWQoY29uZmlnLndpdGhDcmVkZW50aWFscykpIHtcbiAgICAgIHJlcXVlc3Qud2l0aENyZWRlbnRpYWxzID0gISFjb25maWcud2l0aENyZWRlbnRpYWxzO1xuICAgIH1cblxuICAgIC8vIEFkZCByZXNwb25zZVR5cGUgdG8gcmVxdWVzdCBpZiBuZWVkZWRcbiAgICBpZiAocmVzcG9uc2VUeXBlICYmIHJlc3BvbnNlVHlwZSAhPT0gJ2pzb24nKSB7XG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVHlwZSA9IGNvbmZpZy5yZXNwb25zZVR5cGU7XG4gICAgfVxuXG4gICAgLy8gSGFuZGxlIHByb2dyZXNzIGlmIG5lZWRlZFxuICAgIGlmICh0eXBlb2YgY29uZmlnLm9uRG93bmxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmVxdWVzdC5hZGRFdmVudExpc3RlbmVyKCdwcm9ncmVzcycsIGNvbmZpZy5vbkRvd25sb2FkUHJvZ3Jlc3MpO1xuICAgIH1cblxuICAgIC8vIE5vdCBhbGwgYnJvd3NlcnMgc3VwcG9ydCB1cGxvYWQgZXZlbnRzXG4gICAgaWYgKHR5cGVvZiBjb25maWcub25VcGxvYWRQcm9ncmVzcyA9PT0gJ2Z1bmN0aW9uJyAmJiByZXF1ZXN0LnVwbG9hZCkge1xuICAgICAgcmVxdWVzdC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBjb25maWcub25VcGxvYWRQcm9ncmVzcyk7XG4gICAgfVxuXG4gICAgaWYgKGNvbmZpZy5jYW5jZWxUb2tlbiB8fCBjb25maWcuc2lnbmFsKSB7XG4gICAgICAvLyBIYW5kbGUgY2FuY2VsbGF0aW9uXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICAgICAgb25DYW5jZWxlZCA9IGZ1bmN0aW9uKGNhbmNlbCkge1xuICAgICAgICBpZiAoIXJlcXVlc3QpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgcmVqZWN0KCFjYW5jZWwgfHwgY2FuY2VsLnR5cGUgPyBuZXcgQ2FuY2VsZWRFcnJvcihudWxsLCBjb25maWcsIHJlcXVlc3QpIDogY2FuY2VsKTtcbiAgICAgICAgcmVxdWVzdC5hYm9ydCgpO1xuICAgICAgICByZXF1ZXN0ID0gbnVsbDtcbiAgICAgIH07XG5cbiAgICAgIGNvbmZpZy5jYW5jZWxUb2tlbiAmJiBjb25maWcuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG9uQ2FuY2VsZWQpO1xuICAgICAgaWYgKGNvbmZpZy5zaWduYWwpIHtcbiAgICAgICAgY29uZmlnLnNpZ25hbC5hYm9ydGVkID8gb25DYW5jZWxlZCgpIDogY29uZmlnLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIG9uQ2FuY2VsZWQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGZhbHNlLCAwICh6ZXJvIG51bWJlciksIGFuZCAnJyAoZW1wdHkgc3RyaW5nKSBhcmUgdmFsaWQgSlNPTiB2YWx1ZXNcbiAgICBpZiAoIXJlcXVlc3REYXRhICYmIHJlcXVlc3REYXRhICE9PSBmYWxzZSAmJiByZXF1ZXN0RGF0YSAhPT0gMCAmJiByZXF1ZXN0RGF0YSAhPT0gJycpIHtcbiAgICAgIHJlcXVlc3REYXRhID0gbnVsbDtcbiAgICB9XG5cbiAgICB2YXIgcHJvdG9jb2wgPSBwYXJzZVByb3RvY29sKGZ1bGxQYXRoKTtcblxuICAgIGlmIChwcm90b2NvbCAmJiBwbGF0Zm9ybS5wcm90b2NvbHMuaW5kZXhPZihwcm90b2NvbCkgPT09IC0xKSB7XG4gICAgICByZWplY3QobmV3IEF4aW9zRXJyb3IoJ1Vuc3VwcG9ydGVkIHByb3RvY29sICcgKyBwcm90b2NvbCArICc6JywgQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIGNvbmZpZykpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuXG4gICAgLy8gU2VuZCB0aGUgcmVxdWVzdFxuICAgIHJlcXVlc3Quc2VuZChyZXF1ZXN0RGF0YSk7XG4gIH0pO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBwYXJzZVByb3RvY29sKHVybCkge1xuICB2YXIgbWF0Y2ggPSAvXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyh1cmwpO1xuICByZXR1cm4gbWF0Y2ggJiYgbWF0Y2hbMV0gfHwgJyc7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4vbm9kZS8nKTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBDcmVhdGUgYW4gRXJyb3Igd2l0aCB0aGUgc3BlY2lmaWVkIG1lc3NhZ2UsIGNvbmZpZywgZXJyb3IgY29kZSwgcmVxdWVzdCBhbmQgcmVzcG9uc2UuXG4gKlxuICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge3N0cmluZ30gW2NvZGVdIFRoZSBlcnJvciBjb2RlIChmb3IgZXhhbXBsZSwgJ0VDT05OQUJPUlRFRCcpLlxuICogQHBhcmFtIHtPYmplY3R9IFtjb25maWddIFRoZSBjb25maWcuXG4gKiBAcGFyYW0ge09iamVjdH0gW3JlcXVlc3RdIFRoZSByZXF1ZXN0LlxuICogQHBhcmFtIHtPYmplY3R9IFtyZXNwb25zZV0gVGhlIHJlc3BvbnNlLlxuICogQHJldHVybnMge0Vycm9yfSBUaGUgY3JlYXRlZCBlcnJvci5cbiAqL1xuZnVuY3Rpb24gQXhpb3NFcnJvcihtZXNzYWdlLCBjb2RlLCBjb25maWcsIHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gIEVycm9yLmNhbGwodGhpcyk7XG5cbiAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7XG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gIH0gZWxzZSB7XG4gICAgdGhpcy5zdGFjayA9IChuZXcgRXJyb3IoKSkuc3RhY2s7XG4gIH1cblxuICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlO1xuICB0aGlzLm5hbWUgPSAnQXhpb3NFcnJvcic7XG4gIGNvZGUgJiYgKHRoaXMuY29kZSA9IGNvZGUpO1xuICBjb25maWcgJiYgKHRoaXMuY29uZmlnID0gY29uZmlnKTtcbiAgcmVxdWVzdCAmJiAodGhpcy5yZXF1ZXN0ID0gcmVxdWVzdCk7XG4gIHJlc3BvbnNlICYmICh0aGlzLnJlc3BvbnNlID0gcmVzcG9uc2UpO1xufVxuXG51dGlscy5pbmhlcml0cyhBeGlvc0Vycm9yLCBFcnJvciwge1xuICB0b0pTT046IGZ1bmN0aW9uIHRvSlNPTigpIHtcbiAgICByZXR1cm4ge1xuICAgICAgLy8gU3RhbmRhcmRcbiAgICAgIG1lc3NhZ2U6IHRoaXMubWVzc2FnZSxcbiAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgIC8vIE1pY3Jvc29mdFxuICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICBudW1iZXI6IHRoaXMubnVtYmVyLFxuICAgICAgLy8gTW96aWxsYVxuICAgICAgZmlsZU5hbWU6IHRoaXMuZmlsZU5hbWUsXG4gICAgICBsaW5lTnVtYmVyOiB0aGlzLmxpbmVOdW1iZXIsXG4gICAgICBjb2x1bW5OdW1iZXI6IHRoaXMuY29sdW1uTnVtYmVyLFxuICAgICAgc3RhY2s6IHRoaXMuc3RhY2ssXG4gICAgICAvLyBBeGlvc1xuICAgICAgY29uZmlnOiB0aGlzLmNvbmZpZyxcbiAgICAgIGNvZGU6IHRoaXMuY29kZSxcbiAgICAgIHN0YXR1czogdGhpcy5yZXNwb25zZSAmJiB0aGlzLnJlc3BvbnNlLnN0YXR1cyA/IHRoaXMucmVzcG9uc2Uuc3RhdHVzIDogbnVsbFxuICAgIH07XG4gIH1cbn0pO1xuXG52YXIgcHJvdG90eXBlID0gQXhpb3NFcnJvci5wcm90b3R5cGU7XG52YXIgZGVzY3JpcHRvcnMgPSB7fTtcblxuW1xuICAnRVJSX0JBRF9PUFRJT05fVkFMVUUnLFxuICAnRVJSX0JBRF9PUFRJT04nLFxuICAnRUNPTk5BQk9SVEVEJyxcbiAgJ0VUSU1FRE9VVCcsXG4gICdFUlJfTkVUV09SSycsXG4gICdFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTJyxcbiAgJ0VSUl9ERVBSRUNBVEVEJyxcbiAgJ0VSUl9CQURfUkVTUE9OU0UnLFxuICAnRVJSX0JBRF9SRVFVRVNUJyxcbiAgJ0VSUl9DQU5DRUxFRCcsXG4gICdFUlJfTk9UX1NVUFBPUlQnLFxuICAnRVJSX0lOVkFMSURfVVJMJ1xuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbl0uZm9yRWFjaChmdW5jdGlvbihjb2RlKSB7XG4gIGRlc2NyaXB0b3JzW2NvZGVdID0ge3ZhbHVlOiBjb2RlfTtcbn0pO1xuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhBeGlvc0Vycm9yLCBkZXNjcmlwdG9ycyk7XG5PYmplY3QuZGVmaW5lUHJvcGVydHkocHJvdG90eXBlLCAnaXNBeGlvc0Vycm9yJywge3ZhbHVlOiB0cnVlfSk7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG5BeGlvc0Vycm9yLmZyb20gPSBmdW5jdGlvbihlcnJvciwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSwgY3VzdG9tUHJvcHMpIHtcbiAgdmFyIGF4aW9zRXJyb3IgPSBPYmplY3QuY3JlYXRlKHByb3RvdHlwZSk7XG5cbiAgdXRpbHMudG9GbGF0T2JqZWN0KGVycm9yLCBheGlvc0Vycm9yLCBmdW5jdGlvbiBmaWx0ZXIob2JqKSB7XG4gICAgcmV0dXJuIG9iaiAhPT0gRXJyb3IucHJvdG90eXBlO1xuICB9KTtcblxuICBBeGlvc0Vycm9yLmNhbGwoYXhpb3NFcnJvciwgZXJyb3IubWVzc2FnZSwgY29kZSwgY29uZmlnLCByZXF1ZXN0LCByZXNwb25zZSk7XG5cbiAgYXhpb3NFcnJvci5jYXVzZSA9IGVycm9yO1xuXG4gIGF4aW9zRXJyb3IubmFtZSA9IGVycm9yLm5hbWU7XG5cbiAgY3VzdG9tUHJvcHMgJiYgT2JqZWN0LmFzc2lnbihheGlvc0Vycm9yLCBjdXN0b21Qcm9wcyk7XG5cbiAgcmV0dXJuIGF4aW9zRXJyb3I7XG59O1xuXG5tb2R1bGUuZXhwb3J0cyA9IEF4aW9zRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgdG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vdG9Gb3JtRGF0YScpO1xudmFyIHBsYXRmb3JtID0gcmVxdWlyZSgnLi4vcGxhdGZvcm0vJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gdG9VUkxFbmNvZGVkRm9ybShkYXRhLCBvcHRpb25zKSB7XG4gIHJldHVybiB0b0Zvcm1EYXRhKGRhdGEsIG5ldyBwbGF0Zm9ybS5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcygpLCBPYmplY3QuYXNzaWduKHtcbiAgICB2aXNpdG9yOiBmdW5jdGlvbih2YWx1ZSwga2V5LCBwYXRoLCBoZWxwZXJzKSB7XG4gICAgICBpZiAocGxhdGZvcm0uaXNOb2RlICYmIHV0aWxzLmlzQnVmZmVyKHZhbHVlKSkge1xuICAgICAgICB0aGlzLmFwcGVuZChrZXksIHZhbHVlLnRvU3RyaW5nKCdiYXNlNjQnKSk7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGhlbHBlcnMuZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9XG4gIH0sIG9wdGlvbnMpKTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIGVudkZvcm1EYXRhID0gcmVxdWlyZSgnLi4vZW52L2NsYXNzZXMvRm9ybURhdGEnKTtcblxuZnVuY3Rpb24gaXNWaXNpdGFibGUodGhpbmcpIHtcbiAgcmV0dXJuIHV0aWxzLmlzUGxhaW5PYmplY3QodGhpbmcpIHx8IHV0aWxzLmlzQXJyYXkodGhpbmcpO1xufVxuXG5mdW5jdGlvbiByZW1vdmVCcmFja2V0cyhrZXkpIHtcbiAgcmV0dXJuIHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgPyBrZXkuc2xpY2UoMCwgLTIpIDoga2V5O1xufVxuXG5mdW5jdGlvbiByZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSB7XG4gIGlmICghcGF0aCkgcmV0dXJuIGtleTtcbiAgcmV0dXJuIHBhdGguY29uY2F0KGtleSkubWFwKGZ1bmN0aW9uIGVhY2godG9rZW4sIGkpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICB0b2tlbiA9IHJlbW92ZUJyYWNrZXRzKHRva2VuKTtcbiAgICByZXR1cm4gIWRvdHMgJiYgaSA/ICdbJyArIHRva2VuICsgJ10nIDogdG9rZW47XG4gIH0pLmpvaW4oZG90cyA/ICcuJyA6ICcnKTtcbn1cblxuZnVuY3Rpb24gaXNGbGF0QXJyYXkoYXJyKSB7XG4gIHJldHVybiB1dGlscy5pc0FycmF5KGFycikgJiYgIWFyci5zb21lKGlzVmlzaXRhYmxlKTtcbn1cblxudmFyIHByZWRpY2F0ZXMgPSB1dGlscy50b0ZsYXRPYmplY3QodXRpbHMsIHt9LCBudWxsLCBmdW5jdGlvbiBmaWx0ZXIocHJvcCkge1xuICByZXR1cm4gL15pc1tBLVpdLy50ZXN0KHByb3ApO1xufSk7XG5cbmZ1bmN0aW9uIGlzU3BlY0NvbXBsaWFudCh0aGluZykge1xuICByZXR1cm4gdGhpbmcgJiYgdXRpbHMuaXNGdW5jdGlvbih0aGluZy5hcHBlbmQpICYmIHRoaW5nW1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YScgJiYgdGhpbmdbU3ltYm9sLml0ZXJhdG9yXTtcbn1cblxuLyoqXG4gKiBDb252ZXJ0IGEgZGF0YSBvYmplY3QgdG8gRm9ybURhdGFcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmpcbiAqIEBwYXJhbSB7P09iamVjdH0gW2Zvcm1EYXRhXVxuICogQHBhcmFtIHs/T2JqZWN0fSBbb3B0aW9uc11cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLnZpc2l0b3JdXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLm1ldGFUb2tlbnMgPSB0cnVlXVxuICogQHBhcmFtIHtCb29sZWFufSBbb3B0aW9ucy5kb3RzID0gZmFsc2VdXG4gKiBAcGFyYW0gez9Cb29sZWFufSBbb3B0aW9ucy5pbmRleGVzID0gZmFsc2VdXG4gKiBAcmV0dXJucyB7T2JqZWN0fVxuICoqL1xuXG5mdW5jdGlvbiB0b0Zvcm1EYXRhKG9iaiwgZm9ybURhdGEsIG9wdGlvbnMpIHtcbiAgaWYgKCF1dGlscy5pc09iamVjdChvYmopKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgZm9ybURhdGEgPSBmb3JtRGF0YSB8fCBuZXcgKGVudkZvcm1EYXRhIHx8IEZvcm1EYXRhKSgpO1xuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICBvcHRpb25zID0gdXRpbHMudG9GbGF0T2JqZWN0KG9wdGlvbnMsIHtcbiAgICBtZXRhVG9rZW5zOiB0cnVlLFxuICAgIGRvdHM6IGZhbHNlLFxuICAgIGluZGV4ZXM6IGZhbHNlXG4gIH0sIGZhbHNlLCBmdW5jdGlvbiBkZWZpbmVkKG9wdGlvbiwgc291cmNlKSB7XG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gICAgcmV0dXJuICF1dGlscy5pc1VuZGVmaW5lZChzb3VyY2Vbb3B0aW9uXSk7XG4gIH0pO1xuXG4gIHZhciBtZXRhVG9rZW5zID0gb3B0aW9ucy5tZXRhVG9rZW5zO1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlLWJlZm9yZS1kZWZpbmVcbiAgdmFyIHZpc2l0b3IgPSBvcHRpb25zLnZpc2l0b3IgfHwgZGVmYXVsdFZpc2l0b3I7XG4gIHZhciBkb3RzID0gb3B0aW9ucy5kb3RzO1xuICB2YXIgaW5kZXhlcyA9IG9wdGlvbnMuaW5kZXhlcztcbiAgdmFyIF9CbG9iID0gb3B0aW9ucy5CbG9iIHx8IHR5cGVvZiBCbG9iICE9PSAndW5kZWZpbmVkJyAmJiBCbG9iO1xuICB2YXIgdXNlQmxvYiA9IF9CbG9iICYmIGlzU3BlY0NvbXBsaWFudChmb3JtRGF0YSk7XG5cbiAgaWYgKCF1dGlscy5pc0Z1bmN0aW9uKHZpc2l0b3IpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGNvbnZlcnRWYWx1ZSh2YWx1ZSkge1xuICAgIGlmICh2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuICcnO1xuXG4gICAgaWYgKHV0aWxzLmlzRGF0ZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB2YWx1ZS50b0lTT1N0cmluZygpO1xuICAgIH1cblxuICAgIGlmICghdXNlQmxvYiAmJiB1dGlscy5pc0Jsb2IodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgQXhpb3NFcnJvcignQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4nKTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcih2YWx1ZSkgfHwgdXRpbHMuaXNUeXBlZEFycmF5KHZhbHVlKSkge1xuICAgICAgcmV0dXJuIHVzZUJsb2IgJiYgdHlwZW9mIEJsb2IgPT09ICdmdW5jdGlvbicgPyBuZXcgQmxvYihbdmFsdWVdKSA6IEJ1ZmZlci5mcm9tKHZhbHVlKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsqfSB2YWx1ZVxuICAgKiBAcGFyYW0ge1N0cmluZ3xOdW1iZXJ9IGtleVxuICAgKiBAcGFyYW0ge0FycmF5PFN0cmluZ3xOdW1iZXI+fSBwYXRoXG4gICAqIEB0aGlzIHtGb3JtRGF0YX1cbiAgICogQHJldHVybnMge2Jvb2xlYW59IHJldHVybiB0cnVlIHRvIHZpc2l0IHRoZSBlYWNoIHByb3Agb2YgdGhlIHZhbHVlIHJlY3Vyc2l2ZWx5XG4gICAqL1xuICBmdW5jdGlvbiBkZWZhdWx0VmlzaXRvcih2YWx1ZSwga2V5LCBwYXRoKSB7XG4gICAgdmFyIGFyciA9IHZhbHVlO1xuXG4gICAgaWYgKHZhbHVlICYmICFwYXRoICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIGlmICh1dGlscy5lbmRzV2l0aChrZXksICd7fScpKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSBtZXRhVG9rZW5zID8ga2V5IDoga2V5LnNsaWNlKDAsIC0yKTtcbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICAgIHZhbHVlID0gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuICAgICAgfSBlbHNlIGlmIChcbiAgICAgICAgKHV0aWxzLmlzQXJyYXkodmFsdWUpICYmIGlzRmxhdEFycmF5KHZhbHVlKSkgfHxcbiAgICAgICAgKHV0aWxzLmlzRmlsZUxpc3QodmFsdWUpIHx8IHV0aWxzLmVuZHNXaXRoKGtleSwgJ1tdJykgJiYgKGFyciA9IHV0aWxzLnRvQXJyYXkodmFsdWUpKVxuICAgICAgICApKSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBrZXkgPSByZW1vdmVCcmFja2V0cyhrZXkpO1xuXG4gICAgICAgIGFyci5mb3JFYWNoKGZ1bmN0aW9uIGVhY2goZWwsIGluZGV4KSB7XG4gICAgICAgICAgISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIGZvcm1EYXRhLmFwcGVuZChcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1uZXN0ZWQtdGVybmFyeVxuICAgICAgICAgICAgaW5kZXhlcyA9PT0gdHJ1ZSA/IHJlbmRlcktleShba2V5XSwgaW5kZXgsIGRvdHMpIDogKGluZGV4ZXMgPT09IG51bGwgPyBrZXkgOiBrZXkgKyAnW10nKSxcbiAgICAgICAgICAgIGNvbnZlcnRWYWx1ZShlbClcbiAgICAgICAgICApO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1Zpc2l0YWJsZSh2YWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIGZvcm1EYXRhLmFwcGVuZChyZW5kZXJLZXkocGF0aCwga2V5LCBkb3RzKSwgY29udmVydFZhbHVlKHZhbHVlKSk7XG5cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgc3RhY2sgPSBbXTtcblxuICB2YXIgZXhwb3NlZEhlbHBlcnMgPSBPYmplY3QuYXNzaWduKHByZWRpY2F0ZXMsIHtcbiAgICBkZWZhdWx0VmlzaXRvcjogZGVmYXVsdFZpc2l0b3IsXG4gICAgY29udmVydFZhbHVlOiBjb252ZXJ0VmFsdWUsXG4gICAgaXNWaXNpdGFibGU6IGlzVmlzaXRhYmxlXG4gIH0pO1xuXG4gIGZ1bmN0aW9uIGJ1aWxkKHZhbHVlLCBwYXRoKSB7XG4gICAgaWYgKHV0aWxzLmlzVW5kZWZpbmVkKHZhbHVlKSkgcmV0dXJuO1xuXG4gICAgaWYgKHN0YWNrLmluZGV4T2YodmFsdWUpICE9PSAtMSkge1xuICAgICAgdGhyb3cgRXJyb3IoJ0NpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAnICsgcGF0aC5qb2luKCcuJykpO1xuICAgIH1cblxuICAgIHN0YWNrLnB1c2godmFsdWUpO1xuXG4gICAgdXRpbHMuZm9yRWFjaCh2YWx1ZSwgZnVuY3Rpb24gZWFjaChlbCwga2V5KSB7XG4gICAgICB2YXIgcmVzdWx0ID0gISh1dGlscy5pc1VuZGVmaW5lZChlbCkgfHwgZWwgPT09IG51bGwpICYmIHZpc2l0b3IuY2FsbChcbiAgICAgICAgZm9ybURhdGEsIGVsLCB1dGlscy5pc1N0cmluZyhrZXkpID8ga2V5LnRyaW0oKSA6IGtleSwgcGF0aCwgZXhwb3NlZEhlbHBlcnNcbiAgICAgICk7XG5cbiAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHtcbiAgICAgICAgYnVpbGQoZWwsIHBhdGggPyBwYXRoLmNvbmNhdChrZXkpIDogW2tleV0pO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgc3RhY2sucG9wKCk7XG4gIH1cblxuICBpZiAoIXV0aWxzLmlzT2JqZWN0KG9iaikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdkYXRhIG11c3QgYmUgYW4gb2JqZWN0Jyk7XG4gIH1cblxuICBidWlsZChvYmopO1xuXG4gIHJldHVybiBmb3JtRGF0YTtcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB0b0Zvcm1EYXRhO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgbm9ybWFsaXplZE5hbWUpIHtcbiAgdXRpbHMuZm9yRWFjaChoZWFkZXJzLCBmdW5jdGlvbiBwcm9jZXNzSGVhZGVyKHZhbHVlLCBuYW1lKSB7XG4gICAgaWYgKG5hbWUgIT09IG5vcm1hbGl6ZWROYW1lICYmIG5hbWUudG9VcHBlckNhc2UoKSA9PT0gbm9ybWFsaXplZE5hbWUudG9VcHBlckNhc2UoKSkge1xuICAgICAgaGVhZGVyc1tub3JtYWxpemVkTmFtZV0gPSB2YWx1ZTtcbiAgICAgIGRlbGV0ZSBoZWFkZXJzW25hbWVdO1xuICAgIH1cbiAgfSk7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgdXRpbHMgPSByZXF1aXJlKCcuLi91dGlscycpO1xudmFyIG5vcm1hbGl6ZUhlYWRlck5hbWUgPSByZXF1aXJlKCcuLi9oZWxwZXJzL25vcm1hbGl6ZUhlYWRlck5hbWUnKTtcbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vY29yZS9BeGlvc0Vycm9yJyk7XG52YXIgdHJhbnNpdGlvbmFsRGVmYXVsdHMgPSByZXF1aXJlKCcuL3RyYW5zaXRpb25hbCcpO1xudmFyIHRvRm9ybURhdGEgPSByZXF1aXJlKCcuLi9oZWxwZXJzL3RvRm9ybURhdGEnKTtcbnZhciB0b1VSTEVuY29kZWRGb3JtID0gcmVxdWlyZSgnLi4vaGVscGVycy90b1VSTEVuY29kZWRGb3JtJyk7XG52YXIgcGxhdGZvcm0gPSByZXF1aXJlKCcuLi9wbGF0Zm9ybScpO1xudmFyIGZvcm1EYXRhVG9KU09OID0gcmVxdWlyZSgnLi4vaGVscGVycy9mb3JtRGF0YVRvSlNPTicpO1xuXG52YXIgREVGQVVMVF9DT05URU5UX1RZUEUgPSB7XG4gICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJ1xufTtcblxuZnVuY3Rpb24gc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsIHZhbHVlKSB7XG4gIGlmICghdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVycykgJiYgdXRpbHMuaXNVbmRlZmluZWQoaGVhZGVyc1snQ29udGVudC1UeXBlJ10pKSB7XG4gICAgaGVhZGVyc1snQ29udGVudC1UeXBlJ10gPSB2YWx1ZTtcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXREZWZhdWx0QWRhcHRlcigpIHtcbiAgdmFyIGFkYXB0ZXI7XG4gIGlmICh0eXBlb2YgWE1MSHR0cFJlcXVlc3QgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgLy8gRm9yIGJyb3dzZXJzIHVzZSBYSFIgYWRhcHRlclxuICAgIGFkYXB0ZXIgPSByZXF1aXJlKCcuLi9hZGFwdGVycy94aHInKTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nlc3MpID09PSAnW29iamVjdCBwcm9jZXNzXScpIHtcbiAgICAvLyBGb3Igbm9kZSB1c2UgSFRUUCBhZGFwdGVyXG4gICAgYWRhcHRlciA9IHJlcXVpcmUoJy4uL2FkYXB0ZXJzL2h0dHAnKTtcbiAgfVxuICByZXR1cm4gYWRhcHRlcjtcbn1cblxuZnVuY3Rpb24gc3RyaW5naWZ5U2FmZWx5KHJhd1ZhbHVlLCBwYXJzZXIsIGVuY29kZXIpIHtcbiAgaWYgKHV0aWxzLmlzU3RyaW5nKHJhd1ZhbHVlKSkge1xuICAgIHRyeSB7XG4gICAgICAocGFyc2VyIHx8IEpTT04ucGFyc2UpKHJhd1ZhbHVlKTtcbiAgICAgIHJldHVybiB1dGlscy50cmltKHJhd1ZhbHVlKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBpZiAoZS5uYW1lICE9PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgIHRocm93IGU7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIChlbmNvZGVyIHx8IEpTT04uc3RyaW5naWZ5KShyYXdWYWx1ZSk7XG59XG5cbnZhciBkZWZhdWx0cyA9IHtcblxuICB0cmFuc2l0aW9uYWw6IHRyYW5zaXRpb25hbERlZmF1bHRzLFxuXG4gIGFkYXB0ZXI6IGdldERlZmF1bHRBZGFwdGVyKCksXG5cbiAgdHJhbnNmb3JtUmVxdWVzdDogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlcXVlc3QoZGF0YSwgaGVhZGVycykge1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0FjY2VwdCcpO1xuICAgIG5vcm1hbGl6ZUhlYWRlck5hbWUoaGVhZGVycywgJ0NvbnRlbnQtVHlwZScpO1xuXG4gICAgdmFyIGNvbnRlbnRUeXBlID0gaGVhZGVycyAmJiBoZWFkZXJzWydDb250ZW50LVR5cGUnXSB8fCAnJztcbiAgICB2YXIgaGFzSlNPTkNvbnRlbnRUeXBlID0gY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24vanNvbicpID4gLTE7XG4gICAgdmFyIGlzT2JqZWN0UGF5bG9hZCA9IHV0aWxzLmlzT2JqZWN0KGRhdGEpO1xuXG4gICAgaWYgKGlzT2JqZWN0UGF5bG9hZCAmJiB1dGlscy5pc0hUTUxGb3JtKGRhdGEpKSB7XG4gICAgICBkYXRhID0gbmV3IEZvcm1EYXRhKGRhdGEpO1xuICAgIH1cblxuICAgIHZhciBpc0Zvcm1EYXRhID0gdXRpbHMuaXNGb3JtRGF0YShkYXRhKTtcblxuICAgIGlmIChpc0Zvcm1EYXRhKSB7XG4gICAgICByZXR1cm4gaGFzSlNPTkNvbnRlbnRUeXBlID8gSlNPTi5zdHJpbmdpZnkoZm9ybURhdGFUb0pTT04oZGF0YSkpIDogZGF0YTtcbiAgICB9XG5cbiAgICBpZiAodXRpbHMuaXNBcnJheUJ1ZmZlcihkYXRhKSB8fFxuICAgICAgdXRpbHMuaXNCdWZmZXIoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzU3RyZWFtKGRhdGEpIHx8XG4gICAgICB1dGlscy5pc0ZpbGUoZGF0YSkgfHxcbiAgICAgIHV0aWxzLmlzQmxvYihkYXRhKVxuICAgICkge1xuICAgICAgcmV0dXJuIGRhdGE7XG4gICAgfVxuICAgIGlmICh1dGlscy5pc0FycmF5QnVmZmVyVmlldyhkYXRhKSkge1xuICAgICAgcmV0dXJuIGRhdGEuYnVmZmVyO1xuICAgIH1cbiAgICBpZiAodXRpbHMuaXNVUkxTZWFyY2hQYXJhbXMoZGF0YSkpIHtcbiAgICAgIHNldENvbnRlbnRUeXBlSWZVbnNldChoZWFkZXJzLCAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgnKTtcbiAgICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKCk7XG4gICAgfVxuXG4gICAgdmFyIGlzRmlsZUxpc3Q7XG5cbiAgICBpZiAoaXNPYmplY3RQYXlsb2FkKSB7XG4gICAgICBpZiAoY29udGVudFR5cGUuaW5kZXhPZignYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJykgIT09IC0xKSB7XG4gICAgICAgIHJldHVybiB0b1VSTEVuY29kZWRGb3JtKGRhdGEsIHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7XG4gICAgICB9XG5cbiAgICAgIGlmICgoaXNGaWxlTGlzdCA9IHV0aWxzLmlzRmlsZUxpc3QoZGF0YSkpIHx8IGNvbnRlbnRUeXBlLmluZGV4T2YoJ211bHRpcGFydC9mb3JtLWRhdGEnKSA+IC0xKSB7XG4gICAgICAgIHZhciBfRm9ybURhdGEgPSB0aGlzLmVudiAmJiB0aGlzLmVudi5Gb3JtRGF0YTtcblxuICAgICAgICByZXR1cm4gdG9Gb3JtRGF0YShcbiAgICAgICAgICBpc0ZpbGVMaXN0ID8geydmaWxlc1tdJzogZGF0YX0gOiBkYXRhLFxuICAgICAgICAgIF9Gb3JtRGF0YSAmJiBuZXcgX0Zvcm1EYXRhKCksXG4gICAgICAgICAgdGhpcy5mb3JtU2VyaWFsaXplclxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc09iamVjdFBheWxvYWQgfHwgaGFzSlNPTkNvbnRlbnRUeXBlICkge1xuICAgICAgc2V0Q29udGVudFR5cGVJZlVuc2V0KGhlYWRlcnMsICdhcHBsaWNhdGlvbi9qc29uJyk7XG4gICAgICByZXR1cm4gc3RyaW5naWZ5U2FmZWx5KGRhdGEpO1xuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICB0cmFuc2Zvcm1SZXNwb25zZTogW2Z1bmN0aW9uIHRyYW5zZm9ybVJlc3BvbnNlKGRhdGEpIHtcbiAgICB2YXIgdHJhbnNpdGlvbmFsID0gdGhpcy50cmFuc2l0aW9uYWwgfHwgZGVmYXVsdHMudHJhbnNpdGlvbmFsO1xuICAgIHZhciBmb3JjZWRKU09OUGFyc2luZyA9IHRyYW5zaXRpb25hbCAmJiB0cmFuc2l0aW9uYWwuZm9yY2VkSlNPTlBhcnNpbmc7XG4gICAgdmFyIEpTT05SZXF1ZXN0ZWQgPSB0aGlzLnJlc3BvbnNlVHlwZSA9PT0gJ2pzb24nO1xuXG4gICAgaWYgKGRhdGEgJiYgdXRpbHMuaXNTdHJpbmcoZGF0YSkgJiYgKChmb3JjZWRKU09OUGFyc2luZyAmJiAhdGhpcy5yZXNwb25zZVR5cGUpIHx8IEpTT05SZXF1ZXN0ZWQpKSB7XG4gICAgICB2YXIgc2lsZW50SlNPTlBhcnNpbmcgPSB0cmFuc2l0aW9uYWwgJiYgdHJhbnNpdGlvbmFsLnNpbGVudEpTT05QYXJzaW5nO1xuICAgICAgdmFyIHN0cmljdEpTT05QYXJzaW5nID0gIXNpbGVudEpTT05QYXJzaW5nICYmIEpTT05SZXF1ZXN0ZWQ7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiBKU09OLnBhcnNlKGRhdGEpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBpZiAoc3RyaWN0SlNPTlBhcnNpbmcpIHtcbiAgICAgICAgICBpZiAoZS5uYW1lID09PSAnU3ludGF4RXJyb3InKSB7XG4gICAgICAgICAgICB0aHJvdyBBeGlvc0Vycm9yLmZyb20oZSwgQXhpb3NFcnJvci5FUlJfQkFEX1JFU1BPTlNFLCB0aGlzLCBudWxsLCB0aGlzLnJlc3BvbnNlKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBkYXRhO1xuICB9XSxcblxuICAvKipcbiAgICogQSB0aW1lb3V0IGluIG1pbGxpc2Vjb25kcyB0byBhYm9ydCBhIHJlcXVlc3QuIElmIHNldCB0byAwIChkZWZhdWx0KSBhXG4gICAqIHRpbWVvdXQgaXMgbm90IGNyZWF0ZWQuXG4gICAqL1xuICB0aW1lb3V0OiAwLFxuXG4gIHhzcmZDb29raWVOYW1lOiAnWFNSRi1UT0tFTicsXG4gIHhzcmZIZWFkZXJOYW1lOiAnWC1YU1JGLVRPS0VOJyxcblxuICBtYXhDb250ZW50TGVuZ3RoOiAtMSxcbiAgbWF4Qm9keUxlbmd0aDogLTEsXG5cbiAgZW52OiB7XG4gICAgRm9ybURhdGE6IHBsYXRmb3JtLmNsYXNzZXMuRm9ybURhdGEsXG4gICAgQmxvYjogcGxhdGZvcm0uY2xhc3Nlcy5CbG9iXG4gIH0sXG5cbiAgdmFsaWRhdGVTdGF0dXM6IGZ1bmN0aW9uIHZhbGlkYXRlU3RhdHVzKHN0YXR1cykge1xuICAgIHJldHVybiBzdGF0dXMgPj0gMjAwICYmIHN0YXR1cyA8IDMwMDtcbiAgfSxcblxuICBoZWFkZXJzOiB7XG4gICAgY29tbW9uOiB7XG4gICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKidcbiAgICB9XG4gIH1cbn07XG5cbnV0aWxzLmZvckVhY2goWydkZWxldGUnLCAnZ2V0JywgJ2hlYWQnXSwgZnVuY3Rpb24gZm9yRWFjaE1ldGhvZE5vRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0ge307XG59KTtcblxudXRpbHMuZm9yRWFjaChbJ3Bvc3QnLCAncHV0JywgJ3BhdGNoJ10sIGZ1bmN0aW9uIGZvckVhY2hNZXRob2RXaXRoRGF0YShtZXRob2QpIHtcbiAgZGVmYXVsdHMuaGVhZGVyc1ttZXRob2RdID0gdXRpbHMubWVyZ2UoREVGQVVMVF9DT05URU5UX1RZUEUpO1xufSk7XG5cbm1vZHVsZS5leHBvcnRzID0gZGVmYXVsdHM7XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciBBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9BeGlvc0Vycm9yJyk7XG5cbi8qKlxuICogUmVzb2x2ZSBvciByZWplY3QgYSBQcm9taXNlIGJhc2VkIG9uIHJlc3BvbnNlIHN0YXR1cy5cbiAqXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSByZXNvbHZlIEEgZnVuY3Rpb24gdGhhdCByZXNvbHZlcyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7RnVuY3Rpb259IHJlamVjdCBBIGZ1bmN0aW9uIHRoYXQgcmVqZWN0cyB0aGUgcHJvbWlzZS5cbiAqIEBwYXJhbSB7b2JqZWN0fSByZXNwb25zZSBUaGUgcmVzcG9uc2UuXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUsIHJlamVjdCwgcmVzcG9uc2UpIHtcbiAgdmFyIHZhbGlkYXRlU3RhdHVzID0gcmVzcG9uc2UuY29uZmlnLnZhbGlkYXRlU3RhdHVzO1xuICBpZiAoIXJlc3BvbnNlLnN0YXR1cyB8fCAhdmFsaWRhdGVTdGF0dXMgfHwgdmFsaWRhdGVTdGF0dXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJlc29sdmUocmVzcG9uc2UpO1xuICB9IGVsc2Uge1xuICAgIHJlamVjdChuZXcgQXhpb3NFcnJvcihcbiAgICAgICdSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICcgKyByZXNwb25zZS5zdGF0dXMsXG4gICAgICBbQXhpb3NFcnJvci5FUlJfQkFEX1JFUVVFU1QsIEF4aW9zRXJyb3IuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihyZXNwb25zZS5zdGF0dXMgLyAxMDApIC0gNF0sXG4gICAgICByZXNwb25zZS5jb25maWcsXG4gICAgICByZXNwb25zZS5yZXF1ZXN0LFxuICAgICAgcmVzcG9uc2VcbiAgICApKTtcbiAgfVxufTtcbiIsIid1c2Ugc3RyaWN0JztcblxuLyoqXG4gKiBTeW50YWN0aWMgc3VnYXIgZm9yIGludm9raW5nIGEgZnVuY3Rpb24gYW5kIGV4cGFuZGluZyBhbiBhcnJheSBmb3IgYXJndW1lbnRzLlxuICpcbiAqIENvbW1vbiB1c2UgY2FzZSB3b3VsZCBiZSB0byB1c2UgYEZ1bmN0aW9uLnByb3RvdHlwZS5hcHBseWAuXG4gKlxuICogIGBgYGpzXG4gKiAgZnVuY3Rpb24gZih4LCB5LCB6KSB7fVxuICogIHZhciBhcmdzID0gWzEsIDIsIDNdO1xuICogIGYuYXBwbHkobnVsbCwgYXJncyk7XG4gKiAgYGBgXG4gKlxuICogV2l0aCBgc3ByZWFkYCB0aGlzIGV4YW1wbGUgY2FuIGJlIHJlLXdyaXR0ZW4uXG4gKlxuICogIGBgYGpzXG4gKiAgc3ByZWFkKGZ1bmN0aW9uKHgsIHksIHopIHt9KShbMSwgMiwgM10pO1xuICogIGBgYFxuICpcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGNhbGxiYWNrXG4gKiBAcmV0dXJucyB7RnVuY3Rpb259XG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gc3ByZWFkKGNhbGxiYWNrKSB7XG4gIHJldHVybiBmdW5jdGlvbiB3cmFwKGFycikge1xuICAgIHJldHVybiBjYWxsYmFjay5hcHBseShudWxsLCBhcnIpO1xuICB9O1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxudmFyIHV0aWxzID0gcmVxdWlyZSgnLi91dGlscycpO1xudmFyIGJpbmQgPSByZXF1aXJlKCcuL2hlbHBlcnMvYmluZCcpO1xudmFyIEF4aW9zID0gcmVxdWlyZSgnLi9jb3JlL0F4aW9zJyk7XG52YXIgbWVyZ2VDb25maWcgPSByZXF1aXJlKCcuL2NvcmUvbWVyZ2VDb25maWcnKTtcbnZhciBkZWZhdWx0cyA9IHJlcXVpcmUoJy4vZGVmYXVsdHMnKTtcbnZhciBmb3JtRGF0YVRvSlNPTiA9IHJlcXVpcmUoJy4vaGVscGVycy9mb3JtRGF0YVRvSlNPTicpO1xuLyoqXG4gKiBDcmVhdGUgYW4gaW5zdGFuY2Ugb2YgQXhpb3NcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gZGVmYXVsdENvbmZpZyBUaGUgZGVmYXVsdCBjb25maWcgZm9yIHRoZSBpbnN0YW5jZVxuICogQHJldHVybiB7QXhpb3N9IEEgbmV3IGluc3RhbmNlIG9mIEF4aW9zXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUluc3RhbmNlKGRlZmF1bHRDb25maWcpIHtcbiAgdmFyIGNvbnRleHQgPSBuZXcgQXhpb3MoZGVmYXVsdENvbmZpZyk7XG4gIHZhciBpbnN0YW5jZSA9IGJpbmQoQXhpb3MucHJvdG90eXBlLnJlcXVlc3QsIGNvbnRleHQpO1xuXG4gIC8vIENvcHkgYXhpb3MucHJvdG90eXBlIHRvIGluc3RhbmNlXG4gIHV0aWxzLmV4dGVuZChpbnN0YW5jZSwgQXhpb3MucHJvdG90eXBlLCBjb250ZXh0KTtcblxuICAvLyBDb3B5IGNvbnRleHQgdG8gaW5zdGFuY2VcbiAgdXRpbHMuZXh0ZW5kKGluc3RhbmNlLCBjb250ZXh0KTtcblxuICAvLyBGYWN0b3J5IGZvciBjcmVhdGluZyBuZXcgaW5zdGFuY2VzXG4gIGluc3RhbmNlLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZShpbnN0YW5jZUNvbmZpZykge1xuICAgIHJldHVybiBjcmVhdGVJbnN0YW5jZShtZXJnZUNvbmZpZyhkZWZhdWx0Q29uZmlnLCBpbnN0YW5jZUNvbmZpZykpO1xuICB9O1xuXG4gIHJldHVybiBpbnN0YW5jZTtcbn1cblxuLy8gQ3JlYXRlIHRoZSBkZWZhdWx0IGluc3RhbmNlIHRvIGJlIGV4cG9ydGVkXG52YXIgYXhpb3MgPSBjcmVhdGVJbnN0YW5jZShkZWZhdWx0cyk7XG5cbi8vIEV4cG9zZSBBeGlvcyBjbGFzcyB0byBhbGxvdyBjbGFzcyBpbmhlcml0YW5jZVxuYXhpb3MuQXhpb3MgPSBBeGlvcztcblxuLy8gRXhwb3NlIENhbmNlbCAmIENhbmNlbFRva2VuXG5heGlvcy5DYW5jZWxlZEVycm9yID0gcmVxdWlyZSgnLi9jYW5jZWwvQ2FuY2VsZWRFcnJvcicpO1xuYXhpb3MuQ2FuY2VsVG9rZW4gPSByZXF1aXJlKCcuL2NhbmNlbC9DYW5jZWxUb2tlbicpO1xuYXhpb3MuaXNDYW5jZWwgPSByZXF1aXJlKCcuL2NhbmNlbC9pc0NhbmNlbCcpO1xuYXhpb3MuVkVSU0lPTiA9IHJlcXVpcmUoJy4vZW52L2RhdGEnKS52ZXJzaW9uO1xuYXhpb3MudG9Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vaGVscGVycy90b0Zvcm1EYXRhJyk7XG5cbi8vIEV4cG9zZSBBeGlvc0Vycm9yIGNsYXNzXG5heGlvcy5BeGlvc0Vycm9yID0gcmVxdWlyZSgnLi4vbGliL2NvcmUvQXhpb3NFcnJvcicpO1xuXG4vLyBhbGlhcyBmb3IgQ2FuY2VsZWRFcnJvciBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eVxuYXhpb3MuQ2FuY2VsID0gYXhpb3MuQ2FuY2VsZWRFcnJvcjtcblxuLy8gRXhwb3NlIGFsbC9zcHJlYWRcbmF4aW9zLmFsbCA9IGZ1bmN0aW9uIGFsbChwcm9taXNlcykge1xuICByZXR1cm4gUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xufTtcbmF4aW9zLnNwcmVhZCA9IHJlcXVpcmUoJy4vaGVscGVycy9zcHJlYWQnKTtcblxuLy8gRXhwb3NlIGlzQXhpb3NFcnJvclxuYXhpb3MuaXNBeGlvc0Vycm9yID0gcmVxdWlyZSgnLi9oZWxwZXJzL2lzQXhpb3NFcnJvcicpO1xuXG5heGlvcy5mb3JtVG9KU09OID0gZnVuY3Rpb24odGhpbmcpIHtcbiAgcmV0dXJuIGZvcm1EYXRhVG9KU09OKHV0aWxzLmlzSFRNTEZvcm0odGhpbmcpID8gbmV3IEZvcm1EYXRhKHRoaW5nKSA6IHRoaW5nKTtcbn07XG5cbm1vZHVsZS5leHBvcnRzID0gYXhpb3M7XG5cbi8vIEFsbG93IHVzZSBvZiBkZWZhdWx0IGltcG9ydCBzeW50YXggaW4gVHlwZVNjcmlwdFxubW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGF4aW9zO1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgQXhpb3NFcnJvciA9IHJlcXVpcmUoJy4uL2NvcmUvQXhpb3NFcnJvcicpO1xudmFyIHV0aWxzID0gcmVxdWlyZSgnLi4vdXRpbHMnKTtcblxuLyoqXG4gKiBBIGBDYW5jZWxlZEVycm9yYCBpcyBhbiBvYmplY3QgdGhhdCBpcyB0aHJvd24gd2hlbiBhbiBvcGVyYXRpb24gaXMgY2FuY2VsZWQuXG4gKlxuICogQGNsYXNzXG4gKiBAcGFyYW0ge3N0cmluZz19IG1lc3NhZ2UgVGhlIG1lc3NhZ2UuXG4gKiBAcGFyYW0ge09iamVjdD19IGNvbmZpZyBUaGUgY29uZmlnLlxuICogQHBhcmFtIHtPYmplY3Q9fSByZXF1ZXN0IFRoZSByZXF1ZXN0LlxuICovXG5mdW5jdGlvbiBDYW5jZWxlZEVycm9yKG1lc3NhZ2UsIGNvbmZpZywgcmVxdWVzdCkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZXEtbnVsbCxlcWVxZXFcbiAgQXhpb3NFcnJvci5jYWxsKHRoaXMsIG1lc3NhZ2UgPT0gbnVsbCA/ICdjYW5jZWxlZCcgOiBtZXNzYWdlLCBBeGlvc0Vycm9yLkVSUl9DQU5DRUxFRCwgY29uZmlnLCByZXF1ZXN0KTtcbiAgdGhpcy5uYW1lID0gJ0NhbmNlbGVkRXJyb3InO1xufVxuXG51dGlscy5pbmhlcml0cyhDYW5jZWxlZEVycm9yLCBBeGlvc0Vycm9yLCB7XG4gIF9fQ0FOQ0VMX186IHRydWVcbn0pO1xuXG5tb2R1bGUuZXhwb3J0cyA9IENhbmNlbGVkRXJyb3I7XG4iLCIndXNlIHN0cmljdCc7XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmluZChmbiwgdGhpc0FyZykge1xuICByZXR1cm4gZnVuY3Rpb24gd3JhcCgpIHtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhpc0FyZywgYXJndW1lbnRzKTtcbiAgfTtcbn07XG4iLCIndXNlIHN0cmljdCc7XG5cbnZhciB1dGlscyA9IHJlcXVpcmUoJy4uL3V0aWxzJyk7XG52YXIgQXhpb3NVUkxTZWFyY2hQYXJhbXMgPSByZXF1aXJlKCcuLi9oZWxwZXJzL0F4aW9zVVJMU2VhcmNoUGFyYW1zJyk7XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWwpIHtcbiAgcmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudCh2YWwpLlxuICAgIHJlcGxhY2UoLyUzQS9naSwgJzonKS5cbiAgICByZXBsYWNlKC8lMjQvZywgJyQnKS5cbiAgICByZXBsYWNlKC8lMkMvZ2ksICcsJykuXG4gICAgcmVwbGFjZSgvJTIwL2csICcrJykuXG4gICAgcmVwbGFjZSgvJTVCL2dpLCAnWycpLlxuICAgIHJlcGxhY2UoLyU1RC9naSwgJ10nKTtcbn1cblxuLyoqXG4gKiBCdWlsZCBhIFVSTCBieSBhcHBlbmRpbmcgcGFyYW1zIHRvIHRoZSBlbmRcbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSBiYXNlIG9mIHRoZSB1cmwgKGUuZy4sIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbSlcbiAqIEBwYXJhbSB7b2JqZWN0fSBbcGFyYW1zXSBUaGUgcGFyYW1zIHRvIGJlIGFwcGVuZGVkXG4gKiBAcGFyYW0gez9vYmplY3R9IG9wdGlvbnNcbiAqIEByZXR1cm5zIHtzdHJpbmd9IFRoZSBmb3JtYXR0ZWQgdXJsXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYnVpbGRVUkwodXJsLCBwYXJhbXMsIG9wdGlvbnMpIHtcbiAgLyplc2xpbnQgbm8tcGFyYW0tcmVhc3NpZ246MCovXG4gIGlmICghcGFyYW1zKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuXG4gIHZhciBoYXNobWFya0luZGV4ID0gdXJsLmluZGV4T2YoJyMnKTtcblxuICBpZiAoaGFzaG1hcmtJbmRleCAhPT0gLTEpIHtcbiAgICB1cmwgPSB1cmwuc2xpY2UoMCwgaGFzaG1hcmtJbmRleCk7XG4gIH1cblxuICB2YXIgX2VuY29kZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5lbmNvZGUgfHwgZW5jb2RlO1xuXG4gIHZhciBzZXJpYWxpemVGbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5zZXJpYWxpemU7XG5cbiAgdmFyIHNlcmlhbGl6ZWRQYXJhbXM7XG5cbiAgaWYgKHNlcmlhbGl6ZUZuKSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHNlcmlhbGl6ZUZuKHBhcmFtcywgb3B0aW9ucyk7XG4gIH0gZWxzZSB7XG4gICAgc2VyaWFsaXplZFBhcmFtcyA9IHV0aWxzLmlzVVJMU2VhcmNoUGFyYW1zKHBhcmFtcykgP1xuICAgICAgcGFyYW1zLnRvU3RyaW5nKCkgOlxuICAgICAgbmV3IEF4aW9zVVJMU2VhcmNoUGFyYW1zKHBhcmFtcywgb3B0aW9ucykudG9TdHJpbmcoX2VuY29kZSk7XG4gIH1cblxuICBpZiAoc2VyaWFsaXplZFBhcmFtcykge1xuICAgIHVybCArPSAodXJsLmluZGV4T2YoJz8nKSA9PT0gLTEgPyAnPycgOiAnJicpICsgc2VyaWFsaXplZFBhcmFtcztcbiAgfVxuXG4gIHJldHVybiB1cmw7XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG4vKipcbiAqIERldGVybWluZXMgd2hldGhlciB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIFVSTCB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgc3BlY2lmaWVkIFVSTCBpcyBhYnNvbHV0ZSwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gaXNBYnNvbHV0ZVVSTCh1cmwpIHtcbiAgLy8gQSBVUkwgaXMgY29uc2lkZXJlZCBhYnNvbHV0ZSBpZiBpdCBiZWdpbnMgd2l0aCBcIjxzY2hlbWU+Oi8vXCIgb3IgXCIvL1wiIChwcm90b2NvbC1yZWxhdGl2ZSBVUkwpLlxuICAvLyBSRkMgMzk4NiBkZWZpbmVzIHNjaGVtZSBuYW1lIGFzIGEgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycyBiZWdpbm5pbmcgd2l0aCBhIGxldHRlciBhbmQgZm9sbG93ZWRcbiAgLy8gYnkgYW55IGNvbWJpbmF0aW9uIG9mIGxldHRlcnMsIGRpZ2l0cywgcGx1cywgcGVyaW9kLCBvciBoeXBoZW4uXG4gIHJldHVybiAvXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdCh1cmwpO1xufTtcbiIsIid1c2Ugc3RyaWN0JztcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQnJvd3NlcjogdHJ1ZSxcbiAgY2xhc3Nlczoge1xuICAgIFVSTFNlYXJjaFBhcmFtczogcmVxdWlyZSgnLi9jbGFzc2VzL1VSTFNlYXJjaFBhcmFtcycpLFxuICAgIEZvcm1EYXRhOiByZXF1aXJlKCcuL2NsYXNzZXMvRm9ybURhdGEnKSxcbiAgICBCbG9iOiBCbG9iXG4gIH0sXG4gIHByb3RvY29sczogWydodHRwJywgJ2h0dHBzJywgJ2ZpbGUnLCAnYmxvYicsICd1cmwnLCAnZGF0YSddXG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgYmluZCA9IHJlcXVpcmUoJy4vaGVscGVycy9iaW5kJyk7XG5cbi8vIHV0aWxzIGlzIGEgbGlicmFyeSBvZiBnZW5lcmljIGhlbHBlciBmdW5jdGlvbnMgbm9uLXNwZWNpZmljIHRvIGF4aW9zXG5cbnZhciB0b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7XG5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG52YXIga2luZE9mID0gKGZ1bmN0aW9uKGNhY2hlKSB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBmdW5jLW5hbWVzXG4gIHJldHVybiBmdW5jdGlvbih0aGluZykge1xuICAgIHZhciBzdHIgPSB0b1N0cmluZy5jYWxsKHRoaW5nKTtcbiAgICByZXR1cm4gY2FjaGVbc3RyXSB8fCAoY2FjaGVbc3RyXSA9IHN0ci5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKSk7XG4gIH07XG59KShPYmplY3QuY3JlYXRlKG51bGwpKTtcblxuZnVuY3Rpb24ga2luZE9mVGVzdCh0eXBlKSB7XG4gIHR5cGUgPSB0eXBlLnRvTG93ZXJDYXNlKCk7XG4gIHJldHVybiBmdW5jdGlvbiBpc0tpbmRPZih0aGluZykge1xuICAgIHJldHVybiBraW5kT2YodGhpbmcpID09PSB0eXBlO1xuICB9O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYW4gQXJyYXksIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0FycmF5KHZhbCkge1xuICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIHVuZGVmaW5lZFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHRoZSB2YWx1ZSBpcyB1bmRlZmluZWQsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1VuZGVmaW5lZCh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICd1bmRlZmluZWQnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgQnVmZmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBCdWZmZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc0J1ZmZlcih2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gbnVsbCAmJiAhaXNVbmRlZmluZWQodmFsKSAmJiB2YWwuY29uc3RydWN0b3IgIT09IG51bGwgJiYgIWlzVW5kZWZpbmVkKHZhbC5jb25zdHJ1Y3RvcilcbiAgICAmJiB0eXBlb2YgdmFsLmNvbnN0cnVjdG9yLmlzQnVmZmVyID09PSAnZnVuY3Rpb24nICYmIHZhbC5jb25zdHJ1Y3Rvci5pc0J1ZmZlcih2YWwpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIEFycmF5QnVmZmVyXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0FycmF5QnVmZmVyID0ga2luZE9mVGVzdCgnQXJyYXlCdWZmZXInKTtcblxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlclxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgdmlldyBvbiBhbiBBcnJheUJ1ZmZlciwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzQXJyYXlCdWZmZXJWaWV3KHZhbCkge1xuICB2YXIgcmVzdWx0O1xuICBpZiAoKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcpICYmIChBcnJheUJ1ZmZlci5pc1ZpZXcpKSB7XG4gICAgcmVzdWx0ID0gQXJyYXlCdWZmZXIuaXNWaWV3KHZhbCk7XG4gIH0gZWxzZSB7XG4gICAgcmVzdWx0ID0gKHZhbCkgJiYgKHZhbC5idWZmZXIpICYmIChpc0FycmF5QnVmZmVyKHZhbC5idWZmZXIpKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgU3RyaW5nXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBTdHJpbmcsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc1N0cmluZyh2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgTnVtYmVyXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBOdW1iZXIsIG90aGVyd2lzZSBmYWxzZVxuICovXG5mdW5jdGlvbiBpc051bWJlcih2YWwpIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWwgPT09ICdudW1iZXInO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGFuIE9iamVjdFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzT2JqZWN0KHZhbCkge1xuICByZXR1cm4gdmFsICE9PSBudWxsICYmIHR5cGVvZiB2YWwgPT09ICdvYmplY3QnO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgcGxhaW4gT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIHBsYWluIE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsKSB7XG4gIGlmIChraW5kT2YodmFsKSAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCk7XG4gIHJldHVybiBwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgZW1wdHkgT2JqZWN0XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIGVtcHR5IE9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbmZ1bmN0aW9uIGlzRW1wdHlPYmplY3QodmFsKSB7XG4gIHJldHVybiB2YWwgJiYgT2JqZWN0LmtleXModmFsKS5sZW5ndGggPT09IDAgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbCkgPT09IE9iamVjdC5wcm90b3R5cGU7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBEYXRlXG4gKlxuICogQGZ1bmN0aW9uXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIERhdGUsIG90aGVyd2lzZSBmYWxzZVxuICovXG52YXIgaXNEYXRlID0ga2luZE9mVGVzdCgnRGF0ZScpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRmlsZVxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZSA9IGtpbmRPZlRlc3QoJ0ZpbGUnKTtcblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIEJsb2JcbiAqXG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgQmxvYiwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc0Jsb2IgPSBraW5kT2ZUZXN0KCdCbG9iJyk7XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBGaWxlTGlzdFxuICpcbiAqIEBmdW5jdGlvblxuICogQHBhcmFtIHtPYmplY3R9IHZhbCBUaGUgdmFsdWUgdG8gdGVzdFxuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdmFsdWUgaXMgYSBGaWxlLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xudmFyIGlzRmlsZUxpc3QgPSBraW5kT2ZUZXN0KCdGaWxlTGlzdCcpO1xuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRnVuY3Rpb25cbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdmFsIFRoZSB2YWx1ZSB0byB0ZXN0XG4gKiBAcmV0dXJucyB7Ym9vbGVhbn0gVHJ1ZSBpZiB2YWx1ZSBpcyBhIEZ1bmN0aW9uLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGdW5jdGlvbih2YWwpIHtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwodmFsKSA9PT0gJ1tvYmplY3QgRnVuY3Rpb25dJztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgYSB2YWx1ZSBpcyBhIFN0cmVhbVxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgU3RyZWFtLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNTdHJlYW0odmFsKSB7XG4gIHJldHVybiBpc09iamVjdCh2YWwpICYmIGlzRnVuY3Rpb24odmFsLnBpcGUpO1xufVxuXG4vKipcbiAqIERldGVybWluZSBpZiBhIHZhbHVlIGlzIGEgRm9ybURhdGFcbiAqXG4gKiBAcGFyYW0ge09iamVjdH0gdGhpbmcgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGFuIEZvcm1EYXRhLCBvdGhlcndpc2UgZmFsc2VcbiAqL1xuZnVuY3Rpb24gaXNGb3JtRGF0YSh0aGluZykge1xuICB2YXIgcGF0dGVybiA9ICdbb2JqZWN0IEZvcm1EYXRhXSc7XG4gIHJldHVybiB0aGluZyAmJiAoXG4gICAgKHR5cGVvZiBGb3JtRGF0YSA9PT0gJ2Z1bmN0aW9uJyAmJiB0aGluZyBpbnN0YW5jZW9mIEZvcm1EYXRhKSB8fFxuICAgIHRvU3RyaW5nLmNhbGwodGhpbmcpID09PSBwYXR0ZXJuIHx8XG4gICAgKGlzRnVuY3Rpb24odGhpbmcudG9TdHJpbmcpICYmIHRoaW5nLnRvU3RyaW5nKCkgPT09IHBhdHRlcm4pXG4gICk7XG59XG5cbi8qKlxuICogRGV0ZXJtaW5lIGlmIGEgdmFsdWUgaXMgYSBVUkxTZWFyY2hQYXJhbXMgb2JqZWN0XG4gKiBAZnVuY3Rpb25cbiAqIEBwYXJhbSB7T2JqZWN0fSB2YWwgVGhlIHZhbHVlIHRvIHRlc3RcbiAqIEByZXR1cm5zIHtib29sZWFufSBUcnVlIGlmIHZhbHVlIGlzIGEgVVJMU2VhcmNoUGFyYW1zIG9iamVjdCwgb3RoZXJ3aXNlIGZhbHNlXG4gKi9cbnZhciBpc1VSTFNlYXJjaFBhcmFtcyA9IGtpbmRPZlRlc3QoJ1VSTFNlYXJjaFBhcmFtcycpO1xuXG4vKipcbiAqIFRyaW0gZXhjZXNzIHdoaXRlc3BhY2Ugb2ZmIHRoZSBiZWdpbm5pbmcgYW5kIGVuZCBvZiBhIHN0cmluZ1xuICpcbiAqIEBwYXJhbSB7U3RyaW5nfSBzdHIgVGhlIFN0cmluZyB0byB0cmltXG4gKiBAcmV0dXJucyB7U3RyaW5nfSBUaGUgU3RyaW5nIGZyZWVkIG9mIGV4Y2VzcyB3aGl0ZXNwYWNlXG4gKi9cbmZ1bmN0aW9uIHRyaW0oc3RyKSB7XG4gIHJldHVybiBzdHIudHJpbSA/IHN0ci50cmltKCkgOiBzdHIucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csICcnKTtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmUgaWYgd2UncmUgcnVubmluZyBpbiBhIHN0YW5kYXJkIGJyb3dzZXIgZW52aXJvbm1lbnRcbiAqXG4gKiBUaGlzIGFsbG93cyBheGlvcyB0byBydW4gaW4gYSB3ZWIgd29ya2VyLCBhbmQgcmVhY3QtbmF0aXZlLlxuICogQm90aCBlbnZpcm9ubWVudHMgc3VwcG9ydCBYTUxIdHRwUmVxdWVzdCwgYnV0IG5vdCBmdWxseSBzdGFuZGFyZCBnbG9iYWxzLlxuICpcbiAqIHdlYiB3b3JrZXJzOlxuICogIHR5cGVvZiB3aW5kb3cgLT4gdW5kZWZpbmVkXG4gKiAgdHlwZW9mIGRvY3VtZW50IC0+IHVuZGVmaW5lZFxuICpcbiAqIHJlYWN0LW5hdGl2ZTpcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnUmVhY3ROYXRpdmUnXG4gKiBuYXRpdmVzY3JpcHRcbiAqICBuYXZpZ2F0b3IucHJvZHVjdCAtPiAnTmF0aXZlU2NyaXB0JyBvciAnTlMnXG4gKi9cbmZ1bmN0aW9uIGlzU3RhbmRhcmRCcm93c2VyRW52KCkge1xuICB2YXIgcHJvZHVjdDtcbiAgaWYgKHR5cGVvZiBuYXZpZ2F0b3IgIT09ICd1bmRlZmluZWQnICYmIChcbiAgICAocHJvZHVjdCA9IG5hdmlnYXRvci5wcm9kdWN0KSA9PT0gJ1JlYWN0TmF0aXZlJyB8fFxuICAgIHByb2R1Y3QgPT09ICdOYXRpdmVTY3JpcHQnIHx8XG4gICAgcHJvZHVjdCA9PT0gJ05TJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnICYmIHR5cGVvZiBkb2N1bWVudCAhPT0gJ3VuZGVmaW5lZCc7XG59XG5cbi8qKlxuICogSXRlcmF0ZSBvdmVyIGFuIEFycmF5IG9yIGFuIE9iamVjdCBpbnZva2luZyBhIGZ1bmN0aW9uIGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgYG9iamAgaXMgYW4gQXJyYXkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgcGFzc2luZ1xuICogdGhlIHZhbHVlLCBpbmRleCwgYW5kIGNvbXBsZXRlIGFycmF5IGZvciBlYWNoIGl0ZW0uXG4gKlxuICogSWYgJ29iaicgaXMgYW4gT2JqZWN0IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHBhc3NpbmdcbiAqIHRoZSB2YWx1ZSwga2V5LCBhbmQgY29tcGxldGUgb2JqZWN0IGZvciBlYWNoIHByb3BlcnR5LlxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fEFycmF5fSBvYmogVGhlIG9iamVjdCB0byBpdGVyYXRlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgY2FsbGJhY2sgdG8gaW52b2tlIGZvciBlYWNoIGl0ZW1cbiAqL1xuZnVuY3Rpb24gZm9yRWFjaChvYmosIGZuKSB7XG4gIC8vIERvbid0IGJvdGhlciBpZiBubyB2YWx1ZSBwcm92aWRlZFxuICBpZiAob2JqID09PSBudWxsIHx8IHR5cGVvZiBvYmogPT09ICd1bmRlZmluZWQnKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gRm9yY2UgYW4gYXJyYXkgaWYgbm90IGFscmVhZHkgc29tZXRoaW5nIGl0ZXJhYmxlXG4gIGlmICh0eXBlb2Ygb2JqICE9PSAnb2JqZWN0Jykge1xuICAgIC8qZXNsaW50IG5vLXBhcmFtLXJlYXNzaWduOjAqL1xuICAgIG9iaiA9IFtvYmpdO1xuICB9XG5cbiAgaWYgKGlzQXJyYXkob2JqKSkge1xuICAgIC8vIEl0ZXJhdGUgb3ZlciBhcnJheSB2YWx1ZXNcbiAgICBmb3IgKHZhciBpID0gMCwgbCA9IG9iai5sZW5ndGg7IGkgPCBsOyBpKyspIHtcbiAgICAgIGZuLmNhbGwobnVsbCwgb2JqW2ldLCBpLCBvYmopO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICAvLyBJdGVyYXRlIG92ZXIgb2JqZWN0IGtleXNcbiAgICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7XG4gICAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iaiwga2V5KSkge1xuICAgICAgICBmbi5jYWxsKG51bGwsIG9ialtrZXldLCBrZXksIG9iaik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogQWNjZXB0cyB2YXJhcmdzIGV4cGVjdGluZyBlYWNoIGFyZ3VtZW50IHRvIGJlIGFuIG9iamVjdCwgdGhlblxuICogaW1tdXRhYmx5IG1lcmdlcyB0aGUgcHJvcGVydGllcyBvZiBlYWNoIG9iamVjdCBhbmQgcmV0dXJucyByZXN1bHQuXG4gKlxuICogV2hlbiBtdWx0aXBsZSBvYmplY3RzIGNvbnRhaW4gdGhlIHNhbWUga2V5IHRoZSBsYXRlciBvYmplY3QgaW5cbiAqIHRoZSBhcmd1bWVudHMgbGlzdCB3aWxsIHRha2UgcHJlY2VkZW5jZS5cbiAqXG4gKiBFeGFtcGxlOlxuICpcbiAqIGBgYGpzXG4gKiB2YXIgcmVzdWx0ID0gbWVyZ2Uoe2ZvbzogMTIzfSwge2ZvbzogNDU2fSk7XG4gKiBjb25zb2xlLmxvZyhyZXN1bHQuZm9vKTsgLy8gb3V0cHV0cyA0NTZcbiAqIGBgYFxuICpcbiAqIEBwYXJhbSB7T2JqZWN0fSBvYmoxIE9iamVjdCB0byBtZXJnZVxuICogQHJldHVybnMge09iamVjdH0gUmVzdWx0IG9mIGFsbCBtZXJnZSBwcm9wZXJ0aWVzXG4gKi9cbmZ1bmN0aW9uIG1lcmdlKC8qIG9iajEsIG9iajIsIG9iajMsIC4uLiAqLykge1xuICB2YXIgcmVzdWx0ID0ge307XG4gIGZ1bmN0aW9uIGFzc2lnblZhbHVlKHZhbCwga2V5KSB7XG4gICAgaWYgKGlzUGxhaW5PYmplY3QocmVzdWx0W2tleV0pICYmIGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZShyZXN1bHRba2V5XSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzUGxhaW5PYmplY3QodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBtZXJnZSh7fSwgdmFsKTtcbiAgICB9IGVsc2UgaWYgKGlzQXJyYXkodmFsKSkge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWwuc2xpY2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmVzdWx0W2tleV0gPSB2YWw7XG4gICAgfVxuICB9XG5cbiAgZm9yICh2YXIgaSA9IDAsIGwgPSBhcmd1bWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrKSB7XG4gICAgZm9yRWFjaChhcmd1bWVudHNbaV0sIGFzc2lnblZhbHVlKTtcbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuXG4vKipcbiAqIEV4dGVuZHMgb2JqZWN0IGEgYnkgbXV0YWJseSBhZGRpbmcgdG8gaXQgdGhlIHByb3BlcnRpZXMgb2Ygb2JqZWN0IGIuXG4gKlxuICogQHBhcmFtIHtPYmplY3R9IGEgVGhlIG9iamVjdCB0byBiZSBleHRlbmRlZFxuICogQHBhcmFtIHtPYmplY3R9IGIgVGhlIG9iamVjdCB0byBjb3B5IHByb3BlcnRpZXMgZnJvbVxuICogQHBhcmFtIHtPYmplY3R9IHRoaXNBcmcgVGhlIG9iamVjdCB0byBiaW5kIGZ1bmN0aW9uIHRvXG4gKiBAcmV0dXJuIHtPYmplY3R9IFRoZSByZXN1bHRpbmcgdmFsdWUgb2Ygb2JqZWN0IGFcbiAqL1xuZnVuY3Rpb24gZXh0ZW5kKGEsIGIsIHRoaXNBcmcpIHtcbiAgZm9yRWFjaChiLCBmdW5jdGlvbiBhc3NpZ25WYWx1ZSh2YWwsIGtleSkge1xuICAgIGlmICh0aGlzQXJnICYmIHR5cGVvZiB2YWwgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGFba2V5XSA9IGJpbmQodmFsLCB0aGlzQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYVtrZXldID0gdmFsO1xuICAgIH1cbiAgfSk7XG4gIHJldHVybiBhO1xufVxuXG4vKipcbiAqIFJlbW92ZSBieXRlIG9yZGVyIG1hcmtlci4gVGhpcyBjYXRjaGVzIEVGIEJCIEJGICh0aGUgVVRGLTggQk9NKVxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBjb250ZW50IHdpdGggQk9NXG4gKiBAcmV0dXJuIHtzdHJpbmd9IGNvbnRlbnQgdmFsdWUgd2l0aG91dCBCT01cbiAqL1xuZnVuY3Rpb24gc3RyaXBCT00oY29udGVudCkge1xuICBpZiAoY29udGVudC5jaGFyQ29kZUF0KDApID09PSAweEZFRkYpIHtcbiAgICBjb250ZW50ID0gY29udGVudC5zbGljZSgxKTtcbiAgfVxuICByZXR1cm4gY29udGVudDtcbn1cblxuLyoqXG4gKiBJbmhlcml0IHRoZSBwcm90b3R5cGUgbWV0aG9kcyBmcm9tIG9uZSBjb25zdHJ1Y3RvciBpbnRvIGFub3RoZXJcbiAqIEBwYXJhbSB7ZnVuY3Rpb259IGNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge2Z1bmN0aW9ufSBzdXBlckNvbnN0cnVjdG9yXG4gKiBAcGFyYW0ge29iamVjdH0gW3Byb3BzXVxuICogQHBhcmFtIHtvYmplY3R9IFtkZXNjcmlwdG9yc11cbiAqL1xuXG5mdW5jdGlvbiBpbmhlcml0cyhjb25zdHJ1Y3Rvciwgc3VwZXJDb25zdHJ1Y3RvciwgcHJvcHMsIGRlc2NyaXB0b3JzKSB7XG4gIGNvbnN0cnVjdG9yLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoc3VwZXJDb25zdHJ1Y3Rvci5wcm90b3R5cGUsIGRlc2NyaXB0b3JzKTtcbiAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gY29uc3RydWN0b3I7XG4gIHByb3BzICYmIE9iamVjdC5hc3NpZ24oY29uc3RydWN0b3IucHJvdG90eXBlLCBwcm9wcyk7XG59XG5cbi8qKlxuICogUmVzb2x2ZSBvYmplY3Qgd2l0aCBkZWVwIHByb3RvdHlwZSBjaGFpbiB0byBhIGZsYXQgb2JqZWN0XG4gKiBAcGFyYW0ge09iamVjdH0gc291cmNlT2JqIHNvdXJjZSBvYmplY3RcbiAqIEBwYXJhbSB7T2JqZWN0fSBbZGVzdE9ial1cbiAqIEBwYXJhbSB7RnVuY3Rpb258Qm9vbGVhbn0gW2ZpbHRlcl1cbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtwcm9wRmlsdGVyXVxuICogQHJldHVybnMge09iamVjdH1cbiAqL1xuXG5mdW5jdGlvbiB0b0ZsYXRPYmplY3Qoc291cmNlT2JqLCBkZXN0T2JqLCBmaWx0ZXIsIHByb3BGaWx0ZXIpIHtcbiAgdmFyIHByb3BzO1xuICB2YXIgaTtcbiAgdmFyIHByb3A7XG4gIHZhciBtZXJnZWQgPSB7fTtcblxuICBkZXN0T2JqID0gZGVzdE9iaiB8fCB7fTtcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVxLW51bGwsZXFlcWVxXG4gIGlmIChzb3VyY2VPYmogPT0gbnVsbCkgcmV0dXJuIGRlc3RPYmo7XG5cbiAgZG8ge1xuICAgIHByb3BzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoc291cmNlT2JqKTtcbiAgICBpID0gcHJvcHMubGVuZ3RoO1xuICAgIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgICBwcm9wID0gcHJvcHNbaV07XG4gICAgICBpZiAoKCFwcm9wRmlsdGVyIHx8IHByb3BGaWx0ZXIocHJvcCwgc291cmNlT2JqLCBkZXN0T2JqKSkgJiYgIW1lcmdlZFtwcm9wXSkge1xuICAgICAgICBkZXN0T2JqW3Byb3BdID0gc291cmNlT2JqW3Byb3BdO1xuICAgICAgICBtZXJnZWRbcHJvcF0gPSB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBzb3VyY2VPYmogPSBmaWx0ZXIgIT09IGZhbHNlICYmIE9iamVjdC5nZXRQcm90b3R5cGVPZihzb3VyY2VPYmopO1xuICB9IHdoaWxlIChzb3VyY2VPYmogJiYgKCFmaWx0ZXIgfHwgZmlsdGVyKHNvdXJjZU9iaiwgZGVzdE9iaikpICYmIHNvdXJjZU9iaiAhPT0gT2JqZWN0LnByb3RvdHlwZSk7XG5cbiAgcmV0dXJuIGRlc3RPYmo7XG59XG5cbi8qXG4gKiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBzdHJpbmcgZW5kcyB3aXRoIHRoZSBjaGFyYWN0ZXJzIG9mIGEgc3BlY2lmaWVkIHN0cmluZ1xuICogQHBhcmFtIHtTdHJpbmd9IHN0clxuICogQHBhcmFtIHtTdHJpbmd9IHNlYXJjaFN0cmluZ1xuICogQHBhcmFtIHtOdW1iZXJ9IFtwb3NpdGlvbj0gMF1cbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBlbmRzV2l0aChzdHIsIHNlYXJjaFN0cmluZywgcG9zaXRpb24pIHtcbiAgc3RyID0gU3RyaW5nKHN0cik7XG4gIGlmIChwb3NpdGlvbiA9PT0gdW5kZWZpbmVkIHx8IHBvc2l0aW9uID4gc3RyLmxlbmd0aCkge1xuICAgIHBvc2l0aW9uID0gc3RyLmxlbmd0aDtcbiAgfVxuICBwb3NpdGlvbiAtPSBzZWFyY2hTdHJpbmcubGVuZ3RoO1xuICB2YXIgbGFzdEluZGV4ID0gc3RyLmluZGV4T2Yoc2VhcmNoU3RyaW5nLCBwb3NpdGlvbik7XG4gIHJldHVybiBsYXN0SW5kZXggIT09IC0xICYmIGxhc3RJbmRleCA9PT0gcG9zaXRpb247XG59XG5cblxuLyoqXG4gKiBSZXR1cm5zIG5ldyBhcnJheSBmcm9tIGFycmF5IGxpa2Ugb2JqZWN0IG9yIG51bGwgaWYgZmFpbGVkXG4gKiBAcGFyYW0geyp9IFt0aGluZ11cbiAqIEByZXR1cm5zIHs/QXJyYXl9XG4gKi9cbmZ1bmN0aW9uIHRvQXJyYXkodGhpbmcpIHtcbiAgaWYgKCF0aGluZykgcmV0dXJuIG51bGw7XG4gIGlmIChpc0FycmF5KHRoaW5nKSkgcmV0dXJuIHRoaW5nO1xuICB2YXIgaSA9IHRoaW5nLmxlbmd0aDtcbiAgaWYgKCFpc051bWJlcihpKSkgcmV0dXJuIG51bGw7XG4gIHZhciBhcnIgPSBuZXcgQXJyYXkoaSk7XG4gIHdoaWxlIChpLS0gPiAwKSB7XG4gICAgYXJyW2ldID0gdGhpbmdbaV07XG4gIH1cbiAgcmV0dXJuIGFycjtcbn1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGZ1bmMtbmFtZXNcbnZhciBpc1R5cGVkQXJyYXkgPSAoZnVuY3Rpb24oVHlwZWRBcnJheSkge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZnVuYy1uYW1lc1xuICByZXR1cm4gZnVuY3Rpb24odGhpbmcpIHtcbiAgICByZXR1cm4gVHlwZWRBcnJheSAmJiB0aGluZyBpbnN0YW5jZW9mIFR5cGVkQXJyYXk7XG4gIH07XG59KSh0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgJiYgT2JqZWN0LmdldFByb3RvdHlwZU9mKFVpbnQ4QXJyYXkpKTtcblxuZnVuY3Rpb24gZm9yRWFjaEVudHJ5KG9iaiwgZm4pIHtcbiAgdmFyIGdlbmVyYXRvciA9IG9iaiAmJiBvYmpbU3ltYm9sLml0ZXJhdG9yXTtcblxuICB2YXIgaXRlcmF0b3IgPSBnZW5lcmF0b3IuY2FsbChvYmopO1xuXG4gIHZhciByZXN1bHQ7XG5cbiAgd2hpbGUgKChyZXN1bHQgPSBpdGVyYXRvci5uZXh0KCkpICYmICFyZXN1bHQuZG9uZSkge1xuICAgIHZhciBwYWlyID0gcmVzdWx0LnZhbHVlO1xuICAgIGZuLmNhbGwob2JqLCBwYWlyWzBdLCBwYWlyWzFdKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBtYXRjaEFsbChyZWdFeHAsIHN0cikge1xuICB2YXIgbWF0Y2hlcztcbiAgdmFyIGFyciA9IFtdO1xuXG4gIHdoaWxlICgobWF0Y2hlcyA9IHJlZ0V4cC5leGVjKHN0cikpICE9PSBudWxsKSB7XG4gICAgYXJyLnB1c2gobWF0Y2hlcyk7XG4gIH1cblxuICByZXR1cm4gYXJyO1xufVxuXG52YXIgaXNIVE1MRm9ybSA9IGtpbmRPZlRlc3QoJ0hUTUxGb3JtRWxlbWVudCcpO1xuXG52YXIgaGFzT3duUHJvcGVydHkgPSAoZnVuY3Rpb24gcmVzb2x2ZXIoX2hhc093blByb3BlcnR5KSB7XG4gIHJldHVybiBmdW5jdGlvbihvYmosIHByb3ApIHtcbiAgICByZXR1cm4gX2hhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKTtcbiAgfTtcbn0pKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkpO1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNBcnJheUJ1ZmZlcjogaXNBcnJheUJ1ZmZlcixcbiAgaXNCdWZmZXI6IGlzQnVmZmVyLFxuICBpc0Zvcm1EYXRhOiBpc0Zvcm1EYXRhLFxuICBpc0FycmF5QnVmZmVyVmlldzogaXNBcnJheUJ1ZmZlclZpZXcsXG4gIGlzU3RyaW5nOiBpc1N0cmluZyxcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICBpc09iamVjdDogaXNPYmplY3QsXG4gIGlzUGxhaW5PYmplY3Q6IGlzUGxhaW5PYmplY3QsXG4gIGlzRW1wdHlPYmplY3Q6IGlzRW1wdHlPYmplY3QsXG4gIGlzVW5kZWZpbmVkOiBpc1VuZGVmaW5lZCxcbiAgaXNEYXRlOiBpc0RhdGUsXG4gIGlzRmlsZTogaXNGaWxlLFxuICBpc0Jsb2I6IGlzQmxvYixcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNTdHJlYW06IGlzU3RyZWFtLFxuICBpc1VSTFNlYXJjaFBhcmFtczogaXNVUkxTZWFyY2hQYXJhbXMsXG4gIGlzU3RhbmRhcmRCcm93c2VyRW52OiBpc1N0YW5kYXJkQnJvd3NlckVudixcbiAgZm9yRWFjaDogZm9yRWFjaCxcbiAgbWVyZ2U6IG1lcmdlLFxuICBleHRlbmQ6IGV4dGVuZCxcbiAgdHJpbTogdHJpbSxcbiAgc3RyaXBCT006IHN0cmlwQk9NLFxuICBpbmhlcml0czogaW5oZXJpdHMsXG4gIHRvRmxhdE9iamVjdDogdG9GbGF0T2JqZWN0LFxuICBraW5kT2Y6IGtpbmRPZixcbiAga2luZE9mVGVzdDoga2luZE9mVGVzdCxcbiAgZW5kc1dpdGg6IGVuZHNXaXRoLFxuICB0b0FycmF5OiB0b0FycmF5LFxuICBpc1R5cGVkQXJyYXk6IGlzVHlwZWRBcnJheSxcbiAgaXNGaWxlTGlzdDogaXNGaWxlTGlzdCxcbiAgZm9yRWFjaEVudHJ5OiBmb3JFYWNoRW50cnksXG4gIG1hdGNoQWxsOiBtYXRjaEFsbCxcbiAgaXNIVE1MRm9ybTogaXNIVE1MRm9ybSxcbiAgaGFzT3duUHJvcGVydHk6IGhhc093blByb3BlcnR5XG59O1xuIiwiJ3VzZSBzdHJpY3QnO1xuXG52YXIgaXNBYnNvbHV0ZVVSTCA9IHJlcXVpcmUoJy4uL2hlbHBlcnMvaXNBYnNvbHV0ZVVSTCcpO1xudmFyIGNvbWJpbmVVUkxzID0gcmVxdWlyZSgnLi4vaGVscGVycy9jb21iaW5lVVJMcycpO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgVVJMIGJ5IGNvbWJpbmluZyB0aGUgYmFzZVVSTCB3aXRoIHRoZSByZXF1ZXN0ZWRVUkwsXG4gKiBvbmx5IHdoZW4gdGhlIHJlcXVlc3RlZFVSTCBpcyBub3QgYWxyZWFkeSBhbiBhYnNvbHV0ZSBVUkwuXG4gKiBJZiB0aGUgcmVxdWVzdFVSTCBpcyBhYnNvbHV0ZSwgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXF1ZXN0ZWRVUkwgdW50b3VjaGVkLlxuICpcbiAqIEBwYXJhbSB7c3RyaW5nfSBiYXNlVVJMIFRoZSBiYXNlIFVSTFxuICogQHBhcmFtIHtzdHJpbmd9IHJlcXVlc3RlZFVSTCBBYnNvbHV0ZSBvciByZWxhdGl2ZSBVUkwgdG8gY29tYmluZVxuICogQHBhcmFtIHtib29sZWFufSBhbGxvd0Fic29sdXRlVXJscyBTZXQgdG8gdHJ1ZSB0byBhbGxvdyBhYnNvbHV0ZSBVUkxzXG4gKlxuICogQHJldHVybnMge3N0cmluZ30gVGhlIGNvbWJpbmVkIGZ1bGwgcGF0aFxuICovXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGJ1aWxkRnVsbFBhdGgoYmFzZVVSTCwgcmVxdWVzdGVkVVJMLCBhbGxvd0Fic29sdXRlVXJscykge1xuICB2YXIgaXNSZWxhdGl2ZVVSTCA9ICFpc0Fic29sdXRlVVJMKHJlcXVlc3RlZFVSTCk7XG4gIGlmIChiYXNlVVJMICYmIChpc1JlbGF0aXZlVVJMIHx8IGFsbG93QWJzb2x1dGVVcmxzID09PSBmYWxzZSkpIHtcbiAgICByZXR1cm4gY29tYmluZVVSTHMoYmFzZVVSTCwgcmVxdWVzdGVkVVJMKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdGVkVVJMO1xufTtcbiIsIm1vZHVsZS5leHBvcnRzID0ge1xuICBcInZlcnNpb25cIjogXCIwLjMwLjBcIlxufTsiLCIvKiBcbihUaGUgTUlUIExpY2Vuc2UpXG5Db3B5cmlnaHQgKGMpIDIwMTQtMjAyMSBIYWzDoXN6IMOBZMOhbSA8YWRhbUBhaW1mb3JtLmNvbT5cblBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgXCJTb2Z0d2FyZVwiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6XG5UaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS5cblRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBcIkFTIElTXCIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLlxuKi9cblxuLy8gIFVuaXF1ZSBIZXhhdHJpZGVjaW1hbCBJRCBHZW5lcmF0b3Jcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuXG4vLyAgRGVwZW5kZW5jaWVzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbnZhciBwaWQgPSB0eXBlb2YgcHJvY2VzcyAhPT0gJ3VuZGVmaW5lZCcgJiYgcHJvY2Vzcy5waWQgPyBwcm9jZXNzLnBpZC50b1N0cmluZygzNikgOiAnJyA7XG52YXIgYWRkcmVzcyA9ICcnO1xuaWYodHlwZW9mIF9fd2VicGFja19yZXF1aXJlX18gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHJlcXVpcmUgIT09ICd1bmRlZmluZWQnKXtcbiAgICB2YXIgbWFjID0gJycsIG9zID0gcmVxdWlyZSgnb3MnKTsgXG4gICAgaWYob3MubmV0d29ya0ludGVyZmFjZXMpIHZhciBuZXR3b3JrSW50ZXJmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKCk7XG4gICAgaWYobmV0d29ya0ludGVyZmFjZXMpe1xuICAgICAgICBsb29wOlxuICAgICAgICBmb3IobGV0IGludGVyZmFjZV9rZXkgaW4gbmV0d29ya0ludGVyZmFjZXMpe1xuICAgICAgICAgICAgY29uc3QgbmV0d29ya0ludGVyZmFjZSA9IG5ldHdvcmtJbnRlcmZhY2VzW2ludGVyZmFjZV9rZXldO1xuICAgICAgICAgICAgY29uc3QgbGVuZ3RoID0gbmV0d29ya0ludGVyZmFjZS5sZW5ndGg7XG4gICAgICAgICAgICBmb3IodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspe1xuICAgICAgICAgICAgICAgIGlmKG5ldHdvcmtJbnRlcmZhY2VbaV0gIT09IHVuZGVmaW5lZCAmJiBuZXR3b3JrSW50ZXJmYWNlW2ldLm1hYyAmJiBuZXR3b3JrSW50ZXJmYWNlW2ldLm1hYyAhPSAnMDA6MDA6MDA6MDA6MDA6MDAnKXtcbiAgICAgICAgICAgICAgICAgICAgbWFjID0gbmV0d29ya0ludGVyZmFjZVtpXS5tYWM7IGJyZWFrIGxvb3A7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGFkZHJlc3MgPSBtYWMgPyBwYXJzZUludChtYWMucmVwbGFjZSgvXFw6fFxcRCsvZ2ksICcnKSkudG9TdHJpbmcoMzYpIDogJycgO1xuICAgIH1cbn0gXG5cbi8vICBFeHBvcnRzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbm1vZHVsZS5leHBvcnRzID0gbW9kdWxlLmV4cG9ydHMuZGVmYXVsdCA9IGZ1bmN0aW9uKHByZWZpeCwgc3VmZml4KXsgcmV0dXJuIChwcmVmaXggPyBwcmVmaXggOiAnJykgKyBhZGRyZXNzICsgcGlkICsgbm93KCkudG9TdHJpbmcoMzYpICsgKHN1ZmZpeCA/IHN1ZmZpeCA6ICcnKTsgfVxubW9kdWxlLmV4cG9ydHMucHJvY2VzcyA9IGZ1bmN0aW9uKHByZWZpeCwgc3VmZml4KXsgcmV0dXJuIChwcmVmaXggPyBwcmVmaXggOiAnJykgKyBwaWQgKyBub3coKS50b1N0cmluZygzNikgKyAoc3VmZml4ID8gc3VmZml4IDogJycpOyB9XG5tb2R1bGUuZXhwb3J0cy50aW1lICAgID0gZnVuY3Rpb24ocHJlZml4LCBzdWZmaXgpeyByZXR1cm4gKHByZWZpeCA/IHByZWZpeCA6ICcnKSArIG5vdygpLnRvU3RyaW5nKDM2KSArIChzdWZmaXggPyBzdWZmaXggOiAnJyk7IH1cblxuLy8gIEhlbHBlcnNcbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuZnVuY3Rpb24gbm93KCl7XG4gICAgdmFyIHRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHZhciBsYXN0ID0gbm93Lmxhc3QgfHwgdGltZTtcbiAgICByZXR1cm4gbm93Lmxhc3QgPSB0aW1lID4gbGFzdCA/IHRpbWUgOiBsYXN0ICsgMTtcbn1cbiIsIi8vIFRoZSBtb2R1bGUgY2FjaGVcbnZhciBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18gPSB7fTtcblxuLy8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbmZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblx0Ly8gQ2hlY2sgaWYgbW9kdWxlIGlzIGluIGNhY2hlXG5cdHZhciBjYWNoZWRNb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdO1xuXHRpZiAoY2FjaGVkTW9kdWxlICE9PSB1bmRlZmluZWQpIHtcblx0XHRyZXR1cm4gY2FjaGVkTW9kdWxlLmV4cG9ydHM7XG5cdH1cblx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcblx0dmFyIG1vZHVsZSA9IF9fd2VicGFja19tb2R1bGVfY2FjaGVfX1ttb2R1bGVJZF0gPSB7XG5cdFx0Ly8gbm8gbW9kdWxlLmlkIG5lZWRlZFxuXHRcdC8vIG5vIG1vZHVsZS5sb2FkZWQgbmVlZGVkXG5cdFx0ZXhwb3J0czoge31cblx0fTtcblxuXHQvLyBFeGVjdXRlIHRoZSBtb2R1bGUgZnVuY3Rpb25cblx0X193ZWJwYWNrX21vZHVsZXNfX1ttb2R1bGVJZF0obW9kdWxlLCBtb2R1bGUuZXhwb3J0cywgX193ZWJwYWNrX3JlcXVpcmVfXyk7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4iLCIvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuX193ZWJwYWNrX3JlcXVpcmVfXy5uID0gKG1vZHVsZSkgPT4ge1xuXHR2YXIgZ2V0dGVyID0gbW9kdWxlICYmIG1vZHVsZS5fX2VzTW9kdWxlID9cblx0XHQoKSA9PiAobW9kdWxlWydkZWZhdWx0J10pIDpcblx0XHQoKSA9PiAobW9kdWxlKTtcblx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgeyBhOiBnZXR0ZXIgfSk7XG5cdHJldHVybiBnZXR0ZXI7XG59OyIsIi8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb25zIGZvciBoYXJtb255IGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uZCA9IChleHBvcnRzLCBkZWZpbml0aW9uKSA9PiB7XG5cdGZvcih2YXIga2V5IGluIGRlZmluaXRpb24pIHtcblx0XHRpZihfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZGVmaW5pdGlvbiwga2V5KSAmJiAhX193ZWJwYWNrX3JlcXVpcmVfXy5vKGV4cG9ydHMsIGtleSkpIHtcblx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBrZXksIHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBkZWZpbml0aW9uW2tleV0gfSk7XG5cdFx0fVxuXHR9XG59OyIsIl9fd2VicGFja19yZXF1aXJlX18ubyA9IChvYmosIHByb3ApID0+IChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLCBwcm9wKSkiLCJpbXBvcnQge0N1c3RvbVdpbmRvd30gZnJvbSAnLi4vd2luZG93L0N1c3RvbVdpbmRvdyc7XG4vLyBjYXN0IGdsb2JhbCB2YXIgd2luZG93IHdpdGggQ3VzdG9tV2luZG93XG5kZWNsYXJlIGxldCB3aW5kb3c6IEN1c3RvbVdpbmRvdztcblxuLyogQSB1dGlsaXR5IGNsYXNzIHRvIHJldHJpdmUgYXV0aGVudGljYXRpb24gdG9rZW5cbiAqL1xuZXhwb3J0IGNsYXNzIEF1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyIHtcbiAgICBzdGF0aWMgYXN5bmMgZ2V0Q29tcGFjdFRpY2tldCgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAoISh3aW5kb3cubXNhdXRoICYmIHdpbmRvdy5tc2F1dGguQXV0aFRpY2tldCkpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTt9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93Lm1zYXV0aC5BdXRoVGlja2V0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgYXN5bmMgaXNVc2VyU2lnbmVkSW4oKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgICAgIGlmICghKHdpbmRvdy5tc2F1dGggJiYgd2luZG93Lm1zYXV0aC5BdXRoVGlja2V0KSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGZhbHNlKTt9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93Lm1zYXV0aC5BdXRoVGlja2V0ICE9PSBudWxsKTtcblxuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBnZXRVc2VyTmFtZSgpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAoISh3aW5kb3cubXNhdXRoICYmIHdpbmRvdy5tc2F1dGguRmlyc3ROYW1lKSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO31cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cubXNhdXRoLkZpcnN0TmFtZSk7XG4gICAgfVxuXG4gICAgc3RhdGljIGFzeW5jIGdldFVzZXJUeXBlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghKHdpbmRvdy5tc2F1dGggJiYgd2luZG93Lm1zYXV0aC5UeXBlKSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO31cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cubXNhdXRoLlR5cGUpO1xuICAgIH1cblxuICAgIHN0YXRpYyBhc3luYyBnZXRBdXRoVGlja2V0RXgoKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICAgICAgaWYgKCEod2luZG93Lm1zYXV0aCAmJiB3aW5kb3cubXNhdXRoLkF1dGhUaWNrZXRFeCkpIHsgcmV0dXJuIFByb21pc2UucmVzb2x2ZShudWxsKTt9XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUod2luZG93Lm1zYXV0aC5BdXRoVGlja2V0RXgpO1xuICAgIH1cbn1cbiIsImltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcbmltcG9ydCB7IEF1dGhlbnRpY2F0aW9uVG9rZW5IYW5kbGVyIH0gZnJvbSAnLi4vYXV0aGVudGljYXRpb24vQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXInO1xuXG4vKiBBZGQgdGhlIGF1dGggaGVhZGVyIHRvIHRoZSByZXF1ZXN0LiBJbiBjYXNlIHRoZSByZXF1ZXN0IGlzIHBhc3NlZCB3aXRoXG4gY3VzdG9tIGhlYWRlciBuYW1lIGFsb25nIHdpdGggdGhlIHByZWZpeCwgaXQgd2lsbCBiZSBzZXQuIFxuICovXG5jb25zdCBDb21wYWN0VGlja2V0SGVhZGVySW50ZXJjZXB0b3IgPSBhc3luYyAoY29uZmlnOiBBeGlvc0N1c3RvbUNvbmZpZykgPT4ge1xuICAgIGNvbnN0IGNvbXBhY3RUaWNrZXQgPSBhd2FpdCBBdXRoZW50aWNhdGlvblRva2VuSGFuZGxlci5nZXRDb21wYWN0VGlja2V0KCk7XG4gICAgY29uc3QgYXV0aFRpY2tldEV4ID0gYXdhaXQgQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIuZ2V0QXV0aFRpY2tldEV4KCk7XG4gICAgY29uc3QgdXNlclR5cGUgPSBhd2FpdCBBdXRoZW50aWNhdGlvblRva2VuSGFuZGxlci5nZXRVc2VyVHlwZSgpO1xuXG4gICAgLy9TZXQgdGhlIGF1dGhvcml6YXRpb24gaGVhZGVyIGFsb25nIHdpdGggdGhlIHByZWZpeCBpZiBwYXNzZWQgaW4gdGhlIGNvbmZpZ1xuICAgIGlmIChjb21wYWN0VGlja2V0ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKGNvbmZpZy5Db21wYWN0SGVhZGVyTmFtZSAhPSBudWxsXG4gICAgICAgICAgICAmJiBjb25maWcuQ29tcGFjdEhlYWRlclByZWZpeCAhPSBudWxsKSB7ICAgICAgICAgICAgXG4gICAgICAgICAgICBpZih1c2VyVHlwZSAhPSBudWxsICYmIHVzZXJUeXBlLnRvTG93ZXJDYXNlKCkgPT0gXCJhYWRcIiAmJiBjb25maWcuQWFkSGVhZGVyUHJlZml4ICYmIGF1dGhUaWNrZXRFeCAhPSBudWxsKXtcbiAgICAgICAgICAgICAgICBjb25maWcuaGVhZGVyc1tjb25maWcuQ29tcGFjdEhlYWRlck5hbWVdID0gY29uZmlnLkFhZEhlYWRlclByZWZpeCArIGF1dGhUaWNrZXRFeDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2V7XG4gICAgICAgICAgICAgICAgY29uZmlnLmhlYWRlcnNbY29uZmlnLkNvbXBhY3RIZWFkZXJOYW1lXSA9IGNvbmZpZy5Db21wYWN0SGVhZGVyUHJlZml4ICsgY29tcGFjdFRpY2tldDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvL1NldCB0aGUgY29tcGFjdCB0aWNrZXQgaGVhZGVyIGlmIHRoZSBjdXN0b20gaGVhZGVyIGlzIG5vdCBwYXNzZWRcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuaGVhZGVyc1snY29tcGFjdFRpY2tldCddID0gY29tcGFjdFRpY2tldDtcbiAgICAgICAgfVxuICAgIH07XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cbmV4cG9ydCBkZWZhdWx0IENvbXBhY3RUaWNrZXRIZWFkZXJJbnRlcmNlcHRvcjtcbiIsImltcG9ydCB7IEN1c3RvbVdpbmRvdyxJbmNyZW1lbnRDViB9IGZyb20gJy4uL3dpbmRvdy9DdXN0b21XaW5kb3cnO1xuIFxuLy8gY2FzdCBnbG9iYWwgdmFyIHdpbmRvdyB3aXRoIEN1c3RvbVdpbmRvd1xuZGVjbGFyZSBsZXQgd2luZG93OiBDdXN0b21XaW5kb3c7XG4gXG4vKiBBIHV0aWxpdHkgY2xhc3MgdG8gcmV0cml2ZSBNU0NWLiBXZSBzaGFsbCBpbmNyZW1lbnQgYW5kIHNldCB0aGUgdmFsdWUgaW4gdGhlIHJlcXVlc3QgaGVhZGVyIGlmIHRoZSBcbiAgICBDViBpcyBhdmFpbGFibGVcbiAqL1xuZXhwb3J0IGNsYXNzIE1zQ1ZIYW5kbGVyIHsgICAgIFxuICAgIHN0YXRpYyAgZ2V0TXNDVigpOiBJbmNyZW1lbnRDViB7XG4gICAgICAgIHJldHVybiB3aW5kb3cudGVsZW1ldHJ5ICYmIHdpbmRvdy50ZWxlbWV0cnkuY29ycmVsYXRpb25WZWN0b3JQbHVnaW4gPyB3aW5kb3cudGVsZW1ldHJ5LmNvcnJlbGF0aW9uVmVjdG9yUGx1Z2luLmdldEN2KCkgOiBudWxsO1xuICAgIH0gIFxufVxuIiwiaW1wb3J0IHsgQXhpb3NDdXN0b21Db25maWcgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnQnO1xuaW1wb3J0IHsgTXNDVkhhbmRsZXIgfSBmcm9tICcuLi9jdi9Nc0NWSGFuZGxlcic7XG5pbXBvcnQgdW5pcWlkIGZyb20gJ3VuaXFpZCc7XG5cbi8qIEFkZCBNc0NWIGhlYWRlciB0byByZXF1ZXN0IGFmdGVyIGluY3JlbWVudGluZyBpdCBzbyB0aGF0IHdlIHNlbmQgdW5pcXVlIENWIHZhbHVlIGluIHRoZSByZXF1ZXN0XG4gKi9cbmNvbnN0IE1zQ1ZIZWFkZXJJbnRlcmNlcHRvciA9ICAoY29uZmlnOiBBeGlvc0N1c3RvbUNvbmZpZykgPT4ge1xuICAgIGxldCBtc0N2ID0gTXNDVkhhbmRsZXIuZ2V0TXNDVigpO1xuICAgIGlmIChjb25maWcuY3YgJiYgY29uZmlnLnhNU1ZlY3RvcklkKSB7XG4gICAgICAgIC8vIEZvciB0aGUgYWRkIHRvIGNhcnQgdXNlIGNhc2UsIGFsd2F5cyBpbmNyZW1lbnQgdGhlIENWIGZvciBhbGwgdGhlIGNhbGxzIGluY2x1ZGluZyByZXRyaWVzXG4gICAgICAgIGlmIChtc0N2ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzWydNUy1DViddID0gbXNDdi5pbmNyZW1lbnQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbmZpZy5oZWFkZXJzWydNUy1DViddID0gY29uZmlnLmN2O1xuICAgICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgICAgLy9Db3JyZWxhdGlvbiBWZWN0b3IgYWxzbyBjYWxsZWQgYXMgQ1YgaXMgdXNlZCBmb3IgdHJhY2luZyByZXF1ZXN0IGFjcm9zcyBzZXJ2aWNlcyBhbmQgZG93bnN0cmVhbSBzeXN0ZW1zIFxuICAgICAgICBpZiAobXNDdiAhPSBudWxsKSB7XG4gICAgICAgICAgICBjb25maWcuaGVhZGVyc1snTVMtQ1YnXSA9IG1zQ3YuaW5jcmVtZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25maWcuaGVhZGVyc1snTVMtQ1YnXSA9IHVuaXFpZCgnY2FzYycpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59O1xuZXhwb3J0IGRlZmF1bHQgTXNDVkhlYWRlckludGVyY2VwdG9yOyIsIi8qIEEgdXRpbGl0eSBjbGFzcyB0byByZXRyaXZlIGNvb2tpZVxuICovXG5leHBvcnQgY2xhc3MgQ29va2llSGFuZGxlciB7XG4gICAgc3RhdGljIGdldENvb2tpZShjbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAgICAgIGxldCBuYW1lID0gY25hbWUgKyBcIj1cIjtcbiAgICAgICAgIGlmICh0eXBlb2YgZG9jdW1lbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgbGV0IGRlY29kZWRDb29raWUgPSBkZWNvZGVVUklDb21wb25lbnQoZG9jdW1lbnQuY29va2llKTtcbiAgICAgICAgICBsZXQgY2EgPSBkZWNvZGVkQ29va2llLnNwbGl0KCc7Jyk7XG4gICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8Y2EubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgbGV0IGMgPSBjYVtpXTtcbiAgICAgICAgICAgICAgYyA9IGMudHJpbSgpO1xuICAgICAgICAgICAgICBpZiAoYy5pbmRleE9mKG5hbWUpID09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gYy5zdWJzdHJpbmcobmFtZS5sZW5ndGgsIGMubGVuZ3RoKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gXCJcIjtcbiAgICAgICAgIH1cblxuICAgIH1cbn1cbiIsImV4cG9ydCBjb25zdCBMT0FEX0NBUlRfVVJMX1BFUkYgPSAnaHR0cHM6Ly9jYXJ0LnBlcmYuc3RvcmUtd2ViLmR5bmFtaWNzLmNvbS92MS4wL2NhcnQvbG9hZENhcnQnO1xuZXhwb3J0IGNvbnN0IExPQURfQ0FSVF9VUkxfUFBFID0gJ2h0dHBzOi8vY2FydC5wcGUuc3RvcmUtd2ViLmR5bmFtaWNzLmNvbS92MS4wL2NhcnQvbG9hZENhcnQnO1xuZXhwb3J0IGNvbnN0IExPQURfQ0FSVF9VUkxfSU5UID0gJ2h0dHBzOi8vY2FydC5zdGFnaW5nLnN0b3JlLXdlYi5keW5hbWljcy5jb20vdjEuMC9jYXJ0L2xvYWRDYXJ0JztcbmV4cG9ydCBjb25zdCBMT0FEX0NBUlRfVVJMID0gJ2h0dHBzOi8vY2FydC5wcm9kdWN0aW9uLnN0b3JlLXdlYi5keW5hbWljcy5jb20vdjEuMC9jYXJ0L2xvYWRDYXJ0JztcbmV4cG9ydCBjb25zdCBSRURJUkVDVF9DQVJUX1VSTCA9ICdodHRwczovL3d3dy5taWNyb3NvZnQuY29tLyRsb2NhbGUvc3RvcmUvYnV5JztcbmV4cG9ydCBjb25zdCBDQVJUX0VSUk9SX1NFUlZJQ0UgPSAnaHR0cHM6Ly9jZW0uc2VydmljZXMubWljcm9zb2Z0LmNvbS92MS8kbG9jYWxlL2Vycm9ycy8kY29kZS0kcmVhc29uL1N0b3JlZnJvbnQnO1xuZXhwb3J0IGNvbnN0IENPTkZJR1VSRV9RVUlDS0hSRUZTX1VSTCA9ICdodHRwczovLyRob3N0bmFtZS8kbG9jYWxlJHNhbmRib3hQYXRoL3N0b3JlL2NvbmZpZ3VyZS8kcHJvZHVjdFRpdGxlLyRiaWdJZCc7XG5leHBvcnQgY29uc3QgQ09ORklHVVJFX0RFVl9VUkwgPSAnaHR0cHM6Ly93d3dkZXYubWljcm9zb2Z0LmNvbS8kbG9jYWxlL3N0b3JlL2NvbmZpZ3VyZS8kcHJvZHVjdFRpdGxlLyRiaWdJZD9jcm9zc3NlbGxpZD0mc2VsZWN0ZWRDb2xvcj0kY29sb3InO1xuZXhwb3J0IGNvbnN0IENPTkZJR1VSRV9VUkwgPSAnaHR0cHM6Ly8kaG9zdE5hbWUvJGxvY2FsZS9zdG9yZS9jb25maWd1cmUvJHByb2R1Y3RUaXRsZS8kYmlnSWQ/Y3Jvc3NzZWxsaWQ9JnNlbGVjdGVkQ29sb3I9JGNvbG9yJztcbmV4cG9ydCBjb25zdCBDT05GSUdVUkVfU0FOREJPWF9VUkwgPSAnaHR0cHM6Ly8kaG9zdG5hbWUvJGxvY2FsZS93aW5kb3dzYW55LyR1c2VyL3N0b3JlL2NvbmZpZ3VyZS8kcHJvZHVjdFRpdGxlLyRiaWdJZD9jcm9zc3NlbGxpZD0mc2VsZWN0ZWRDb2xvcj0kY29sb3InO1xuZXhwb3J0IGNvbnN0IEJVSUxEX1VSTCA9ICdodHRwczovL3d3dy5taWNyb3NvZnQuY29tLyRsb2NhbGUvc3RvcmUvYnVpbGQvJHByb2R1Y3RUaXRsZS8kYmlnSWQ/Y2lkPSZwcmV2aWV3PSZwcmV2aWV3TW9kZXM9JztcbmV4cG9ydCBjb25zdCBCVUlMRF9RVUlDS19IUkVGU19VUkwgPSAnaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS8kbG9jYWxlL3N0b3JlL2J1aWxkLyRwcm9kdWN0VGl0bGUvJGJpZ0lkJztcbmV4cG9ydCBjb25zdCBNQU5BR0VfVVJMID0gJ2h0dHBzOi8vYWNjb3VudC5taWNyb3NvZnQuY29tL3NlcnZpY2VzLyc7XG5leHBvcnQgY29uc3QgUkVESVJFQ1RfSU5URVJTVElUSUFMX1VSTD0naHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS8kbG9jYWxlL3N0b3JlL2J1eSc7XG5leHBvcnQgY29uc3QgVlNCX09SREVSX0hJU1RPUllfVVJMID0gJ2h0dHBzOi8vJGhvc3RuYW1lLyRsb2NhbGUvc3RvcmUvdnNiL29yZGVyLWhpc3RvcnknO1xuZXhwb3J0IGNvbnN0IFZTQl9PUkRFUl9ERVRBSUxfVVJMID0gJ2h0dHBzOi8vJGhvc3RuYW1lLyRsb2NhbGUvc3RvcmUvdnNiL29yZGVyLWRldGFpbHMvJG9yZGVySWQnO1xuZXhwb3J0IGNvbnN0IFBSRU9SREVSID0gJ1BSRU9SREVSJztcbmV4cG9ydCBjb25zdCBDSEVDS1lPVVJFTElHSUJJTElUWSA9ICdDaGVjayB5b3VyIGVsaWdpYmlsaXR5JztcbmV4cG9ydCBjb25zdCBNVUlEQ29va2llTmFtZSA9ICdjYXJ0TXVpZCc7XG5leHBvcnQgY29uc3QgTVMwQ29va2llTmFtZSA9ICdNUzAnO1xuZXhwb3J0IGNvbnN0IEFVVEhfSEVBREVSX05BTUUgPSAnQXV0aG9yaXphdGlvbic7XG5leHBvcnQgY29uc3QgQ09NUEFDVF9USUNLRVRfSEVBREVSX05BTUUgPSAnY29tcGFjdFRpY2tldCc7XG5leHBvcnQgY29uc3QgVEVOVEVEX1BBR0VfRkxBR19IRUFERVJfTkFNRSA9ICd4LW1zLXRlbnRlZCc7XG5leHBvcnQgY29uc3QgQVVUSF9IRUFERVJfUFJFRklYID0gJ1dMSUQxLjA9dD0nO1xuZXhwb3J0IGNvbnN0IEFVVEhfQUFEX0hFQURFUl9QUkVGSVggPSAnQmVhcmVyICc7XG5leHBvcnQgY29uc3QgWF9BVVRIX01VSURfSEVBREVSID0gJ3gtYXV0aG9yaXphdGlvbi1tdWlkJztcbmV4cG9ydCBjb25zdCBYX0FFTV9MT0FEX1RFU1QgPSAneC1hZW0tbG9hZC10ZXN0JztcbmV4cG9ydCBjb25zdCBVY3NTaWRDb29raWVOYW1lID0gJ3Vjc19zaWQnO1xuZXhwb3J0IGNvbnN0IFhfTVNfVUNTX1NJRCA9ICd4LW1zLXVjcy1zaWQnO1xuZXhwb3J0IGNvbnN0IE1VSURfSEVBREVSX05BTUUgPSAnTVVJRCc7XG5leHBvcnQgY29uc3QgQ0FSVF9UWVBFID0gJ2NvbnN1bWVyJzsgLy9UT0RPOiBBd2FpdGluZyByZXNwb25zZSBmb3IgdGhpcyB2YWx1ZVxuZXhwb3J0IGNvbnN0IEFQUF9JRCA9ICdBZW1XZWInO1xuZXhwb3J0IGNvbnN0IENBVEFMT0dfQ0xJRU5UX1RZUEUgPSAnc3RvcmVXZWInOyAvLyBTdG9yZVdlYiBpcyB0aGUgdmFsdWUgdXNlZCBieSBhbGwgdGhlIHN0b3JlIHdlYiBwYWdlcy5cbmV4cG9ydCBjb25zdCBDTElFTlQgPSAnVW5pdmVyc2FsV2ViU3RvcmUuQ2FydCc7IC8vIFVuaXZlcnNhbFdlYlN0b3JlLkNhcnQgaXMgdGhlIG9uZSB1c2VkIGJ5IGFsbCB0aGUgc3RvcmUgd2ViIHBhZ2VzLlxuZXhwb3J0IGNvbnN0IERFVklDRV9UWVBFX1BDID0gJ1BjJzsgLy8gUGMgaXMgZGVmYXVsdCB2YWx1ZSB3aGVuIGRldmljZUZhbWlseSBpcyBudWxsLlxuZXhwb3J0IGNvbnN0IERFVklDRV9GQU1JTFkgPSAnZGV2aWNlZmFtaWx5JztcbmV4cG9ydCBjb25zdCBERVZJQ0VfVFlQRV9VTktOT1dOID0gJ1Vua25vd24nO1xuZXhwb3J0IGNvbnN0IFBDSUQgPSAncGNpZCc7XG5leHBvcnQgY29uc3QgT0NJRCA9ICdvY2lkJztcbmV4cG9ydCBjb25zdCBDSUQgPSAnY2lkJztcbmV4cG9ydCBjb25zdCBQUk9EID0gJ3Byb2QnO1xuZXhwb3J0IGNvbnN0IFBQRSA9ICdwcGUnO1xuZXhwb3J0IGNvbnN0IFBFUkYgPSAncGVyZic7XG5leHBvcnQgY29uc3QgSU5UID0gJ3N0YWdpbmcnO1xuZXhwb3J0IGNvbnN0IENBUlRfREFTSCA9ICdjYXJ0LSc7XG5leHBvcnQgY29uc3QgWF9NU19WRUNUT1JfSUQgPSAnWC1NUy1WZWN0b3ItSWQnO1xuZXhwb3J0IGNvbnN0IFhfTVNfQ0xJRU5UX1RZUEUgPSAnWC1NUy1DbGllbnQtVHlwZSc7XG5leHBvcnQgY29uc3QgWF9NU19NQVJLRVQgPSAnWC1NUy1NYXJrZXQnO1xuY29uc3QgREVWSUNFX1RZUEVfSlNPTiA9IHtcbiAgICAnd2luZG93cy5kZXNrdG9wJzonUGMnLFxuICAgICd3aW5kb3dzLm1vYmlsZSc6J01vYmlsZScsXG4gICAgJ3dpbmRvd3MueGJveCc6J1hib3gnLFxuICAgICd3aW5kb3dzLmhvbG9ncmFwaGljJzonSG9sb2xlbnMnLFxuICAgICd3aW5kb3dzLnRlYW0nOidTdXJmYWNlJyxcbiAgICAnbWFjJzonTWFjJyxcbiAgICAnaW9zJzonSW9zJyxcbiAgICAnYW5kcm9pZCc6J0FuZHJvaWQnLFxuICAgICd3aW5kb3dzLndpbmRvd3NQaG9uZTh4JzonVW5rbm93bicsXG4gICAgJ3dpbmRvd3Mud2luZG93c1Bob25lN3gnOidVbmtub3duJyxcbiAgICAnd2luZG93cy53aW5kb3dzOHgnOidVbmtub3duJyxcbiAgICAnd2luZG93cy51bml2ZXJzYWwnOidVbmtub3duJyxcbn1cbmV4cG9ydCBjb25zdCBERVZJQ0VfVFlQRV9NQVAgPSBuZXcgTWFwKE9iamVjdC5lbnRyaWVzKERFVklDRV9UWVBFX0pTT04pKTtcbmV4cG9ydCBjb25zdCBHRVRfUkVWSUVXX1NUQVRVUyA9ICdnZXRSZXZpZXdTdGF0dXMnXG5leHBvcnQgY29uc3QgRU5BQkxFX1BSRV9SRUxFQVNFX0NIRUNLID0gXCJlbmFibGVQcmVSZWxlYXNlQ2hlY2tcIlxuZXhwb3J0IGNvbnN0IFNLVV9MRU5HVEhfQ0hFQ0tfVkFMVUUgPSA0O1xuZXhwb3J0IGNvbnN0IEFDVElWRV9UQUJfRkxBRyA9ICdhY3RpdmV0YWInO1xuZXhwb3J0IGNvbnN0IElOVklTSUJMRV9GTEFHID0gJ0ludmlzaWJpbGlhcmV2ZWxhcmUnO1xuZXhwb3J0IGNvbnN0IENBUlRfUFBFID0gJ2NhcnRQUEUnO1xuZXhwb3J0IGNvbnN0IENBUlRfUEVSRiA9ICdjYXJ0UEVSRic7XG5leHBvcnQgY29uc3QgQ0FSVF9JTlQgPSAnY2FydElOVCc7XG5leHBvcnQgY29uc3QgQUVNX1JFRElSRUNUX0ZMQUcgPSAnYWVtcmVkaXJlY3QnO1xuZXhwb3J0IGNvbnN0IFBVU0hfVE9fSU5TVEFMTF9NT0RBTF9JRCA9ICdwdGktbW9kYWwnO1xuZXhwb3J0IGNvbnN0IERFRkFVTFRfTE9DQUxFID0gJ2VuLXVzJztcbmV4cG9ydCBjb25zdCBCVVlCT1hfSlNMTF9DT01QTkFNRSA9ICdCdXkgQm94JztcbmV4cG9ydCBjb25zdCBQUk9EX1VSTF9ST09UID0gJ2h0dHBzOi8vd3d3Lm1pY3Jvc29mdC5jb20nO1xuZXhwb3J0IGNvbnN0IEFERF9UT19DQVJUX1RBRyA9ICdbQWRkVG9DYXJ0XSc7XG5leHBvcnQgY29uc3QgQlVZX05PV19QUEUgPSAnYnV5Tm93UFBFJztcbmV4cG9ydCBjb25zdCBDQVJUX1FTUF9VQ1MgPSAnZW5hYmxldWNzJztcblxuLy8gaTE4biBzdHJpbmdzXG5leHBvcnQgY29uc3QgQ1ZfU1VQUE9SVF9URVhUMSA9ICdJZiB5b3UgbmVlZCBhbnkgYWRkaXRpb25hbCBhc3Npc3RhbmNlLCBwbGVhc2UgY29udGFjdCBNaWNyb3NvZnQgU3RvcmUgU3VwcG9ydCBhdCB7MH0nO1xuZXhwb3J0IGNvbnN0IENWX1NVUFBPUlRfVEVYVDIgPSAnUGxlYXNlIHNhdmUgdGhlIGZvbGxvd2luZyBlcnJvciBjb2RlKHMpIHNvIHRoYXQgb3VyIHN1cHBvcnQgYWR2b2NhdGVzIG1heSBiZSBhYmxlIHRvIGJldHRlciBhc3Npc3QgeW91Oic7XG5leHBvcnQgY29uc3QgVklFV19DQVJUID0gJ1ZpZXcgY2FydCc7XG5leHBvcnQgY29uc3QgQ09OVElOVUVfU0hPUFBJTkcgPSAnQ29udGludWUgc2hvcHBpbmcnO1xuZXhwb3J0IGNvbnN0IENMT1NFX0RJQUxPR19XSU5ET1cgPSAnQ2xvc2UgZGlhbG9nIHdpbmRvdyc7XG5leHBvcnQgY29uc3QgQ0FSVF9TVVBQT1JUX1VSTCA9ICdodHRwczovL2FrYS5tcy9zdG9yZWNzJztcblxuLy8gVXBkYXRlIGZvbGxvd2luZyBwcm90b3R5cGUgYnVzaW5lc3MgVVJMcyB3aXRoIGZpbmFsIFVSTHMgd2hlbiBhdmFpbGFibGUgXG5leHBvcnQgY29uc3QgQlVTSU5FU1NfU0lHTl9VUF9VUkwgPSBcImh0dHBzOi8vcHJ2LnNpZ251cC5taWNyb3NvZnQuY29tL0NyZWF0ZUFjY291bnRcIlxuZXhwb3J0IGNvbnN0IENBU0NBREVfQlVTSU5FU1NfU0lHTl9JTl9VUkwgPSBcImh0dHBzOi8vd3d3ZGV2Lm1pY3Jvc29mdC5jb20vY2FzY2FkZWF1dGgvdjEvc3RvcmUtYnVzaW5lc3MvYWNjb3VudC9zaWduaW50b1wiO1xuXG4vLyBNYW5hZ2UgeW91ciBhY2NvdW50IHRhYiBvbiBhdXRoZW50aWNhdGVkIGhvbWUgcGFnZVxuZXhwb3J0IGNvbnN0IE1JQ1JPU09GVF9BRE1JTl9DRU5URVIgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLXJlZGlyZWN0JztcbmV4cG9ydCBjb25zdCBNQU5BR0VfUkVDRU5UX09SREVSUyA9ICdodHRwczovL2FrYS5tcy9tYWMtcmVjZW50b3JkZXJzJztcbmV4cG9ydCBjb25zdCBNQU5BR0VfQUREUkVTUyA9ICdodHRwczovL2FrYS5tcy9tYWMtbWFuYWdlYWRkcmVzcyc7XG5leHBvcnQgY29uc3QgTUFOQUdFX1BBWU1FTlRfT1BUSU9OUyA9ICdodHRwczovL2FrYS5tcy9tYWMtcGF5bWVudCc7XG5leHBvcnQgY29uc3QgTUFOQUdFX0lORk8gPSAnaHR0cHM6Ly9ha2EubXMvbWFjLW1hbmFnZXVzZXJzJztcbmV4cG9ydCBjb25zdCBQUklWQUNZX1NUQVRFTUVOVF9QUklWQUNZX0FORF9TRUNVUklUWSA9ICdodHRwczovL2FrYS5tcy9tYWMtcHJpdmFjeXN0YXRlbWVudCc7XG5leHBvcnQgY29uc3QgU1RBUlRfU0hPUFBJTkcgPSAnaHR0cHM6Ly93d3cubWljcm9zb2Z0LmNvbS97MH0vc3RvcmUvYi9zdXJmYWNlZm9yYnVzaW5lc3M/aWNpZD1TTUJfcXVpY2tsaW5rX2J1c2luZXNzZGV2aWNlcyc7XG5leHBvcnQgY29uc3QgQ0FOTk9UX0ZJTkRfT1JERVIgPSAnaHR0cHM6Ly9ha2EubXMvbWFjLXJlY2VudG9yZGVycyc7XG5leHBvcnQgY29uc3QgSU1BR0VfUExBQ0VIT0xERVIgPSBcImh0dHBzOi8vczdkMi5zY2VuZTcuY29tL2lzL2ltYWdlL21pY3Jvc29mdGNvcnAvbXdmLXBsYWNlaG9sZGVyXCI7XG5cbi8vIENhcnQgUGF5bG9hZFxuZXhwb3J0IGNvbnN0IEJJTExJTkdfQUNDT1VOVF9JRF9DT09LSUVfTkFNRSA9IFwiQmlsbGluZ0FjY3RJZFwiO1xuXG4vLyBCdXNpbmVzcyBDYXJ0IHJlZGlyZWN0IHVybFxuZXhwb3J0IGNvbnN0IFJFRElSRUNUX0JVU0lORVNTX0NBUlRfVVJMID0gJ2h0dHBzOi8vd3d3cHBlLm1pY3Jvc29mdC5jb20vJGxvY2FsZS9zdG9yZS9idXNpbmVzcy9jYXJ0JztcblxuZXhwb3J0IGNvbnN0IFVTRVJfU0lHTkVEX0lOX1RZUEVfQlVTSU5FU1MgPSAnYWFkJztcbmV4cG9ydCBjb25zdCBPUkRFUklOR19FWFBFUklFTkNFX0NPTU1FUkNJQUwgPSAnQ29tbWVyY2lhbCc7XG5leHBvcnQgY29uc3QgT1JERVJJTkdfRVhQRVJJRU5DRV9DT05TVU1FUiA9ICdDb25zdW1lcic7XG5leHBvcnQgY29uc3QgQ0FUQUxPR19JRF9DT01NRVJDSUFMID0gNDtcbmV4cG9ydCBjb25zdCBDQVRBTE9HX0lEX0NPTlNVTUVSID0gMTtcbmV4cG9ydCBjb25zdCBVU0VSX1NJR05FRF9JTl9UWVBFX01TQSA9ICdtc2EnO1xuZXhwb3J0IGNvbnN0IENPTlNVTUVSX09OTFlfUFJPRFVDVF9SRURJUkVDVF9VUkwgPSAnLyRsb2NhbGUvc3RvcmUvYnVzaW5lc3MtaW50ZXJzdGl0aWFsLWVycm9yP3N0YXR1cz1jb25zdW1lcm9ubHlwcm9kdWN0JztcbmV4cG9ydCBlbnVtIFNvdXJjZUNhdGFsb2cge1xuICAgIENhdDEgPSAnQ2F0MScsXG4gICAgQ2F0NCA9ICdDYXQ0J1xufTtcblxuLy8gbG9hZENhcnQgZXJyb3IgY29kZXNcbmV4cG9ydCBjb25zdCBGQUlMRURfVE9fQUREX0lURU0gPSAnRmFpbGVkVG9BZGRJdGVtJztcbmV4cG9ydCBjb25zdCBVUERBVEVEX0lURU1fVE9fQUREID0gJ1VwZGF0ZWRJdGVtVG9BZGQnO1xuZXhwb3J0IGNvbnN0IEZhaWxlZF9UT19VUERBVEVEX0xJTkVfSVRFTSA9ICdGYWlsZWRUb1VwZGF0ZUxpbmVJdGVtJztcbmV4cG9ydCBjb25zdCBQVVIgPSAnUFVSJztcblxuLy8gbG9hZENhcnQgZXJyb3IgcmVhc29uc1xuZXhwb3J0IGNvbnN0IE1BWF9PVkVSQUxMX0NBUlRfUVVBTlRJVFlfRVhDRUVERUQgPSAnTWF4T3ZlcmFsbENhcnRRdWFudGl0eUV4Y2VlZGVkJztcbmV4cG9ydCBjb25zdCBNQVhfTElORV9JVEVNX1FVQU5USVRZX0VYQ0VFREVEID0gJ01heExpbmVJdGVtUXVhbnRpdHlFeGNlZWRlZCc7XG5leHBvcnQgY29uc3QgUVVBTlRJVFlfTElNSVRfRVhDRUVERUQgPSAnUXVhbnRpdHlMaW1pdEV4Y2VlZGVkJztcblxuLy8gbG9hZENhcnQgZXJyb3IgbG9jIGtleXNcbmV4cG9ydCBjb25zdCBDQVJUX0xJTUlUX0VSUk9SID0gJ0NBUlRfTElNSVRfRVJST1InO1xuZXhwb3J0IGNvbnN0IENBUlRfTElNSVRfREVTQ1JJUFRJT04gPSAnQ0FSVF9MSU1JVF9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgRlVMTF9DQVJUX0VSUk9SID0gJ0ZVTExfQ0FSVF9FUlJPUic7XG5leHBvcnQgY29uc3QgRlVMTF9DQVJUX0RFU0NSSVBUSU9OID0gJ0ZVTExfQ0FSVF9ERVNDUklQVElPTic7XG5leHBvcnQgY29uc3QgTUFYX0lURU1fRVJST1IgPSAnTUFYX0lURU1fRVJST1InO1xuZXhwb3J0IGNvbnN0IE1BWF9JVEVNX0RFU0NSSVBUSU9OID0gJ01BWF9JVEVNX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBNQVhfUVVBTlRJVFlfREVTQ1JJUFRJT04gPSAnTUFYX1FVQU5USVRZX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUVVBTlRJVFlfRVJST1IgPSAnVVBEQVRFX1FVQU5USVRZX0VSUk9SJztcbmV4cG9ydCBjb25zdCBVUERBVEVfUVVBTlRJVFlfREVTQ1JJUFRJT04gPSAnVVBEQVRFX1FVQU5USVRZX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBDQVJUX0lURU1fRVJST1IgPSAnQ0FSVF9JVEVNX0VSUk9SJztcbmV4cG9ydCBjb25zdCBDQVJUX0lURU1fREVTQ1JJUFRJT04gPSAnQ0FSVF9JVEVNX0RFU0NSSVBUSU9OJztcbmV4cG9ydCBjb25zdCBDQVJUX0RFRkFVTFRfRVJST1IgPSAnU09NRVRISU5HX1dFTlRfV1JPTkcnO1xuXG4vLyBsb2FkQ2FydCBlcnJvciBtZXNzYWdlc1xuZXhwb3J0IGNvbnN0IENBUlRfTElNSVRfU0hPUlRfTUVTU0FHRSA9IFwiWW91J3ZlIHJlYWNoZWQgdGhlIGxpbWl0IG9mIGl0ZW1zIHlvdSBjYW4gYWRkIHRvIGNhcnQuXCI7XG5leHBvcnQgY29uc3QgQ0FSVF9MSU1JVF9MT05HX01FU1NBR0UgPSAnVG8gYWRkIGl0ZW1zIHRvIHlvdXIgY2FydCwgZmlyc3QgcmVtb3ZlIGV4aXN0aW5nIGl0ZW1zLCByZWR1Y2UgcXVhbnRpdGllcywgb3Igc2F2ZSBpdGVtcyBmb3IgbGF0ZXIuJztcbmV4cG9ydCBjb25zdCBGVUxMX0NBUlRfU0hPUlRfTUVTU0FHRSA9ICdZb3VyIGNhcnQgaXMgZnVsbC4nO1xuZXhwb3J0IGNvbnN0IEZVTExfQ0FSVF9MT05HX01FU1NBR0UgPSAnVW5hYmxlIHRvIGFkZCBsaW5lIGl0ZW0gdG8gY2FydCwgY2FydCBxdWFudGl0eSBpcyBhdCBpdHMgbWF4Lic7XG5leHBvcnQgY29uc3QgTUFYX0lURU1fU0hPUlRfTUVTU0FHRSA9IFwiWW91J3ZlIHJlYWNoZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zIHlvdSBjYW4gYWRkIHRvIHlvdXIgY2FydC5cIjtcbmV4cG9ydCBjb25zdCBNQVhfSVRFTV9MT05HX01FU1NBR0UgPSBcIkNvdWxkIG5vdCB1cGRhdGUgcXVhbnRpdHksIFlvdSd2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiBpdGVtcyB5b3UgY2FuIGFkZCB0byB5b3VyIGNhcnQuXCI7XG5leHBvcnQgY29uc3QgTUFYX1FVQU5USVRZX0xPTkdfTUVTU0FHRSA9ICdZb3UgaGF2ZSByZWFjaGVkIHRoZSBtYXggcXVhbnRpdHkgZm9yIHlvdXIgcHJvZHVjdC4nO1xuZXhwb3J0IGNvbnN0IFVQREFURV9RVUFOVElUWV9TSE9SVF9NRVNTQUdFID0gJ01heCBwcm9kdWN0IHF1YW50aXR5IHJlYWNoZWQnO1xuZXhwb3J0IGNvbnN0IFVQREFURV9RVUFOVElUWV9MT05HX01FU1NBR0UgPSAnQ291bGQgbm90IHVwZGF0ZSBxdWFudGl0eSwgdGhlIHJlcXVlc3RlZCBxdWFudGl0eSBpcyBncmVhdGVyIHRoYW4gdGhlIG1heGltdW0gYWxsb3dlZC4nO1xuZXhwb3J0IGNvbnN0IENBUlRfSVRFTV9TSE9SVF9NRVNTQUdFID0gXCJDYW4ndCBhZGQgdGhpcyBpdGVtIHRvIHlvdXIgY2FydFwiO1xuZXhwb3J0IGNvbnN0IENBUlRfSVRFTV9MT05HX01FU1NBR0UgPSAnQ291bGQgbm90IGFkZCB0aGUgcmVxdWVzdGVkIGl0ZW0gYXMgeW91IGFyZSBhbHJlYWR5IGF0IHRoZSBsaW1pdCBmb3IgdGhpcyBpdGVtIGluIHlvdXIgY2FydCc7XG5leHBvcnQgY29uc3QgQ0FSVF9ERUZBVUxUX1NIT1JUX01FU1NBR0UgPSAnU29tZXRoaW5nIHdlbnQgd3JvbmcgLi4uJzsiLCJpbXBvcnQgeyBBeGlvc0N1c3RvbUNvbmZpZyB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudCc7XG5pbXBvcnQgeyBDb29raWVIYW5kbGVyIH0gZnJvbSAnLi4vaGFuZGxlcnMvQ29va2llSGFuZGxlcic7XG5pbXBvcnQgeyBNVUlEQ29va2llTmFtZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcblxuLyogQWRkIHgtYXV0aG9yaXphdGlvbi1tdWlkIGhlYWRlciB0byByZXF1ZXN0IGJ5IGdldHRpbmcgTVVJRCBjb29raWVcbiAqL1xuY29uc3QgWEF1dGhNVUlESW50ZXJjZXB0b3IgPSAgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcbiAgICBpZihjb25maWcuTVVJREhlYWRlciAhPSBudWxsKSB7XG4gICAgICAgIGxldCBhdXRob3JpemF0aW9uTVVJRCA9ICBDb29raWVIYW5kbGVyLmdldENvb2tpZShNVUlEQ29va2llTmFtZSk7XG4gICAgICAgIGlmIChhdXRob3JpemF0aW9uTVVJRCAhPSBcIlwiKSB7XG4gICAgICAgICAgICBjb25maWcuaGVhZGVyc1tjb25maWcuTVVJREhlYWRlcl0gPSBhdXRob3JpemF0aW9uTVVJRDtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmV4cG9ydCBkZWZhdWx0IFhBdXRoTVVJREludGVyY2VwdG9yOyIsIi8vVGhlIGJlbG93IGZ1bmN0aW9uIGNhbiBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgZ3VpZCBpbiB0aGlzIHBhcnRpY3VsYXIgZm9ybWF0IC0gNDAgZGlnaXQgY2hhcmFjdGVyXG4vL2xlbmd0aCB3aXRoICctJyBkYXNoZXMgaW5jbHVkZWQuIHlvdSBjYW4gYWxzbyByZWZlcmUgdG8gZ2VuZXJhdGVDb29raWUuanMgZmlsZSBpbm9yZGVyIHRvIFxuLy9nZXQgYSBkaWZmZXJlbnQgZm9ybWF0IG9uZSB3aXRoIDM2IGNoYXJhY3RlciBsZW5ndGggYW5kIG5vIGRhc2hlcy5cbmV4cG9ydCBjb25zdCBjcmVhdGVHdWlkID0gKCkgPT4ge1xuICAgIGNvbnN0IGd1aWRQYXR0ZXJuID0gXCJ4eHh4eHh4eC14eHh4LTR4eHgtUnh4eC14eHh4eHh4eHh4eHhcIjtcbiAgICBmdW5jdGlvbiByYW5kb21IZXhEaWdpdCgpIHtcbiAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IoZ2V0UmFuZG9tQmV0d2Vlblplcm9BbmRPbmUoKSAqIDE2KS50b1N0cmluZygxNik7XG4gICAgfVxuICAgIGNvbnN0IHJlc3VsdCA9IGd1aWRQYXR0ZXJuLnJlcGxhY2UoL3gvZywgcmFuZG9tSGV4RGlnaXQpO1xuICAgIC8vIHVwZGF0ZSByZW1haW5pbmcgMiBiaXRzIG9mIGZpcnN0IGRpZ2l0IG9mIHRoZSBjbG9ja19zZXFfaGlfYW5kX3Jlc2VydmVkOlxuICAgIHJldHVybiByZXN1bHQucmVwbGFjZShcIlJcIiwgKDggfCBNYXRoLmZsb29yKGdldFJhbmRvbUJldHdlZW5aZXJvQW5kT25lKCkgKiAzKSkudG9TdHJpbmcoMTYpKTtcbn1cblxuZXhwb3J0IGNvbnN0IGdldFJhbmRvbUJldHdlZW5aZXJvQW5kT25lID0gKCkgPT4ge1xuICAgIGNvbnN0IGNyeXB0bzogQ3J5cHRvID0gd2luZG93LmNyeXB0byB8fCAoPGFueT53aW5kb3cpLm1zQ3J5cHRvO1xuICAgIGlmIChjcnlwdG8gJiYgY3J5cHRvLmdldFJhbmRvbVZhbHVlcykge1xuICAgICAgICByZXR1cm4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDMyQXJyYXkoMSkpWzBdIC8gTWF0aC5wb3coMTYsIDgpO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5yYW5kb20oKTtcbn0iLCJpbXBvcnQgeyBjcmVhdGVHdWlkIH0gZnJvbSAnLi4vdXRpbHMvY29tbW9uVXRpbHMnO1xuaW1wb3J0IHsgQ29va2llSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL0Nvb2tpZUhhbmRsZXInO1xuaW1wb3J0IHsgTVMwQ29va2llTmFtZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcblxuY29uc3QgUmlza1Nlc3Npb25JZEludGVyY2VwdG9yID0gKGNvbmZpZzogYW55KSA9PiB7XG4gICAgaWYoY29uZmlnLnJpc2tJZEFwcGVuZClcbiAgICB7XG4gICAgICAgIGNvbnN0IHJpc2tJZCA9IENvb2tpZUhhbmRsZXIuZ2V0Q29va2llKE1TMENvb2tpZU5hbWUpIHx8IGNyZWF0ZUd1aWQoKTtcbiAgICAgICAgaWYgKHR5cGVvZiBjb25maWcuZGF0YSA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbGV0IHBheWxvYWQgPSBKU09OLnBhcnNlKGNvbmZpZy5kYXRhKTtcbiAgICAgICAgICAgIHBheWxvYWQucmlza1Nlc3Npb25JZCA9IHJpc2tJZDtcbiAgICAgICAgICAgIGNvbmZpZy5kYXRhID0gSlNPTi5zdHJpbmdpZnkocGF5bG9hZCk7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvbmZpZy5kYXRhID09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICBjb25maWcuZGF0YVsncmlza1Nlc3Npb25JZCddID0gcmlza0lkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFJpc2tTZXNzaW9uSWRJbnRlcmNlcHRvcjtcbiIsIlxuY29uc3QgRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3IgPSAoY29uZmlnOiBhbnkpID0+IHtcbiAgICBpZihjb25maWcuRmlyc3ROYW1lKVxuICAgIHtcbiAgICAgICAgY29uZmlnLmhlYWRlcnNbJ0ZpcnN0TmFtZSddID0gY29uZmlnLkZpcnN0TmFtZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3I7XG4iLCJpbXBvcnQge0N1c3RvbVdpbmRvd30gZnJvbSAnLi4vd2luZG93L0N1c3RvbVdpbmRvdyc7XG4vLyBjYXN0IGdsb2JhbCB2YXIgd2luZG93IHdpdGggQ3VzdG9tV2luZG93XG5kZWNsYXJlIGxldCB3aW5kb3c6IEN1c3RvbVdpbmRvdztcblxuLyogQSB1dGlsaXR5IGNsYXNzIHRvIHJldHJpZXZlIHRlbnQgb3B0aW9uc1xuICovXG5leHBvcnQgY2xhc3MgVGVudE9wdGlvbnNIYW5kbGVyIHtcbiAgICBzdGF0aWMgYXN5bmMgaXNUZW50ZWRQYWdlKCk6IFByb21pc2U8c3RyaW5nPiB7XG4gICAgICAgIGlmICghKHdpbmRvdy50ZW50b3B0aW9ucyAmJiB3aW5kb3cudGVudG9wdGlvbnMuaXNUZW50ZWRQYWdlKSkgeyByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG51bGwpO31cbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh3aW5kb3cudGVudG9wdGlvbnMuaXNUZW50ZWRQYWdlKTtcbiAgICB9XG5cbn1cbiIsImltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcbmltcG9ydCB7IFRlbnRPcHRpb25zSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL1RlbnRPcHRpb25zSGFuZGxlcic7XG5pbXBvcnQgeyBURU5URURfUEFHRV9GTEFHX0hFQURFUl9OQU1FIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db25zdGFudHMnO1xuXG5jb25zdCBUZW50T3B0aW9uc0hlYWRlckludGVyY2VwdG9yID0gYXN5bmMgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcblxuICAgIGNvbnN0IGlzVGVudGVkUGFnZSA9IGF3YWl0IFRlbnRPcHRpb25zSGFuZGxlci5pc1RlbnRlZFBhZ2UoKTtcblxuICAgIGlmKGlzVGVudGVkUGFnZSAhPSBudWxsICYmIFwidHJ1ZVwiID09PSBpc1RlbnRlZFBhZ2UpXG4gICAge1xuICAgICAgICBjb25maWcuaGVhZGVyc1tURU5URURfUEFHRV9GTEFHX0hFQURFUl9OQU1FXSA9IGlzVGVudGVkUGFnZTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbmZpZztcbn1cblxuZXhwb3J0IGRlZmF1bHQgVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvcjtcbiIsImZ1bmN0aW9uIGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywga2V5LCBhcmcpIHsgdHJ5IHsgdmFyIGluZm8gPSBnZW5ba2V5XShhcmcpOyB2YXIgdmFsdWUgPSBpbmZvLnZhbHVlOyB9IGNhdGNoIChlcnJvcikgeyByZWplY3QoZXJyb3IpOyByZXR1cm47IH0gaWYgKGluZm8uZG9uZSkgeyByZXNvbHZlKHZhbHVlKTsgfSBlbHNlIHsgUHJvbWlzZS5yZXNvbHZlKHZhbHVlKS50aGVuKF9uZXh0LCBfdGhyb3cpOyB9IH1cblxuZnVuY3Rpb24gX2FzeW5jVG9HZW5lcmF0b3IoZm4pIHsgcmV0dXJuIGZ1bmN0aW9uICgpIHsgdmFyIHNlbGYgPSB0aGlzLCBhcmdzID0gYXJndW1lbnRzOyByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkgeyB2YXIgZ2VuID0gZm4uYXBwbHkoc2VsZiwgYXJncyk7IGZ1bmN0aW9uIF9uZXh0KHZhbHVlKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJuZXh0XCIsIHZhbHVlKTsgfSBmdW5jdGlvbiBfdGhyb3coZXJyKSB7IGFzeW5jR2VuZXJhdG9yU3RlcChnZW4sIHJlc29sdmUsIHJlamVjdCwgX25leHQsIF90aHJvdywgXCJ0aHJvd1wiLCBlcnIpOyB9IF9uZXh0KHVuZGVmaW5lZCk7IH0pOyB9OyB9XG5cbmZ1bmN0aW9uIG93bktleXMob2JqZWN0LCBlbnVtZXJhYmxlT25seSkgeyB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG9iamVjdCk7IGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7IHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhvYmplY3QpOyBpZiAoZW51bWVyYWJsZU9ubHkpIHsgc3ltYm9scyA9IHN5bWJvbHMuZmlsdGVyKGZ1bmN0aW9uIChzeW0pIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iob2JqZWN0LCBzeW0pLmVudW1lcmFibGU7IH0pOyB9IGtleXMucHVzaC5hcHBseShrZXlzLCBzeW1ib2xzKTsgfSByZXR1cm4ga2V5czsgfVxuXG5mdW5jdGlvbiBfb2JqZWN0U3ByZWFkKHRhcmdldCkgeyBmb3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeyB2YXIgc291cmNlID0gYXJndW1lbnRzW2ldICE9IG51bGwgPyBhcmd1bWVudHNbaV0gOiB7fTsgaWYgKGkgJSAyKSB7IG93bktleXMoT2JqZWN0KHNvdXJjZSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24gKGtleSkgeyBfZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXksIHNvdXJjZVtrZXldKTsgfSk7IH0gZWxzZSBpZiAoT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMpIHsgT2JqZWN0LmRlZmluZVByb3BlcnRpZXModGFyZ2V0LCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhzb3VyY2UpKTsgfSBlbHNlIHsgb3duS2V5cyhPYmplY3Qoc291cmNlKSkuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGtleSwgT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihzb3VyY2UsIGtleSkpOyB9KTsgfSB9IHJldHVybiB0YXJnZXQ7IH1cblxuZnVuY3Rpb24gX2RlZmluZVByb3BlcnR5KG9iaiwga2V5LCB2YWx1ZSkgeyBpZiAoa2V5IGluIG9iaikgeyBPYmplY3QuZGVmaW5lUHJvcGVydHkob2JqLCBrZXksIHsgdmFsdWU6IHZhbHVlLCBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlIH0pOyB9IGVsc2UgeyBvYmpba2V5XSA9IHZhbHVlOyB9IHJldHVybiBvYmo7IH1cblxuaW1wb3J0IGlzUmV0cnlBbGxvd2VkIGZyb20gJ2lzLXJldHJ5LWFsbG93ZWQnO1xuZXhwb3J0IHZhciBuYW1lc3BhY2UgPSAnYXhpb3MtcmV0cnknO1xuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc05ldHdvcmtFcnJvcihlcnJvcikge1xuICB2YXIgQ09ERV9FWENMVURFX0xJU1QgPSBbJ0VSUl9DQU5DRUxFRCcsICdFQ09OTkFCT1JURUQnXTtcbiAgcmV0dXJuICFlcnJvci5yZXNwb25zZSAmJiBCb29sZWFuKGVycm9yLmNvZGUpICYmIC8vIFByZXZlbnRzIHJldHJ5aW5nIGNhbmNlbGxlZCByZXF1ZXN0c1xuICAhQ09ERV9FWENMVURFX0xJU1QuaW5jbHVkZXMoZXJyb3IuY29kZSkgJiYgLy8gUHJldmVudHMgcmV0cnlpbmcgdGltZWQgb3V0ICYgY2FuY2VsbGVkIHJlcXVlc3RzXG4gIGlzUmV0cnlBbGxvd2VkKGVycm9yKSAvLyBQcmV2ZW50cyByZXRyeWluZyB1bnNhZmUgZXJyb3JzXG4gIDtcbn1cbnZhciBTQUZFX0hUVFBfTUVUSE9EUyA9IFsnZ2V0JywgJ2hlYWQnLCAnb3B0aW9ucyddO1xudmFyIElERU1QT1RFTlRfSFRUUF9NRVRIT0RTID0gU0FGRV9IVFRQX01FVEhPRFMuY29uY2F0KFsncHV0JywgJ2RlbGV0ZSddKTtcbi8qKlxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvclxuICogQHJldHVybiB7Ym9vbGVhbn1cbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gaXNSZXRyeWFibGVFcnJvcihlcnJvcikge1xuICByZXR1cm4gZXJyb3IuY29kZSAhPT0gJ0VDT05OQUJPUlRFRCcgJiYgKCFlcnJvci5yZXNwb25zZSB8fCBlcnJvci5yZXNwb25zZS5zdGF0dXMgPj0gNTAwICYmIGVycm9yLnJlc3BvbnNlLnN0YXR1cyA8PSA1OTkpO1xufVxuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc1NhZmVSZXF1ZXN0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFlcnJvci5jb25maWcpIHtcbiAgICAvLyBDYW5ub3QgZGV0ZXJtaW5lIGlmIHRoZSByZXF1ZXN0IGNhbiBiZSByZXRyaWVkXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpICYmIFNBRkVfSFRUUF9NRVRIT0RTLmluZGV4T2YoZXJyb3IuY29uZmlnLm1ldGhvZCkgIT09IC0xO1xufVxuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3IoZXJyb3IpIHtcbiAgaWYgKCFlcnJvci5jb25maWcpIHtcbiAgICAvLyBDYW5ub3QgZGV0ZXJtaW5lIGlmIHRoZSByZXF1ZXN0IGNhbiBiZSByZXRyaWVkXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcmV0dXJuIGlzUmV0cnlhYmxlRXJyb3IoZXJyb3IpICYmIElERU1QT1RFTlRfSFRUUF9NRVRIT0RTLmluZGV4T2YoZXJyb3IuY29uZmlnLm1ldGhvZCkgIT09IC0xO1xufVxuLyoqXG4gKiBAcGFyYW0gIHtFcnJvcn0gIGVycm9yXG4gKiBAcmV0dXJuIHtib29sZWFufVxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBpc05ldHdvcmtPcklkZW1wb3RlbnRSZXF1ZXN0RXJyb3IoZXJyb3IpIHtcbiAgcmV0dXJuIGlzTmV0d29ya0Vycm9yKGVycm9yKSB8fCBpc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3IoZXJyb3IpO1xufVxuLyoqXG4gKiBAcmV0dXJuIHtudW1iZXJ9IC0gZGVsYXkgaW4gbWlsbGlzZWNvbmRzLCBhbHdheXMgMFxuICovXG5cbmZ1bmN0aW9uIG5vRGVsYXkoKSB7XG4gIHJldHVybiAwO1xufVxuLyoqXG4gKiBTZXQgZGVsYXlGYWN0b3IgMTAwMCBmb3IgYW4gZXhwb25lbnRpYWwgZGVsYXkgdG8gb2NjdXIgb24gdGhlIG9yZGVyXG4gKiBvZiBzZWNvbmRzXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtyZXRyeU51bWJlcj0wXVxuICogQHBhcmFtICB7RXJyb3J9ICBlcnJvciAtIHVudXNlZDsgZm9yIGV4aXN0aW5nIEFQSSBvZiByZXRyeURlbGF5IGNhbGxiYWNrXG4gKiBAcGFyYW0gIHtudW1iZXJ9IFtkZWxheUZhY3Rvcj0xMDBdIG1pbGxpc2Vjb25kc1xuICogQHJldHVybiB7bnVtYmVyfSAtIGRlbGF5IGluIG1pbGxpc2Vjb25kc1xuICovXG5cblxuZXhwb3J0IGZ1bmN0aW9uIGV4cG9uZW50aWFsRGVsYXkoKSB7XG4gIHZhciByZXRyeU51bWJlciA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzBdIDogMDtcbiAgdmFyIGVycm9yID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQ7XG4gIHZhciBkZWxheUZhY3RvciA9IGFyZ3VtZW50cy5sZW5ndGggPiAyICYmIGFyZ3VtZW50c1syXSAhPT0gdW5kZWZpbmVkID8gYXJndW1lbnRzWzJdIDogMTAwO1xuICB2YXIgZGVsYXkgPSBNYXRoLnBvdygyLCByZXRyeU51bWJlcikgKiBkZWxheUZhY3RvcjtcbiAgdmFyIHJhbmRvbVN1bSA9IGRlbGF5ICogMC4yICogTWF0aC5yYW5kb20oKTsgLy8gMC0yMCUgb2YgdGhlIGRlbGF5XG5cbiAgcmV0dXJuIGRlbGF5ICsgcmFuZG9tU3VtO1xufVxuLyoqIEB0eXBlIHtJQXhpb3NSZXRyeUNvbmZpZ30gKi9cblxuZXhwb3J0IHZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHJldHJpZXM6IDMsXG4gIHJldHJ5Q29uZGl0aW9uOiBpc05ldHdvcmtPcklkZW1wb3RlbnRSZXF1ZXN0RXJyb3IsXG4gIHJldHJ5RGVsYXk6IG5vRGVsYXksXG4gIHNob3VsZFJlc2V0VGltZW91dDogZmFsc2UsXG4gIG9uUmV0cnk6ICgpID0+IHt9XG59O1xuLyoqXG4gKiBSZXR1cm5zIHRoZSBheGlvcy1yZXRyeSBvcHRpb25zIGZvciB0aGUgY3VycmVudCByZXF1ZXN0XG4gKiBAcGFyYW0gIHtBeGlvc1JlcXVlc3RDb25maWd9IGNvbmZpZ1xuICogQHBhcmFtICB7SUF4aW9zUmV0cnlDb25maWd9IGRlZmF1bHRPcHRpb25zXG4gKiBAcmV0dXJuIHtJQXhpb3NSZXRyeUNvbmZpZ0V4dGVuZGVkfVxuICovXG5cbmZ1bmN0aW9uIGdldFJlcXVlc3RPcHRpb25zKGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpIHtcbiAgcmV0dXJuIF9vYmplY3RTcHJlYWQoX29iamVjdFNwcmVhZChfb2JqZWN0U3ByZWFkKHt9LCBERUZBVUxUX09QVElPTlMpLCBkZWZhdWx0T3B0aW9ucyksIGNvbmZpZ1tuYW1lc3BhY2VdKTtcbn1cbi8qKlxuICogSW5pdGlhbGl6ZXMgYW5kIHJldHVybnMgdGhlIHJldHJ5IHN0YXRlIGZvciB0aGUgZ2l2ZW4gcmVxdWVzdC9jb25maWdcbiAqIEBwYXJhbSAge0F4aW9zUmVxdWVzdENvbmZpZ30gY29uZmlnXG4gKiBAcGFyYW0gIHtJQXhpb3NSZXRyeUNvbmZpZ30gZGVmYXVsdE9wdGlvbnNcbiAqIEByZXR1cm4ge0lBeGlvc1JldHJ5Q29uZmlnRXh0ZW5kZWR9XG4gKi9cblxuXG5mdW5jdGlvbiBnZXRDdXJyZW50U3RhdGUoY29uZmlnLCBkZWZhdWx0T3B0aW9ucykge1xuICB2YXIgY3VycmVudFN0YXRlID0gZ2V0UmVxdWVzdE9wdGlvbnMoY29uZmlnLCBkZWZhdWx0T3B0aW9ucyk7XG4gIGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50ID0gY3VycmVudFN0YXRlLnJldHJ5Q291bnQgfHwgMDtcbiAgY29uZmlnW25hbWVzcGFjZV0gPSBjdXJyZW50U3RhdGU7XG4gIHJldHVybiBjdXJyZW50U3RhdGU7XG59XG4vKipcbiAqIEBwYXJhbSAge0F4aW9zfSBheGlvc1xuICogQHBhcmFtICB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBjb25maWdcbiAqL1xuXG5cbmZ1bmN0aW9uIGZpeENvbmZpZyhheGlvcywgY29uZmlnKSB7XG4gIGlmIChheGlvcy5kZWZhdWx0cy5hZ2VudCA9PT0gY29uZmlnLmFnZW50KSB7XG4gICAgZGVsZXRlIGNvbmZpZy5hZ2VudDtcbiAgfVxuXG4gIGlmIChheGlvcy5kZWZhdWx0cy5odHRwQWdlbnQgPT09IGNvbmZpZy5odHRwQWdlbnQpIHtcbiAgICBkZWxldGUgY29uZmlnLmh0dHBBZ2VudDtcbiAgfVxuXG4gIGlmIChheGlvcy5kZWZhdWx0cy5odHRwc0FnZW50ID09PSBjb25maWcuaHR0cHNBZ2VudCkge1xuICAgIGRlbGV0ZSBjb25maWcuaHR0cHNBZ2VudDtcbiAgfVxufVxuLyoqXG4gKiBDaGVja3MgcmV0cnlDb25kaXRpb24gaWYgcmVxdWVzdCBjYW4gYmUgcmV0cmllZC4gSGFuZGxlcyBpdCdzIHJldHVybmluZyB2YWx1ZSBvciBQcm9taXNlLlxuICogQHBhcmFtICB7SUF4aW9zUmV0cnlDb25maWdFeHRlbmRlZH0gY3VycmVudFN0YXRlXG4gKiBAcGFyYW0gIHtFcnJvcn0gZXJyb3JcbiAqIEByZXR1cm4ge1Byb21pc2U8Ym9vbGVhbj59XG4gKi9cblxuXG5mdW5jdGlvbiBzaG91bGRSZXRyeShfeCwgX3gyKSB7XG4gIHJldHVybiBfc2hvdWxkUmV0cnkuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbn1cbi8qKlxuICogQWRkcyByZXNwb25zZSBpbnRlcmNlcHRvcnMgdG8gYW4gYXhpb3MgaW5zdGFuY2UgdG8gcmV0cnkgcmVxdWVzdHMgZmFpbGVkIGR1ZSB0byBuZXR3b3JrIGlzc3Vlc1xuICpcbiAqIEBleGFtcGxlXG4gKlxuICogaW1wb3J0IGF4aW9zIGZyb20gJ2F4aW9zJztcbiAqXG4gKiBheGlvc1JldHJ5KGF4aW9zLCB7IHJldHJpZXM6IDMgfSk7XG4gKlxuICogYXhpb3MuZ2V0KCdodHRwOi8vZXhhbXBsZS5jb20vdGVzdCcpIC8vIFRoZSBmaXJzdCByZXF1ZXN0IGZhaWxzIGFuZCB0aGUgc2Vjb25kIHJldHVybnMgJ29rJ1xuICogICAudGhlbihyZXN1bHQgPT4ge1xuICogICAgIHJlc3VsdC5kYXRhOyAvLyAnb2snXG4gKiAgIH0pO1xuICpcbiAqIC8vIEV4cG9uZW50aWFsIGJhY2stb2ZmIHJldHJ5IGRlbGF5IGJldHdlZW4gcmVxdWVzdHNcbiAqIGF4aW9zUmV0cnkoYXhpb3MsIHsgcmV0cnlEZWxheSA6IGF4aW9zUmV0cnkuZXhwb25lbnRpYWxEZWxheX0pO1xuICpcbiAqIC8vIEN1c3RvbSByZXRyeSBkZWxheVxuICogYXhpb3NSZXRyeShheGlvcywgeyByZXRyeURlbGF5IDogKHJldHJ5Q291bnQpID0+IHtcbiAqICAgcmV0dXJuIHJldHJ5Q291bnQgKiAxMDAwO1xuICogfX0pO1xuICpcbiAqIC8vIEFsc28gd29ya3Mgd2l0aCBjdXN0b20gYXhpb3MgaW5zdGFuY2VzXG4gKiBjb25zdCBjbGllbnQgPSBheGlvcy5jcmVhdGUoeyBiYXNlVVJMOiAnaHR0cDovL2V4YW1wbGUuY29tJyB9KTtcbiAqIGF4aW9zUmV0cnkoY2xpZW50LCB7IHJldHJpZXM6IDMgfSk7XG4gKlxuICogY2xpZW50LmdldCgnL3Rlc3QnKSAvLyBUaGUgZmlyc3QgcmVxdWVzdCBmYWlscyBhbmQgdGhlIHNlY29uZCByZXR1cm5zICdvaydcbiAqICAgLnRoZW4ocmVzdWx0ID0+IHtcbiAqICAgICByZXN1bHQuZGF0YTsgLy8gJ29rJ1xuICogICB9KTtcbiAqXG4gKiAvLyBBbGxvd3MgcmVxdWVzdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uXG4gKiBjbGllbnRcbiAqICAgLmdldCgnL3Rlc3QnLCB7XG4gKiAgICAgJ2F4aW9zLXJldHJ5Jzoge1xuICogICAgICAgcmV0cmllczogMFxuICogICAgIH1cbiAqICAgfSlcbiAqICAgLmNhdGNoKGVycm9yID0+IHsgLy8gVGhlIGZpcnN0IHJlcXVlc3QgZmFpbHNcbiAqICAgICBlcnJvciAhPT0gdW5kZWZpbmVkXG4gKiAgIH0pO1xuICpcbiAqIEBwYXJhbSB7QXhpb3N9IGF4aW9zIEFuIGF4aW9zIGluc3RhbmNlICh0aGUgYXhpb3Mgb2JqZWN0IG9yIG9uZSBjcmVhdGVkIGZyb20gYXhpb3MuY3JlYXRlKVxuICogQHBhcmFtIHtPYmplY3R9IFtkZWZhdWx0T3B0aW9uc11cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZGVmYXVsdE9wdGlvbnMucmV0cmllcz0zXSBOdW1iZXIgb2YgcmV0cmllc1xuICogQHBhcmFtIHtib29sZWFufSBbZGVmYXVsdE9wdGlvbnMuc2hvdWxkUmVzZXRUaW1lb3V0PWZhbHNlXVxuICogICAgICAgIERlZmluZXMgaWYgdGhlIHRpbWVvdXQgc2hvdWxkIGJlIHJlc2V0IGJldHdlZW4gcmV0cmllc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gW2RlZmF1bHRPcHRpb25zLnJldHJ5Q29uZGl0aW9uPWlzTmV0d29ya09ySWRlbXBvdGVudFJlcXVlc3RFcnJvcl1cbiAqICAgICAgICBBIGZ1bmN0aW9uIHRvIGRldGVybWluZSBpZiB0aGUgZXJyb3IgY2FuIGJlIHJldHJpZWRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtkZWZhdWx0T3B0aW9ucy5yZXRyeURlbGF5PW5vRGVsYXldXG4gKiAgICAgICAgQSBmdW5jdGlvbiB0byBkZXRlcm1pbmUgdGhlIGRlbGF5IGJldHdlZW4gcmV0cnkgcmVxdWVzdHNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IFtkZWZhdWx0T3B0aW9ucy5vblJldHJ5PSgpPT57fV1cbiAqICAgICAgICBBIGZ1bmN0aW9uIHRvIGdldCBub3RpZmllZCB3aGVuIGEgcmV0cnkgb2NjdXJzXG4gKiBAcmV0dXJuIHt7IHJlcXVlc3RJbnRlcmNlcHRvcklkOiBudW1iZXIsIHJlc3BvbnNlSW50ZXJjZXB0b3JJZDogbnVtYmVyIH19XG4gKiAgICAgICAgVGhlIGlkcyBvZiB0aGUgaW50ZXJjZXB0b3JzIGFkZGVkIHRvIHRoZSByZXF1ZXN0IGFuZCB0byB0aGUgcmVzcG9uc2UgKHNvIHRoZXkgY2FuIGJlIGVqZWN0ZWQgYXQgYSBsYXRlciB0aW1lKVxuICovXG5cblxuZnVuY3Rpb24gX3Nob3VsZFJldHJ5KCkge1xuICBfc2hvdWxkUmV0cnkgPSBfYXN5bmNUb0dlbmVyYXRvcihmdW5jdGlvbiogKGN1cnJlbnRTdGF0ZSwgZXJyb3IpIHtcbiAgICB2YXIge1xuICAgICAgcmV0cmllcyxcbiAgICAgIHJldHJ5Q29uZGl0aW9uXG4gICAgfSA9IGN1cnJlbnRTdGF0ZTtcbiAgICB2YXIgc2hvdWxkUmV0cnlPclByb21pc2UgPSBjdXJyZW50U3RhdGUucmV0cnlDb3VudCA8IHJldHJpZXMgJiYgcmV0cnlDb25kaXRpb24oZXJyb3IpOyAvLyBUaGlzIGNvdWxkIGJlIGEgcHJvbWlzZVxuXG4gICAgaWYgKHR5cGVvZiBzaG91bGRSZXRyeU9yUHJvbWlzZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHZhciBzaG91bGRSZXRyeVByb21pc2VSZXN1bHQgPSB5aWVsZCBzaG91bGRSZXRyeU9yUHJvbWlzZTsgLy8ga2VlcCByZXR1cm4gdHJ1ZSB1bmxlc3Mgc2hvdWxkUmV0cnlQcm9taXNlUmVzdWx0IHJldHVybiBmYWxzZSBmb3IgY29tcGF0aWJpbGl0eVxuXG4gICAgICAgIHJldHVybiBzaG91bGRSZXRyeVByb21pc2VSZXN1bHQgIT09IGZhbHNlO1xuICAgICAgfSBjYXRjaCAoX2Vycikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNob3VsZFJldHJ5T3JQcm9taXNlO1xuICB9KTtcbiAgcmV0dXJuIF9zaG91bGRSZXRyeS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBheGlvc1JldHJ5KGF4aW9zLCBkZWZhdWx0T3B0aW9ucykge1xuICB2YXIgcmVxdWVzdEludGVyY2VwdG9ySWQgPSBheGlvcy5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoY29uZmlnID0+IHtcbiAgICB2YXIgY3VycmVudFN0YXRlID0gZ2V0Q3VycmVudFN0YXRlKGNvbmZpZywgZGVmYXVsdE9wdGlvbnMpO1xuICAgIGN1cnJlbnRTdGF0ZS5sYXN0UmVxdWVzdFRpbWUgPSBEYXRlLm5vdygpO1xuICAgIHJldHVybiBjb25maWc7XG4gIH0pO1xuICB2YXIgcmVzcG9uc2VJbnRlcmNlcHRvcklkID0gYXhpb3MuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLnVzZShudWxsLCAvKiNfX1BVUkVfXyovZnVuY3Rpb24gKCkge1xuICAgIHZhciBfcmVmID0gX2FzeW5jVG9HZW5lcmF0b3IoZnVuY3Rpb24qIChlcnJvcikge1xuICAgICAgdmFyIHtcbiAgICAgICAgY29uZmlnXG4gICAgICB9ID0gZXJyb3I7IC8vIElmIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24gdG8gcmV0cnkgdGhlIHJlcXVlc3RcblxuICAgICAgaWYgKCFjb25maWcpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycm9yKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGN1cnJlbnRTdGF0ZSA9IGdldEN1cnJlbnRTdGF0ZShjb25maWcsIGRlZmF1bHRPcHRpb25zKTtcblxuICAgICAgaWYgKHlpZWxkIHNob3VsZFJldHJ5KGN1cnJlbnRTdGF0ZSwgZXJyb3IpKSB7XG4gICAgICAgIGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50ICs9IDE7XG4gICAgICAgIHZhciB7XG4gICAgICAgICAgcmV0cnlEZWxheSxcbiAgICAgICAgICBzaG91bGRSZXNldFRpbWVvdXQsXG4gICAgICAgICAgb25SZXRyeVxuICAgICAgICB9ID0gY3VycmVudFN0YXRlO1xuICAgICAgICB2YXIgZGVsYXkgPSByZXRyeURlbGF5KGN1cnJlbnRTdGF0ZS5yZXRyeUNvdW50LCBlcnJvcik7IC8vIEF4aW9zIGZhaWxzIG1lcmdpbmcgdGhpcyBjb25maWd1cmF0aW9uIHRvIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gYmVjYXVzZSBpdCBoYXMgYW4gaXNzdWVcbiAgICAgICAgLy8gd2l0aCBjaXJjdWxhciBzdHJ1Y3R1cmVzOiBodHRwczovL2dpdGh1Yi5jb20vbXphYnJpc2tpZS9heGlvcy9pc3N1ZXMvMzcwXG5cbiAgICAgICAgZml4Q29uZmlnKGF4aW9zLCBjb25maWcpO1xuXG4gICAgICAgIGlmICghc2hvdWxkUmVzZXRUaW1lb3V0ICYmIGNvbmZpZy50aW1lb3V0ICYmIGN1cnJlbnRTdGF0ZS5sYXN0UmVxdWVzdFRpbWUpIHtcbiAgICAgICAgICB2YXIgbGFzdFJlcXVlc3REdXJhdGlvbiA9IERhdGUubm93KCkgLSBjdXJyZW50U3RhdGUubGFzdFJlcXVlc3RUaW1lO1xuICAgICAgICAgIHZhciB0aW1lb3V0ID0gY29uZmlnLnRpbWVvdXQgLSBsYXN0UmVxdWVzdER1cmF0aW9uIC0gZGVsYXk7XG5cbiAgICAgICAgICBpZiAodGltZW91dCA8PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyb3IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbmZpZy50aW1lb3V0ID0gdGltZW91dDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbmZpZy50cmFuc2Zvcm1SZXF1ZXN0ID0gW2RhdGEgPT4gZGF0YV07XG4gICAgICAgIHlpZWxkIG9uUmV0cnkoY3VycmVudFN0YXRlLnJldHJ5Q291bnQsIGVycm9yLCBjb25maWcpO1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHJlc29sdmUoYXhpb3MoY29uZmlnKSksIGRlbGF5KSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnJvcik7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZnVuY3Rpb24gKF94Mykge1xuICAgICAgcmV0dXJuIF9yZWYuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuICB9KCkpO1xuICByZXR1cm4ge1xuICAgIHJlcXVlc3RJbnRlcmNlcHRvcklkLFxuICAgIHJlc3BvbnNlSW50ZXJjZXB0b3JJZFxuICB9O1xufSAvLyBDb21wYXRpYmlsaXR5IHdpdGggQ29tbW9uSlNcblxuYXhpb3NSZXRyeS5pc05ldHdvcmtFcnJvciA9IGlzTmV0d29ya0Vycm9yO1xuYXhpb3NSZXRyeS5pc1NhZmVSZXF1ZXN0RXJyb3IgPSBpc1NhZmVSZXF1ZXN0RXJyb3I7XG5heGlvc1JldHJ5LmlzSWRlbXBvdGVudFJlcXVlc3RFcnJvciA9IGlzSWRlbXBvdGVudFJlcXVlc3RFcnJvcjtcbmF4aW9zUmV0cnkuaXNOZXR3b3JrT3JJZGVtcG90ZW50UmVxdWVzdEVycm9yID0gaXNOZXR3b3JrT3JJZGVtcG90ZW50UmVxdWVzdEVycm9yO1xuYXhpb3NSZXRyeS5leHBvbmVudGlhbERlbGF5ID0gZXhwb25lbnRpYWxEZWxheTtcbmF4aW9zUmV0cnkuaXNSZXRyeWFibGVFcnJvciA9IGlzUmV0cnlhYmxlRXJyb3I7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1pbmRleC5qcy5tYXAiLCJpbXBvcnQgeyBDQVJUX1BFUkYsIFhfQUVNX0xPQURfVEVTVCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvQ29uc3RhbnRzJztcbmltcG9ydCB7IEF4aW9zQ3VzdG9tQ29uZmlnIH0gZnJvbSAnLi4vaHR0cENsaWVudC9IdHRwQ2xpZW50JztcblxuY29uc3QgWEFFTUxvYWRUZXN0SW50ZXJjZXB0b3IgPSAoY29uZmlnOiBBeGlvc0N1c3RvbUNvbmZpZykgPT4ge1xuICAgXG4gICAgaWYodHlwZW9mIHdpbmRvdyAhPT0gJ3VuZGVmaW5lZCcgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5jbHVkZXMoQ0FSVF9QRVJGKyc9dHJ1ZScpKXtcblxuICAgICAgICBjb25maWcuaGVhZGVyc1tYX0FFTV9MT0FEX1RFU1RdID0gJ3RydWUnO1xuICAgIH1cbiAgIFxuICAgIHJldHVybiBjb25maWc7XG59XG5cbmV4cG9ydCBkZWZhdWx0IFhBRU1Mb2FkVGVzdEludGVyY2VwdG9yOyIsImltcG9ydCB7IFhfTVNfVkVDVE9SX0lEIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db25zdGFudHMnO1xuaW1wb3J0IHsgQXhpb3NDdXN0b21Db25maWcgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnQnO1xuXG4vKiBBZGQgeC1tcy12ZWN0b3ItaWQgaGVhZGVyIHRvIHJlcXVlc3QgYnkgZ2V0dGluZyBNVUlEIGNvb2tpZVxuICovXG5jb25zdCBYTVNWZWN0b3JJZEludGVyY2VwdG9yID0gIChjb25maWc6IEF4aW9zQ3VzdG9tQ29uZmlnKSA9PiB7XG4gICAgaWYgKGNvbmZpZy54TVNWZWN0b3JJZCkgXG4gICAgICAgIGNvbmZpZy5oZWFkZXJzW1hfTVNfVkVDVE9SX0lEXSA9IGNvbmZpZy54TVNWZWN0b3JJZDtcbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmV4cG9ydCBkZWZhdWx0IFhNU1ZlY3RvcklkSW50ZXJjZXB0b3I7IiwiaW1wb3J0IHsgWF9NU19VQ1NfU0lELCBVY3NTaWRDb29raWVOYW1lIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9Db25zdGFudHMnO1xuaW1wb3J0IHsgQXhpb3NDdXN0b21Db25maWcgfSBmcm9tICcuLi9odHRwQ2xpZW50L0h0dHBDbGllbnQnO1xuaW1wb3J0IHsgQ29va2llSGFuZGxlciB9IGZyb20gJy4uL2hhbmRsZXJzL0Nvb2tpZUhhbmRsZXInO1xuXG4vKiBBZGQgeC1tcy11c2Nfc2lkIGhlYWRlciB0byByZXF1ZXN0IGlmIHByZXNlbnRcbiAqL1xuY29uc3QgWE1TVWNzQ29va2llSW50ZXJjZXB0b3IgPSAgKGNvbmZpZzogQXhpb3NDdXN0b21Db25maWcpID0+IHtcbiAgICBjb25zdCBjb29raWVWYWx1ZSA9IENvb2tpZUhhbmRsZXIuZ2V0Q29va2llKFVjc1NpZENvb2tpZU5hbWUpO1xuICAgIGlmIChjb29raWVWYWx1ZSkgXG4gICAgICAgIGNvbmZpZy5oZWFkZXJzW1hfTVNfVUNTX1NJRF0gPSBjb29raWVWYWx1ZTtcbiAgICByZXR1cm4gY29uZmlnO1xufTtcbmV4cG9ydCBkZWZhdWx0IFhNU1Vjc0Nvb2tpZUludGVyY2VwdG9yOyIsImltcG9ydCBheGlvcywge0F4aW9zSW5zdGFuY2V9IGZyb20gJ2F4aW9zJztcbmltcG9ydCBDb21wYWN0VGlja2V0SGVhZGVySW50ZXJjZXB0b3IgZnJvbSAnLi4vaW50ZXJjZXB0b3JzL0NvbXBhY3RUaWNrZXRIZWFkZXJJbnRlcmNlcHRvcic7XG5pbXBvcnQgTXNDVkhlYWRlckludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9Nc0NWSGVhZGVySW50ZXJjZXB0b3InO1xuaW1wb3J0IFhBdXRoTVVJREludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9YQXV0aE1VSURJbnRlcmNlcHRvcic7XG5pbXBvcnQgUmlza1Nlc3Npb25JZEludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9SaXNrU2Vzc2lvbklER2VuZXJhdG9ySW50ZXJjZXB0b3InO1xuaW1wb3J0IEZpcnN0TmFtZUhlYWRlckludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9GaXJzdE5hbWVIZWFkZXJJbnRlcmNlcHRvcic7XG5pbXBvcnQgVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvcic7XG5pbXBvcnQgYXhpb3NSZXRyeSBmcm9tICdheGlvcy1yZXRyeSdcbmltcG9ydCBYQUVNTG9hZFRlc3RJbnRlcmNlcHRvciBmcm9tICcuLi9pbnRlcmNlcHRvcnMvWEFFTUxvYWRUZXN0SW50ZXJjZXB0b3InO1xuaW1wb3J0IFhNU1ZlY3RvcklkSW50ZXJjZXB0b3IgZnJvbSAnLi4vaW50ZXJjZXB0b3JzL1hNU1ZlY3RvcklkSW50ZXJjZXB0b3InO1xuaW1wb3J0IFhNU1Vjc0Nvb2tpZUludGVyY2VwdG9yIGZyb20gJy4uL2ludGVyY2VwdG9ycy9YTVNVY3NDb29raWVJbnRlcmNlcHRvcic7XG5cblxuLyoqXG4gKiBCdWlsZCBjdXN0b20gSHR0cCBjbGllbnQuIENsaWVudCBjYW4gY29udGFpbiB2YXJpYWJsZSBwYXJ0cyB0byB1c2UgaWYgbmVlZGVkLlxuICogZXhhbXBsZTpcbiAqIGNvbnN0IGNsaWVudCA9IG5ldyBIdHRwQ2xpZW50QnVpbGRlcigpLmFkZEF1dGhlbnRpY2F0aW9uKCkuYWRkWEF1dGhNVUlEKCkuYnVpbGQoKTtcbiAqL1xuZXhwb3J0IGNsYXNzIEh0dHBDbGllbnRCdWlsZGVyIHtcbiAgICBzdGF0aWMgcmVhZG9ubHkgUkVUUklFU19DT1VOVF9ERUZBVUxUID0gMztcbiAgICBzdGF0aWMgcmVhZG9ubHkgUkVUUllfVElNRU9VVF9ERUZBVUxUID0gNTA7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9jbGllbnQ6IEF4aW9zSW5zdGFuY2U7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5fY2xpZW50ID0gYXhpb3MuY3JlYXRlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIENvcnJlbGF0aW9uIFZlY3RvciB0byB0aGUgcmVxdWVzdCBoZWFkZXJcbiAgICAgKi9cbiAgICBhZGRDVigpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoTXNDVkhlYWRlckludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIEF1dGhlbnRpY2F0aW9uIHRva2VucyBhdmFpYWJsZSBpbiB0aGUgcmVxdWVzdCBoZWFkZXJcbiAgICAgKi9cbiAgICBhZGRBdXRoZW50aWNhdGlvbigpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoQ29tcGFjdFRpY2tldEhlYWRlckludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIE1VSUQgY29va2llIGF2YWlhYmxlIGluIHRoZSByZXF1ZXN0IGhlYWRlclxuICAgICAqL1xuICAgIGFkZFhBdXRoTVVJRCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoWEF1dGhNVUlESW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGQgcmlza1Nlc3Npb25JZCB0byB0aGUgcmVxdWVzdCBoZWFkZXIgb2YgYW55IEFQSSBjYWxsXG4gICAgICovXG4gICAgYWRkUmlza1Nlc3Npb25JZCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoUmlza1Nlc3Npb25JZEludGVyY2VwdG9yKTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYWRkIEZpcnN0IE5hbWUgdG8gdGhlIHJlcXVlc3QgaGVhZGVyIG9mIGFueSBBUEkgY2FsbFxuICAgICAqL1xuICAgIGFkZEZpcnN0TmFtZSgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoRmlyc3ROYW1lSGVhZGVySW50ZXJjZXB0b3IpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBhZGQgdGVudCBvcHRpb25zIHRvIHRoZSByZXF1ZXN0IGhlYWRlciBvZiBhbnkgQVBJIGNhbGxcbiAgICAgKi9cbiAgICBhZGRUZW50T3B0aW9ucygpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoVGVudE9wdGlvbnNIZWFkZXJJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvKipcbiAgICAgKiBhZGQgQUVNIExvYWQgdGVzdCBvcHRpb25zIHRvIHRoZSByZXF1ZXN0IGhlYWRlciBvZiBhbnkgQVBJIGNhbGxcbiAgICAgKi9cbiAgICAgYWRkWEFFTUxvYWRUZXN0KCk6IEh0dHBDbGllbnRCdWlsZGVyIHtcbiAgICAgICAgdGhpcy5fY2xpZW50LmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShYQUVNTG9hZFRlc3RJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cblxuICAgICAvKipcbiAgICAgKiBhZGQgWC1NUy1WZWN0b3JfSWQgb3B0aW9ucyB0byB0aGUgcmVxdWVzdCBoZWFkZXIgb2YgYW55IEFQSSBjYWxsXG4gICAgICovXG4gICAgICBhZGRYTVNWZWN0b3JJZCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIHRoaXMuX2NsaWVudC5pbnRlcmNlcHRvcnMucmVxdWVzdC51c2UoWE1TVmVjdG9ySWRJbnRlcmNlcHRvcik7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICBcbiAgICAvKipcbiAgICAqIGFkZCB4LW1zLXVjcy1zaWQgdG8gdGhlIHJlcXVlc3QgaGVhZGVyIG9mIGFueSBBUEkgY2FsbFxuICAgICovXG4gICAgIGFkZFVjc1NpZCgpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgdGhpcy5fY2xpZW50LmludGVyY2VwdG9ycy5yZXF1ZXN0LnVzZShYTVNVY3NDb29raWVJbnRlcmNlcHRvcik7XG4gICAgICAgcmV0dXJuIHRoaXM7XG4gICB9XG4gICAgLyoqXG4gICAgICogaW50ZXJjZXB0cyBmYWlsZWQgcmVxdWVzdHMgKEhUVFAgY29kZSA1WFgpIGFuZCByZXRyaWVzIHRoZW0gd2hlbmV2ZXIgcG9zc2libGUuXG4gICAgICogQHBhcmFtIHJldHJ5Q291bnQgVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBiZWZvcmUgZmFpbGluZy5cbiAgICAgKiBAcGFyYW0gcmV0cnlUaW1lb3V0IERlbGF5IGJlZm9yZSByZXRyeVxuICAgICAqL1xuICAgIGFkZFJldHJ5KHJldHJ5Q291bnQ6bnVtYmVyLHJldHJ5VGltZW91dDpudW1iZXIpOiBIdHRwQ2xpZW50QnVpbGRlciB7XG4gICAgICAgIGNvbnN0IGRlbGF5RnVuYyA9IChyZXRyeUNvdW50OiBudW1iZXIsIGVycm9yOiBFcnJvcikgPT4gcmV0cnlUaW1lb3V0O1xuICAgICAgICBheGlvc1JldHJ5KHRoaXMuX2NsaWVudCwge1xuICAgICAgICAgICAgcmV0cmllczogcmV0cnlDb3VudCxcbiAgICAgICAgICAgIHJldHJ5RGVsYXk6IGRlbGF5RnVuY1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuXG4gICAgYnVpbGQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jbGllbnQ7XG4gICAgfVxufSIsImltcG9ydCB7QXhpb3NSZXF1ZXN0Q29uZmlnfSBmcm9tICdheGlvcyc7XG5pbXBvcnQge0h0dHBDbGllbnRCdWlsZGVyfSBmcm9tICcuL0h0dHBDbGllbnRCdWlsZGVyJ1xuXG4vKiBFeHBvc2VzIGEgSHR0cCBjbGllbnQgaW50ZXJmYWNlIHdpdGhcbiAqICAgQ29tcGFjdEhlYWRlck5hbWU6IGF1dGhlbnRpY2F0aW9uIHRva2VucyBhZGRlZCB0byB0aGUgaGVhZGVyXG4gKiAgIENvbXBhY3RIZWFkZXJQcmVmaXg6IHByZWZpeCB0byBiZSBhZGRlZCB0byBhdXRoZW50aWNhdGlvbiB0b2tlbiBpbiBoZWFkZXJcbiAqICAgTVVJREhlYWRlcjogbXVpZCBjb29raWUgYWRkZWQgdG8gdGhlIGhlYWRlclxuICogVG8gdXNlIHRoZSBjbGllbnQsIHlvdSBjYW4gZXhwb3J0IHRoaXMgaW50ZXJmYWNlIGFuZCBtYWtlIHJlc3RmdWwgcmVxdWVzdHMgZm9sbG93aW5nIHRoZSBzeW50YXggZnJvbSBheGlvcyBsaWJyYXJ5XG4gKi9cblxuLy9BZGRDVigpIG5lZWQgdG8gYmUgcmVtb3ZlZCB3aGVuIDFEUyBjb25maWd1cmF0aW9uIGlzIHJlYWR5IGluIGhpZ2hlciBlbnZpcm9ubWVudHNcbmV4cG9ydCBjb25zdCBIdHRwQ2xpZW50ID0gbmV3IEh0dHBDbGllbnRCdWlsZGVyKClcbiAgICAuYWRkQ1YoKVxuICAgIC5hZGRBdXRoZW50aWNhdGlvbigpXG4gICAgLmFkZFhBdXRoTVVJRCgpXG4gICAgLmFkZFJpc2tTZXNzaW9uSWQoKVxuICAgIC5hZGRSZXRyeShIdHRwQ2xpZW50QnVpbGRlci5SRVRSSUVTX0NPVU5UX0RFRkFVTFQsIEh0dHBDbGllbnRCdWlsZGVyLlJFVFJZX1RJTUVPVVRfREVGQVVMVClcbiAgICAuYWRkRmlyc3ROYW1lKClcbiAgICAuYWRkVGVudE9wdGlvbnMoKVxuICAgIC5hZGRYQUVNTG9hZFRlc3QoKVxuICAgIC5hZGRYTVNWZWN0b3JJZCgpXG4gICAgLmFkZFVjc1NpZCgpXG4gICAgLmJ1aWxkKCk7XG5cbmV4cG9ydCBpbnRlcmZhY2UgQXhpb3NDdXN0b21Db25maWcgZXh0ZW5kcyBBeGlvc1JlcXVlc3RDb25maWcge1xuICAgIENvbXBhY3RIZWFkZXJOYW1lPzogc3RyaW5nO1xuICAgIENvbXBhY3RIZWFkZXJQcmVmaXg/OiBzdHJpbmc7XG4gICAgQWFkSGVhZGVyUHJlZml4Pzogc3RyaW5nO1xuICAgIE1VSURIZWFkZXI/OiBzdHJpbmc7XG4gICAgcmlza0lkQXBwZW5kPzogYm9vbGVhbjtcbiAgICBGaXJzdE5hbWU/OiBzdHJpbmc7XG4gICAgaXNUZW50ZWRQYWdlPzogc3RyaW5nO1xuICAgIHhBZW1Mb2FkVGVzdEhlYWRlcj86IHN0cmluZztcbiAgICB4TVNWZWN0b3JJZD86IHN0cmluZztcbiAgICBjdj86IHN0cmluZztcbiAgICBVY3NTaWRIZWFkZXI/OiBzdHJpbmc7XG59XG4iLCJpbXBvcnQgeyBIdHRwQ2xpZW50QnVpbGRlciB9IGZyb20gJy4uL2h0dHBDbGllbnQvSHR0cENsaWVudEJ1aWxkZXInO1xuaW1wb3J0IHsgQXhpb3NFcnJvciwgQXhpb3NSZXF1ZXN0Q29uZmlnLCBBeGlvc1Jlc3BvbnNlIH0gZnJvbSAnYXhpb3MnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFVzZXJJbmZvIHtcbiAgICBBdXRoVGlja2V0Pzogc3RyaW5nO1xuICAgIEZpcnN0TmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBVc2VyIGluZm8gc2luZ2VsdG9uIHJldHVybnMgcHJvbWlzZSBmcm9tIGF4aW9zIEh0dHBDbGllbnRcbiAqIFVzZXJJbmZvU2luZ2xldG9uLmdldEluc3RhbmNlKCkuZ2V0VXNlckluZm8oKS50aGVuKCBkYXRhICA9PiB7Y29uc29sZS5sb2coZGF0YSk7fSlcbiAqL1xuXG5leHBvcnQgY2xhc3MgVXNlckluZm9TaW5nbGV0b24ge1xuICAgIHByaXZhdGUgc3RhdGljIF9pbnN0YW5jZTogVXNlckluZm9TaW5nbGV0b247XG4gICAgcHJpdmF0ZSBfaXNDb25maWd1cmVkOiBib29sZWFuO1xuICAgIHByaXZhdGUgX3VzZXJJbmZvOiBQcm9taXNlPFVzZXJJbmZvPjtcblxuICAgIHB1YmxpYyBnZXRVc2VySW5mbygpOiBQcm9taXNlPFVzZXJJbmZvPiB7XG4gICAgICAgIHJldHVybiB0aGlzLl91c2VySW5mbztcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBjb25zdCB1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3I8SFRNTEVsZW1lbnQ+KCcudXNlckluZm8tY29uZmlnJyk7XG4gICAgICAgIGNvbnN0IG1lQ29udHJvbENvbmZpZ0VsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yPEhUTUxFbGVtZW50PignLm1lQ29udHJvbC1jb25maWdJbmZvJyk7XG4gICAgICAgIGNvbnN0IGlzVjJFbmFibGVkID0gdGhpcy5pc1YyRW5hYmxlZCh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCk7XG5cbiAgICAgICAgY29uc3QgY2xhaW1zVVJMID0gdGhpcy5nZXRVcmwodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQpO1xuICAgICAgICBjb25zdCB0aW1lb3V0SW5NUyA9IHRoaXMuZ2V0VGltZW91dCh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCk7XG4gICAgICAgIGNvbnN0IGlzTWVDb250cm9sRW5hYmxlID0gdGhpcy5pc01lQ29udHJvbEVuYWJsZShtZUNvbnRyb2xDb25maWdFbGVtZW50KTtcbiAgICAgICAgY29uc3QgcmVxdWVzdENvbmZpZzogQXhpb3NSZXF1ZXN0Q29uZmlnID0ge1xuICAgICAgICAgICAgdGltZW91dDogdGltZW91dEluTVMsXG4gICAgICAgICAgICB3aXRoQ3JlZGVudGlhbHM6IHRydWVcbiAgICAgICAgfTtcblxuICAgICAgICBpZiAodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQgIT09IG51bGwgJiYgY2xhaW1zVVJMICE9PSBudWxsICYmIGlzTWVDb250cm9sRW5hYmxlKSB7XG4gICAgICAgICAgICB0aGlzLl9pc0NvbmZpZ3VyZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAvL2NoZWNrIGlmIHYydXNlcmluZm8gaXMgZW5hYmxlZCwgaWYgaXQgaXMgZ2V0IHRoZSB2MnVzZXJpbmZvdXJsIGFuZCBwZXJmb3JtIHYyVXNlckluZm9DYWxsIG9uIHJlc3BvbnNlXG4gICAgICAgICAgICBpZiAoaXNWMkVuYWJsZWQpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB1c2VySW5mb1YyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy51c2VySW5mby1jb25maWcnKS5nZXRBdHRyaWJ1dGUoJ2RhdGEtdjJ1cmwnKTtcbiAgICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0Q29uZmlnVjI6IEF4aW9zUmVxdWVzdENvbmZpZyA9IHtcbiAgICAgICAgICAgICAgICAgICAgdGltZW91dDogdGltZW91dEluTVMsXG4gICAgICAgICAgICAgICAgICAgIHdpdGhDcmVkZW50aWFsczogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW1zOntydTogYCR7bG9jYXRpb24uaG9zdG5hbWV9JHtsb2NhdGlvbi5wYXRobmFtZX0ke2xvY2F0aW9uLnNlYXJjaH1gfVxuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICB0aGlzLl91c2VySW5mbyA9IG5ldyBIdHRwQ2xpZW50QnVpbGRlcigpLmFkZENWKClcbiAgICAgICAgICAgICAgICAgICAgLmFkZFJldHJ5KEh0dHBDbGllbnRCdWlsZGVyLlJFVFJJRVNfQ09VTlRfREVGQVVMVCwgSHR0cENsaWVudEJ1aWxkZXIuUkVUUllfVElNRU9VVF9ERUZBVUxUKVxuICAgICAgICAgICAgICAgICAgICAuYnVpbGQoKS5nZXQodXNlckluZm9WMiwgcmVxdWVzdENvbmZpZ1YyKS50aGVuKChyZXM6IEF4aW9zUmVzcG9uc2U8VXNlckluZm8+KSA9PiByZXMuZGF0YSlcbiAgICAgICAgICAgICAgICAgICAgLmNhdGNoKChlcnJvcjogQXhpb3NFcnJvcjxhbnk+KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJbiB0b2tlbiByZWZyZXNoIHNjZW5hcmlvLCBicm93c2VyIGF1dG9tYXRpY2FsbHkgZm9sbG93cyAzMDIgcmVzcG9uc2UgZnJvbSBSUFMgdXNlcmluZm8gdG8gdGhlIFJQUyBzaWduaW4gZW5kcG9pbnQuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgU2lnbmluIGVuZHBvaW50IHJlc3BvbmRzIHdpdGggcmVkaXJlY3QgdG8gbG9naW4ubGl2ZSBmb3IgdG9rZW4gcmVmcmVzaCAtIHdoaWNoIHJlc3VsdHMgaW4gYSBDT1JTIGVycm9yIHdoZW4gcmVxdWVzdCBjb21lc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb20gYXV0aG9yIGFzIGF1dGhvciBpcyBub3Qgb24gdGhlIENETi4gUGVyIFdDMyBkb2N1bWVudGF0aW9uLCBodHRwOi8vd3d3LnczLm9yZy9UUi9jb3JzLyNzaW1wbGUtY3Jvc3Mtb3JpZ2luLXJlcXVlc3QgLCBDT1JTIGVycm9ycyBhcmUgdHJlYXRlZCBhcyBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsIG5ldHdvcmsgZXJyb3JzIHdpdGggbm8gc3RhdHVzIGNvZGUgb3IgcmVzcG9uc2UuXG4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWVycm9yLmNvZGUgJiYgIWVycm9yLnJlc3BvbnNlKXtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBQZXJmb3JtIHBhZ2UgbGV2ZWwgcmVkaXJlY3QgdG8gbG9naW4ubGl2ZSwgYnlwYXNzaW5nIENPUlNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2lnbkluVVJMID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcjxIVE1MRWxlbWVudD4oJy5tZUNvbnRyb2wtY29uZmlnSW5mbycpLmdldEF0dHJpYnV0ZSgnZGF0YS1zaWduaW51cmwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2FkZCBsb2NhdGlvbiBvZiB0aGUgY3VycmVudCBwYWdlIHNvIHVzZXIgaXMgcmVkaXJlY3RlZCBiYWNrIHRvIHRoZSBwYWdlIHRoZXkgc3RhcnRlZCBvblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IGAke3NpZ25JblVSTH0/cnU9JHt3aW5kb3cubG9jYXRpb24uaHJlZn1gO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgLy9kbyB0aGUgcmVndWxhciBjYWxsIHRvIHRoZSBzdGFuZGFyZCB1c2VyaW5mbyBlbmRwb2ludFxuICAgICAgICAgICAgICAgIHRoaXMuX3VzZXJJbmZvID0gbmV3IEh0dHBDbGllbnRCdWlsZGVyKCkuYWRkQ1YoKVxuICAgICAgICAgICAgICAgICAgICAuYWRkUmV0cnkoSHR0cENsaWVudEJ1aWxkZXIuUkVUUklFU19DT1VOVF9ERUZBVUxULCBIdHRwQ2xpZW50QnVpbGRlci5SRVRSWV9USU1FT1VUX0RFRkFVTFQpXG4gICAgICAgICAgICAgICAgICAgIC5idWlsZCgpLmdldChjbGFpbXNVUkwsIHJlcXVlc3RDb25maWcpLnRoZW4oKHJlczogQXhpb3NSZXNwb25zZTxVc2VySW5mbz4pID0+IHJlcy5kYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2lzQ29uZmlndXJlZCA9IGZhbHNlO1xuICAgICAgICAgICAgdGhpcy5fdXNlckluZm8gPSBQcm9taXNlLnJlc29sdmUobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRpbWVvdXQodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCA9PSBudWxsKSByZXR1cm4gbnVsbDtcbiAgICAgICAgcmV0dXJuIHBhcnNlSW50KHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS11c2VyaW5mb3RpbWVvdXRtcycpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFVybCh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudDogSFRNTEVsZW1lbnQpIHtcbiAgICAgICAgaWYgKHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICByZXR1cm4gdXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLXVzZXJpbmZvdXJsJyk7XG4gICAgfVxuICAgIHByaXZhdGUgaXNWMkVuYWJsZWQodXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQ6IEhUTUxFbGVtZW50KSB7XG4gICAgICAgIGlmICh1c2VySW5mb0NvbmZpZ1BsYWNlSG9sZGVyRWxlbWVudCA9PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gICAgICAgIHJldHVybiAndHJ1ZScgPT09IHVzZXJJbmZvQ29uZmlnUGxhY2VIb2xkZXJFbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1pc1YyZW5hYmxlZCcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNNZUNvbnRyb2xFbmFibGUobWVDb250cm9sOiBIVE1MRWxlbWVudCkge1xuICAgICAgICBpZiAobWVDb250cm9sID09IG51bGwpIHJldHVybiBmYWxzZTtcbiAgICAgICAgcmV0dXJuICd0cnVlJyA9PT0gbWVDb250cm9sLmdldEF0dHJpYnV0ZSgnZGF0YS1pc2VuYWJsZWQnKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBQYWdlcyB3aXRob3V0IHVuaXZlcnNhbCBoZWFkZXIgbWF5IG5vdCBjb250YWluIGNvbmZpZ3VyYXRpb25hbCBlbGVtZW50IGZvciAudXNlckluZm8tY29uZmlnIGFuZCBwYWdlcyB3aXRoIFVIRlxuICAgICAqIG1heSBoYXZlIG1lIGNvbnRyb2wgZGlzYWJsZWQuXG4gICAgICovXG4gICAgcHVibGljIGlzQ29uZmlndXJlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzQ29uZmlndXJlZDtcbiAgICB9XG5cbiAgICBwdWJsaWMgc3RhdGljIGdldEluc3RhbmNlKCk6IFVzZXJJbmZvU2luZ2xldG9uIHtcbiAgICAgICAgaWYgKCFVc2VySW5mb1NpbmdsZXRvbi5faW5zdGFuY2UpIHtcbiAgICAgICAgICAgIFVzZXJJbmZvU2luZ2xldG9uLl9pbnN0YW5jZSA9IG5ldyBVc2VySW5mb1NpbmdsZXRvbigpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBVc2VySW5mb1NpbmdsZXRvbi5faW5zdGFuY2U7XG4gICAgfVxufVxuIiwiaW1wb3J0IHtIdHRwQ2xpZW50fSBmcm9tICcuLi9yZWFjdC1pbmplY3RvcnMvaHR0cENsaWVudC9IdHRwQ2xpZW50JztcbmltcG9ydCB7SHR0cENsaWVudEJ1aWxkZXJ9IGZyb20gJy4uL3JlYWN0LWluamVjdG9ycy9odHRwQ2xpZW50L0h0dHBDbGllbnRCdWlsZGVyJztcbmltcG9ydCB7VXNlckluZm9TaW5nbGV0b259IGZyb20gJy4uL3JlYWN0LWluamVjdG9ycy91dGlscy9Vc2VySW5mb1NpbmdsZXRvbic7XG5cbndpbmRvdy5Nc0h0dHBDbGllbnQgPSB3aW5kb3cuTXNIdHRwQ2xpZW50IHx8IHt9O1xud2luZG93Lk1zSHR0cENsaWVudC5kZWZhdWx0SW5zdGFuY2UgPSBIdHRwQ2xpZW50O1xud2luZG93Lk1zSHR0cENsaWVudC5CdWlsZGVyID0gSHR0cENsaWVudEJ1aWxkZXI7XG53aW5kb3cuVXNlckluZm9TaW5nbGV0b24gPSBVc2VySW5mb1NpbmdsZXRvbjtcbiJdLCJuYW1lcyI6WyJ0b0Zvcm1EYXRhIiwiZW5jb2RlIiwic3RyIiwiY2hhck1hcCIsImVuY29kZVVSSUNvbXBvbmVudCIsInJlcGxhY2UiLCJtYXRjaCIsIkF4aW9zVVJMU2VhcmNoUGFyYW1zIiwicGFyYW1zIiwib3B0aW9ucyIsInRoaXMiLCJfcGFpcnMiLCJwcm90b3R5cGUiLCJhcHBlbmQiLCJuYW1lIiwidmFsdWUiLCJwdXNoIiwidG9TdHJpbmciLCJlbmNvZGVyIiwiX2VuY29kZSIsImNhbGwiLCJtYXAiLCJwYWlyIiwiam9pbiIsIm1vZHVsZSIsImV4cG9ydHMiLCJGb3JtRGF0YSIsImRlbnlMaXN0IiwiU2V0IiwiZXJyb3IiLCJoYXMiLCJjb2RlIiwic2VsZiIsIndpbmRvdyIsIlVSTFNlYXJjaFBhcmFtcyIsInV0aWxzIiwiaWdub3JlRHVwbGljYXRlT2YiLCJoZWFkZXJzIiwia2V5IiwidmFsIiwiaSIsInBhcnNlZCIsImZvckVhY2giLCJzcGxpdCIsImxpbmUiLCJpbmRleE9mIiwidHJpbSIsInNsaWNlIiwidG9Mb3dlckNhc2UiLCJjb25jYXQiLCJkZWZhdWx0cyIsImRhdGEiLCJzdGF0dXMiLCJmbnMiLCJjb250ZXh0IiwiZm4iLCJDYW5jZWxlZEVycm9yIiwiQ2FuY2VsVG9rZW4iLCJleGVjdXRvciIsIlR5cGVFcnJvciIsInJlc29sdmVQcm9taXNlIiwicHJvbWlzZSIsIlByb21pc2UiLCJyZXNvbHZlIiwidG9rZW4iLCJ0aGVuIiwiY2FuY2VsIiwiX2xpc3RlbmVycyIsImxlbmd0aCIsIm9uZnVsZmlsbGVkIiwiX3Jlc29sdmUiLCJzdWJzY3JpYmUiLCJ1bnN1YnNjcmliZSIsIm1lc3NhZ2UiLCJjb25maWciLCJyZXF1ZXN0IiwicmVhc29uIiwidGhyb3dJZlJlcXVlc3RlZCIsImxpc3RlbmVyIiwiaW5kZXgiLCJzcGxpY2UiLCJzb3VyY2UiLCJjIiwiSW50ZXJjZXB0b3JNYW5hZ2VyIiwiaGFuZGxlcnMiLCJ1c2UiLCJmdWxmaWxsZWQiLCJyZWplY3RlZCIsInN5bmNocm9ub3VzIiwicnVuV2hlbiIsImVqZWN0IiwiaWQiLCJjbGVhciIsImgiLCJfX0NBTkNFTF9fIiwiaXNTdGFuZGFyZEJyb3dzZXJFbnYiLCJ3cml0ZSIsImV4cGlyZXMiLCJwYXRoIiwiZG9tYWluIiwic2VjdXJlIiwiY29va2llIiwiaXNOdW1iZXIiLCJEYXRlIiwidG9HTVRTdHJpbmciLCJpc1N0cmluZyIsImRvY3VtZW50IiwicmVhZCIsIlJlZ0V4cCIsImRlY29kZVVSSUNvbXBvbmVudCIsInJlbW92ZSIsIm5vdyIsIm9yaWdpblVSTCIsIm1zaWUiLCJ0ZXN0IiwibmF2aWdhdG9yIiwidXNlckFnZW50IiwidXJsUGFyc2luZ05vZGUiLCJjcmVhdGVFbGVtZW50IiwicmVzb2x2ZVVSTCIsInVybCIsImhyZWYiLCJzZXRBdHRyaWJ1dGUiLCJwcm90b2NvbCIsImhvc3QiLCJzZWFyY2giLCJoYXNoIiwiaG9zdG5hbWUiLCJwb3J0IiwicGF0aG5hbWUiLCJjaGFyQXQiLCJsb2NhdGlvbiIsInJlcXVlc3RVUkwiLCJmb3JtRGF0YSIsImJ1aWxkUGF0aCIsInRhcmdldCIsImlzTnVtZXJpY0tleSIsIk51bWJlciIsImlzRmluaXRlIiwiaXNMYXN0IiwiaXNBcnJheSIsImhhc093blByb3BlcnR5IiwiaXNPYmplY3QiLCJhcnIiLCJvYmoiLCJrZXlzIiwiT2JqZWN0IiwibGVuIiwiYXJyYXlUb09iamVjdCIsImlzRm9ybURhdGEiLCJpc0Z1bmN0aW9uIiwiZW50cmllcyIsImZvckVhY2hFbnRyeSIsIm1hdGNoQWxsIiwicGFyc2VQcm9wUGF0aCIsInRyYW5zZm9ybURhdGEiLCJpc0NhbmNlbCIsIm5vcm1hbGl6ZUhlYWRlck5hbWUiLCJ0aHJvd0lmQ2FuY2VsbGF0aW9uUmVxdWVzdGVkIiwiY2FuY2VsVG9rZW4iLCJzaWduYWwiLCJhYm9ydGVkIiwidHJhbnNmb3JtUmVxdWVzdCIsIm1lcmdlIiwiY29tbW9uIiwibWV0aG9kIiwiYWRhcHRlciIsInJlc3BvbnNlIiwidHJhbnNmb3JtUmVzcG9uc2UiLCJyZWplY3QiLCJiYXNlVVJMIiwicmVsYXRpdmVVUkwiLCJWRVJTSU9OIiwiQXhpb3NFcnJvciIsInZhbGlkYXRvcnMiLCJ0eXBlIiwidGhpbmciLCJkZXByZWNhdGVkV2FybmluZ3MiLCJ0cmFuc2l0aW9uYWwiLCJ2YWxpZGF0b3IiLCJ2ZXJzaW9uIiwiZm9ybWF0TWVzc2FnZSIsIm9wdCIsImRlc2MiLCJvcHRzIiwiRVJSX0RFUFJFQ0FURUQiLCJjb25zb2xlIiwid2FybiIsImFzc2VydE9wdGlvbnMiLCJzY2hlbWEiLCJhbGxvd1Vua25vd24iLCJFUlJfQkFEX09QVElPTl9WQUxVRSIsInJlc3VsdCIsInVuZGVmaW5lZCIsIkVSUl9CQURfT1BUSU9OIiwic2lsZW50SlNPTlBhcnNpbmciLCJmb3JjZWRKU09OUGFyc2luZyIsImNsYXJpZnlUaW1lb3V0RXJyb3IiLCJwYXlsb2FkIiwiaXNBeGlvc0Vycm9yIiwiYnVpbGRVUkwiLCJkaXNwYXRjaFJlcXVlc3QiLCJtZXJnZUNvbmZpZyIsImJ1aWxkRnVsbFBhdGgiLCJBeGlvcyIsImluc3RhbmNlQ29uZmlnIiwiaW50ZXJjZXB0b3JzIiwiY29uZmlnT3JVcmwiLCJib29sZWFuIiwicGFyYW1zU2VyaWFsaXplciIsInNlcmlhbGl6ZSIsImZ1bmN0aW9uIiwicmVxdWVzdEludGVyY2VwdG9yQ2hhaW4iLCJzeW5jaHJvbm91c1JlcXVlc3RJbnRlcmNlcHRvcnMiLCJpbnRlcmNlcHRvciIsInVuc2hpZnQiLCJyZXNwb25zZUludGVyY2VwdG9yQ2hhaW4iLCJjaGFpbiIsIkFycmF5IiwiYXBwbHkiLCJzaGlmdCIsIm5ld0NvbmZpZyIsIm9uRnVsZmlsbGVkIiwib25SZWplY3RlZCIsImdldFVyaSIsImZ1bGxQYXRoIiwiYWxsb3dBYnNvbHV0ZVVybHMiLCJnZW5lcmF0ZUhUVFBNZXRob2QiLCJpc0Zvcm0iLCJjb25maWcxIiwiY29uZmlnMiIsImdldE1lcmdlZFZhbHVlIiwiaXNQbGFpbk9iamVjdCIsImlzRW1wdHlPYmplY3QiLCJtZXJnZURlZXBQcm9wZXJ0aWVzIiwicHJvcCIsImlzVW5kZWZpbmVkIiwidmFsdWVGcm9tQ29uZmlnMiIsImRlZmF1bHRUb0NvbmZpZzIiLCJtZXJnZURpcmVjdEtleXMiLCJtZXJnZU1hcCIsImNvbmZpZ1ZhbHVlIiwic2V0dGxlIiwiY29va2llcyIsInBhcnNlSGVhZGVycyIsImlzVVJMU2FtZU9yaWdpbiIsInRyYW5zaXRpb25hbERlZmF1bHRzIiwicGFyc2VQcm90b2NvbCIsInBsYXRmb3JtIiwib25DYW5jZWxlZCIsInJlcXVlc3REYXRhIiwicmVxdWVzdEhlYWRlcnMiLCJyZXNwb25zZVR5cGUiLCJ3aXRoWFNSRlRva2VuIiwiZG9uZSIsInJlbW92ZUV2ZW50TGlzdGVuZXIiLCJYTUxIdHRwUmVxdWVzdCIsImF1dGgiLCJ1c2VybmFtZSIsInBhc3N3b3JkIiwidW5lc2NhcGUiLCJBdXRob3JpemF0aW9uIiwiYnRvYSIsIm9ubG9hZGVuZCIsInJlc3BvbnNlSGVhZGVycyIsImdldEFsbFJlc3BvbnNlSGVhZGVycyIsInJlc3BvbnNlVGV4dCIsInN0YXR1c1RleHQiLCJlcnIiLCJvcGVuIiwidG9VcHBlckNhc2UiLCJ0aW1lb3V0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVhZHlTdGF0ZSIsInJlc3BvbnNlVVJMIiwic2V0VGltZW91dCIsIm9uYWJvcnQiLCJFQ09OTkFCT1JURUQiLCJvbmVycm9yIiwiRVJSX05FVFdPUksiLCJvbnRpbWVvdXQiLCJ0aW1lb3V0RXJyb3JNZXNzYWdlIiwiRVRJTUVET1VUIiwieHNyZlZhbHVlIiwieHNyZkhlYWRlck5hbWUiLCJ4c3JmQ29va2llTmFtZSIsInNldFJlcXVlc3RIZWFkZXIiLCJ3aXRoQ3JlZGVudGlhbHMiLCJvbkRvd25sb2FkUHJvZ3Jlc3MiLCJhZGRFdmVudExpc3RlbmVyIiwib25VcGxvYWRQcm9ncmVzcyIsInVwbG9hZCIsImFib3J0IiwicHJvdG9jb2xzIiwiRVJSX0JBRF9SRVFVRVNUIiwic2VuZCIsImV4ZWMiLCJFcnJvciIsImNhcHR1cmVTdGFja1RyYWNlIiwiY29uc3RydWN0b3IiLCJzdGFjayIsImluaGVyaXRzIiwidG9KU09OIiwiZGVzY3JpcHRpb24iLCJudW1iZXIiLCJmaWxlTmFtZSIsImxpbmVOdW1iZXIiLCJjb2x1bW5OdW1iZXIiLCJkZXNjcmlwdG9ycyIsImRlZmluZVByb3BlcnRpZXMiLCJkZWZpbmVQcm9wZXJ0eSIsImZyb20iLCJjdXN0b21Qcm9wcyIsImF4aW9zRXJyb3IiLCJjcmVhdGUiLCJ0b0ZsYXRPYmplY3QiLCJjYXVzZSIsImFzc2lnbiIsImNsYXNzZXMiLCJ2aXNpdG9yIiwiaGVscGVycyIsImlzTm9kZSIsImlzQnVmZmVyIiwiZGVmYXVsdFZpc2l0b3IiLCJhcmd1bWVudHMiLCJlbnZGb3JtRGF0YSIsImlzVmlzaXRhYmxlIiwicmVtb3ZlQnJhY2tldHMiLCJlbmRzV2l0aCIsInJlbmRlcktleSIsImRvdHMiLCJwcmVkaWNhdGVzIiwibWV0YVRva2VucyIsImluZGV4ZXMiLCJvcHRpb24iLCJ1c2VCbG9iIiwiQmxvYiIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwiaXRlcmF0b3IiLCJjb252ZXJ0VmFsdWUiLCJpc0RhdGUiLCJ0b0lTT1N0cmluZyIsImlzQmxvYiIsImlzQXJyYXlCdWZmZXIiLCJpc1R5cGVkQXJyYXkiLCJCdWZmZXIiLCJKU09OIiwic3RyaW5naWZ5Iiwic29tZSIsImlzRmxhdEFycmF5IiwiaXNGaWxlTGlzdCIsInRvQXJyYXkiLCJlbCIsImV4cG9zZWRIZWxwZXJzIiwiYnVpbGQiLCJwb3AiLCJub3JtYWxpemVkTmFtZSIsInRvVVJMRW5jb2RlZEZvcm0iLCJmb3JtRGF0YVRvSlNPTiIsIkRFRkFVTFRfQ09OVEVOVF9UWVBFIiwic2V0Q29udGVudFR5cGVJZlVuc2V0IiwicHJvY2VzcyIsImNvbnRlbnRUeXBlIiwiaGFzSlNPTkNvbnRlbnRUeXBlIiwiaXNPYmplY3RQYXlsb2FkIiwiaXNIVE1MRm9ybSIsImlzU3RyZWFtIiwiaXNGaWxlIiwiaXNBcnJheUJ1ZmZlclZpZXciLCJidWZmZXIiLCJpc1VSTFNlYXJjaFBhcmFtcyIsImZvcm1TZXJpYWxpemVyIiwiX0Zvcm1EYXRhIiwiZW52IiwicmF3VmFsdWUiLCJwYXJzZXIiLCJwYXJzZSIsImUiLCJzdHJpbmdpZnlTYWZlbHkiLCJKU09OUmVxdWVzdGVkIiwic3RyaWN0SlNPTlBhcnNpbmciLCJFUlJfQkFEX1JFU1BPTlNFIiwibWF4Q29udGVudExlbmd0aCIsIm1heEJvZHlMZW5ndGgiLCJ2YWxpZGF0ZVN0YXR1cyIsIk1hdGgiLCJmbG9vciIsImNhbGxiYWNrIiwiYmluZCIsImF4aW9zIiwiY3JlYXRlSW5zdGFuY2UiLCJkZWZhdWx0Q29uZmlnIiwiaW5zdGFuY2UiLCJleHRlbmQiLCJDYW5jZWwiLCJhbGwiLCJwcm9taXNlcyIsInNwcmVhZCIsImZvcm1Ub0pTT04iLCJFUlJfQ0FOQ0VMRUQiLCJ0aGlzQXJnIiwiaGFzaG1hcmtJbmRleCIsInNlcmlhbGl6ZWRQYXJhbXMiLCJzZXJpYWxpemVGbiIsImlzQnJvd3NlciIsImNhY2hlIiwia2luZE9mIiwia2luZE9mVGVzdCIsImdldFByb3RvdHlwZU9mIiwibCIsIlR5cGVkQXJyYXkiLCJVaW50OEFycmF5IiwiX2hhc093blByb3BlcnR5IiwicGF0dGVybiIsIkFycmF5QnVmZmVyIiwiaXNWaWV3IiwicGlwZSIsInByb2R1Y3QiLCJhc3NpZ25WYWx1ZSIsImEiLCJiIiwic3RyaXBCT00iLCJjb250ZW50IiwiY2hhckNvZGVBdCIsInN1cGVyQ29uc3RydWN0b3IiLCJwcm9wcyIsInNvdXJjZU9iaiIsImRlc3RPYmoiLCJmaWx0ZXIiLCJwcm9wRmlsdGVyIiwibWVyZ2VkIiwiZ2V0T3duUHJvcGVydHlOYW1lcyIsInNlYXJjaFN0cmluZyIsInBvc2l0aW9uIiwiU3RyaW5nIiwibGFzdEluZGV4IiwibmV4dCIsInJlZ0V4cCIsIm1hdGNoZXMiLCJpc0Fic29sdXRlVVJMIiwiY29tYmluZVVSTHMiLCJyZXF1ZXN0ZWRVUkwiLCJpc1JlbGF0aXZlVVJMIiwicGlkIiwidGltZSIsImxhc3QiLCJwcmVmaXgiLCJzdWZmaXgiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwibiIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkIiwiZGVmaW5pdGlvbiIsIm8iLCJlbnVtZXJhYmxlIiwiZ2V0IiwiZ2V0Q29tcGFjdFRpY2tldCIsIm1zYXV0aCIsIkF1dGhUaWNrZXQiLCJpc1VzZXJTaWduZWRJbiIsImdldFVzZXJOYW1lIiwiRmlyc3ROYW1lIiwiZ2V0VXNlclR5cGUiLCJUeXBlIiwiZ2V0QXV0aFRpY2tldEV4IiwiQXV0aFRpY2tldEV4IiwiQXV0aGVudGljYXRpb25Ub2tlbkhhbmRsZXIiLCJjb21wYWN0VGlja2V0IiwiYXV0aFRpY2tldEV4IiwidXNlclR5cGUiLCJDb21wYWN0SGVhZGVyTmFtZSIsIkNvbXBhY3RIZWFkZXJQcmVmaXgiLCJBYWRIZWFkZXJQcmVmaXgiLCJnZXRNc0NWIiwidGVsZW1ldHJ5IiwiY29ycmVsYXRpb25WZWN0b3JQbHVnaW4iLCJnZXRDdiIsIm1zQ3YiLCJNc0NWSGFuZGxlciIsImN2IiwieE1TVmVjdG9ySWQiLCJpbmNyZW1lbnQiLCJTb3VyY2VDYXRhbG9nIiwiZ2V0Q29va2llIiwiY25hbWUiLCJjYSIsInN1YnN0cmluZyIsIk1hcCIsIk1VSURIZWFkZXIiLCJhdXRob3JpemF0aW9uTVVJRCIsIkNvb2tpZUhhbmRsZXIiLCJnZXRSYW5kb21CZXR3ZWVuWmVyb0FuZE9uZSIsImNyeXB0byIsIm1zQ3J5cHRvIiwiZ2V0UmFuZG9tVmFsdWVzIiwiVWludDMyQXJyYXkiLCJwb3ciLCJyYW5kb20iLCJyaXNrSWRBcHBlbmQiLCJyaXNrSWQiLCJyaXNrU2Vzc2lvbklkIiwiaXNUZW50ZWRQYWdlIiwidGVudG9wdGlvbnMiLCJUZW50T3B0aW9uc0hhbmRsZXIiLCJhc3luY0dlbmVyYXRvclN0ZXAiLCJnZW4iLCJfbmV4dCIsIl90aHJvdyIsImFyZyIsImluZm8iLCJfYXN5bmNUb0dlbmVyYXRvciIsImFyZ3MiLCJvd25LZXlzIiwib2JqZWN0IiwiZW51bWVyYWJsZU9ubHkiLCJnZXRPd25Qcm9wZXJ0eVN5bWJvbHMiLCJzeW1ib2xzIiwic3ltIiwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yIiwiX29iamVjdFNwcmVhZCIsIl9kZWZpbmVQcm9wZXJ0eSIsImdldE93blByb3BlcnR5RGVzY3JpcHRvcnMiLCJjb25maWd1cmFibGUiLCJ3cml0YWJsZSIsIm5hbWVzcGFjZSIsImlzTmV0d29ya0Vycm9yIiwiQm9vbGVhbiIsImluY2x1ZGVzIiwiU0FGRV9IVFRQX01FVEhPRFMiLCJJREVNUE9URU5UX0hUVFBfTUVUSE9EUyIsImlzUmV0cnlhYmxlRXJyb3IiLCJpc0lkZW1wb3RlbnRSZXF1ZXN0RXJyb3IiLCJpc05ldHdvcmtPcklkZW1wb3RlbnRSZXF1ZXN0RXJyb3IiLCJERUZBVUxUX09QVElPTlMiLCJyZXRyaWVzIiwicmV0cnlDb25kaXRpb24iLCJyZXRyeURlbGF5Iiwic2hvdWxkUmVzZXRUaW1lb3V0Iiwib25SZXRyeSIsImdldEN1cnJlbnRTdGF0ZSIsImRlZmF1bHRPcHRpb25zIiwiY3VycmVudFN0YXRlIiwiZ2V0UmVxdWVzdE9wdGlvbnMiLCJyZXRyeUNvdW50IiwiX3Nob3VsZFJldHJ5Iiwic2hvdWxkUmV0cnlPclByb21pc2UiLCJfZXJyIiwiYXhpb3NSZXRyeSIsInJlcXVlc3RJbnRlcmNlcHRvcklkIiwibGFzdFJlcXVlc3RUaW1lIiwicmVzcG9uc2VJbnRlcmNlcHRvcklkIiwiX3JlZiIsIl94IiwiX3gyIiwic2hvdWxkUmV0cnkiLCJkZWxheSIsImFnZW50IiwiaHR0cEFnZW50IiwiaHR0cHNBZ2VudCIsImZpeENvbmZpZyIsImxhc3RSZXF1ZXN0RHVyYXRpb24iLCJfeDMiLCJpc1NhZmVSZXF1ZXN0RXJyb3IiLCJleHBvbmVudGlhbERlbGF5IiwicmV0cnlOdW1iZXIiLCJkZWxheUZhY3RvciIsIkNBUlRfUEVSRiIsImNvb2tpZVZhbHVlIiwiX2NsaWVudCIsImFkZENWIiwiYWRkQXV0aGVudGljYXRpb24iLCJhZGRYQXV0aE1VSUQiLCJhZGRSaXNrU2Vzc2lvbklkIiwiYWRkRmlyc3ROYW1lIiwiYWRkVGVudE9wdGlvbnMiLCJhZGRYQUVNTG9hZFRlc3QiLCJhZGRYTVNWZWN0b3JJZCIsImFkZFVjc1NpZCIsImFkZFJldHJ5IiwicmV0cnlUaW1lb3V0IiwiUkVUUklFU19DT1VOVF9ERUZBVUxUIiwiUkVUUllfVElNRU9VVF9ERUZBVUxUIiwiSHR0cENsaWVudCIsIkh0dHBDbGllbnRCdWlsZGVyIiwidXNlckluZm9Db25maWdQbGFjZUhvbGRlckVsZW1lbnQiLCJxdWVyeVNlbGVjdG9yIiwibWVDb250cm9sQ29uZmlnRWxlbWVudCIsImlzVjJFbmFibGVkIiwiY2xhaW1zVVJMIiwiZ2V0VXJsIiwidGltZW91dEluTVMiLCJnZXRUaW1lb3V0IiwiaXNNZUNvbnRyb2xFbmFibGUiLCJyZXF1ZXN0Q29uZmlnIiwiX2lzQ29uZmlndXJlZCIsInVzZXJJbmZvVjIiLCJnZXRBdHRyaWJ1dGUiLCJyZXF1ZXN0Q29uZmlnVjIiLCJydSIsIl91c2VySW5mbyIsInJlcyIsImNhdGNoIiwic2lnbkluVVJMIiwiZ2V0VXNlckluZm8iLCJwYXJzZUludCIsIm1lQ29udHJvbCIsImlzQ29uZmlndXJlZCIsImdldEluc3RhbmNlIiwiVXNlckluZm9TaW5nbGV0b24iLCJfaW5zdGFuY2UiLCJNc0h0dHBDbGllbnQiLCJkZWZhdWx0SW5zdGFuY2UiLCJCdWlsZGVyIl0sInNvdXJjZVJvb3QiOiIifQ==